{"_id":"@adens/wanie","_rev":"12-6f3d66d09844e21671dd0d37602f9343","name":"@adens/wanie","dist-tags":{"latest":"1.4.0"},"versions":{"1.2.2":{"name":"@adens/wanie","version":"1.2.2","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.2.2","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"1e71510a2614286f8d987919d273d81d1fa27409","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.2.2.tgz","fileCount":265,"integrity":"sha512-Kl2hXg5vfOL+iMIABA9cHbdj4TyWFCBJq6r8TGRQxAvsM50gM3gcrCgpVF61b8pjAfthAn73eU/okpDZBRQ4Jw==","signatures":[{"sig":"MEUCIBsHWkSbd/WdKk7sAvf6r7ZEQpRUUE/gFi+TAU8Jt+ZtAiEA98arsDx0hn8CpoSacBSRt6SDVRVSqljZUOdiHnh2ptc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340264489},"engines":{"node":">=20"},"gitHead":"4e8ef59179075dab0a71465425855309eb576dfb","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.2.2_1779142451027_0.37441999166732387","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@adens/wanie","version":"1.2.3","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.2.3","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"c1e510bd36185c065e6e4ac06900de647266e240","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.2.3.tgz","fileCount":265,"integrity":"sha512-q+pcfWY3uynmt5QVlLY2lSCf8jXuSkZ7kVUjwD/VUNUcIrRcezPTZK0VJ7JeNPyZeM8MAFTOF4pPsuuTKpu4xw==","signatures":[{"sig":"MEUCIHo3ed3dOBgqlJjcv0HO1RKtchaBWsCnV3Z27dXlgq1cAiEA+SM8ADrS9auEIY/ptLu7SnOmg2wr+zyrJKlq3AvvEew=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":329574446},"engines":{"node":">=20"},"gitHead":"e5ef43a3d8300b640508773f1c8145166550ed70","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.2.3_1779142826727_0.6120430297513699","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"@adens/wanie","version":"1.2.4","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.2.4","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"626801b0775263acfe84f89fbe1455305196d815","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.2.4.tgz","fileCount":155,"integrity":"sha512-8tA+/HmnEWItrv7MH58MxfVegI4VFSzhjLh7aTkLt8SY6yhqEo0k6NxOvVvB8Owy/rx5kG4mDb8rTVf2gRaBBg==","signatures":[{"sig":"MEYCIQDdfh1fGSyV60A3TEOMHnigOGQxE54CYUov68zsvFTFZwIhANM/+YA34uOChrHx0AUKB6fisKmxv0Ro8OtFyqomAzjc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4014199},"engines":{"node":">=20"},"gitHead":"3f96a062687aefc47af1253266077863bb8fd55d","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.2.4_1779143050687_0.767100104452483","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"@adens/wanie","version":"1.2.5","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.2.5","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"7fe93edb8f490e9c0c96661bab5025081f95093e","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.2.5.tgz","fileCount":155,"integrity":"sha512-DcPaX+aveumlE4VXxlQ20n4CNHrYkaZ8gqBkaTfCyNtZYuP6fjwrvI/W5WFPV7jhEjCZlYxgUAW5vRby6gaG6g==","signatures":[{"sig":"MEYCIQDM/XPVBhNhulxenf6944jWpt0Cl/94LuUgaCoDMnqKbAIhAIqeqd374GdzSy0wtwc9VIaAunmw4h750OeZCOqpvTfC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4014206},"engines":{"node":">=20"},"gitHead":"95644ede695a3a3870ffa42125666c6640db3e16","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.2.5_1779143236631_0.05266437831544568","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"@adens/wanie","version":"1.2.6","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.2.6","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"34757f6ea49279b8a56d05f83c5ef0e4628debad","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.2.6.tgz","fileCount":155,"integrity":"sha512-W9Em2uTg6fQkijpn88oatDbsdlc0fMORO2N0rcEnA4lk6em+q6yJ6n8wdSZjju20llJeQpulUc+Aap6pF8fMTw==","signatures":[{"sig":"MEQCIBfKQaKzFgUikP3Y45StnP5rXOG0t2qltbwLgwjT2mhFAiA0c3I2C9gTwrLXKBHZgylMrKw5xUOSsN1DZ4ZDTFUECA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4014290},"engines":{"node":">=20"},"gitHead":"6c424c7ce35958576b46ec91ff88648e1ee486ac","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.2.6_1779145993098_0.18157415372329933","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"@adens/wanie","version":"1.3.1","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.3.1","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"8eefe06e0c6b432afbb8a60869bd1fa4b3da1b60","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.3.1.tgz","fileCount":155,"integrity":"sha512-dRmqokuDiaH36+qP+3dpfAXWldU6kxKzZfyKb3KEIzS9dPz035vs7QzCI3VA+qbJxXam9+snBIQlYTiuneRTWA==","signatures":[{"sig":"MEUCIEA5nCrL/Nc9Q5gYzW+wiZp15aCzAymjQC8HC4jxv9e+AiEA33WiPFmf8QvzhhYR95Y+ZTKikkITGhkbEHve8bkWP1c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4056038},"engines":{"node":">=20"},"gitHead":"cce5a93a6dceef41418acfd4c71ba4aebeb95d49","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.3.1_1779268235423_0.652944840501533","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"@adens/wanie","version":"1.3.2","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.3.2","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"148e610af7878428032ebf603280fd6301b8c529","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.3.2.tgz","fileCount":155,"integrity":"sha512-JMylbFByFzD17cxEh34YfWW6AgUVQxZA/gvB1cpINE0SGFBX5JY+XODgv/XeI25/cetkShFdsQ3KbvHciZXbzA==","signatures":[{"sig":"MEUCIBLOCihim1if9oj5ICDDr1CGcmZhKMeK9bhMmdlULSTWAiEAoHpku+9j6kO9b7oNQW1syAe6RhZKlSmBQ1Dnxii2xuo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4059742},"engines":{"node":">=20"},"gitHead":"ef3ddb92b93d007057d2a7913275374e291c22c4","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.3.2_1779274490105_0.1412754257043003","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"@adens/wanie","version":"1.3.3","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.3.3","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"5e94b6c962bffb63233370c8fe59ecfe3ae1761b","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.3.3.tgz","fileCount":155,"integrity":"sha512-N5X5FLJ8DVhzGm51Bt0r5fcpXsG0KVun3EJkf8hCBSB59m1vWPsxUW/JAY6DuDLDGj4GGJgCUPB6OomTZ3DT8A==","signatures":[{"sig":"MEUCIQCKlwTLex2bM67icEGbr6vVMRVMhN4ZUKsojY7kzX5DgAIgFmBN3OupyL+v/to4ecv9CnX1Ox4bRAlINDWPJGbH3Wo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4059699},"engines":{"node":">=20"},"gitHead":"350a2da5fcc9dd9033037cdc34107f935f630c0e","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.3.3_1779274728222_0.2678617285441025","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"@adens/wanie","version":"1.3.4","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.3.4","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"a01c5fd8f3c8905296071e675379f4f384979b0c","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.3.4.tgz","fileCount":155,"integrity":"sha512-O0pB2fdXb5SFmAmfjpKF9rGplzj9xxFw2x/nExKcnDiWo/LHA7tPiijxinMAXcKSWMC5Se/iiAgnH4KFb32+OQ==","signatures":[{"sig":"MEUCIQDigykPhU+SV7psQCeYKrmwVBijY+lrIcZESedDZRhW4gIgYiqxoD2uqWYEY5m3SHdthYZ8TlRKJNWTn/XCeus3dqk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4060478},"engines":{"node":">=20"},"gitHead":"cfaf7ea5c7015d1960115d2b541315cf74347e16","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.3.4_1779279625430_0.9187180076832395","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"@adens/wanie","version":"1.3.5","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.3.5","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"5ffcd87960e43ce8d818ec210a21f15aff71cb75","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.3.5.tgz","fileCount":155,"integrity":"sha512-bze5HwHikLpHu5Hz9FR2g/Cu/xSYd1Bz40dF5ciFFpkL3FiLsP/LDjhd4HegWwOgjmdgOYwD4dMLYCLTyp8etw==","signatures":[{"sig":"MEUCIQDIZNITPxqYPsHOQp1dM3j9DNeLiforIogEZlXDWRUhPQIgLk70X4I5N0og+VBusEuor6QYuB38uNpQellfE2/oXqo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4067541},"engines":{"node":">=20"},"gitHead":"605ffa64f5296d2fcad29a7f26bb289f253a9485","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.3.5_1779289448465_0.9778449743258832","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"name":"@adens/wanie","version":"1.3.6","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","_id":"@adens/wanie@1.3.6","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"dist":{"shasum":"74cb40531d7911578e6be3e4a01c2295a092ce80","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.3.6.tgz","fileCount":155,"integrity":"sha512-DuMcpj22V/zyL0XeDYLyoYMkQqiD9xHFsFQk5rQwYn3XMqaL96qqFDvoOtAdIdfPTezoLSa/yEXdAIlii2l2bA==","signatures":[{"sig":"MEQCICwZWamRbLDIBCDK8a9DKKNUnTZCC4dh9vFJtjtNRMROAiANQtnv0F57G0+tAZhv61pR0cjnP11v1OTndcZkj2XGOQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4068151},"engines":{"node":">=20"},"gitHead":"0714d373d3c367a41688101108696f8e23227cc5","scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","start":"node bin/openwa.js","publish":"npm publish --access=public","build:web":"node ./node_modules/next/dist/bin/next build web","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","release:major":"npm run build && npm version major && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:patch":"npm run build && npm version patch && npm publish --access=public","prepublishOnly":"npm run build","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma"},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"repository":{"url":"git+https://github.com/asepindrak/wanie.git","type":"git"},"_npmVersion":"11.11.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"next":"^15.2.4","open":"^10.1.0","uuid":"^13.0.0","xlsx":"^0.18.5","react":"^19.0.0","cookie":"^1.0.2","dotenv":"^16.4.7","multer":"^1.4.5-lts.2","openai":"^6.33.0","prisma":"^6.6.0","qrcode":"^1.5.4","express":"^4.21.2","mammoth":"^1.12.0","zustand":"^5.0.3","bcryptjs":"^2.4.3","telegraf":"^4.16.3","pdf-parse":"^2.4.5","react-dom":"^19.0.0","socket.io":"^4.8.1","node-fetch":"^2.7.0","playwright":"^1.59.1","remark-gfm":"^4.0.1","react-icons":"^5.6.0","jsonwebtoken":"^9.0.2","@prisma/client":"^6.6.0","react-markdown":"^10.1.0","playwright-core":"^1.59.1","whatsapp-web.js":"^1.34.7","rehype-highlight":"^7.0.2","socket.io-client":"^4.8.1","@anthropic-ai/sdk":"^0.80.0"},"preferGlobal":true,"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17","autoprefixer":"^10.4.20"},"_npmOperationalInternal":{"tmp":"tmp/wanie_1.3.6_1779293034759_0.769302413889827","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@adens/wanie","version":"1.4.0","description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","license":"MIT","author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"repository":{"type":"git","url":"git+https://github.com/asepindrak/wanie.git"},"homepage":"https://github.com/asepindrak/wanie#readme","bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"preferGlobal":true,"keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"bin":{"wanie":"bin/openwa.js","openwa":"bin/openwa.js"},"scripts":{"dev":"nodemon --watch server --watch bin --ext js --exec \"node bin/openwa.js --dev\"","start":"node bin/openwa.js","pack":"npm run build && npm pack","build":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma && npm run build:web","build:web":"node ./node_modules/next/dist/bin/next build web","prisma:generate":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","prisma:push":"node ./node_modules/prisma/build/index.js db push --schema prisma/schema.prisma","postinstall":"node ./node_modules/prisma/build/index.js generate --schema prisma/schema.prisma","publish":"npm publish --access=public","prepublishOnly":"npm run build","release:patch":"npm run build && npm version patch && npm publish --access=public","release:minor":"npm run build && npm version minor && npm publish --access=public","release:major":"npm run build && npm version major && npm publish --access=public"},"engines":{"node":">=20"},"dependencies":{"@anthropic-ai/sdk":"^0.80.0","@prisma/client":"^6.6.0","bcryptjs":"^2.4.3","cookie":"^1.0.2","dotenv":"^16.4.7","express":"^4.21.2","jsonwebtoken":"^9.0.2","mammoth":"^1.12.0","multer":"^1.4.5-lts.2","next":"^15.2.4","node-fetch":"^2.7.0","open":"^10.1.0","openai":"^6.33.0","pdf-parse":"^2.4.5","playwright":"^1.59.1","playwright-core":"^1.59.1","prisma":"^6.6.0","qrcode":"^1.5.4","react":"^19.0.0","react-dom":"^19.0.0","react-icons":"^5.6.0","react-markdown":"^10.1.0","rehype-highlight":"^7.0.2","remark-gfm":"^4.0.1","socket.io":"^4.8.1","socket.io-client":"^4.8.1","telegraf":"^4.16.3","uuid":"^13.0.0","whatsapp-web.js":"^1.34.7","xlsx":"^0.18.5","zustand":"^5.0.3"},"devDependencies":{"autoprefixer":"^10.4.20","nodemon":"^3.1.14","postcss":"^8.5.3","tailwindcss":"^3.4.17"},"publishConfig":{"access":"public"},"gitHead":"00c9b6ad02ce74b471cf7b3bd4274f70556ec8e0","_id":"@adens/wanie@1.4.0","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-xPZQpwy3ejfCxyj69Cnt1xu9ZN6jD+uFZY+r9CaG3MdH4Rbf1LOqI1I1z5UdiXmbCdOYPUCehuHus2pqwL/jaA==","shasum":"fc710234f097d52b9ba6d6c0959da2f3648da23f","tarball":"https://registry.npmjs.org/@adens/wanie/-/wanie-1.4.0.tgz","fileCount":156,"unpackedSize":4073779,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDqr8P2K1WZEeJ37f89LHbZW5LyxHbouy0eJvtgRKJbuQIgJYQPGR2sa89ScPdgu7nWOimf+OVmc5teYyKoWWk+MN4="}]},"_npmUser":{"name":"adens","email":"asepindrakurniawan@gmail.com"},"directories":{},"maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/wanie_1.4.0_1779728704369_0.10304442493753219"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-18T22:14:10.922Z","modified":"2026-05-25T17:05:04.669Z","1.2.2":"2026-05-18T22:14:14.528Z","1.2.3":"2026-05-18T22:20:30.168Z","1.2.4":"2026-05-18T22:24:10.957Z","1.2.5":"2026-05-18T22:27:16.902Z","1.2.6":"2026-05-18T23:13:13.431Z","1.3.1":"2026-05-20T09:10:35.677Z","1.3.2":"2026-05-20T10:54:50.351Z","1.3.3":"2026-05-20T10:58:48.444Z","1.3.4":"2026-05-20T12:20:25.618Z","1.3.5":"2026-05-20T15:04:08.669Z","1.3.6":"2026-05-20T16:03:55.074Z","1.4.0":"2026-05-25T17:05:04.572Z"},"bugs":{"url":"https://github.com/asepindrak/wanie/issues"},"author":{"name":"asepindrak","email":"asepindrakurniawan@gmail.com"},"license":"MIT","homepage":"https://github.com/asepindrak/wanie#readme","keywords":["wanie","cli","whatsapp","whatsapp-api","whatsapp-gateway","crm","crm-automation","ai-crm","ai-agent","telegram-bot","messaging-gateway","webhook","knowledge-base","auto-reply","express","nextjs","socket.io","prisma"],"repository":{"type":"git","url":"git+https://github.com/asepindrak/wanie.git"},"description":"Wanie is an AI messaging CRM for WhatsApp, Telegram, and external apps.","maintainers":[{"name":"adens","email":"asepindrakurniawan@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"./logo-long.png\" alt=\"Wanie\" width=\"320\" />\n</p>\n\n# Wanie\n\n**AI messaging CRM for WhatsApp, Telegram, and external apps.**\n\nWanie is a self-hosted customer messaging CRM that ships as a CLI package. It combines a Next.js dashboard, an Express API, Prisma-backed data access, Socket.IO realtime updates, media uploads, runtime API documentation, and AI automation in a single local-first package.\n\nWanie is also designed to be **AI-agent-ready**. The runtime exposes agent-friendly documentation, machine-readable OpenAPI output, and API key authentication so AI agents and automation tools can discover capabilities and interact with the workspace without reverse-engineering the app.\n\nWanie also includes a **CRM AI workspace** for customer support automation. You can upload knowledge-base documents, generate AI drafts, enable guarded auto-replies, and serve both WhatsApp and Telegram customer conversations from the same dashboard.\n\n## Disclaimer\n\nWanie is an independent open source project. It is **not** an official WhatsApp product and is **not** affiliated with, endorsed by, or sponsored by Meta or WhatsApp.\n\nIf you use Wanie with WhatsApp, make sure your usage complies with the terms, policies, and legal requirements that apply in your environment.\n\n## Features\n\n- Dashboard authentication for register, login, and workspace access.\n- Workspace bootstrap endpoint for loading the current user, sessions, chats, active chat, and initial messages.\n- Multi-session WhatsApp management with session creation, connect, disconnect, and QR pairing.\n- WhatsApp Official API / Meta Cloud API device support for teams that prefer the official Meta transport instead of WhatsApp Web QR sessions.\n- Contact and chat browsing with search and chat opening from contacts.\n- Message APIs for listing, searching, sending, forwarding, and deleting messages.\n- Multipart media upload flow with `mediaFileId` support for outbound media messages.\n- Runtime docs endpoints for Swagger UI, OpenAPI JSON, agent README, health checks, and version metadata.\n- CRM AI workspace with draft generation, auto-reply, knowledge-base search, automation logs, and safety guards.\n- Knowledge-base uploads for Markdown, CSV, TXT, JSON, PDF, DOCX, and XLSX files, with reindex support.\n- Telegram customer channel support: non-admin Telegram bot chats can enter the CRM and receive AI replies.\n- Debounced CRM auto-replies that combine rapid follow-up customer messages before answering.\n- Abuse cooldown and daily reply limits to reduce spam and runaway automation.\n- Dual authentication model:\n  - JWT bearer auth for dashboard users.\n  - API key auth for agents and external integrations.\n- **Built-in AI Assistant** with extensible tool capabilities.\n- Remote control via Telegram bot integration, including BotFather token setup and admin allowlist support.\n- **Agent-friendly architecture** with machine-readable documentation and tool registration.\n\n## Screenshots\n\n<p align=\"center\">\n  <img src=\"./Screenshot-1.png\" alt=\"Wanie screenshot 1\" width=\"720\" />\n</p>\n\n## Telegram Bot Integration\n\n- Setup a Telegram bot using a BotFather token and connect it to Wanie.\n- Restrict bot control to specific Telegram chat IDs with admin allowlist support from **Settings → Telegram** or the assistant tool `configure_telegram_admins`.\n- Use `/new` from Telegram to start a fresh assistant chat context.\n- Monitor the bot status via the assistant tool `get_telegram_bot_status`.\n- Use the same bot as a CRM customer channel: Telegram chat IDs not listed in the admin allowlist are treated as customer conversations and never receive remote assistant tool access.\n- Customer Telegram messages are stored as CRM chats and can receive AI draft or auto-reply responses grounded in the CRM knowledge base.\n\n## WhatsApp Official API / Meta Cloud API\n\nWanie can run WhatsApp devices through either WhatsApp Web QR pairing or the WhatsApp Official API / Meta Cloud API. Official API devices use the same dashboard inbox, CRM automation, outbound delivery queue, media storage, webhooks, and API endpoints as WhatsApp Web devices.\n\nTo add an official API device:\n\n1. Open **Settings → Devices**.\n2. Choose **WhatsApp Official API**.\n3. Enter the Meta Phone Number ID, access token, and webhook verify token.\n4. Optionally enter the WhatsApp Business Account ID and App Secret.\n5. In Meta Developer settings, set the callback URL to `https://<your-wanie-host>/api/whatsapp/meta/webhook`.\n6. Subscribe the app to WhatsApp message and status webhook events.\n\nWanie stores the access token and app secret encrypted in runtime storage. Incoming text, media, location, button, and interactive WhatsApp messages are converted into normal Wanie chats. Outbound text and uploaded media can be sent through the same dashboard composer and API routes.\n\nMeta's WhatsApp messaging policies still apply. Free-form outbound replies are intended for the customer service window; template-message sending for conversations outside that window is not implemented yet.\n\n## CRM AI Workspace\n\nWanie includes a CRM page for support teams that want AI-assisted replies grounded in uploaded knowledge. The CRM works with regular WhatsApp chats and with Telegram customer chats created through the Telegram bot integration.\n\n### CRM automation modes\n\n- **Off** — no AI automation for the chat.\n- **Draft only** — generate a suggested reply and save it in CRM activity without sending it automatically.\n- **Auto send** — generate and deliver the reply automatically to WhatsApp or Telegram.\n\nAutomation can be configured globally, overridden per WhatsApp session, and overridden per individual chat. Chat-level settings take priority over session settings, and session settings take priority over the global default.\n\nFor Telegram bot chats, **Off** stores non-admin customer messages in the dashboard and replies with a short notice that automation is inactive. **Draft only** and **Auto send** route the Telegram conversation through the CRM knowledge-base workflow. Only Telegram chat IDs in the admin allowlist can use the regular Wanie Assistant/AI agent flow.\n\n### Knowledge base\n\nCRM replies are grounded in uploaded knowledge documents. Supported file types include:\n\n- Markdown (`.md`)\n- CSV\n- TXT\n- JSON\n- PDF\n- DOCX\n- XLSX\n- Images (`.jpg`, `.jpeg`, `.png`, `.webp`, `.gif`)\n\nCSV files are converted into row/column-labeled text so service data such as `Service Name`, `Base Price`, and `Duration (min)` can be retrieved reliably. Existing documents can be reindexed from the CRM page after parser changes, embedding configuration changes, or updated source files.\n\nImage files can be used as knowledge assets for customer-facing attachments such as QRIS payment images, pricelists, menus, catalogs, and brochures. Use clear filenames such as `payment-qris.png`, `premium-package-pricelist.jpg`, or `service-menu.webp` so retrieval can match the image to the customer's request.\n\nThe CRM knowledge page supports multiple file uploads in one action. If an uploaded file has the same original filename as an existing knowledge document, Wanie automatically replaces the old document and rebuilds its chunks from the new file.\n\n### Auto-reply behavior\n\n- Wanie waits briefly after the latest inbound message before generating a CRM auto-reply, so rapid messages like `hi`, `how much is it`, and `can I order now` are answered as one context.\n- AI generation and outbound delivery are retried a few times for transient provider or network failures.\n- If AI generation still fails, Wanie sends the configured CRM fallback message.\n- Normal follow-up questions are still answered until the daily per-chat reply limit is reached.\n- Abuse protection starts only when a chat sends too many inbound messages in a short window. During abuse cooldown, Wanie skips expensive AI work and sends a short notice to the customer.\n\n### CRM activity logs\n\nCRM activity records generated drafts, auto-sent replies, skipped replies, delivery failures, fallback use, and source snippets used for the answer. This makes it easier to audit why a customer received a specific response.\n\n## Tech stack\n\n- Node.js 20+\n- Next.js 15\n- React 19\n- Express\n- Prisma\n- Socket.IO\n- `whatsapp-web.js`\n\n## Acknowledgements\n\nSpecial thanks to [`whatsapp-web.js`](https://wwebjs.dev/). Wanie builds on top of that excellent open source project for WhatsApp Web integration.\n\nIf you find this project useful, please also support and star the `whatsapp-web.js` project.\n\n## Getting started\n\nInstall Wanie globally:\n\n```bash\nnpm i -g @adens/wanie\n```\n\nRun Wanie:\n\n```bash\nwanie\n```\n\nWhen Wanie starts, it launches the local frontend and backend runtime and automatically opens your browser to the Wanie frontend dashboard by default.\n\nIf you are working on this repository locally instead of using the published CLI package:\n\n```bash\nnpm install\nnpm run build\nnpm start\n```\n\n## Run with Docker Compose\n\nWanie also supports running with Docker Compose for a portable local deployment. From the repository root:\n\n```bash\ndocker compose up --build\n```\n\nThis starts the frontend and backend services together with the configured ports.\n\nTo run in detached mode:\n\n```bash\ndocker compose up --build -d\n```\n\nTo stop and remove the containers:\n\n```bash\ndocker compose down\n```\n\n## CLI reset commands\n\nWanie includes a built-in reset helper for administration tasks.\n\n```bash\nwanie reset\n```\n\nWhen you run `wanie reset`, you can choose:\n\n- `1)` Reset Password — set a new password for an existing user by email.\n- `2)` Reset All Data — delete all runtime data under the Wanie data directory and recreate runtime folders.\n\n## First-run registration behavior\n\nOn first startup, Wanie allows registration for the initial admin user. After the first user is created, registration is automatically blocked unless `allowRegistration` is explicitly enabled again via **Settings**.\n\n## Default runtime\n\nBy default, Wanie starts two local services:\n\n- Frontend dashboard: `http://localhost:55111`\n- Backend API: `http://localhost:55222`\n\nImportant runtime endpoints such as docs, health, and version are also proxied through the frontend URL for convenience.\n\n## Environment configuration\n\nWanie reads `.env` from the repository root.\n\n### CLI / Local install\n\nFor local CLI installs, the only required environment variable is:\n\n```env\nWANIE_JWT_SECRET=your_secret_key_here\n```\n\nThe first `wanie` run will prompt you for this secret and save it into `.env` if it is missing.\n\n### Docker / Server deployment\n\nFor Docker Compose or server deployment, you can configure additional runtime values in `.env`:\n\n```env\nHOST=0.0.0.0\nFE_PORT=55111\nBE_PORT=55222\nWANIE_DATA_DIR=/app/storage\nWANIE_JWT_SECRET=your_secret_key_here\nWANIE_AUTO_OPEN=false\nWANIE_USE_WWEBJS=true\nWANIE_ALLOW_MOCK=false\nOUTBOUND_DELIVERY_MAX_ATTEMPTS=5\nOUTBOUND_DELIVERY_WORKER_INTERVAL_MS=5000\nWEBHOOK_DELIVERY_MAX_ATTEMPTS=3\nWEBHOOK_DELIVERY_WORKER_INTERVAL_MS=5000\nOUTBOUND_DELIVERY_DELIVERED_RETENTION_DAYS=30\nWEBHOOK_DELIVERY_DELIVERED_RETENTION_DAYS=30\nWHATSAPP_HEALTH_INTERVAL_MS=30000\nWHATSAPP_HEALTH_TIMEOUT_MS=10000\nWHATSAPP_RECONNECT_BASE_DELAY_MS=5000\nWHATSAPP_RECONNECT_MAX_DELAY_MS=120000\nWHATSAPP_META_GRAPH_VERSION=v23.0\nDATABASE_URL=file:./storage/database/openwa.db\n```\n\nWhen running in Docker, `WANIE_DATA_DIR` should point to the mounted storage volume (`/app/storage` by default). Wanie will automatically derive frontend and backend URLs from `HOST`, `FE_PORT`, and `BE_PORT`.\n\nIf `WANIE_JWT_SECRET` is not set, the first `wanie` run will prompt you to enter it and save it into `.env` automatically. For production use, set a strong secret before starting Wanie. Legacy `OPENWA_*` environment variables are still accepted for existing deployments.\n\n### Configuration Notes\n\n- Set `WANIE_AUTO_OPEN=false` to disable automatic browser opening.\n- Set `WANIE_USE_WWEBJS=false` to disable the WhatsApp Web adapter.\n- Set `WANIE_ALLOW_MOCK=true` to allow the mock adapter for testing.\n- LLM providers are normally configured from **Settings → AI Providers**.\n- `WANIE_TERMINAL_ALLOWLIST` restricts which terminal commands can auto-execute without manual approval (space-separated patterns).\n- `OUTBOUND_DELIVERY_MAX_ATTEMPTS` controls capped retry for WhatsApp and Telegram sends.\n- `OUTBOUND_DELIVERY_BACKOFF_MS` controls outbound retry delays as comma-separated milliseconds.\n- `WEBHOOK_DELIVERY_MAX_ATTEMPTS` controls capped retry for incoming-message webhook delivery.\n- `WEBHOOK_DELIVERY_BACKOFF_MS` controls webhook retry delays as comma-separated milliseconds.\n- `OUTBOUND_DELIVERY_DELIVERED_RETENTION_DAYS` and `WEBHOOK_DELIVERY_DELIVERED_RETENTION_DAYS` control cleanup of old delivered delivery records.\n- `WHATSAPP_HEALTH_INTERVAL_MS` controls active WhatsApp device health checks.\n- `WHATSAPP_HEALTH_TIMEOUT_MS` controls how long a WhatsApp health probe may hang before reconnect.\n- `WHATSAPP_RECONNECT_BASE_DELAY_MS` and `WHATSAPP_RECONNECT_MAX_DELAY_MS` control reconnect backoff.\n- `WHATSAPP_META_GRAPH_VERSION` controls the Meta Graph API version used for WhatsApp Official API devices.\n- Terminal commands are only auto-executed if `approvalMode` is `auto` and the command matches an allowlist entry or user settings allow it.\n\n## Typical usage flow\n\n1. Start Wanie.\n2. Open the dashboard at `http://localhost:55111` or your deployment host.\n3. Register the first user or log in.\n4. Create a new WhatsApp session from the dashboard.\n5. Choose **WhatsApp Web QR** and pair the QR code, or choose **WhatsApp Official API** and enter the Meta Cloud API credentials.\n6. Wait for the workspace to sync chats and contacts or receive new webhook messages.\n7. Send text or media from the dashboard or the HTTP API.\n8. Create an API key from **Settings → API Access** for agents or external integrations.\n9. Optional: open **CRM**, upload knowledge documents, test knowledge answers, then enable draft or auto-send mode.\n\n## AI Assistant Capabilities\n\nWanie includes a built-in AI assistant that can manage WhatsApp sessions, LLM configurations, and extend functionality via registered tools. The assistant is accessible via WebSocket for real-time chat in the dashboard and via HTTP API for programmatic access.\n\n### Default Assistant Tools\n\nThe assistant comes with these built-in skills:\n\n- **`add_device`** — Create and manage new WhatsApp session/device for the workspace.\n- **`add_llm_provider`** — Configure LLM providers (OpenAI, Anthropic, Ollama, OpenRouter).\n- **`update_assistant`** — Customize the assistant's display name, avatar, and personality.\n- **`create_api_key`** — Generate API keys for external integrations.\n- **`update_webhook`** — Configure incoming webhook URL and authentication key.\n- **`setup_gateway_integration`** — Configure Wanie as an external app gateway from chat: set webhook URL/key, optionally create an API key, and turn internal CRM automation off.\n- **`update_tools_md`** — Register and document new external tools.\n- **`get_webpage`** — Fetch and parse webpage content (with fallback to browser rendering).\n- **`open_browser`** — Launch headless browser for dynamic content extraction.\n- **`list_workspaces`** — Enumerate project folders in the workspaces directory.\n- **`run_terminal`** — Execute shell commands with approval control.\n- **`search_messages`** — Query WhatsApp message database and attachments.\n- **`run_code_agent`** — Invoke the internal coding agent for file and project automation.\n\n### Registering External Tools\n\nYou can extend the assistant with custom tools by registering a tool manifest URL:\n\n**Via cURL:**\n\n```bash\ncurl -X POST 'http://localhost:55111/api/agent/register-tool-url' \\\n  -H 'Authorization: Bearer <DASHBOARD_JWT>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"url\": \"https://example.com/manifest.json\",\n    \"apiKey\": \"<MANIFEST_API_KEY>\",\n    \"headerName\": \"Authorization\",\n    \"overwrite\": true\n  }'\n```\n\n**PowerShell:**\n\n```powershell\nInvoke-RestMethod -Method Post -Uri 'http://localhost:55111/api/agent/register-tool-url' `\n  -Headers @{\"Authorization\"=\"Bearer <DASHBOARD_JWT>\";\"Content-Type\"=\"application/json\"} `\n  -Body '{\"url\":\"https://example.com/manifest.json\",\"apiKey\":\"<MANIFEST_API_KEY>\",\"overwrite\":true}'\n```\n\n### Invoking Tools via API\n\nOnce a tool is registered, invoke it with either a user JWT or an API key:\n\n**Using API Key:**\n\n```bash\ncurl -X POST 'http://localhost:55111/api/agent/invoke-tool/<tool_id>' \\\n  -H 'X-API-Key: <API_KEY>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"method\": \"GET\",\n    \"path\": \"/endpoint\"\n  }'\n```\n\n**Using JWT:**\n\n```bash\ncurl -X POST 'http://localhost:55111/api/agent/invoke-tool/<tool_id>' \\\n  -H 'Authorization: Bearer <USER_JWT>' \\\n  -H 'Content-Type: application/json' \\\n  -d '{\n    \"method\": \"POST\",\n    \"path\": \"/action\",\n    \"body\": { \"param\": \"value\" }\n  }'\n```\n\n### Tool Registration Security\n\n- **Dashboard-only registration**: Tool registration requires a valid dashboard JWT.\n- **Invocation control**: Each tool has an `invokeEnabled` flag determining if non-owner users can call it.\n- **Approval modes**: Terminal execution supports `auto` (trusted allowlist) and `manual` (requires approval).\n- **Terminal allowlist**: Set `WANIE_TERMINAL_ALLOWLIST` environment variable to restrict auto-executable commands.\n- **Audit logging**: All tool invocations are logged for accountability.\n\n### Assistant Configuration\n\nConfigure assistant behavior via environment variables:\n\n```env\n# Terminal command allowlist for auto-execution (space-separated patterns)\nWANIE_TERMINAL_ALLOWLIST=\"npm run build npm test node --version\"\n\n# LLM provider settings\nOPENAI_API_KEY=sk-...\n```\n\n## Runtime documentation\n\nWanie exposes comprehensive runtime documentation for both users and AI agents:\n\n- **Swagger UI**: `GET /docs` — Interactive API explorer with try-it-out functionality.\n- **OpenAPI JSON**: `GET /docs/json` — Machine-readable API schema for code generation and integrations.\n- **Agent guide markdown**: `GET /docs/readme` — Markdown documentation for AI agents and automation tools.\n- **Health check**: `GET /health` — Service availability status.\n- **Version**: `GET /version` — Runtime version and component info.\n- **Backend health alias**: `GET /api/health` — Direct backend health endpoint.\n\n### AI-Agent Discovery\n\nThis architecture is designed for AI agents and automation platforms:\n\n1. An agent reads `/docs/readme` to understand available operations.\n2. The agent fetches `/docs/json` to understand request/response schemas.\n3. The agent creates an API key from the dashboard (or requests one programmatically).\n4. The agent authenticates with the API key header and immediately starts interacting with chats, contacts, sessions, and messages.\n5. The agent can discover and register additional external tools via the `/api/agent/register-tool-url` endpoint.\n\nThis makes Wanie a strong fit for AI agents: full API documentation, extensible tool registration, and secure authentication without reverse-engineering the app.\n\n## API summary\n\n### Auth\n\n- `POST /api/auth/register`\n- `POST /api/auth/login`\n- `GET /api/auth/me`\n\nThese endpoints are intended for dashboard users. External agents that already have an API key normally do not need to use dashboard login flows.\n\n### API keys\n\n- `GET /api/api-keys`\n- `POST /api/api-keys`\n- `DELETE /api/api-keys/{apiKeyId}`\n\nAPI key management requires dashboard JWT authentication.\n\n### Workspace\n\n- `GET /api/bootstrap`\n\nReturns the initial workspace payload, including the current user, sessions, chats, active chat, initial message batch, and pagination metadata.\n\n### Sessions\n\n- `GET /api/sessions`\n- `POST /api/sessions`\n- `POST /api/sessions/{sessionId}/connect`\n- `POST /api/sessions/{sessionId}/disconnect`\n\n### Chats and contacts\n\n- `GET /api/chats`\n- `GET /api/contacts`\n- `POST /api/contacts/{contactId}/open`\n\n`/api/chats` and `/api/contacts` support `sessionId` and `q` query filters.\n\n### Messages\n\n- `GET /api/chats/{chatId}/messages`\n- `POST /api/chats/{chatId}/messages/send`\n- `POST /api/messages/send`\n- `GET /api/outbound-deliveries`\n- `POST /api/outbound-deliveries/{deliveryId}/retry`\n- `POST /api/outbound-deliveries/{deliveryId}/cancel`\n- `DELETE /api/messages/{messageId}`\n- `POST /api/messages/{messageId}/forward`\n\n> Note: `sessionId` is required when sending a new WhatsApp message by `phoneNumber`. Replies to an existing chat can use `/api/chats/{chatId}/messages/send`; Wanie uses the chat transport, including Telegram chats whose receiver starts with `tg:`.\n\nOutbound sends are queued durably and retried with backoff when WhatsApp or Telegram delivery fails. Wanie stops after 5 attempts by default and marks the delivery job as `failed`; use the retry endpoint to reset and try again manually.\n\n`GET /api/chats/{chatId}/messages` supports:\n\n- `take`\n- `before`\n- `search`\n\n### Media\n\n- `POST /api/media`\n\nUpload a file first, then use the returned `mediaFileId` when calling the send message endpoint.\n\n### CRM\n\n- `GET /api/crm/settings`\n- `POST /api/crm/settings`\n- `POST /api/crm/persona/generate`\n- `POST /api/crm/sessions/{sessionId}/settings`\n- `POST /api/crm/chats/{chatId}/settings`\n- `POST /api/crm/chats/{chatId}/draft`\n- `GET /api/crm/logs`\n\nCRM settings include automation mode, assistant name, business name, persona, fallback message, knowledge retrieval settings, abuse cooldown, and daily reply limits.\n\nWhen an admin replies to a customer from the Wanie dashboard, the API, or the paired WhatsApp app, CRM auto-reply pauses for that chat temporarily. The default pause is 30 minutes and can be changed with `adminPauseSeconds` in CRM settings.\n\nWhatsApp group chats are not auto-replied by default, even when the global or session mode is **Auto send**. Set the specific group chat override to **Auto send** to enable auto-reply for that group.\n\nTo use Wanie as a gateway/API only, set internal CRM automation mode to **Off**, configure an incoming webhook, and let the external app reply through `/api/chats/{chatId}/messages/send` or `/api/messages/send`.\n\n### Knowledge\n\n- `GET /api/knowledge/documents`\n- `POST /api/knowledge/documents` accepts one `file` field or multiple `files` fields. Matching original filenames replace existing documents automatically.\n- `GET /api/knowledge/documents/{documentId}/download`\n- `DELETE /api/knowledge/documents/{documentId}`\n- `POST /api/knowledge/documents/{documentId}/reindex`\n- `GET /api/knowledge/documents/{documentId}/chunks`\n- `POST /api/knowledge/search`\n- `POST /api/knowledge/test-chat`\n\nUse reindex when source parsing or embedding settings change. Reindexing extracts the stored file again and rebuilds chunks.\n\n## API authentication\n\nWanie supports two main authentication modes.\n\n### JWT bearer\n\n```http\nAuthorization: Bearer <jwt-token>\n```\n\nUsed by the dashboard after login or registration.\n\n### API key\n\n```http\nX-API-Key: <api-key>\n```\n\nor:\n\n```http\nAuthorization: Bearer <api-key>\n```\n\nRecommended for agents, automation, and external integrations.\n\n## Webhooks\n\nWanie can forward incoming customer messages to an external application such as a CRM, ERP, helpdesk, or AI service with its own knowledge base.\n\nConfigure the webhook from **Settings -> Webhooks** or with:\n\n- `GET /api/webhook` — read the current webhook.\n- `POST /api/webhook` — set `{ \"url\": \"https://example.com/wanie-webhook\", \"apiKey\": \"shared-secret\" }`.\n- `DELETE /api/webhook` — remove the webhook.\n- `POST /api/webhook/test` — send a synthetic `webhook.test` payload to the configured URL.\n- `GET /api/webhook/deliveries` — list recent webhook delivery attempts.\n- `POST /api/webhook/deliveries/{deliveryId}/retry` — replay a stored webhook payload.\n\nWhen a WhatsApp or non-admin Telegram customer message arrives, Wanie sends:\n\n```http\nPOST <your-webhook-url>\nContent-Type: application/json\nx-wanie-webhook-key: <apiKey configured in Wanie>\nx-openwa-webhook-key: <same apiKey, sent for backward compatibility>\n```\n\nPayload shape:\n\n```json\n{\n  \"chat\": {\n    \"id\": \"chat_id_from_wanie\",\n    \"title\": \"Customer Name\",\n    \"sessionId\": \"whatsapp_session_id_or_null_for_telegram\",\n    \"contact\": {\n      \"externalId\": \"6281234567890@c.us or tg:123456789\"\n    }\n  },\n  \"message\": {\n    \"id\": \"message_id_from_wanie\",\n    \"chatId\": \"chat_id_from_wanie\",\n    \"sessionId\": \"whatsapp_session_id_or_null_for_telegram\",\n    \"sender\": \"6281234567890@c.us or tg:123456789\",\n    \"receiver\": \"your_whatsapp_or_telegram_target\",\n    \"body\": \"Customer message text\",\n    \"type\": \"text\",\n    \"direction\": \"inbound\",\n    \"mediaFile\": null,\n    \"statuses\": []\n  }\n}\n```\n\nThe external app should verify `x-wanie-webhook-key` or the legacy `x-openwa-webhook-key`, store `chat.id`, and reply through the API.\n\nWebhook deliveries are logged per user. Wanie retries transient delivery failures automatically, emits realtime dashboard updates, and failed deliveries can be replayed with the retry endpoint.\n\nMinimal Express receiver:\n\n```js\napp.post(\"/wanie-webhook\", express.json(), async (req, res) => {\n  const key = req.get(\"x-wanie-webhook-key\") || req.get(\"x-openwa-webhook-key\");\n  if (key !== process.env.WANIE_WEBHOOK_KEY) {\n    return res.status(401).json({ ok: false });\n  }\n\n  const { chat, message } = req.body;\n  console.log(\"Incoming Wanie message\", {\n    chatId: chat.id,\n    from: message.sender,\n    text: message.body,\n  });\n\n  res.json({ ok: true });\n});\n```\n\nReply to the same chat:\n\n```bash\ncurl -X POST http://localhost:55111/api/chats/<chatId>/messages/send \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: <api-key>\" \\\n  -d '{\"body\":\"Reply from external CRM\",\"type\":\"text\"}'\n```\n\nSend media to the same chat with a public URL:\n\n```bash\ncurl -X POST http://localhost:55111/api/chats/<chatId>/messages/send \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: <api-key>\" \\\n  -d '{\"type\":\"image\",\"mediaUrl\":\"https://example.com/photo.jpg\",\"body\":\"Photo caption\"}'\n```\n\nOr upload media first:\n\n```bash\ncurl -X POST http://localhost:55111/api/media \\\n  -H \"X-API-Key: <api-key>\" \\\n  -F \"file=@./invoice.pdf\"\n```\n\nThen send:\n\n```bash\ncurl -X POST http://localhost:55111/api/chats/<chatId>/messages/send \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: <api-key>\" \\\n  -d '{\"type\":\"document\",\"mediaFileId\":\"<mediaFileId>\",\"body\":\"Invoice\"}'\n```\n\nFor API-only gateway mode, set internal CRM automation to **Off**. Wanie will still store incoming messages, deliver webhooks, and allow the external app to reply through API endpoints. Non-admin Telegram users do not receive assistant tool access.\n\n## Agent and Tool APIs\n\n### Tool Management\n\n- `POST /api/agent/register-tool-url` — Register a new tool from a manifest URL (dashboard JWT required).\n- `GET /api/agent/tools` — List all registered tools.\n- `POST /api/agent/invoke-tool/{toolId}` — Invoke a registered tool with method, path, and optional body.\n\n### Assistant APIs\n\n- `POST /api/chat/{chatId}/messages` — Send a message to an assistant conversation.\n- `GET /api/agent/docs/readme` — Fetch agent-friendly documentation.\n- `GET /api/agent/docs/json` — Fetch OpenAPI specification in JSON format.\n\nThese endpoints support both JWT and API key authentication.\n\n## API Examples\n\n### WhatsApp Operations\n\nList chats:\n\n```bash\ncurl -H \"X-API-Key: <api-key>\" http://localhost:55111/api/chats\n```\n\nRead messages for a chat:\n\n```bash\ncurl -H \"X-API-Key: <api-key>\" http://localhost:55111/api/chats/<chatId>/messages\n```\n\nSend a text message to an existing chat:\n\n```bash\ncurl -X POST http://localhost:55111/api/chats/<chatId>/messages/send \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: <api-key>\" \\\n  -d '{\"body\":\"Hello from Wanie\",\"type\":\"text\"}'\n```\n\nUse this same endpoint to reply to a Telegram customer chat received from a webhook.\n\nFor WhatsApp Official API chats, use the same endpoint. Wanie resolves the chat transport and sends through Meta Cloud API automatically.\n\nFor media replies, either upload first with `/api/media` and pass `mediaFileId`, or pass a public `mediaUrl` with type `image`, `video`, `audio`, `document`, or `sticker`.\n\nSend a direct message by phone number:\n\n```bash\ncurl -X POST http://localhost:55111/api/messages/send \\\n  -H \"Content-Type: application/json\" \\\n  -H \"X-API-Key: <api-key>\" \\\n  -d '{\"sessionId\":\"<sessionId>\",\"phoneNumber\":\"+6281234567890\",\"body\":\"Hello from Wanie\",\"type\":\"text\"}'\n```\n\nUpload media:\n\n```bash\ncurl -X POST http://localhost:55111/api/media \\\n  -H \"X-API-Key: <api-key>\" \\\n  -F \"file=@./example.png\"\n```\n\nSearch messages:\n\n```bash\ncurl -H \"X-API-Key: <api-key>\" \\\n  \"http://localhost:55111/api/search-messages?q=invoice&chatId=12345@c.us&limit=20\"\n```\n\n### Agent Discovery and Configuration\n\nFetch agent readme:\n\n```bash\ncurl -H \"X-API-Key: <api-key>\" http://localhost:55111/api/agent/docs/readme\n```\n\nFetch OpenAPI specification:\n\n```bash\ncurl -H \"X-API-Key: <api-key>\" http://localhost:55111/api/agent/docs/json\n```\n\nList all registered tools:\n\n```bash\ncurl -H \"X-API-Key: <api-key>\" http://localhost:55111/api/agent/tools\n```\n\n### Tool Invocation Example\n\nInvoke a registered external tool:\n\n```bash\ncurl -X POST http://localhost:55111/api/agent/invoke-tool/weather-api \\\n  -H \"X-API-Key: <api-key>\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"method\":\"GET\",\"path\":\"/forecast?city=London\"}'\n```\n\n## Project Structure\n\n- `bin/` - CLI entrypoint\n- `server/` - backend runtime, OpenAPI docs, auth, sessions, chats, media, and sockets\n  - `server/express/` - Express middleware and route handlers\n  - `server/services/` - Business logic including agent orchestration, tool execution, and assistant management\n  - `server/ai/llm-adapters/` - LLM provider adapters (OpenAI, Anthropic, etc.)\n- `web/` - Next.js dashboard UI\n- `prisma/` - Database schema and migrations\n- `storage/` - Runtime storage, sessions, media files, and database\n\n### Key Assistant Services\n\n- `server/services/agent-orchestrator.js` - Orchestrates agent workflow and tool execution.\n- `server/services/agent-service.js` - Handles assistant chat messages and tool invocation.\n- `server/services/crm-auto-reply-service.js` - Generates CRM drafts, runs guarded auto-replies, and delivers CRM messages to WhatsApp or Telegram.\n- `server/services/crm-service.js` - Stores CRM automation settings, per-chat/session overrides, and automation logs.\n- `server/services/knowledge-service.js` - Extracts, chunks, indexes, searches, and reindexes CRM knowledge documents.\n- `server/services/whatsapp-meta-service.js` - Handles WhatsApp Official API / Meta Cloud API config, webhook verification, inbound messages, media download, and outbound sends.\n- `server/services/tool-executor.js` - Executes assistant tools and external integrations.\n- `server/services/llm-service.js` - LLM provider abstraction and model selection.\n- `server/services/assistant-service.js` - Manages assistant profiles and configurations.\n\n## Development\n\nFor repository-based local development:\n\n1. Install dependencies with `npm install`.\n2. Configure `.env` if you need non-default ports or runtime behavior.\n3. Run `npm run dev` for development mode.\n4. Run `npm run build` before shipping production changes.\n\nIf you are working on API-facing features, validate them against:\n\n- `server/express/openapi.js`\n- `/docs`\n- `/docs/json`\n- `/docs/readme`\n\n## Contributing\n\nContributions are welcome.\n\nIf you want to contribute:\n\n1. Fork the repository.\n2. Create a feature branch.\n3. Make focused changes.\n4. Test your changes locally.\n5. Open a pull request with a clear description of what changed and why.\n\nGood contribution areas include:\n\n- WhatsApp session reliability\n- Dashboard UX\n- API ergonomics\n- Documentation improvements\n- Tests and validation\n- Developer experience\n\n## Issues and bug reports\n\nIf you find a bug or want to request a feature, please open an issue with:\n\n- what you expected\n- what happened\n- steps to reproduce\n- logs or screenshots if relevant\n- environment details such as Node.js version and runtime mode\n\n## Security and responsible use\n\nPlease do not use this project for spam, abuse, or policy-violating automation.\n\nIf you discover a security issue, report it responsibly and avoid posting sensitive details publicly before maintainers have a chance to assess it.\n\n## License\n\nThis project is released under the MIT license. See `package.json` for the current license declaration.\n\n## For agents and integrations\n\nRecommended call order:\n\n1. `GET /health`\n2. `GET /version`\n3. `GET /docs/json`\n4. `GET /api/chats` or `GET /api/contacts`\n5. `POST /api/contacts/{contactId}/open`\n6. `GET /api/chats/{chatId}/messages`\n7. `POST /api/chats/{chatId}/messages/send`\n\n## If you need an agent-oriented markdown guide directly from the runtime, use `GET /docs/readme`.\n\n---\n","readmeFilename":"README.md"}