{"_id":"@aikeytake/social-automation","_rev":"11-976ef1eb333e9a8c546ace7a4a2b7ebe","name":"@aikeytake/social-automation","dist-tags":{"latest":"2.1.0"},"versions":{"2.0.0":{"name":"@aikeytake/social-automation","version":"2.0.0","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.0","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"11098d03320c46cc77ee122b321646e9ad0a8907","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.0.tgz","fileCount":25,"integrity":"sha512-T8N8EiXdFVNfIRJueUKUs2CawNf3S69zRr9HfrSkZknNhlw2P2v66A5c+7pHrxG0WIY2dAi3fQCInku66mvHqA==","signatures":[{"sig":"MEUCID19GSI4ZwBLWIcNONAnjh6+JoxahJ1nNxWSkWdzi5YtAiEAyIOpxnA4u1mLGpOBto1SeKkZjPty5qoEjoml8MtboHc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189246},"main":"src/index.js","type":"module","gitHead":"6bb458b833076b66149628425a47e6d5e3fadcd2","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","playwright":"^1.58.2","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.0_1776004113596_0.15861674409833215","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@aikeytake/social-automation","version":"2.0.1","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.1","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"6f296bef32f873bb277c641301300689d7257fbd","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.1.tgz","fileCount":25,"integrity":"sha512-qG1Qqd6nkr0atEvy6Ugnqs+Yd9Em4CE6hoTQ7iEPyVoGDaRcS0FhFKr3BtkSbBvIfAD04UXCXj4I9lh0Pn1Ynw==","signatures":[{"sig":"MEYCIQCnsD6pjdd+skxbQaw/S/xNSJIbfBReg1TmTaksQofWiAIhAMZDHr3sgWUR/CSVuBZ0sKz63zp2Ceu7oIU+rQGD1984","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189343},"main":"src/index.js","type":"module","gitHead":"830afd56030052b22d68ca7cdc6c939fbf2e9392","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","playwright":"^1.58.2","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.1_1776005099907_0.18019802726372092","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@aikeytake/social-automation","version":"2.0.2","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.2","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"950dd79dd42915e66b44c3c0805cbbed48259caa","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.2.tgz","fileCount":22,"integrity":"sha512-/zyGbmKKyu5T5TxVa4UphLTUGwgB1DzwBfcvZKaPlQUD7BtA6FAhJwjbcALOzjht/yEPWpONOna7vWu2sABrZg==","signatures":[{"sig":"MEQCIBlORf4bglviNVclgJGUKiX7xBAco9bPqXsQFcecWBQEAiBRrIC9w5/Er570wyHexsVzutvjfLK0oIFSzau8B3vOow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161197},"main":"src/index.js","type":"module","gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.2_1776005233813_0.8797680882478776","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@aikeytake/social-automation","version":"2.0.3","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.3","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"7acf718d0c2c42cfd30c4a84ebc5b1721ec5af55","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.3.tgz","fileCount":22,"integrity":"sha512-lR9n1tUDAPyjjLEEoKFlDyE4OCni8B8G4KzbHDdwEnWeey2w4oU+t++rA72nCiMw5uLub8AwrFd8Xf3gMFZ42A==","signatures":[{"sig":"MEUCIQCRFIfYkE+fuYYC6NCJXKtTefQa2/6Wcw7QkUHtNvdyhAIgI1DvUkTRiFBiuyOtrsicgkB7oDsWfkP0+xwlTCYR2fc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161391},"main":"src/index.js","type":"module","gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.3_1776005560469_0.7029010350753542","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@aikeytake/social-automation","version":"2.0.4","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.4","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"21d627441b4cffffabac623b574b6473471ae7f9","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.4.tgz","fileCount":22,"integrity":"sha512-OGTo0xiB3A62+hq46MFE1fU/Bb7mhBRD6o9QRG2JxXBrYFN0/QYVeguI0zBAZAp1kJu2yc+bB2Dq5jKmiA9nvg==","signatures":[{"sig":"MEQCIE/seqX5ZfTzPovIEFhBQdbpIitBYcM8yuqJbnTUYU7uAiAsU9iqhXjycU4Px/xltelbCY7Azt2PuREFLtrUQIPgbg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161652},"main":"src/index.js","type":"module","gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.4_1776006062584_0.6081032599902583","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"@aikeytake/social-automation","version":"2.0.5","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.5","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"97429346af93f82120986acf58dade4465a9f6e5","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.5.tgz","fileCount":22,"integrity":"sha512-sEo57P2D3RToY9JF4Rqw+DB50TTj0/DsImIpJJg9vJVMoYsaWDH7p0C+b59jcZRqweua4es/EfbbxY39rbw91g==","signatures":[{"sig":"MEUCIHdRBbFJ9RyaYvJk8PoTqkBuDroaCPauIh69m17xkbCHAiEAmDyDmrNaRGdW6U7uLY21SaxHDQ2FpsAPsme4V1TrWiM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161477},"main":"src/index.js","type":"module","gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0","@aikeytake/social-automation":"2.0.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.5_1776006305493_0.8309985616182896","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"@aikeytake/social-automation","version":"2.0.6","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.6","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"ea9ce1d712503a9f4e12cd462292f1f600185120","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.6.tgz","fileCount":22,"integrity":"sha512-InoLixNWlw710ktoACj5ajrIHqLmTMmYv6lJAw52RRMTNiVp173xCICUcyoAtWE0dCGcMq4EBs1B9LFCAQBs/g==","signatures":[{"sig":"MEUCIE+HHwKm672DGufdnlo3ctJ63GPzjUJI+NMUnIABaF4nAiEAkIxsKBzYp9QtAv5tC8l2WSWwYIFCHaOhvZo0l2GlyKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162267},"main":"src/index.js","type":"module","gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0","@aikeytake/social-automation":"2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.6_1776006670409_0.5097348441142153","host":"s3://npm-registry-packages-npm-production"}},"2.0.7":{"name":"@aikeytake/social-automation","version":"2.0.7","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.7","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"72188353d00a7fe776371168b53df1ac3af28c98","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.7.tgz","fileCount":22,"integrity":"sha512-bs0fuXcvc7+7dn1Xg40vhd2uhz8sjhD5Xo/hiFLRqQuAs/pvqxQjd9EyjE6CeWwE3KkrQdC59NDsgRh9nXgfQg==","signatures":[{"sig":"MEUCIFlMj4gfztglhQdGPHDV0URK2P/pNngVaDvH37ShGZCXAiEAt7dg3N1W/sQViz8hGCsDUJrQYaiRc9c9Csh/YoBkSjU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162481},"main":"src/index.js","type":"module","gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0","@aikeytake/social-automation":"2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.7_1776006764513_0.4900536312065866","host":"s3://npm-registry-packages-npm-production"}},"2.0.8":{"name":"@aikeytake/social-automation","version":"2.0.8","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.8","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"478d6ecc1bb180ad7a1a47339e8b2da0c88a6ce8","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.8.tgz","fileCount":22,"integrity":"sha512-Z+HnibDhsqyntGpkXkkaVxDhkml0lB3k4jN4dkxiwGd2mNBR956L4NRQv++mHVIDxlKJ+AmZvBJJ0+Jj1FhLoQ==","signatures":[{"sig":"MEUCIG8d9PNPVAhcA5IRhlAoPbQJCedhwlKh5tH/Tr9fxLbeAiEAs8Na91DeRe4UE02dHz6yYBSYXOdKknutDR+XE5ob1F8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162361},"main":"src/index.js","type":"module","gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0","@aikeytake/social-automation":"2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.8_1776006841938_0.7505541740976176","host":"s3://npm-registry-packages-npm-production"}},"2.0.9":{"name":"@aikeytake/social-automation","version":"2.0.9","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","_id":"@aikeytake/social-automation@2.0.9","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"dist":{"shasum":"2a1e6543805252b45f40e88ca84d98cf6a80598b","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.0.9.tgz","fileCount":22,"integrity":"sha512-lrQvRgrcdW3G/yRlkJkEcecHJPo036/pWsNf6UiTdt7pAvKlkNeJYKxX8wuGh5AxMluG+QQvPt2fmHdFuYw88g==","signatures":[{"sig":"MEUCICBEv5fQb2wRADQ4r9xeo3KCWn1xy5VQn9PrwMNWHf/6AiEAzZ/+e2ALqoi2cZqoksE99DTmTfMOTx6qGDkgaGMOtMc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":162433},"main":"src/index.js","type":"module","gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","scripts":{"test":"node src/test.js","query":"node src/query.js","queue":"node src/cli.js queue","start":"node src/index.js scrape","scrape":"node src/index.js scrape","test:twitter":"node src/test/twitter.js","setup:twitter":"node src/setup/twitter-login.js","test:linkedin":"node src/test/linkedin.js"},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"_npmVersion":"11.6.3","description":"Content research and aggregation tool for AI agents","directories":{},"_nodeVersion":"22.21.1","dependencies":{"axios":"^1.7.9","dotenv":"^16.4.7","cheerio":"^1.0.0","rss-parser":"^3.13.0","@supabase/supabase-js":"^2.47.0","@aikeytake/social-automation":"2.0.5"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.13.5"},"_npmOperationalInternal":{"tmp":"tmp/social-automation_2.0.9_1776007050831_0.7241588568822501","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@aikeytake/social-automation","version":"2.1.0","description":"Content research and aggregation tool for AI agents","main":"src/index.js","type":"module","scripts":{"start":"node src/index.js scrape","scrape":"node src/index.js scrape","query":"node src/query.js","queue":"node src/cli.js queue","test":"node src/test.js","setup:twitter":"node src/setup/twitter-login.js","test:twitter":"node src/test/twitter.js","test:linkedin":"node src/test/linkedin.js"},"keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"author":{"name":"aikeytake"},"license":"MIT","dependencies":{"@aikeytake/social-automation":"2.0.5","@supabase/supabase-js":"^2.47.0","axios":"^1.7.9","cheerio":"^1.0.0","dotenv":"^16.4.7","rss-parser":"^3.13.0"},"devDependencies":{"@types/node":"^22.13.5"},"gitHead":"5c02fbeb21c4781f64340178622a503d25a4b6b0","_id":"@aikeytake/social-automation@2.1.0","_nodeVersion":"22.21.1","_npmVersion":"11.6.3","dist":{"integrity":"sha512-MbGlQip8jrWMGTYLAESyatt5MaEsUZmQooYHHeFdPrezYtK6JAKs4XYFq2gkKi2MT92P9FQJ8GLq5HAzTmDSbw==","shasum":"be25cdfbd42b9bedd4f99a781ddff8cd9a10b489","tarball":"https://registry.npmjs.org/@aikeytake/social-automation/-/social-automation-2.1.0.tgz","fileCount":23,"unpackedSize":168351,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID5Z5KaUoDOee3CCJ2nSfTJ2CAKLp5N3C7XCcSNcx6OhAiEA0JWDd8IWBY/AQgkkvypDOgDt5+8HyMB2mEM86/bTSTg="}]},"_npmUser":{"name":"aikeytake","email":"aikeytake@gmail.com"},"directories":{},"maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/social-automation_2.1.0_1776007374697_0.15471514578054335"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-12T14:28:33.483Z","modified":"2026-04-12T15:22:55.548Z","2.0.0":"2026-04-12T14:28:33.832Z","2.0.1":"2026-04-12T14:45:00.061Z","2.0.2":"2026-04-12T14:47:13.998Z","2.0.3":"2026-04-12T14:52:40.651Z","2.0.4":"2026-04-12T15:01:02.728Z","2.0.5":"2026-04-12T15:05:05.650Z","2.0.6":"2026-04-12T15:11:10.572Z","2.0.7":"2026-04-12T15:12:44.650Z","2.0.8":"2026-04-12T15:14:02.095Z","2.0.9":"2026-04-12T15:17:31.033Z","2.1.0":"2026-04-12T15:22:54.869Z"},"author":{"name":"aikeytake"},"license":"MIT","keywords":["social-media","content-aggregation","ai","research-tool","agent-tool"],"description":"Content research and aggregation tool for AI agents","maintainers":[{"name":"aikeytake","email":"aikeytake@gmail.com"}],"readme":"# Social Automation — Content Research Tool\n\nContent aggregation tool that scrapes AI news from multiple sources and stores structured JSON for AI agents to consume.\n\n## What It Does\n\n- Scrapes **17 RSS feeds** (TechCrunch, OpenAI, Anthropic, Claude Blog, Google AI, DeepMind, HuggingFace, arXiv, and more)\n- Scrapes **Reddit** (7 AI subreddits, top posts with 100+ upvotes)\n- Scrapes **Hacker News** (AI-related stories with 50+ points)\n- Scrapes **LinkedIn KOL posts** via BrightData SERP (top 20 KOLs from your list)\n- Outputs a `trending.json` with the top 20 ranked items\n- Everything saved as structured JSON for AI agents\n\n## Quick Start\n\n```bash\ncd /home/vankhoa/projects/social-automation\nnpm install\nnpm run scrape\n```\n\n## The Only Command You Need\n\n```bash\nnpm run scrape\n```\n\nOutput saved to `data/YYYY-MM-DD/`:\n\n| File | Contents |\n|------|----------|\n| `all.json` | All items from all sources combined |\n| `trending.json` | Top 20 items ranked by engagement score |\n| `rss.json` | All RSS feed items |\n| `reddit.json` | All Reddit posts |\n| `hackernews.json` | All Hacker News stories |\n| `linkedin.json` | LinkedIn KOL posts via BrightData |\n\n## Project Structure\n\n```\nsocial-automation/\n├── src/\n│   ├── fetchers/\n│   │   ├── rss.js          # 17 RSS feeds\n│   │   ├── reddit.js       # 7 AI subreddits\n│   │   ├── hackernews.js   # HN top stories\n│   │   └── linkedin.js     # LinkedIn KOL posts via BrightData SERP\n│   ├── utils/\n│   │   └── logger.js\n│   ├── cli.js\n│   └── index.js            # Main scraper\n├── config/\n│   └── sources.json        # All source configuration\n├── data/\n│   └── YYYY-MM-DD/         # Daily scraped output\n├── .env                    # API keys\n└── package.json\n```\n\n## Configuration\n\n### Environment Variables (`.env`)\n\nAlready configured. Key variables:\n\n```bash\nBRIGHTDATA_API_KEY=...        # Used for LinkedIn KOL scraping\nBRIGHTDATA_ZONE=mcp_unlocker  # BrightData zone\nANTHROPIC_API_KEY=...         # Claude API (for future AI processing)\n```\n\n### Sources (`config/sources.json`)\n\n**RSS Feeds (17 sources):**\n- TechCrunch AI, The Gradient, MIT Technology Review AI\n- OpenAI Blog, Anthropic Blog, **Claude Blog**\n- Google AI Blog, DeepMind Blog, Hugging Face Blog\n- Meta Engineering, Netflix Tech Blog, AWS ML Blog\n- Microsoft AI Blog, NVIDIA Blog, LinkedIn Engineering\n- arXiv AI (cs.AI), arXiv Machine Learning (cs.LG)\n\n**Reddit:** MachineLearning, artificial, ArtificialIntelligence, deeplearning, OpenAI, LocalLLaMA, singularity\n\n**Hacker News:** keyword-filtered (AI, LLM, GPT, Anthropic, etc.), 50+ points\n\n**LinkedIn:** top 20 KOLs from `workspace/marketing/linkedin_kol_clean.json`, scraped via BrightData SERP\n\n### Adding an RSS Feed\n\nEdit `config/sources.json`:\n\n```json\n{\n  \"rssFeeds\": [\n    {\n      \"name\": \"My Blog\",\n      \"url\": \"https://example.com/feed.xml\",\n      \"category\": \"ai-news\",\n      \"enabled\": true\n    }\n  ]\n}\n```\n\n### Adjusting LinkedIn KOL Limit\n\nEdit `config/sources.json`:\n\n```json\n{\n  \"linkedin\": {\n    \"limit\": 20\n  }\n}\n```\n\n## Reading the Data\n\n```bash\n# View today's trending items\ncat data/$(date +%Y-%m-%d)/trending.json | jq '.items[] | {rank, title, score}'\n\n# View all items from a specific source\ncat data/$(date +%Y-%m-%d)/all.json | jq '[.items[] | select(.source == \"reddit\")]'\n\n# Search by keyword\ncat data/$(date +%Y-%m-%d)/all.json | jq '[.items[] | select(.title | contains(\"GPT\"))]'\n\n# View LinkedIn KOL posts\ncat data/$(date +%Y-%m-%d)/linkedin.json | jq '.items[]'\n```\n\n## Using with AI Agents\n\nPoint the agent at today's data folder:\n\n```\nRead data/$(date +%Y-%m-%d)/trending.json and create a LinkedIn post about the top trending AI story.\n```\n\nOr for deeper research:\n\n```\nRead data/$(date +%Y-%m-%d)/all.json and summarize the most important AI developments from the last 24 hours.\n```\n\n## Browser-Based Sources (Twitter/X & LinkedIn Browser)\n\nTwo sources use a real Chrome browser via Playwright to scrape without an API: **Twitter/X** and **LinkedIn Browser**. They share the same browser profile stored at `data/playwright-profile/`.\n\n### One-Time Setup\n\nRun the setup script once to log in and save the browser session:\n\n```bash\nnpm run setup:twitter\n```\n\nThis opens a real Chrome window. **Log in to both X and LinkedIn** in that window (they share the same profile). Once you're logged in to both, close the window — the session is saved automatically.\n\n> ⚠️ Use a **dedicated scraping account**, not your personal account. Sessions last several weeks. Re-run `npm run setup:twitter` when you see auth errors.\n\n---\n\n### Twitter / X\n\n**Enable in `config/sources.json`:**\n\n```json\n\"trendingSources\": {\n  \"twitter\": {\n    \"enabled\": true,\n    \"accounts\": [\"AndrewYNg\", \"ylecun\", \"OpenAI\", \"AnthropicAI\", \"karpathy\"],\n    \"minLikes\": 100,\n    \"maxTweetsPerAccount\": 5,\n    \"maxAgeHours\": 24,\n    \"delayBetweenAccountsMs\": 3000\n  }\n}\n```\n\n**Config options:**\n\n| Key | Description | Default |\n|-----|-------------|---------|\n| `accounts` | X handles to scrape (without `@`) | `[]` |\n| `minLikes` | Skip tweets below this like count | `0` |\n| `maxTweetsPerAccount` | Max tweets to fetch per account | `10` |\n| `maxAgeHours` | Only include tweets from last N hours | `24` |\n| `delayBetweenAccountsMs` | Base delay between accounts (ms) | `3000` |\n\n**Run:**\n\n```bash\nnpm run test:twitter   # isolated test, prints results, no files written\nnpm run scrape         # full pipeline\n```\n\n**How it works:**\n- Visits X home feed first, then searches for each account via the search box\n- Clicks the matching result to navigate to the profile\n- Scrolls the timeline and extracts top N tweets\n- Applies a random 20–30s delay between accounts to avoid rate limiting\n- Account visit order is randomised each run\n\n---\n\n### LinkedIn Browser\n\nScrapes posts from LinkedIn profiles using direct URL navigation to their recent activity page.\n\n**Enable in `config/sources.json`:**\n\n```json\n\"linkedin_browser\": {\n  \"enabled\": true,\n  \"accounts\": [\"julienchaumond\", \"another-slug\"],\n  \"maxPostsPerAccount\": 5,\n  \"maxAgeHours\": 48,\n  \"delayBetweenAccountsMs\": 10000\n}\n```\n\nThe `accounts` value is the LinkedIn profile slug — the part after `linkedin.com/in/`.\n\n**Config options:**\n\n| Key | Description | Default |\n|-----|-------------|---------|\n| `accounts` | LinkedIn profile slugs to scrape | `[]` |\n| `maxPostsPerAccount` | Max posts to fetch per account | `5` |\n| `maxAgeHours` | Only include posts from last N hours | `48` |\n| `delayBetweenAccountsMs` | Base delay between accounts (ms) | `10000` |\n\n**Run:**\n\n```bash\nnpm run test:linkedin   # isolated test, prints results, no files written\nnpm run scrape          # full pipeline\n```\n\n**How it works:**\n- Navigates directly to `linkedin.com/in/{slug}/recent-activity/all/`\n- Scrolls to load posts, extracts text, reactions, comments, and time\n- Post URL is constructed from LinkedIn's `data-urn` attribute\n- Account visit order is randomised each run\n\n---\n\n### Output files\n\n| File | Source |\n|------|--------|\n| `data/YYYY-MM-DD/twitter.json` | Twitter/X posts |\n| `data/YYYY-MM-DD/linkedin_browser.json` | LinkedIn browser posts |\n\nBoth sources feed into `all.json` and `trending.json` automatically.\n\n---\n\n## Troubleshooting\n\n**LinkedIn returns 0 items:**\n- Check logs for BrightData errors: `cat logs/*.log | grep -i linkedin`\n- Confirm the KOL file exists: `ls /home/vankhoa/projects/aikeytake/workspace/marketing/linkedin_kol_clean.json`\n- The BrightData zone `mcp_unlocker` must exist in your BrightData account\n\n**RSS feed fails:**\n- Some feeds go down temporarily — the scraper skips them and continues\n- Check logs in `logs/` for specific feed errors\n\n**No data for today:**\n```bash\n# Run the scraper\nnpm run scrape\n\n# Check if data folder was created\nls data/$(date +%Y-%m-%d)/\n```\n","readmeFilename":"README.md"}