{"_id":"@budytalk/activity-server","_rev":"6-f0f68a91dc4b340ecda3ccc1bbe5406c","name":"@budytalk/activity-server","dist-tags":{"latest":"2.1.1"},"versions":{"1.0.0":{"name":"@budytalk/activity-server","version":"1.0.0","keywords":["activity-feeds","messaging","notifications","real-time","websocket","chat","sdk","social-media","timeline","getstream","social-network","feeds","reactions","comments","polls","following","budytalk","postgresql","neon","sqlite","database","api","server","backend","nodejs","typescript"],"author":{"name":"BudyTalk Team"},"license":"MIT","_id":"@budytalk/activity-server@1.0.0","maintainers":[{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com"}],"homepage":"https://github.com/budytalk/activity-server#readme","bugs":{"url":"https://github.com/budytalk/activity-server/issues"},"bin":{"budytalk":"dist/cli/index.js"},"dist":{"shasum":"ed1c1376254ab342d991741ba6fdab01365ea637","tarball":"https://registry.npmjs.org/@budytalk/activity-server/-/activity-server-1.0.0.tgz","fileCount":151,"integrity":"sha512-7+fApJ7dJN0iA+jZQ44IJnbNYIqDFbqocVQfdT/1sbZkwdq3jLUFEUC4dj56V/2Ck5cNFPhnwIQRfnYHxseFtQ==","signatures":[{"sig":"MEUCIDsjggcZ9mN6QLRUqJEFWGnIeogRO/CLLEAiIyDrP57CAiEA5JaE0CMR2qJj1BqPYde78cKItiDirdo4cYcgkbYt73Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527545},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"845e963145758dd801243e58d5519b9a9454d603","scripts":{"cli":"ts-node src/cli/index.ts","dev":"ts-node-dev --respawn --transpile-only src/index.ts","lint":"eslint src/**/*.ts","test":"npm run test:local","build":"tsc","clean":"rm -rf dist/ *.tgz","start":"node dist/index.js","verify":"npm run build && npm run test:local && npm run test:package","prepare":"npm run build","test:all":"npm run test:complete && npm run test:api && npm run test:websocket && npm run test:postgres","test:api":"node test/api-test.js","dev-server":"ts-node src/dev-server/index.ts","test:local":"npm run build && npm run test:complete","postpublish":"echo '🎉 Successfully published @budytalk/activity-server to NPM!'","test:dry-run":"npm publish --dry-run","test:package":"npm pack && npm run test:install-local","test:complete":"node test/complete-test.js","test:postgres":"node test/postgres-test.js","prepublishOnly":"npm run pre-publish-check","test:websocket":"node test/websocket-test.js","pre-publish-check":"node scripts/pre-publish-check.js","test:install-local":"npm install ./budytalk-activity-server-*.tgz && node -e \"console.log('✅ Package installed successfully'); const pkg = require('@budytalk/activity-server'); console.log('✅ Package exports:', Object.keys(pkg));\""},"_npmUser":{"name":"budytalk","actor":{"name":"budytalk","type":"user","email":"williamfavor.sseruwangi@gmail.com"},"email":"williamfavor.sseruwangi@gmail.com"},"repository":{"url":"git+https://github.com/budytalk/activity-server.git","type":"git"},"_npmVersion":"10.9.2","description":"NPM SDK suite for activity feeds, messaging, and notifications - similar to GetStream but built for Node.js applications with full social media features","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.11.3","zod":"^3.22.2","cors":"^2.8.5","uuid":"^9.0.0","axios":"^1.5.0","chalk":"^4.1.2","redis":"^4.6.7","dotenv":"^16.3.1","helmet":"^7.0.0","multer":"^1.4.5-lts.1","express":"^4.18.2","sqlite3":"^5.1.6","winston":"^3.10.0","bcryptjs":"^2.4.3","inquirer":"^8.2.6","commander":"^11.0.0","node-cron":"^3.0.2","socket.io":"^4.7.2","jsonwebtoken":"^9.0.2","express-rate-limit":"^6.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","eslint":"^8.47.0","ts-jest":"^29.1.1","ts-node":"^10.9.1","@types/pg":"^8.10.2","typescript":"^5.1.6","@types/cors":"^2.8.13","@types/jest":"^29.5.4","@types/node":"^20.5.0","@types/uuid":"^9.0.2","ts-node-dev":"^2.0.0","@types/multer":"^1.4.7","@types/express":"^4.17.17","@types/sqlite3":"^3.1.8","@types/bcryptjs":"^2.4.2","@types/inquirer":"^9.0.3","socket.io-client":"^4.7.2","@types/jsonwebtoken":"^9.0.2","@typescript-eslint/parser":"^6.4.0","@typescript-eslint/eslint-plugin":"^6.4.0"},"peerDependencies":{"typescript":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/activity-server_1.0.0_1750573862988_0.2101413812519657","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@budytalk/activity-server","version":"1.0.1","keywords":["activity-feeds","messaging","notifications","real-time","websocket","chat","sdk","social-media","timeline","getstream","social-network","feeds","reactions","comments","polls","following","budytalk","postgresql","neon","sqlite","database","api","server","backend","nodejs","typescript"],"author":{"name":"BudyTalk Team"},"license":"MIT","_id":"@budytalk/activity-server@1.0.1","maintainers":[{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com"}],"homepage":"https://github.com/budytalk/activity-server#readme","bugs":{"url":"https://github.com/budytalk/activity-server/issues"},"bin":{"budytalk":"dist/cli/index.js"},"dist":{"shasum":"d60be1e6f3e60110e6f2a0f9e6aaa770b9aa9be8","tarball":"https://registry.npmjs.org/@budytalk/activity-server/-/activity-server-1.0.1.tgz","fileCount":151,"integrity":"sha512-DwJmP+zy4eBuv55YZyWQITmihXnMUFCWI6UhRZ4u+eivJ40Q/1TGBjA33Pb7lgTewTUKlNIQ2O0RjqB1kCK/Pw==","signatures":[{"sig":"MEUCIDnHOUg++tFBTomVSE6DvhS5Ti+8RS+qdSu5jG/0QKKsAiEAoyYdHucMnGX4WlhZx9dCuBKfGOAWJ3MZ6aZMS9uGK54=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527544},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"4889413ab46413c200697e7cd5548f8bdbd30220","scripts":{"cli":"ts-node src/cli/index.ts","dev":"ts-node-dev --respawn --transpile-only src/index.ts","lint":"eslint src/**/*.ts","test":"npm run test:local","build":"tsc","clean":"rm -rf dist/ *.tgz","start":"node dist/index.js","verify":"npm run build && npm run test:local && npm run test:package","prepare":"npm run build","test:all":"npm run test:complete && npm run test:api && npm run test:websocket && npm run test:postgres","test:api":"node test/api-test.js","dev-server":"ts-node src/dev-server/index.ts","test:local":"npm run build && npm run test:complete","postpublish":"echo '🎉 Successfully published @budytalk/activity-server to NPM!'","test:dry-run":"npm publish --dry-run","test:package":"npm pack && npm run test:install-local","test:complete":"node test/complete-test.js","test:postgres":"node test/postgres-test.js","prepublishOnly":"npm run pre-publish-check","test:websocket":"node test/websocket-test.js","pre-publish-check":"node scripts/pre-publish-check.js","test:install-local":"npm install ./budytalk-activity-server-*.tgz && node -e \"console.log('✅ Package installed successfully'); const pkg = require('@budytalk/activity-server'); console.log('✅ Package exports:', Object.keys(pkg));\""},"_npmUser":{"name":"budytalk","actor":{"name":"budytalk","type":"user","email":"williamfavor.sseruwangi@gmail.com"},"email":"williamfavor.sseruwangi@gmail.com"},"repository":{"url":"git+https://github.com/budytalk/activity-server.git","type":"git"},"_npmVersion":"10.9.2","description":"NPM SDK suite for activity feeds, messaging, and notifications - similar to BudyTalk but built for Node.js applications with full social media features","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.11.3","zod":"^3.22.2","cors":"^2.8.5","uuid":"^9.0.0","axios":"^1.5.0","chalk":"^4.1.2","redis":"^4.6.7","dotenv":"^16.3.1","helmet":"^7.0.0","multer":"^1.4.5-lts.1","express":"^4.18.2","sqlite3":"^5.1.6","winston":"^3.10.0","bcryptjs":"^2.4.3","inquirer":"^8.2.6","commander":"^11.0.0","node-cron":"^3.0.2","socket.io":"^4.7.2","jsonwebtoken":"^9.0.2","express-rate-limit":"^6.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","eslint":"^8.47.0","ts-jest":"^29.1.1","ts-node":"^10.9.1","@types/pg":"^8.10.2","typescript":"^5.1.6","@types/cors":"^2.8.13","@types/jest":"^29.5.4","@types/node":"^20.5.0","@types/uuid":"^9.0.2","ts-node-dev":"^2.0.0","@types/multer":"^1.4.7","@types/express":"^4.17.17","@types/sqlite3":"^3.1.8","@types/bcryptjs":"^2.4.2","@types/inquirer":"^9.0.3","socket.io-client":"^4.7.2","@types/jsonwebtoken":"^9.0.2","@typescript-eslint/parser":"^6.4.0","@typescript-eslint/eslint-plugin":"^6.4.0"},"peerDependencies":{"typescript":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/activity-server_1.0.1_1750574699179_0.9632173977401859","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@budytalk/activity-server","version":"1.0.2","keywords":["activity-feeds","messaging","notifications","real-time","websocket","chat","sdk","social-media","timeline","getstream","social-network","feeds","reactions","comments","polls","following","budytalk","postgresql","neon","sqlite","database","api","server","backend","nodejs","typescript"],"author":{"name":"BudyTalk Team"},"license":"MIT","_id":"@budytalk/activity-server@1.0.2","maintainers":[{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com"}],"homepage":"https://github.com/budytalk/activity-server#readme","bugs":{"url":"https://github.com/budytalk/activity-server/issues"},"bin":{"budytalk":"dist/cli/index.js"},"dist":{"shasum":"435e26dc438a780771e6b4d9b971128367c145d9","tarball":"https://registry.npmjs.org/@budytalk/activity-server/-/activity-server-1.0.2.tgz","fileCount":151,"integrity":"sha512-XH2fcj7DlnNIj/B6QpUkd5s8GXhe6NEtar1oiXHdVRTQhVQ3E0zzq+daHLkbmIfVDuLM5RQHTM31PHbssgsJhA==","signatures":[{"sig":"MEYCIQDhZ3yJYxApSiRMHLkomnmMM/BzMrv6JZ63Ozk9CFeVZAIhALmR4BYWRfxCEbNzGLaUhDAeoZUfBXCwO/1eeo59iTvt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":527543},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"4889413ab46413c200697e7cd5548f8bdbd30220","scripts":{"cli":"ts-node src/cli/index.ts","dev":"ts-node-dev --respawn --transpile-only src/index.ts","lint":"eslint src/**/*.ts","test":"npm run test:local","build":"tsc","clean":"rm -rf dist/ *.tgz","start":"node dist/index.js","verify":"npm run build && npm run test:local && npm run test:package","prepare":"npm run build","test:all":"npm run test:complete && npm run test:api && npm run test:websocket && npm run test:postgres","test:api":"node test/api-test.js","dev-server":"ts-node src/dev-server/index.ts","test:local":"npm run build && npm run test:complete","postpublish":"echo '🎉 Successfully published @budytalk/activity-server to NPM!'","test:dry-run":"npm publish --dry-run","test:package":"npm pack && npm run test:install-local","test:complete":"node test/complete-test.js","test:postgres":"node test/postgres-test.js","prepublishOnly":"npm run pre-publish-check","test:websocket":"node test/websocket-test.js","pre-publish-check":"node scripts/pre-publish-check.js","test:install-local":"npm install ./budytalk-activity-server-*.tgz && node -e \"console.log('✅ Package installed successfully'); const pkg = require('@budytalk/activity-server'); console.log('✅ Package exports:', Object.keys(pkg));\""},"_npmUser":{"name":"budytalk","actor":{"name":"budytalk","type":"user","email":"williamfavor.sseruwangi@gmail.com"},"email":"williamfavor.sseruwangi@gmail.com"},"repository":{"url":"git+https://github.com/budytalk/activity-server.git","type":"git"},"_npmVersion":"10.9.2","description":"NPM SDK suite for activity feeds, messaging, and notifications - similar to BudyTalk but built for Node.js applications with full social media features","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.11.3","zod":"^3.22.2","cors":"^2.8.5","uuid":"^9.0.0","axios":"^1.5.0","chalk":"^4.1.2","redis":"^4.6.7","dotenv":"^16.3.1","helmet":"^7.0.0","multer":"^1.4.5-lts.1","express":"^4.18.2","sqlite3":"^5.1.6","winston":"^3.10.0","bcryptjs":"^2.4.3","inquirer":"^8.2.6","commander":"^11.0.0","node-cron":"^3.0.2","socket.io":"^4.7.2","jsonwebtoken":"^9.0.2","express-rate-limit":"^6.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.6.2","eslint":"^8.47.0","ts-jest":"^29.1.1","ts-node":"^10.9.1","@types/pg":"^8.10.2","typescript":"^5.1.6","@types/cors":"^2.8.13","@types/jest":"^29.5.4","@types/node":"^20.5.0","@types/uuid":"^9.0.2","ts-node-dev":"^2.0.0","@types/multer":"^1.4.7","@types/express":"^4.17.17","@types/sqlite3":"^3.1.8","@types/bcryptjs":"^2.4.2","@types/inquirer":"^9.0.3","socket.io-client":"^4.7.2","@types/jsonwebtoken":"^9.0.2","@typescript-eslint/parser":"^6.4.0","@typescript-eslint/eslint-plugin":"^6.4.0"},"peerDependencies":{"typescript":">=4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/activity-server_1.0.2_1750575441039_0.8972551446912469","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@budytalk/activity-server","version":"2.0.0","keywords":["content-management","social-media","posts","likes","comments","retweets","timeline","reactions","real-time","websocket","api","server","backend","nodejs","typescript","budytalk","postgresql","neon","database"],"author":{"name":"BudyTalk Team"},"license":"MIT","_id":"@budytalk/activity-server@2.0.0","maintainers":[{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com"}],"homepage":"https://github.com/budytalk/activity-server#readme","bugs":{"url":"https://github.com/budytalk/activity-server/issues"},"bin":{"budytalk-content":"dist/cli/index.js"},"dist":{"shasum":"b71390d0de5afa36e182677ef2e6323555df57ed","tarball":"https://registry.npmjs.org/@budytalk/activity-server/-/activity-server-2.0.0.tgz","fileCount":169,"integrity":"sha512-FM8R0q+x0pw8MFn/MUsMxbo03BhIgnA6JhaeCMhmXCYUu9OtUjQzPRX4dAq/Cn/4f+TTAKOLrICbpUDjld4CDg==","signatures":[{"sig":"MEYCIQDg/BNBvn/nKrhir/eAZP7IKQRmoFeBsKit6+kstBiWbAIhAIksYDUjf/UGrQQ2a1z21XrOboa+LE3qnU+HboJKdyWc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":613296},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"a1f15df2e29dfd7fdd929131debca46046b3ab40","scripts":{"dev":"ts-node-dev --respawn --transpile-only src/index.ts","lint":"eslint src/**/*.ts","test":"npm run test:local","build":"tsc","clean":"rm -rf dist/ *.tgz","start":"node dist/index.js","verify":"npm run build && npm run test:local && npm run test:package","prepare":"npm run build","test:api":"node examples/api-usage.js","dev-server":"ts-node src/dev-server/index.ts","test:local":"npm run build && npm run test:simple","postpublish":"echo '🎉 Successfully published @budytalk/activity-server to NPM!'","test:simple":"node examples/simple-usage.js","test:dry-run":"npm publish --dry-run","test:package":"npm pack && npm run test:install-local","test:postgres":"node examples/postgres-example.js","prepublishOnly":"npm run pre-publish-check","test:bookmarks":"node examples/bookmark-example.js","pre-publish-check":"node scripts/pre-publish-check.js","test:install-local":"npm install ./budytalk-activity-server-*.tgz && node -e \"console.log('✅ Package installed successfully'); const pkg = require('@budytalk/activity-server'); console.log('✅ Package exports:', Object.keys(pkg));\""},"_npmUser":{"name":"budytalk","actor":{"name":"budytalk","type":"user","email":"williamfavor.sseruwangi@gmail.com"},"email":"williamfavor.sseruwangi@gmail.com"},"repository":{"url":"git+https://github.com/budytalk/activity-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Simplified content management server for social media features - posts, likes, comments, retweets, and timelines","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.11.3","zod":"^3.22.2","cors":"^2.8.5","uuid":"^9.0.0","chalk":"^4.1.2","dotenv":"^16.3.1","helmet":"^7.0.0","express":"^4.18.2","sqlite3":"^5.1.6","winston":"^3.10.0","bcryptjs":"^2.4.3","inquirer":"^9.2.0","commander":"^11.0.0","socket.io":"^4.7.2","jsonwebtoken":"^9.0.2","express-rate-limit":"^6.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.5.0","eslint":"^8.47.0","ts-node":"^10.9.1","@types/pg":"^8.10.2","typescript":"^5.1.6","@types/cors":"^2.8.13","@types/node":"^20.5.0","@types/uuid":"^9.0.2","ts-node-dev":"^2.0.0","@types/express":"^4.17.17","@types/sqlite3":"^3.1.8","@types/bcryptjs":"^2.4.2","@types/inquirer":"^9.0.3","@types/commander":"^2.12.2","socket.io-client":"^4.7.2","@types/jsonwebtoken":"^9.0.2","@typescript-eslint/parser":"^6.4.0","@typescript-eslint/eslint-plugin":"^6.4.0"},"_npmOperationalInternal":{"tmp":"tmp/activity-server_2.0.0_1750719674564_0.09825354956349641","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@budytalk/activity-server","version":"2.1.0","keywords":["social-media","activity-feeds","real-time","content-management","postgresql","neon","websocket","timeline","reactions","comments","polls","bookmarks","retweets","budytalk","social-platform","api-server","zero-config"],"author":{"name":"BudyTalk Team"},"license":"MIT","_id":"@budytalk/activity-server@2.1.0","maintainers":[{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com"}],"homepage":"https://github.com/budytalk/activity-server#readme","bugs":{"url":"https://github.com/budytalk/activity-server/issues"},"bin":{"budytalk":"dist/cli/index.js"},"dist":{"shasum":"697253c9c4ecb1b6a7b8c647712a4f635fc08b41","tarball":"https://registry.npmjs.org/@budytalk/activity-server/-/activity-server-2.1.0.tgz","fileCount":127,"integrity":"sha512-QhvzcfSwHQmq1yUfpG1u+wXESjkughcr7ihVTvkjQ7To9sdorvEp0KROOlF+wUUvBdx21SD+P/J+ncKLIDgJZQ==","signatures":[{"sig":"MEYCIQDGQ+4WL+eYSoywT58aG2uER4DWf+bwfAUS3bc3jZo1QwIhAIx5UIgE1YekDRAUHLYcUQijVT8u1Mdtvn6lTc6M/wwi","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":500019},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0"},"gitHead":"442d7c4b02c7dc97b651c0ae7e66f6f8ebfd99ea","scripts":{"dev":"ts-node src/dev-server/index.ts","lint":"echo 'Linting skipped'","test":"node test-api.js","build":"tsc","clean":"rm -rf dist","start":"node initialize-neon.js","format":"echo 'Formatting skipped'","test:all":"npm run test:integration && npm run test:postgres && npm run test:api","test:api":"node test/api-test.js","dev-server":"node dist/dev-server/index.js","example:api":"node examples/api-usage.js","test:simple":"node examples/simple-usage.js","test:complete":"node test/complete-test.js","test:postgres":"node test/postgres-test.js","example:simple":"node examples/simple-usage.js","prepublishOnly":"npm run clean && npm run build","test:bookmarks":"node examples/bookmark-example.js","test:websocket":"node test/websocket-test.js","example:postgres":"node examples/postgres-example.js","test:integration":"node test/integration-test.js","example:bookmarks":"node examples/bookmark-example.js"},"_npmUser":{"name":"budytalk","actor":{"name":"budytalk","type":"user","email":"williamfavor.sseruwangi@gmail.com"},"email":"williamfavor.sseruwangi@gmail.com"},"repository":{"url":"git+https://github.com/budytalk/activity-server.git","type":"git"},"_npmVersion":"10.9.2","description":"Complete social media content management server with built-in PostgreSQL database, real-time features, and zero-configuration setup","directories":{},"_nodeVersion":"22.13.1","dependencies":{"pg":"^8.11.1","zod":"^3.21.4","cors":"^2.8.5","uuid":"^9.0.0","dotenv":"^16.3.1","helmet":"^7.0.0","express":"^4.18.2","sqlite3":"^5.1.6","winston":"^3.10.0","bcryptjs":"^2.4.3","socket.io":"^4.7.2","jsonwebtoken":"^9.0.1","express-rate-limit":"^6.8.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"axios":"^1.4.0","chalk":"^5.3.0","nodemon":"^3.0.1","ts-node":"^10.9.1","inquirer":"^9.2.8","@types/pg":"^8.10.2","commander":"^11.0.0","typescript":"^5.1.6","@types/cors":"^2.8.13","@types/node":"^20.4.2","@types/uuid":"^9.0.2","@types/express":"^4.17.17","@types/sqlite3":"^3.1.8","@types/bcryptjs":"^2.4.2","socket.io-client":"^4.7.2","@types/jsonwebtoken":"^9.0.2"},"_npmOperationalInternal":{"tmp":"tmp/activity-server_2.1.0_1750756212189_0.24780964113472193","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@budytalk/activity-server","version":"2.1.1","description":"Complete social media content management server with built-in PostgreSQL database, real-time features, and zero-configuration setup","main":"dist/index.js","types":"dist/index.d.ts","bin":{"budytalk":"dist/cli/index.js"},"scripts":{"build":"tsc","dev":"ts-node-dev --respawn --transpile-only src/index.ts","start":"node dist/index.js","test":"npm run test:local","test:complete":"node test/complete-test.js","test:api":"node test/api-test.js","test:websocket":"node test/websocket-test.js","test:postgres":"node test/postgres-test.js","test:all":"npm run test:complete && npm run test:api && npm run test:websocket && npm run test:postgres","test:local":"npm run build && npm run test:complete","test:package":"npm pack && npm run test:install-local","test:install-local":"npm install ./budytalk-activity-server-*.tgz && node -e \"console.log('✅ Package installed successfully'); const pkg = require('@budytalk/activity-server'); console.log('✅ Package exports:', Object.keys(pkg));\"","test:dry-run":"npm publish --dry-run","lint":"eslint src/**/*.ts","cli":"ts-node src/cli/index.ts","dev-server":"ts-node src/dev-server/index.ts","prepare":"npm run build","prepublishOnly":"npm run pre-publish-check","pre-publish-check":"node scripts/pre-publish-check.js","postpublish":"echo '🎉 Successfully published @budytalk/activity-server to NPM!'","clean":"rm -rf dist/ *.tgz","verify":"npm run build && npm run test:local && npm run test:package"},"keywords":["social-media","activity-feeds","real-time","content-management","postgresql","neon","websocket","timeline","reactions","comments","polls","bookmarks","retweets","budytalk","social-platform","api-server","zero-config"],"author":{"name":"BudyTalk Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/budytalk/activity-server.git"},"bugs":{"url":"https://github.com/budytalk/activity-server/issues"},"homepage":"https://github.com/budytalk/activity-server#readme","dependencies":{"express":"^4.18.2","socket.io":"^4.7.2","cors":"^2.8.5","helmet":"^7.0.0","express-rate-limit":"^6.8.1","sqlite3":"^5.1.6","pg":"^8.11.1","uuid":"^9.0.0","winston":"^3.10.0","zod":"^3.21.4","dotenv":"^16.3.1","jsonwebtoken":"^9.0.1","bcryptjs":"^2.4.3"},"devDependencies":{"@types/node":"^20.4.2","@types/express":"^4.17.17","@types/cors":"^2.8.13","@types/uuid":"^9.0.2","@types/pg":"^8.10.2","@types/jsonwebtoken":"^9.0.2","@types/bcryptjs":"^2.4.2","@types/sqlite3":"^3.1.8","typescript":"^5.1.6","ts-node":"^10.9.1","ts-node-dev":"^2.0.0","nodemon":"^3.0.1","axios":"^1.4.0","socket.io-client":"^4.7.2","commander":"^11.0.0","inquirer":"^9.2.8","chalk":"^5.3.0"},"engines":{"node":">=16.0.0"},"publishConfig":{"access":"public"},"_id":"@budytalk/activity-server@2.1.1","gitHead":"a16b4986e5b7ac0e080b7cdf6aba0f1cf166caf3","_nodeVersion":"22.13.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-XssUEpYfzmgAE6JhI8J8DL5cuh/nnfwjzjFB8kK3WFN/NepoClnnTxtrsUsWM5t+SioEhKVGQyQ00lWwcG+GMg==","shasum":"ef9412f2e2f2816875cfe6eb783b924b38735668","tarball":"https://registry.npmjs.org/@budytalk/activity-server/-/activity-server-2.1.1.tgz","fileCount":137,"unpackedSize":529866,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEv8LE7mB2d2LNOueSRa0VzPMoLyqyDMazuVZuPnel1qAiEA05iJfR15dhoLK60xU2WB/rM6DeBrUibbg9JUvLbbSts="}]},"_npmUser":{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com","actor":{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com","type":"user"}},"directories":{},"maintainers":[{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/activity-server_2.1.1_1751360443921_0.3596059979380706"},"_hasShrinkwrap":false}},"time":{"created":"2025-06-22T06:31:02.914Z","modified":"2025-07-01T09:00:44.368Z","1.0.0":"2025-06-22T06:31:03.169Z","1.0.1":"2025-06-22T06:44:59.352Z","1.0.2":"2025-06-22T06:57:21.220Z","2.0.0":"2025-06-23T23:01:14.789Z","2.1.0":"2025-06-24T09:10:12.406Z","2.1.1":"2025-07-01T09:00:44.202Z"},"bugs":{"url":"https://github.com/budytalk/activity-server/issues"},"author":{"name":"BudyTalk Team"},"license":"MIT","homepage":"https://github.com/budytalk/activity-server#readme","keywords":["social-media","activity-feeds","real-time","content-management","postgresql","neon","websocket","timeline","reactions","comments","polls","bookmarks","retweets","budytalk","social-platform","api-server","zero-config"],"repository":{"type":"git","url":"git+https://github.com/budytalk/activity-server.git"},"description":"Complete social media content management server with built-in PostgreSQL database, real-time features, and zero-configuration setup","maintainers":[{"name":"budytalk","email":"williamfavor.sseruwangi@gmail.com"}],"readme":"# @budytalk/activity-server\n\nA simplified content management server for social media features - handles posts, likes, comments, retweets, bookmarks, and timelines. **Database initialization is handled automatically** - just import and use!\n\n## 🌟 Features\n\n### Core Content Management\n- **Posts**: Text, image, video, and poll posts with rich metadata\n- **Reactions**: Like, love, laugh, wow, sad, angry reactions with unlike functionality\n- **Comments**: Nested comments with mentions, replies, and deletion\n- **Retweets**: Simple retweets and retweets with comments, plus unretweet functionality\n- **Bookmarks**: Save posts to organized collections with notes\n- **Timeline System**: Personalized timelines based on following relationships\n- **Trending Algorithm**: Discover popular content based on engagement\n- **Real-time Updates**: WebSocket support for live updates\n\n### Key Benefits\n- **No Database Setup**: Automatically connects to Neon PostgreSQL - no configuration needed!\n- **No User Management**: Focuses only on content, works with your existing user system\n- **Simple Integration**: Easy-to-use REST API and JavaScript SDK\n- **Real-time**: WebSocket support for instant updates\n- **Scalable**: Built-in PostgreSQL support for production use\n- **Lightweight**: Minimal dependencies, focused functionality\n- **Production Ready**: Built with TypeScript, comprehensive error handling\n\n## 📦 Installation\n\n```bash\nnpm install @budytalk/activity-server\n```\n\n## 🚀 Quick Start\n\n### Instant Setup (No Database Configuration!)\n\n```javascript\nconst { BudyTalkContent } = require('@budytalk/activity-server');\n\nasync function main() {\n  // Create instance - database connection is built-in!\n  const budytalk = new BudyTalkContent();\n  \n  // Start server (automatically creates all tables)\n  await budytalk.start();\n  \n  console.log('✅ Server running with PostgreSQL!');\n  \n  // Start using immediately - no setup required!\n  const user = await budytalk.syncUserAccount({\n    userId: 'user_123',\n    username: 'alice',\n    displayName: 'Alice Johnson'\n  });\n  \n  const post = await budytalk.createPost({\n    userId: user.userId,\n    content: 'Hello world! 🎉',\n    postType: 'text'\n  });\n  \n  console.log('🎉 Ready to use!');\n}\n\nmain().catch(console.error);\n```\n\n### Custom Database (Optional)\n\n```javascript\nconst { BudyTalkContent } = require('@budytalk/activity-server');\n\n// Only if you want to use your own database\nconst budytalk = new BudyTalkContent({\n  database: {\n    type: 'postgres',\n    url: 'your-database-url'\n  }\n});\n\nawait budytalk.start(); // Still handles table creation automatically\n```\n\n## 📱 Complete Example\n\n```javascript\nconst { BudyTalkContent } = require('@budytalk/activity-server');\n\nasync function socialMediaExample() {\n  // Initialize with built-in database\n  const budytalk = new BudyTalkContent();\n  await budytalk.start();\n  \n  // Sync user accounts from your main system\n  const alice = await budytalk.syncUserAccount({\n    userId: 'user_123',\n    username: 'alice',\n    displayName: 'Alice Johnson',\n    avatar: 'https://example.com/alice.jpg'\n  });\n  \n  const bob = await budytalk.syncUserAccount({\n    userId: 'user_456',\n    username: 'bob',\n    displayName: 'Bob Smith'\n  });\n  \n  // Bob follows Alice\n  await budytalk.followUser(bob.userId, alice.userId);\n  \n  // Alice creates posts\n  const textPost = await budytalk.createPost({\n    userId: alice.userId,\n    content: 'Hello everyone! 🎉',\n    postType: 'text',\n    hashtags: ['#hello', '#social'],\n    mentions: ['@bob']\n  });\n  \n  const pollPost = await budytalk.createPost({\n    userId: alice.userId,\n    content: 'What\\'s your favorite feature?',\n    postType: 'poll',\n    poll: {\n      question: 'What\\'s your favorite feature?',\n      options: [\n        { text: 'Timeline' },\n        { text: 'Reactions' },\n        { text: 'Comments' },\n        { text: 'Polls' }\n      ],\n      settings: {\n        allowMultipleChoices: false,\n        showResults: 'after_vote',\n        duration: 24\n      }\n    }\n  });\n  \n  // Bob interacts with posts\n  await budytalk.likePost(bob.userId, textPost.id);\n  \n  await budytalk.commentOnPost({\n    userId: bob.userId,\n    postId: textPost.id,\n    content: 'Great post! 👏',\n    mentions: ['@alice']\n  });\n  \n  // Vote on poll\n  if (pollPost.poll) {\n    const timelineOption = pollPost.poll.options.find(opt => opt.text === 'Timeline');\n    await budytalk.voteOnPoll({\n      userId: bob.userId,\n      pollId: pollPost.poll.id,\n      optionIds: [timelineOption.id]\n    });\n  }\n  \n  // Bookmark post\n  await budytalk.bookmarkPost({\n    userId: bob.userId,\n    postId: textPost.id,\n    collectionName: 'Favorites',\n    notes: 'Great inspiration!'\n  });\n  \n  // Get Bob's timeline (posts from followed users)\n  const timeline = await budytalk.getTimeline(bob.userId);\n  console.log(`Bob's timeline: ${timeline.length} posts`);\n  \n  // Get trending posts\n  const trending = await budytalk.getTrendingPosts(10, 24);\n  console.log(`Trending: ${trending.length} posts`);\n}\n\nsocialMediaExample().catch(console.error);\n```\n\n## 🌐 REST API\n\nThe server automatically provides a complete REST API:\n\n### Posts\n\n```bash\n# Create post\nPOST /api/content/posts\n{\n  \"userId\": \"user_123\",\n  \"content\": \"Hello world!\",\n  \"postType\": \"text\",\n  \"hashtags\": [\"#hello\"]\n}\n\n# Create poll\nPOST /api/content/posts\n{\n  \"userId\": \"user_123\",\n  \"content\": \"What's your favorite?\",\n  \"postType\": \"poll\",\n  \"poll\": {\n    \"question\": \"What's your favorite?\",\n    \"options\": [{\"text\": \"Option 1\"}, {\"text\": \"Option 2\"}]\n  }\n}\n```\n\n### Reactions\n\n```bash\n# Like post\nPOST /api/content/reactions\n{\n  \"userId\": \"user_456\",\n  \"type\": \"like\",\n  \"postId\": \"post_123\"\n}\n\n# Unlike (remove reaction)\nDELETE /api/content/reactions/{reactionId}\n{\n  \"userId\": \"user_456\"\n}\n```\n\n### Comments\n\n```bash\n# Add comment\nPOST /api/content/comments\n{\n  \"userId\": \"user_456\",\n  \"postId\": \"post_123\",\n  \"content\": \"Great post!\",\n  \"mentions\": [\"@alice\"]\n}\n\n# Delete comment\nDELETE /api/content/comments/{commentId}\n{\n  \"userId\": \"user_456\"\n}\n```\n\n### Bookmarks\n\n```bash\n# Bookmark post\nPOST /api/content/bookmarks\n{\n  \"userId\": \"user_456\",\n  \"postId\": \"post_123\",\n  \"collectionName\": \"Favorites\",\n  \"notes\": \"Great inspiration\"\n}\n\n# Get bookmarks\nGET /api/content/users/{userId}/bookmarks?collection=Favorites\n```\n\n### Timelines\n\n```bash\n# Get user's timeline (from followed users)\nGET /api/content/users/{userId}/timeline?limit=20\n\n# Get user's own posts\nGET /api/content/users/{userId}/feed?limit=20\n\n# Get trending posts\nGET /api/content/trending?limit=20&timeframe=24\n```\n\n## 🔌 Real-time WebSocket\n\n```javascript\nconst io = require('socket.io-client');\n\nconst socket = io('http://localhost:3000', {\n  query: { userId: 'user_123' }\n});\n\n// Listen for new posts\nsocket.on('new-post', (post) => {\n  console.log('New post:', post);\n});\n\n// Listen for reactions\nsocket.on('new-reaction', (reaction) => {\n  console.log('New reaction:', reaction);\n});\n\n// Listen for comments\nsocket.on('new-comment', (comment) => {\n  console.log('New comment:', comment);\n});\n\n// Join hashtag topics\nsocket.emit('join-topic', 'javascript');\nsocket.on('new-post-in-topic', (data) => {\n  console.log(`New #${data.topic} post:`, data.post);\n});\n```\n\n## ⚙️ Configuration (Optional)\n\n```javascript\nconst budytalk = new BudyTalkContent({\n  port: 3000,\n  database: {\n    type: 'postgres', // Built-in Neon PostgreSQL by default\n    url: 'your-custom-database-url' // Optional\n  },\n  websocket: {\n    enabled: true,\n    cors: {\n      origin: ['http://localhost:3000'],\n      credentials: true\n    }\n  },\n  cors: {\n    origin: ['http://localhost:3000'],\n    credentials: true\n  },\n  logging: {\n    level: 'info',\n    format: 'simple'\n  }\n});\n```\n\n## 🧪 Testing\n\n### Quick Test\n\n```bash\n# Start the server\nnode -e \"\nconst { BudyTalkContent } = require('@budytalk/activity-server');\nconst budytalk = new BudyTalkContent();\nbudytalk.start().then(() => console.log('✅ Server running!'));\n\"\n\n# Test the API\ncurl -X POST http://localhost:3000/api/content/users \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"userId\":\"test\",\"username\":\"test\",\"displayName\":\"Test User\"}'\n```\n\n### Run Examples\n\n```bash\n# Test basic functionality\nnpm run test:simple\n\n# Test with built-in PostgreSQL\nnpm run test:postgres\n\n# Test API endpoints\nnpm run test:api\n\n# Test bookmark functionality\nnpm run test:bookmarks\n```\n\n## 🏗️ Integration with Your App\n\n### 1. Sync User Accounts\n\n```javascript\n// When users register in your main system\nasync function onUserRegistered(user) {\n  await budytalk.syncUserAccount({\n    userId: user.id,\n    username: user.username,\n    displayName: user.displayName,\n    avatar: user.avatar\n  });\n}\n```\n\n### 2. Frontend Integration\n\n```javascript\n// React example\nimport { useState, useEffect } from 'react';\nimport io from 'socket.io-client';\n\nfunction Timeline({ userId }) {\n  const [posts, setPosts] = useState([]);\n  const [socket, setSocket] = useState(null);\n\n  useEffect(() => {\n    // Connect to WebSocket\n    const newSocket = io('http://localhost:3000', {\n      query: { userId }\n    });\n\n    newSocket.on('new-post', (post) => {\n      setPosts(prev => [post, ...prev]);\n    });\n\n    newSocket.on('new-reaction', (reaction) => {\n      setPosts(prev => prev.map(post => \n        post.id === reaction.postId \n          ? { ...post, reactionCounts: { ...post.reactionCounts, [reaction.type]: (post.reactionCounts[reaction.type] || 0) + 1 } }\n          : post\n      ));\n    });\n\n    setSocket(newSocket);\n\n    // Load initial timeline\n    fetch(`/api/content/users/${userId}/timeline`)\n      .then(res => res.json())\n      .then(setPosts);\n\n    return () => newSocket.close();\n  }, [userId]);\n\n  const handleLike = async (postId) => {\n    await fetch('/api/content/reactions', {\n      method: 'POST',\n      headers: { 'Content-Type': 'application/json' },\n      body: JSON.stringify({\n        userId,\n        type: 'like',\n        postId\n      })\n    });\n  };\n\n  return (\n    <div>\n      {posts.map(post => (\n        <PostComponent \n          key={post.id} \n          post={post} \n          onLike={() => handleLike(post.id)}\n        />\n      ))}\n    </div>\n  );\n}\n```\n\n## 📊 Database Schema\n\nThe package automatically creates these tables in PostgreSQL:\n\n- **user_accounts**: Synced user information\n- **posts**: All posts with metadata\n- **reactions**: Likes, loves, etc.\n- **comments**: Comments and replies\n- **bookmarks**: User bookmarks with collections\n- **polls**: Poll questions and votes\n- **follows**: Following relationships\n- **timeline_entries**: Personalized timelines\n\n## 🚀 Production Deployment\n\n### Docker\n\n```dockerfile\nFROM node:18-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --production\nCOPY . .\nEXPOSE 3000\nCMD [\"node\", \"initialize-neon.js\"]\n```\n\n### Environment Variables (Optional)\n\n```bash\nPORT=3000\nLOG_LEVEL=info\nCORS_ORIGIN=https://yourapp.com\nWEBSOCKET_ENABLED=true\n```\n\n## 🎯 Why Choose BudyTalkContent?\n\n✅ **Zero Setup**: No database configuration required - works out of the box  \n✅ **Focused**: Only handles content, not user management  \n✅ **Simple**: Easy REST API and JavaScript SDK  \n✅ **Real-time**: WebSocket support for live updates  \n✅ **Scalable**: Built-in PostgreSQL for production use  \n✅ **Feature-rich**: Posts, reactions, comments, retweets, bookmarks, polls  \n✅ **Production-ready**: TypeScript, error handling, logging  \n✅ **Flexible**: Works with any user management system  \n✅ **Complete CRUD**: Full create, read, update, delete operations  \n✅ **Automatic**: Database tables created automatically  \n\nPerfect for adding social features to existing applications without any database setup complexity!\n\n## 📄 License\n\nMIT License - see LICENSE file for details\n\n---\n\n**Ready to add powerful social features to your app? Get started with BudyTalkContent today! 🚀**\n\n### No Database Setup Required!\n\nJust install, import, and start using - the database connection and table creation is handled automatically by the package. Perfect for rapid prototyping and production use!","readmeFilename":"README.md"}