{"_id":"tumblr","_rev":"30-b128a140c6d27b7339d5bdc9a7b6e25b","name":"tumblr","dist-tags":{"latest":"1.0.0"},"versions":{"0.0.1":{"name":"tumblr","version":"0.0.1","author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"_id":"tumblr@0.0.1","homepage":"http://github.com/meritt/node-tumblr","dist":{"shasum":"5dea6bac12d40116bf2b9b99a75dd528375b4d0e","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.0.1.tgz","integrity":"sha512-8Gyienrv7RbIW14MKlkFqhILfo6njCU7KvZGZ6z9cl9x/7mNxu1/2qxb+5AxniKUwHTxE5qbPUegAWVTjnuTYg==","signatures":[{"sig":"MEUCIQDb7ZvJOPZrSqhYP6+GZfyvVQk4cNpYdQGNMBEWl8uOdwIgDkvsv32ezBpCnKB+f2y4v8b3uToy2Zp8EtAnoiE2tjI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/tumblr","engine":["node >=0.4.0"],"engines":{"node":"*"},"scripts":{},"repository":{"url":"git://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.0.22","description":"Wrapper for the Tumblr API","directories":{},"_nodeVersion":"v0.4.10","_npmJsonOpts":{"file":"/Users/simonenko/.npm/tumblr/0.0.1/package/package.json","wscript":false,"serverjs":false,"contributors":false},"dependencies":{"request":">=1.9.8"},"_defaultsLoaded":true,"devDependencies":{"coffee-script":">= 1.0.0"},"_engineSupported":true},"0.0.2":{"name":"tumblr","version":"0.0.2","keywords":["blog","tumblr","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"_id":"tumblr@0.0.2","homepage":"http://github.com/meritt/node-tumblr","dist":{"shasum":"da5c579261ecfa63f6ee4fd84360f33093baea87","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.0.2.tgz","integrity":"sha512-XiF9RGW0T0hK9q2LNmVDNeMARpQJGBKsFS3h9QGDrw/Y758bfMjM2KTzjliZWxQwtWG008OuwYcGnVPg5vtWpQ==","signatures":[{"sig":"MEUCIQCFbslfWEEt5JYJP1BTf3KBa/ygxr51cSwyygWexXu9YwIgRT69BZuOnBf+5DKmYRaYv5/dfajQW0F6c+364YPCkxU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/tumblr","engines":{"node":">= 0.4.0"},"scripts":{},"repository":{"url":"git://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.0.22","description":"Wrapper for the Tumblr API v2","directories":{},"_nodeVersion":"v0.4.10","_npmJsonOpts":{"file":"/Users/simonenko/.npm/tumblr/0.0.2/package/package.json","wscript":false,"serverjs":false,"contributors":false},"dependencies":{"request":">=1.9.8"},"_defaultsLoaded":true,"devDependencies":{"coffee-script":">= 1.0.0"},"_engineSupported":true},"0.0.3":{"name":"tumblr","version":"0.0.3","keywords":["blog","tumblr","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"_id":"tumblr@0.0.3","homepage":"http://go.simonenko.su/node-tumblr","dist":{"shasum":"e3b1e051e18045a1368e636eea0e5c3c1127222f","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.0.3.tgz","integrity":"sha512-Cqh1WnIeWrJ6m5FC+47778XCzTE0yZCn7ZkiBbs+6tRdYzUPwFRjxkhE/PMqp9m7Tu1d9jVwVkf6wPKkGkhgOg==","signatures":[{"sig":"MEUCIAt0SvPyMPlRjzn17Em3c103FJzyDGiiGAxLMrHTIxONAiEA3SZVMIKHzVUWaLIGnRTqurZhrbAcFxuBq8C1dCTejAs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/tumblr","engines":{"node":">= 0.4.0"},"scripts":{},"repository":{"url":"git://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.0.22","description":"Wrapper for the Tumblr API v2","directories":{},"_nodeVersion":"v0.4.10","_npmJsonOpts":{"file":"/Users/simonenko/.npm/tumblr/0.0.3/package/package.json","wscript":false,"serverjs":false,"contributors":false},"dependencies":{"request":">=1.9.8"},"_defaultsLoaded":true,"devDependencies":{"coffee-script":">= 1.0.0"},"_engineSupported":true},"0.0.4":{"name":"tumblr","version":"0.0.4","keywords":["blog","tumblr","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"_id":"tumblr@0.0.4","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"homepage":"http://go.simonenko.su/node-tumblr","dist":{"shasum":"ea2ebf8f7e646c7dd7eaca2f09f275b9a4657f31","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.0.4.tgz","integrity":"sha512-/AGv/G37YLUFT5IYzzwpTDN0ASsRV3NiUmD7HArAtbh7bdSfaZjO+oDAJrrMUAPqp4yt6Ojjgj1uwjdsq0iwfA==","signatures":[{"sig":"MEYCIQDrJYXYkSduFjZsoSccjDWsqReHqRAlq2ug9sp3HFX7PQIhAON+ognujgtCbjZThcsuTujanrIv2nTkK699PdS2ROF2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/tumblr","engines":{"node":">= 0.4.0"},"scripts":{},"repository":{"url":"git://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.0.22","description":"Wrapper for the Tumblr API v2","directories":{},"_nodeVersion":"v0.4.10","_npmJsonOpts":{"file":"/Users/simonenko/.npm/tumblr/0.0.4/package/package.json","wscript":false,"serverjs":false,"contributors":false},"dependencies":{"request":">=1.9.8"},"_defaultsLoaded":true,"devDependencies":{"coffee-script":">= 1.0.0"},"_engineSupported":true},"0.1.0":{"name":"tumblr","version":"0.1.0","keywords":["blog","tumblr","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"_id":"tumblr@0.1.0","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"homepage":"http://simonenko.su/projects/node-tumblr","dist":{"shasum":"c8710c676cd6a31a8d79d2d17e4f329448c90c3d","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.1.0.tgz","integrity":"sha512-eOxEWd96KJWk1fx9Ui+s22vjIr2GC0a+lVvxsWvKZ30Lkp8/YGK5IFlL9rUsLIsiRG6r15Bjx+Yg2p0kVX/LCg==","signatures":[{"sig":"MEUCICxrivJYg8r2/2V8PdItbhAzXLUgVU7AksNyMiYLXaHEAiEApjYV1ekyeklFA0Rlf+l8xR++PyW+z2aDLMyyRKsHbgs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/tumblr","engines":{"node":">=0.6.0 <0.9.0"},"_npmUser":{"name":"meritt","email":"alexey@simonenko.su"},"repository":{"url":"https://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.1.69","description":"A Node.JS wrapper for the Tumblr API v2","directories":{},"dependencies":{"request":"2.12.x"},"devDependencies":{"coffee-script":"1.4.x"}},"0.1.1":{"name":"tumblr","version":"0.1.1","keywords":["blog","tumblr","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"_id":"tumblr@0.1.1","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"homepage":"http://simonenko.su/projects/node-tumblr","dist":{"shasum":"bda8a11ecedc5d41f2a852564a0ef302e3cfa162","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.1.1.tgz","integrity":"sha512-xKzppOrXxq30W3F9GrZj5l4pWDgUg5ok580l4u7+yzz1UDW9VN9Y5R2x5ga+VTCO/2+rmJ/aqCP7KLrGzc8k4w==","signatures":[{"sig":"MEUCIC8pZRb9JeYy7mz40vzivBdda/yn4BMo+C/xmlraNPMVAiEA+KxGvDBvlhumMtfMwjSn523eNdK7pkton8JRrdQDaXM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/tumblr","_from":".","engines":{"node":">=0.8.0 <0.11.0"},"_npmUser":{"name":"meritt","email":"alexey@simonenko.su"},"repository":{"url":"https://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.2.14","description":"A Node.JS wrapper for the Tumblr API v2","directories":{},"dependencies":{"request":"2.14.x"},"devDependencies":{"coffee-script":"1.6.x"}},"0.2.0":{"name":"tumblr","version":"0.2.0","keywords":["blog","tumblr","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"_id":"tumblr@0.2.0","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"contributors":[{"url":"http://gregwym.info","name":"Greg Wang","email":"gregwym@qq.com"}],"homepage":"http://simonenko.su/projects/node-tumblr","bugs":{"url":"https://github.com/meritt/node-tumblr/issues"},"dist":{"shasum":"5cd670985d883a1d3ec6a5b27158f3a90d74aa74","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.2.0.tgz","integrity":"sha512-FIzqECf2oM+RsDYQdRrOtv1Iq+kLhgiQt0xFNdqT0zU4VxeTwcVl2+lP+W/bgtnr2AC2EZxK1s2TiTQKrTerSg==","signatures":[{"sig":"MEYCIQDqKFVcMOCMGqiPsL1lwXItgAjAwZPgxYalkYiy/0K9qAIhAMOkAohf2kAeyzFUTM7XQCrrwo8ZhtvJdb/blYYYlrtb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/index","_from":".","engines":{"npm":"1.2.x","node":"0.10.x"},"_npmUser":{"name":"meritt","email":"alexey@simonenko.su"},"repository":{"url":"https://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.2.32","description":"A Node.JS wrapper for the Tumblr API v2","directories":{},"dependencies":{"request":"2.x"},"devDependencies":{"nodeunit":"0.8.x","coffee-script":"1.6.x"}},"0.2.1":{"name":"tumblr","version":"0.2.1","keywords":["blog","tumblr","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"_id":"tumblr@0.2.1","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"contributors":[{"url":"http://gregwym.info","name":"Greg Wang","email":"gregwym@qq.com"}],"homepage":"http://simonenko.su/projects/node-tumblr","bugs":{"url":"https://github.com/meritt/node-tumblr/issues"},"dist":{"shasum":"68bd6a7e67832958a35391c595fb9495c50922e7","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.2.1.tgz","integrity":"sha512-7hmEbQEx7hxlKGaCeevs1JIKsVYx7xnm7k/Q8XvuoJLefzSGJnBwe7P05Q6OwdSu55gsG6q50SEbop5YFaAGGA==","signatures":[{"sig":"MEUCIQDhM4gR4zDACeARgNVUUrcUogHB5QaEEkjKIQnhwQWfVgIgb/m96DTkPQNDDjMOmMhSviWN2IzPdMI13gHm6IvkS5o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/index","_from":".","engines":{"npm":"1.2.x","node":"0.10.x"},"_npmUser":{"name":"meritt","email":"alexey@simonenko.su"},"repository":{"url":"https://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.2.32","description":"A Node.JS wrapper for the Tumblr API v2","directories":{},"dependencies":{"request":"2.x"},"devDependencies":{"nodeunit":"0.8.x","coffee-script":"1.6.x"}},"0.2.2":{"name":"tumblr","version":"0.2.2","keywords":["tumblr","blog","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"license":"MIT","_id":"tumblr@0.2.2","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"contributors":[{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},{"name":"Greg Wang","email":"gregwym@qq.com"}],"homepage":"http://simonenko.su/projects/node-tumblr","bugs":{"url":"https://github.com/meritt/node-tumblr/issues"},"dist":{"shasum":"f924e68ad5f120d3dec6860eb2a5686bcbd81722","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.2.2.tgz","integrity":"sha512-XpVqy0Yoyzmrvnb8Pi+GArv3QHzzb0YbIMtJDAxxGgfWWPICkw81Xne1MPv0x/APgQ1heLyOUB/8ARkTXAxR7Q==","signatures":[{"sig":"MEUCIQDTEhFPJBW1+TOtY5OyElloSlj7jLGSYKA3w0PBRlFmDQIgV3rn95TaPSUDZ8T65xMamWl5TIhyB89NwvOdYkLZ2N4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/index","_from":".","engines":{"node":"0.10.x"},"scripts":{"test":"nodeunit test"},"_npmUser":{"name":"meritt","email":"alexey@simonenko.su"},"repository":{"url":"https://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.3.21","description":"A node.js wrapper for the Tumblr API","directories":{},"dependencies":{"request":"2.x"},"devDependencies":{"nodeunit":"0.8.x","coffee-script":"1.6.x"}},"0.3.0":{"name":"tumblr","version":"0.3.0","keywords":["tumblr","blog","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"license":"MIT","_id":"tumblr@0.3.0","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"contributors":[{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},{"name":"Greg Wang","email":"gregwym@qq.com"}],"homepage":"http://simonenko.su/projects/node-tumblr","bugs":{"url":"https://github.com/meritt/node-tumblr/issues"},"dist":{"shasum":"ea0b16a6d5160e4012fefd6107fb04660871d329","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.3.0.tgz","integrity":"sha512-XoxFH4fIwdGjCNnIDxZasx49eVtLjMIViNnMFcBXABmuWBg6ky+LNJOSGD6j5/BFcARcfHHWgQ+c9WEjatR+fg==","signatures":[{"sig":"MEYCIQCwV3p+HwUpzgAWgbv1BhC2Mjod30J7JYa5pmCRSw95WwIhAIwaZB+qaSghNRdDqHabTGG4CS0FIpKCDGIVbm9RdBvf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/index","_from":".","engines":{"node":"~0.10"},"scripts":{"test":"nodeunit test"},"_npmUser":{"name":"meritt","email":"alexey@simonenko.su"},"repository":{"url":"https://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.3.17","description":"A wrapper for the Tumblr API","directories":{},"dependencies":{"request":"2.x"},"devDependencies":{"nodeunit":"0.8.x","coffee-script":"1.6.x"}},"0.4.0":{"name":"tumblr","version":"0.4.0","keywords":["tumblr","blog","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"license":"MIT","_id":"tumblr@0.4.0","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"contributors":[{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},{"name":"Greg Wang","email":"gregwym@qq.com"}],"homepage":"http://simonenko.su/projects/node-tumblr","bugs":{"url":"https://github.com/meritt/node-tumblr/issues"},"dist":{"shasum":"b635058ab84b3cb73b221e2401c1029d18d350dc","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.4.0.tgz","integrity":"sha512-RZs2BYWXbI1RZYL1tamY9CZRBsAYEGHapjLPeGp3tCxiZMPBDax28aM+3PKvToY1IcaTxA5p/DL3QCjDPq49/g==","signatures":[{"sig":"MEUCIQCTpvykZeTH/08lYr+mpy8iNapIHNJ9lrLdU1frXHru2AIgZtBgC8Yr82pTgyvR7qOaUBMLb2MC3cBSEc5VuVxDJIM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/index","_from":".","engines":{"node":"~0.10"},"scripts":{"test":"nodeunit test"},"_npmUser":{"name":"meritt","email":"alexey@simonenko.su"},"repository":{"url":"https://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.3.21","description":"A wrapper for the Tumblr API","dependencies":{"request":"2.x"},"devDependencies":{"nodeunit":"0.8.x","coffee-script":"1.6.x"},"directories":{}},"0.4.1":{"name":"tumblr","version":"0.4.1","keywords":["tumblr","blog","api","wrapper"],"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},"license":"MIT","_id":"tumblr@0.4.1","maintainers":[{"name":"meritt","email":"alexey@simonenko.su"}],"contributors":[{"name":"Alexey Simonenko","email":"alexey@simonenko.su"},{"name":"Greg Wang","email":"gregwym@qq.com"}],"homepage":"http://simonenko.su/projects/node-tumblr","bugs":{"url":"https://github.com/meritt/node-tumblr/issues"},"dist":{"shasum":"ac9f4ba7bd04525d6bd8b087f85553c8ef19dc9e","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-0.4.1.tgz","integrity":"sha512-MB/C4h4n43kq8SpHtwIL/DlUXJfTWR7lG9AUJVJsLeW38q0mTXHoHtlnAqt27CsLFZC864i9P508pRXW3fjkJA==","signatures":[{"sig":"MEUCIQDzx9s3HcMcHQJ8U/zplObqPeo44ejG/OYmYOtOsynZqgIgW4Q1KZFVBhpB2CBRu+hrXcKy6apDp+MSa3eWAEEqhik=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/index","_from":".","engines":{"node":">=0.10"},"scripts":{"test":"nodeunit test","build":"coffee -c -o lib/ src/"},"_npmUser":{"name":"meritt","email":"alexey@simonenko.su"},"repository":{"url":"https://github.com/meritt/node-tumblr.git","type":"git"},"_npmVersion":"1.4.3","description":"A wrapper for the Tumblr API","dependencies":{"request":"2.x"},"devDependencies":{"nodeunit":"0.8.x","coffee-script":"~1.7.1"},"directories":{}},"1.0.0":{"name":"tumblr","version":"1.0.0","description":"Wrapper for the Tumblr API","keywords":["api","blog","tumblr","tumblr-api","tumblr-oauth"],"license":"MIT","author":{"name":"Alexey Simonenko","email":"alexey@simonenko.dev","url":"http://simonenko.xyz"},"repository":{"type":"git","url":"git+https://github.com/meritt/node-tumblr.git"},"type":"module","sideEffects":false,"exports":"./lib/index.js","scripts":{"lint":"oxlint","format":"oxfmt","format:check":"oxfmt --check","test":"node --test test/*.js","coverage":"mkdir -p coverage && node --test --experimental-test-coverage --test-coverage-lines=97 --test-coverage-branches=92 --test-coverage-functions=97 --test-reporter=spec --test-reporter-destination=stdout --test-reporter=lcov --test-reporter-destination=coverage/lcov.info test/*.js"},"devDependencies":{"oxfmt":"^0.54.0","oxlint":"^1.69.0"},"engines":{"node":">=26.3"},"packageManager":"pnpm@11.6.0","gitHead":"314936f020b10459997684f9c16d0fd3208f3118","_id":"tumblr@1.0.0","bugs":{"url":"https://github.com/meritt/node-tumblr/issues"},"homepage":"https://github.com/meritt/node-tumblr#readme","_nodeVersion":"26.3.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-3/pZ59mH/A2NKFJ2vjPmbHLQrR664bsYHCZnBED+COieVPXlrqnOictGD/MJWYXX49KIfXPK+rY0Ntg1mBrTww==","shasum":"a2ccd6cb56287e134ae686a590a97d9b55ada357","tarball":"https://registry.npmjs.org/tumblr/-/tumblr-1.0.0.tgz","fileCount":14,"unpackedSize":25688,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA2F8HNeKTO52c2Md9n8Jhjse0HEWq3S9JcJPFmIlg/zAiEAsXxqAITPNCW5CirPmnA/KC1JjujQFrT7oGE+qzDwPrA="}]},"_npmUser":{"name":"meritt","email":"alexey@simonenko.dev"},"directories":{},"maintainers":[{"name":"meritt","email":"alexey@simonenko.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/tumblr_1.0.0_1781356359582_0.4410886056061645"},"_hasShrinkwrap":false}},"time":{"created":"2011-07-27T22:10:25.297Z","modified":"2026-06-13T13:12:39.833Z","0.0.1":"2011-07-27T22:10:26.921Z","0.0.2":"2011-07-27T22:33:33.063Z","0.0.3":"2011-07-29T12:16:02.970Z","0.0.4":"2011-08-01T09:17:53.691Z","0.1.0":"2013-01-08T18:31:07.938Z","0.1.1":"2013-03-16T16:27:37.734Z","0.2.0":"2013-06-24T10:38:03.755Z","0.2.1":"2013-06-25T17:46:38.003Z","0.2.2":"2013-12-24T23:29:11.921Z","0.3.0":"2013-12-28T22:47:32.185Z","0.4.0":"2014-01-17T19:08:44.136Z","0.4.1":"2014-04-06T16:11:12.957Z","1.0.0":"2026-06-13T13:12:39.731Z"},"bugs":{"url":"https://github.com/meritt/node-tumblr/issues"},"author":{"name":"Alexey Simonenko","email":"alexey@simonenko.dev","url":"http://simonenko.xyz"},"license":"MIT","homepage":"https://github.com/meritt/node-tumblr#readme","keywords":["api","blog","tumblr","tumblr-api","tumblr-oauth"],"repository":{"type":"git","url":"git+https://github.com/meritt/node-tumblr.git"},"description":"Wrapper for the Tumblr API","maintainers":[{"name":"meritt","email":"alexey@simonenko.dev"}],"readme":"# tumblr\n\n[![NPM version][npm-image]][npm-url]\n[![Build status][github-actions-image]][github-actions-url]\n[![Coverage status][coveralls-image]][coveralls-url]\n[![Dependency status][libraries-image]][libraries-url]\n\nA small, zero-dependency, read-only client for the [Tumblr API v2](https://www.tumblr.com/docs/en/api/v2). Methods return Tumblr's unwrapped `response`; failures throw `TumblrError`.\n\n## Requirements\n\n- Node.js ≥ 26.3\n- A Tumblr API key for public reads, or OAuth credentials for user-scoped endpoints\n\n## Installation\n\n```bash\npnpm add tumblr\n# or: npm install tumblr\n```\n\n## Usage\n\n```js\nimport { Tumblr } from 'tumblr';\n\nconst tumblr = new Tumblr({ consumer_key: process.env.TUMBLR_CONSUMER_KEY });\nconst blog = tumblr.blog('staff.tumblr.com');\n\nconst profile = await blog.info();\n// { blog: { name, title, posts, updated, description, ... } }\n\nconst { posts } = await blog.posts({ limit: 5 });\nconst photos = await blog.photo({ limit: 5 });\nconst url = await blog.avatar(128);\nconst tagged = await tumblr.tagged('art', { limit: 5 });\n\nfor await (const post of blog.posts.each()) {\n  console.log(post.id_string, post.timestamp);\n}\n```\n\nUser-scoped endpoints require OAuth:\n\n```js\nconst tumblr = new Tumblr({\n  consumer_key,\n  consumer_secret,\n  token,\n  token_secret\n});\n\nconst { user } = await tumblr.user().info();\n\nfor await (const post of tumblr.user().dashboard.each()) {\n  console.log(post.blog_name, post.id_string);\n}\n```\n\n## Authentication\n\nThe strategy is selected from the credentials passed to the constructor:\n\n| Credentials                                                   | Strategy   | Transport                          |\n| ------------------------------------------------------------- | ---------- | ---------------------------------- |\n| `consumer_key`                                                | API key    | `api_key` query parameter          |\n| `access_token`                                                | OAuth 2.0  | `Authorization: Bearer`            |\n| `consumer_key` + `consumer_secret` + `token` + `token_secret` | OAuth 1.0a | `Authorization: OAuth` (HMAC-SHA1) |\n\nIncomplete OAuth 1.0a credentials throw `TypeError`. Each field falls back to an environment variable — `TUMBLR_CONSUMER_KEY`, `TUMBLR_CONSUMER_SECRET`, `TUMBLR_TOKEN`, `TUMBLR_TOKEN_SECRET`, `TUMBLR_ACCESS_TOKEN` — read from `process.env` or a custom `env` object.\n\n```js\nnew Tumblr({ consumer_key }); // explicit\nnew Tumblr(); // from process.env.TUMBLR_*\nnew Tumblr({ env: secrets }); // from a custom source\n```\n\n## Client\n\n```js\nnew Tumblr(options);\n```\n\n| Option        | Default                      | Meaning                                                                        |\n| ------------- | ---------------------------- | ------------------------------------------------------------------------------ |\n| _credentials_ | `env.TUMBLR_*`               | `consumer_key` / `consumer_secret` / `token` / `token_secret` / `access_token` |\n| `env`         | `process.env`                | Source for the `TUMBLR_*` fallbacks                                            |\n| `baseUrl`     | `https://api.tumblr.com/v2/` | API host                                                                       |\n| `timeout`     | `30000`                      | Per-request timeout in ms; `0` disables                                        |\n\n`tumblr.rateLimit` returns the rate limit of the most recent request as `{ limit, remaining, reset }`, where `reset` is a `Temporal.Instant`, or `undefined` before the first request.\n\n`Tumblr` implements `Symbol.asyncDispose` for use with `await using`.\n\n## blog(host)\n\n| Method                                                             | Returns                          |\n| ------------------------------------------------------------------ | -------------------------------- |\n| `info()`                                                           | `{ blog }`                       |\n| `avatar(size = 64)`                                                | avatar image URL                 |\n| `post(id)`                                                         | a single post, or `null`         |\n| `posts(options)`                                                   | `{ blog, posts, total_posts }`   |\n| `text` / `quote` / `link` / `answer` / `video` / `audio` / `photo` | posts of that type               |\n| `notes(id, options)`                                               | `{ notes, total_notes, ... }`    |\n| `likes(options)`                                                   | `{ liked_posts, liked_count }`   |\n| `followers(options)`                                               | `{ users, total_users }` — OAuth |\n| `following(options)`                                               | `{ blogs, total_blogs }` — OAuth |\n\n`avatar` resolves to the image URL for `size` {16, 24, 30, 40, 48, 64, 96, 128, 512}.\n`notes(id, { mode })` accepts a `mode` of `all`, `likes`, `conversation`, `rollup`, or `reblogs_with_tags`.\n\n## user()\n\n| Method               | Returns           |\n| -------------------- | ----------------- |\n| `info()`             | `{ user }`        |\n| `limits()`           | API usage limits  |\n| `dashboard(options)` | `{ posts }`       |\n| `likes(options)`     | `{ liked_posts }` |\n| `following(options)` | `{ blogs }`       |\n\nAll `user()` methods require OAuth.\n\n## tagged(tag, options)\n\nReturns an array of posts tagged with `tag`.\n\n## Pagination\n\nEach list method — `posts`, `notes`, `likes`, `followers`, `following`, `dashboard`, `tagged`, and the type shortcuts — exposes an `.each` companion returning an `AsyncIterable` that follows Tumblr's cursors to the last page:\n\n```js\nfor await (const post of tumblr.tagged.each('art')) {\n  // ...\n}\n```\n\n## Options\n\nMethod `options` carry through to the request as query parameters (`limit`, `offset`, `before`, `after`, `tag`, `npf`, `filter`, `reblog_info`, `notes_info`, …), plus two wrapper keys:\n\n| Key       | Meaning                                                    |\n| --------- | ---------------------------------------------------------- |\n| `signal`  | `AbortSignal` for cancellation                             |\n| `timeout` | Per-call timeout in ms, overriding the constructor default |\n\n## Errors\n\nA failed request — an HTTP or envelope error, a network failure, a timeout, or invalid JSON — throws `TumblrError` with `message`, `status`, `code`, `meta`, `errors`, and `rateLimit`.\n\nInvalid arguments — missing or incomplete credentials, an out-of-range `timeout`, an unsupported avatar size, a non-numeric post id, a missing tag, a missing host — throw `TypeError` or `RangeError`.\n\n## Rate limits\n\nHTTP 429 surfaces as `TumblrError`; no retry or back-off is performed. `tumblr.rateLimit` holds the latest limit, remaining count, and reset instant.\n\n## Author\n\n- [Alexey Simonenko](https://github.com/meritt)\n\n## License\n\nMIT. See `LICENSE`.\n\n[npm-image]: https://img.shields.io/npm/v/tumblr.svg?style=flat\n[npm-url]: https://www.npmjs.com/package/tumblr\n[github-actions-image]: https://github.com/meritt/node-tumblr/actions/workflows/ci.yml/badge.svg\n[github-actions-url]: https://github.com/meritt/node-tumblr/actions/workflows/ci.yml\n[coveralls-image]: https://coveralls.io/repos/github/meritt/node-tumblr/badge.svg?branch=main\n[coveralls-url]: https://coveralls.io/github/meritt/node-tumblr?branch=main\n[libraries-image]: https://img.shields.io/librariesio/release/npm/tumblr.svg?style=flat\n[libraries-url]: https://libraries.io/npm/tumblr\n","readmeFilename":"readme.md","users":{"ischiavon":true,"parkerproject":true}}