{"_id":"amino","_rev":"76-97952b1f2b4854d7a9bac85a8a945d4b","name":"amino","description":"Search for a community's id ```ts import * as Amino from \"amino\";","dist-tags":{"latest":"3.0.5"},"versions":{"0.1.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.1.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"async":"~0.1.18","inherits":"~1.0.0"},"devDependencies":{"mocha":"~1.0.3","amino-pubsub-redis":"~0.1.0","amino-queue-amqp":"~0.1.0","amino-request-http":"~0.1.0"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.1.0","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"8644c47831333ed2a038ca55a77d25d019332801","tarball":"https://registry.npmjs.org/amino/-/amino-0.1.0.tgz","integrity":"sha512-naJgHs6jHN1MZsFjkRFLisfij7xNNLKKfxCbnDaD67HI5+Vg1KIbL1DNiMpmohHfVHqyXtykAXecF83Oqew6ng==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDqvzSTyskN8JyOt9nvK4lCss417JtUswNfVgzC2Ar+bgIgB2RXNXmfuKPXkjq9xouRs6yZzOkNa1LqISsu+Ejd1iw="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.1.1":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.1.1","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"async":"~0.1.18","inherits":"~1.0.0"},"devDependencies":{"mocha":"*","amino-pubsub-redis":"~0.1.0","amino-queue-amqp":"~0.1.0","amino-request-http":"~0.1.0"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.1.1","optionalDependencies":{},"_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"ce2693aa7e58a9299ea91075a6ed392b934958a0","tarball":"https://registry.npmjs.org/amino/-/amino-0.1.1.tgz","integrity":"sha512-OcDFqvbaVVqiz5yMXWgAND818BVtiiltwhe6XJyCDqPs66/fC3OigRMIecU2RnDb+FWodvlu8d3lJmc2i8HY5A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHOy4QAwsppPttXwcDNQghxUUwT4qomq9XKhS/3Le5JqAiEAq3uAvkzDdR13yx3gutCuZ2hOtmx2LmXv6QBUNuE5c6o="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.2.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.2.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"async":"~0.1.18","inherits":"~1.0.0","nconf":"~0.5.1","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.2.0"},"devDependencies":{"mocha":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.2.0"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.2.0","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"020ee15f140d66fcb4d6c0900aee9c5436a01d90","tarball":"https://registry.npmjs.org/amino/-/amino-0.2.0.tgz","integrity":"sha512-4H35QAw6edurQ6xvvXAvkGVCsjLPCLMScYP9O24XgdzMQEuI6r+QCm9CM3TvLLQx/bAcbIf4qco/HeNEIeFtoQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAHlwY1T5quOwvKZFrPK094ZFxprJfA76XVMOqWAu1hxAiEAgge7EnT77qIM6ngY+TOa52hCE701n1IE6tkIxizk8io="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.3.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.3.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"async":"~0.1.18","inherits":"~1.0.0","nconf":"~0.5.1","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.2.0"},"devDependencies":{"mocha":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.2.0"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.3.0","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"8abe30a40f3cb48d1e85e4de604b9562cb931315","tarball":"https://registry.npmjs.org/amino/-/amino-0.3.0.tgz","integrity":"sha512-Gimml80UADdr4gTKxjERhlEo51x9l30W+x4zU0V1BsVm4yJ/D9y8uSYaz0W9gOi6Vvo8omCkdoOVKQrylKmMRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIB3CBPpufP5E2F8HSSiWQMfEZFSfDZFvzuYa+sVb8ZhbAiEArUm2oXQM8nZ3l3zNwxrUyo1I2mPw4IUW6b4T9T51u0A="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.4.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.4.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"async":"~0.1.18","inherits":"~1.0.0","nconf":"~0.5.1","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.3.0"},"devDependencies":{"mocha":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.3.0"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.4.0","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"2bdb67fdaf83a90cc222116ed72b02a5a46d5ac7","tarball":"https://registry.npmjs.org/amino/-/amino-0.4.0.tgz","integrity":"sha512-q9CERMcqa+dzhKl7hNk3i9iLtzfrODoAXffxEhS34smTPKB3hce7/1VCTiUiTGvzFdNMOazYxh9aGFQN1xoFAg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFNKjZRkE2TGAWjFPJ6vWEQEcVLmXqXjW3YXY0Vjl0gKAiEAn+TE/uDVDPxugIS6d4IcbNEK/CIezOYTkCBNdMimcAM="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.5.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.5.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"async":"~0.1.18","inherits":"~1.0.0","nconf":"~0.5.1","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.3.0"},"devDependencies":{"mocha":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.3.0"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.5.0","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"8bd7f7e3da95ac77d8a4884bd47af476f030a979","tarball":"https://registry.npmjs.org/amino/-/amino-0.5.0.tgz","integrity":"sha512-cvGW2I49AlVaKp/Jj3Nvufbf4+aStOPvYWQL9LsLrKUYPDibLuYgVUOMTIZaGo8MH4RLwnqhvSbFn4lh/qe0kg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDMm5+npvJvB0Z29gIqDQ89rIWWo6VJzX6a3NsXtwuVEAiBduC6QLpIw/LU8TWMCTjWd391/a1v/0KhVIj6HificQw=="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.5.1":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.5.1","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"async":"~0.1.18","inherits":"~1.0.0","nconf":"~0.5.1","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.4.0"},"devDependencies":{"mocha":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"~0.4.0"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.5.1","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"e96e40d825334cc54e362038e2da168e8b4d3997","tarball":"https://registry.npmjs.org/amino/-/amino-0.5.1.tgz","integrity":"sha512-55+j7ftbU9S6Ci/lHReN1kyl3ek0DeC/qf1LPtJ1U1BdmrY1WS9b4zKjrWxqgnglcwEuT6mEFZO9Ourr8jtyNg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICxmItYmveHlBiVdZt6xx/hoMCEgonhVrcCCCT3DJ0tQAiBg+Yii3lX8f86BCU+EavSW96Pqa7b1iKdACTqmo61Hcw=="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.6.1":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.6.1","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.6.1","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"0d64b1a240f507c1bd856c0fad12ed6e5428c125","tarball":"https://registry.npmjs.org/amino/-/amino-0.6.1.tgz","integrity":"sha512-p0Nil8dA3z9DE0X6ZUhsjl4nGw24cfjgRRTM97Onndr/PU9/TiffwHCGXaSHXXthiGt9ua9Qsdcwa1hLgrzWKQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE1TB6L7oKanPB88fN5tV0HWypMctbeZ8kjx6Atmt7FSAiEAyuRuRSsFQQ11rUKxm6HtoLFaf/9vvGyD/rkjjT9+GdU="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.7.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.7.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.7.0","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"f4464680aac27670d8687504ec058ed67ac361f8","tarball":"https://registry.npmjs.org/amino/-/amino-0.7.0.tgz","integrity":"sha512-Ewx6vwOrmV/EWUJtVKYgOlsx7q6SDSLMW0Gq1p2xZN2Imd70RLS62fSp8GoJ2TxyWntg5VwZuyNLVmY84tyu+A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBqpdcb40yJhKPz+DfjATYciRtXxxXwIWahxvaLC0U7hAiEA5Ix94A/38WS78gY9yuG2WDAtknSSGll11vNxidQi3iw="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.8.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.8.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.8.0","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"2ddf343bc81e2cbec2fce1010f001373e3c36eea","tarball":"https://registry.npmjs.org/amino/-/amino-0.8.0.tgz","integrity":"sha512-LIMS8MI+TOstStwmaymn5kNcpPh/449idQ/VpWgfcMVoKpm/XIU295g9JYwaKDBjtxLmMpirysd/uVpg3zHzSA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCcZqrfSqPYZJVXji8ohIJ+zWzAVxv/tmMJLJFg+yAc6wIhAIP6qoV5ajZDEOPV3tw8o7RlVTuEO0GzWbXxNisqtzbv"}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.9.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.9.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.9.0","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"0a614d3e528959848624dee37550e40ca222a4d0","tarball":"https://registry.npmjs.org/amino/-/amino-0.9.0.tgz","integrity":"sha512-iRLUylR7C10Pnb/ohIVvG/96+TT7wX6jz6cH36hOb2CNxsPPcGgw6hrg66x+gWw7aQepjRq1/3sAZEju2ueWGw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID1rdbhBocS093xgDoOWPkaazGX5NfaRJxpNkpfRMSgdAiAWmy3uuT5lAHR4RR0blTzlClSJa2uZQzhNJAIM6WYkaA=="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.10.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.10.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.2.0","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.10.0","_engineSupported":true,"_npmVersion":"1.1.9","_nodeVersion":"v0.6.13","_defaultsLoaded":true,"dist":{"shasum":"6d62a1d151a85994869d7a0d424a9187dbae5e2d","tarball":"https://registry.npmjs.org/amino/-/amino-0.10.0.tgz","integrity":"sha512-4ZSc4AfJ/z5GNrfI3Zejr3uwBqQnvbDpUhGbaM4U6rYNJDf5AWuFynQL1/Qzgad+buYxu0VVIVfw0WUhyCEiUQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC/CTVUb8HJ81RMp1SqumH2ssS1VKUp/gRIRy+FTkUEFgIgfz+Q42cgEhfCKH+0nB9KgGKo/5WC4ORBbpcFufWpwvw="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.11.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.11.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.11.0","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.6.19","_defaultsLoaded":true,"dist":{"shasum":"4332456d08722e4ec7c0267eb00c7a6f9e523cb4","tarball":"https://registry.npmjs.org/amino/-/amino-0.11.0.tgz","integrity":"sha512-mjc3wHSu0+NF9aUGOA+zay4/60IH8KLAoyVMnCk27jqj20dLeuqrJ0j6F5T8FzaLKo2trOt/YAT2BxVIyn+8cg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGcXK97vlCqRXgqZAoszFqiuUYU+XsQHnF3YBSL4hzUuAiANa2KCH0xHQTuX9AFCXTk0M3mdpFj24o+70trqQhniUg=="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.11.1":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.11.1","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.11.1","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.6.19","_defaultsLoaded":true,"dist":{"shasum":"4d165a35d016f63970128da7bd6bf38c27582ec0","tarball":"https://registry.npmjs.org/amino/-/amino-0.11.1.tgz","integrity":"sha512-eEvncwIU74L4s6eI4FGCEROcYKMP2DtM3fPK11fOwHoL7RQB0lpuwFyTJqVuTY7mDvTthG2P85ZAFY9Iq+Sp8g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6mmdlvyyh8V1nUWx5FiLVq2LQWAFC1SyibhE2+a2T3QIgLCauWvjJTY88U+J49D42Pkgxt5ymNpaVaqg+R/wrDYE="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.12.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.12.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.12.0","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.6.19","_defaultsLoaded":true,"dist":{"shasum":"cad2810c1e30d8b515ce72b37398e492a1017fa0","tarball":"https://registry.npmjs.org/amino/-/amino-0.12.0.tgz","integrity":"sha512-u8p0wI4yqWeVkI/PInBuEB1sDAlvwgXCNYHZVAy8GIM9UgPvBLC7UGKv3M11yd4lHUlUCWZj7rVXV/i7Ocsa+w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNKmxeJ4uSujN1V2ZNoH4rTTRTcCeWBioBuM/N5WtNIgIhAPuqwHGCNyKeteoMXxuExzMCh6tC+nMAg+c4e9hZxkak"}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.12.1":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.12.1","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.12.1","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.8.2","_defaultsLoaded":true,"dist":{"shasum":"aa49f1344b935a426caef4e3819e15fbf2621628","tarball":"https://registry.npmjs.org/amino/-/amino-0.12.1.tgz","integrity":"sha512-HrhtrNr9U1K5/DPWPe9n8jI/x1zWfGKyo3Dl8ea8Rcibqm1cs455gmdJRBZc5TU+TSypITDyd5NP+GFsgD++Nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDjmkF2o0z6BXN4iqy2L/KwR5dUZ3zaixk69hhjkVOfKQIhAJiOp6tcFWwuU6R56KAZdnpPcnRFJTLii3q6XdMHbBCX"}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.13.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.13.0","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","hash_ring":"~0.2.1","idgen":"~1.0.2","amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.13.0","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.8.2","_defaultsLoaded":true,"dist":{"shasum":"22076ca2e4566718e68c75308079a890f4144fa0","tarball":"https://registry.npmjs.org/amino/-/amino-0.13.0.tgz","integrity":"sha512-InGNusPDDSo4iXxNAOZ8PyWH2S845ohYR7gSEAwxdA73lRU2fRTBy65/3wrWCF06uQ8CFrQjvdDXiI64xzuWfg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID7XN2I/xJLjwaF6m/6hkw3F5xX68+TJUqV0QSqWGWOJAiBZ66666wx4A/iBj/USIH6my+2j2YwEGHpN1vFxpPFQSw=="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.13.1":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.13.1","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.5.1","semver":"~1.0.13","hash_ring":"~0.2.1","idgen":"~1.0.2","amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.13.1","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.8.2","_defaultsLoaded":true,"dist":{"shasum":"693941d3dcc7e7c0b164c0c64eaa6b49ccd00d91","tarball":"https://registry.npmjs.org/amino/-/amino-0.13.1.tgz","integrity":"sha512-e/4wT6Y+5u50keIOngg2wGyosGzm1iufSFj+p4lfLzPK+57EkMirvWWn1LxwXyF7vkUS7cKgv91d4lvlljpUpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFUtieg3NOpSdIxlyhSBB3VjdGHs7a4l3ZEbauXtJMNFAiEA4sjZYqhYyZ0Q3H14nOGh03g8dyrflLVMAKNf/+ZIpns="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.13.3":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.13.3","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.6.4","semver":"~1.0.13","hash_ring":"~0.2.1","idgen":"~1.0.2","amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.13.3","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.8.2","_defaultsLoaded":true,"dist":{"shasum":"c6feb9a1b9e529c1a6e2454c31f96336a422aefb","tarball":"https://registry.npmjs.org/amino/-/amino-0.13.3.tgz","integrity":"sha512-a5nOcDX7NGtH5L2i90zsVrpJokwYkJfp1c5s0vZQ0eFNSTrwby/d8wMzM0i3XHXdCA3ONGEOx4iWHCUaTFlH/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNDrDCxTr6HZX695k2wc7NGc++Isax7RJSERBBFE5noAiBUkTA7ECURvkdiqvCbtuiWZSuAiVRLqj5QKaRylzdCyw=="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.13.4":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.13.4","repository":{"type":"git","url":"git://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.6.4","semver":"~1.0.13","hash_ring":"~0.2.1","idgen":"~1.0.2","amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.1","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"_id":"amino@0.13.4","_engineSupported":true,"_npmVersion":"1.1.24","_nodeVersion":"v0.8.2","_defaultsLoaded":true,"dist":{"shasum":"20deb2e4f5205c15d3f640e096c9bebba06435c9","tarball":"https://registry.npmjs.org/amino/-/amino-0.13.4.tgz","integrity":"sha512-iV5z0s6bk64oP/Y2/CmevrSPwjVstVTMKmCDWeNGTCZhggyCDy0GmUu5y7JR8lJH57s4aXrhxCfw/fSVsdo1Hw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDzztHVChfZSZUCT69581dfqnRLMFt0MFzmcoEl0/tqcgIhAKtb793Mf1mcZCNmqrI7Ibh8JeFB23ErtM5/RPNpXnx7"}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.13.5":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.13.5","repository":{"type":"git","url":"http://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.6.4","semver":"~1.0.13","hash_ring":"~0.2.1","idgen":"~1.0.2","amino-driver-redis":"~0.3.5","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.5","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"readme":"Amino\n=====\n\nClustered application creation toolkit\n\nIdea\n----\n\nAmino is a toolkit for building scalable, fault-taulerant apps in Node.js.\nBy using its simple API, you can harness the power of pub/sub, job queuing,\nand auto-load-balancing without any of the fuss and dependence on particular\ntechnologies.\n\nThe API provides:\n\n  - **pubsub** -- Use `amino.publish()` and `amino.subscribe()` to send events\n    between nodes in your cluster. (default driver: [redis](https://github.com/mranney/node_redis))\n  - **queue** -- Use `amino.queue()` and `amino.process()` to queue jobs and\n    process them. (default driver: [amqp](https://github.com/postwait/node-amqp), i.e. RabbitMQ)\n  - **request** -- Use `amino.request()` and `amino.respond()` to easily create REST\n    APIs with auto-load-balancing and failover. (default driver: HTTP, uses pub/sub)\n  - **service** -- Advanced: Use `amino.createService()` to register a service, and receive a port\n    to listen on. This allows you to create generic TCP services.\n\nSetup\n-----\n\nIf you have redis and RabbitMQ servers running locally on the default ports, all\nyou need to get started is:\n\n```bash\n$ npm install amino\n```\n\n```javascript\nvar amino = require('amino');\n\n// Use amino API\n```\n\nAmino uses a configuration file (in JSON format) to determine what drivers to use. It looks\nlike this (default conf located in `etc/amino.json`)\n\n```json\n{\n  \"amino\": {\n    \"pubsub\": {\n      \"enable\": true,\n      \"driver\": \"redis\",\n      \"options\": {\n        \"nodes\": [\"localhost:6379\"]\n      }\n    },\n    \"queue\": {\n      \"enable\": false,\n      \"driver\": \"amqp\",\n      \"options\": {\n        \"url\": \"amqp://localhost\"\n      }\n    },\n    \"request\": {\n      \"enable\": true,\n      \"driver\": \"http\"\n    },\n    \"range\": [50000, 60000]\n  }\n}\n```\n\nTo override this, you can do:\n\n```bash\n$ node myapp.js --conf /path/to/my/amino.json\n```\n\nOr to use an app-level conf, copy `amino.json` to an `etc` folder in your process's\n`cwd`. Alternatively, it can be named `app.json` or `conf.json`.\n\nOr to use a system-wide conf, you can put one at `/etc/amino.json`.\n\n__At the moment, there are no other selectable drivers. More coming soon!__\n\nAPI\n---\n\n### publish/subscribe\n\n**publisher.js**\n\n```javascript\n// Tell other nodes my name when I start.\nvar amino = require('amino');\n\namino.publish('myname', 'amino99');\n```\n\n**subscriber.js**\n\n```javascript\n// Greet other nodes as they come up.\nvar amino = require('amino');\n\namino.subscribe('myname', function(name) {\n  console.log('hello, ' + name + '!');\n});\n```\n\n### queue/process\n\n__Note: you must set `\"queue\": { \"enable\": true }` in `amino.json` to use the\nqueue interface.__ \n\n**order-sprocket.js**\n\n```javascript\n// Add sprocket request to a queue. These things take time.\nvar amino = require('amino');\n\namino.queue('orders', {type: 'sprocket-b', spokes: 5});\nconsole.log('Your order is processing!');\n```\n\n**make-sprockets.js**\n\n```javascript\n// Fulfill sprocket requests.\nvar amino = require('amino');\n\namino.process('orders', function(order, next) {\n  makeSprocket(order, function(err, sprocket) {\n    if (sprocket) {\n      console.log('Created sprocket with id ' + sprocket.id);\n    }\n    next(err);\n  });\n});\n```\n\n### request/respond\n\n**serve-sprocket.js**\n\n```javascript\n// Create a sprocket service.\nvar amino = require('amino');\n\n// \"sprockets\" will be our virtual host. We'll also tag it with\n// a version (2.1.0) for requests to filter by.\namino.respond('sprockets@2.1.0', function(router, spec) {\n  // router is a director router.\n  // @see https://github.com/flatiron/director\n  router.get('/:id', function(id) {\n    // amino adds the helpers json(), text(), and html().\n    this.res.json({id: id});\n  });\n});\n```\n\n**get-sprocket.js**\n\n```javascript\n// Request a sprocket from the sprocket service.\nvar amino = require('amino');\n\n// amino.request() is the same as github.com/mikeal/request, except\n// it can handle the amino:// protocol, which uses virtual hosts defined\n// with amino.respond().\namino.request('amino://sprockets/af920c').pipe(process.stdout);\n\n// To limit the request to hosts running sprockets v2.x, we can use a special header:\namino.request({url: 'amino://sprockets/af920c', headers: {'x-amino-version': '2.x'}}).pipe(process.stdout);\n```\n\n### createService (Advanced)\n\n**create-service.js**\n\n```javascript\n// Create a TCP service which sends \"hello world\"\nvar amino = require('amino')\n  , net = require('net');\n\nvar server = net.createServer(function(socket) {\n  socket.write(\"hello world\");\n});\nvar service = amino.createService('hello@1.1.0', function(spec) {\n  server.listen(spec.port);\n  console.log('listening on port ' + spec.port);\n});\n```\n\n**use-service.js**\n\n```javascript\n// Connect to the hello service\nvar amino = require('amino')\n  , net = require('net')\n  , req\n  , socket\n  ;\n\nreq = amino.requestService('hello', '1.x');\nreq.on('spec', function(spec) {\n  socket = net.createConnection(spec.port);\n  socket.on('connect', function() {\n    console.log('connected to hello service version ' + spec.version);\n  });\n  socket.setEncoding('utf8');\n  socket.on('data', function(data) {\n    // data should be \"hello world\"\n    console.log(data);\n  });\n});\n```\n","_id":"amino@0.13.5","dist":{"shasum":"1ad600851b36ef67485c99281b5a2ef49ce75216","tarball":"https://registry.npmjs.org/amino/-/amino-0.13.5.tgz","integrity":"sha512-Aa0/07rB5nZMs+P/WT6qXmJpXNfdQJw5jci9WDN0ZEs6pFi74rtKXVPLh9wyxdo5rXS8chirjQE+1pgYwYG7pg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICoQGN0FtLLOGx2UNpJZSHAnF3qUGWU7BxyQnYK03c2cAiEAstOsxF7W/LzTHko9cSnGM6PnR3Z4m80cRvcQ3+WnX18="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"0.13.6":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustered application creation toolkit","version":"0.13.6","repository":{"type":"git","url":"http://github.com/cantina/amino.git"},"main":"lib/amino.js","dependencies":{"inherits":"~1.0.0","nconf":"~0.6.4","semver":"~1.0.13","hash_ring":"~0.2.1","idgen":"~1.0.2","amino-driver-redis":"~0.3.5","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"devDependencies":{"mocha":"*","async":"*"},"optionalDependencies":{"amino-driver-redis":"~0.3.5","amino-driver-amqp":"~0.2.0","amino-driver-http":"0.4.1"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"readme":"Amino\n=====\n\nClustered application creation toolkit\n\nIdea\n----\n\nAmino is a toolkit for building scalable, fault-taulerant apps in Node.js.\nBy using its simple API, you can harness the power of pub/sub, job queuing,\nand auto-load-balancing without any of the fuss and dependence on particular\ntechnologies.\n\nThe API provides:\n\n  - **pubsub** -- Use `amino.publish()` and `amino.subscribe()` to send events\n    between nodes in your cluster. (default driver: [redis](https://github.com/mranney/node_redis))\n  - **queue** -- Use `amino.queue()` and `amino.process()` to queue jobs and\n    process them. (default driver: [amqp](https://github.com/postwait/node-amqp), i.e. RabbitMQ)\n  - **request** -- Use `amino.request()` and `amino.respond()` to easily create REST\n    APIs with auto-load-balancing and failover. (default driver: HTTP, uses pub/sub)\n  - **service** -- Advanced: Use `amino.createService()` to register a service, and receive a port\n    to listen on. This allows you to create generic TCP services.\n\nSetup\n-----\n\nIf you have redis and RabbitMQ servers running locally on the default ports, all\nyou need to get started is:\n\n```bash\n$ npm install amino\n```\n\n```javascript\nvar amino = require('amino');\n\n// Use amino API\n```\n\nAmino uses a configuration file (in JSON format) to determine what drivers to use. It looks\nlike this (default conf located in `etc/amino.json`)\n\n```json\n{\n  \"amino\": {\n    \"pubsub\": {\n      \"enable\": true,\n      \"driver\": \"redis\",\n      \"options\": {\n        \"nodes\": [\"localhost:6379\"]\n      }\n    },\n    \"queue\": {\n      \"enable\": false,\n      \"driver\": \"amqp\",\n      \"options\": {\n        \"url\": \"amqp://localhost\"\n      }\n    },\n    \"request\": {\n      \"enable\": true,\n      \"driver\": \"http\"\n    },\n    \"range\": [50000, 60000]\n  }\n}\n```\n\nTo override this, you can do:\n\n```bash\n$ node myapp.js --conf /path/to/my/amino.json\n```\n\nOr to use an app-level conf, copy `amino.json` to an `etc` folder in your process's\n`cwd`. Alternatively, it can be named `app.json` or `conf.json`.\n\nOr to use a system-wide conf, you can put one at `/etc/amino.json`.\n\n__At the moment, there are no other selectable drivers. More coming soon!__\n\nAPI\n---\n\n### publish/subscribe\n\n**publisher.js**\n\n```javascript\n// Tell other nodes my name when I start.\nvar amino = require('amino');\n\namino.publish('myname', 'amino99');\n```\n\n**subscriber.js**\n\n```javascript\n// Greet other nodes as they come up.\nvar amino = require('amino');\n\namino.subscribe('myname', function(name) {\n  console.log('hello, ' + name + '!');\n});\n```\n\n### queue/process\n\n__Note: you must set `\"queue\": { \"enable\": true }` in `amino.json` to use the\nqueue interface.__ \n\n**order-sprocket.js**\n\n```javascript\n// Add sprocket request to a queue. These things take time.\nvar amino = require('amino');\n\namino.queue('orders', {type: 'sprocket-b', spokes: 5});\nconsole.log('Your order is processing!');\n```\n\n**make-sprockets.js**\n\n```javascript\n// Fulfill sprocket requests.\nvar amino = require('amino');\n\namino.process('orders', function(order, next) {\n  makeSprocket(order, function(err, sprocket) {\n    if (sprocket) {\n      console.log('Created sprocket with id ' + sprocket.id);\n    }\n    next(err);\n  });\n});\n```\n\n### request/respond\n\n**serve-sprocket.js**\n\n```javascript\n// Create a sprocket service.\nvar amino = require('amino');\n\n// \"sprockets\" will be our virtual host. We'll also tag it with\n// a version (2.1.0) for requests to filter by.\namino.respond('sprockets@2.1.0', function(router, spec) {\n  // router is a director router.\n  // @see https://github.com/flatiron/director\n  router.get('/:id', function(id) {\n    // amino adds the helpers json(), text(), and html().\n    this.res.json({id: id});\n  });\n});\n```\n\n**get-sprocket.js**\n\n```javascript\n// Request a sprocket from the sprocket service.\nvar amino = require('amino');\n\n// amino.request() is the same as github.com/mikeal/request, except\n// it can handle the amino:// protocol, which uses virtual hosts defined\n// with amino.respond().\namino.request('amino://sprockets/af920c').pipe(process.stdout);\n\n// To limit the request to hosts running sprockets v2.x, we can use a special header:\namino.request({url: 'amino://sprockets/af920c', headers: {'x-amino-version': '2.x'}}).pipe(process.stdout);\n```\n\n### createService (Advanced)\n\n**create-service.js**\n\n```javascript\n// Create a TCP service which sends \"hello world\"\nvar amino = require('amino')\n  , net = require('net');\n\nvar server = net.createServer(function(socket) {\n  socket.write(\"hello world\");\n});\nvar service = amino.createService('hello@1.1.0', function(spec) {\n  server.listen(spec.port);\n  console.log('listening on port ' + spec.port);\n});\n```\n\n**use-service.js**\n\n```javascript\n// Connect to the hello service\nvar amino = require('amino')\n  , net = require('net')\n  , req\n  , socket\n  ;\n\nreq = amino.requestService('hello', '1.x');\nreq.on('spec', function(spec) {\n  socket = net.createConnection(spec.port);\n  socket.on('connect', function() {\n    console.log('connected to hello service version ' + spec.version);\n  });\n  socket.setEncoding('utf8');\n  socket.on('data', function(data) {\n    // data should be \"hello world\"\n    console.log(data);\n  });\n});\n```\n","_id":"amino@0.13.6","dist":{"shasum":"f757352287f4b295d169cc37516478adbccf2da2","tarball":"https://registry.npmjs.org/amino/-/amino-0.13.6.tgz","integrity":"sha512-A/GWXiu/E3Uj/GJFsiAvZZaubKxjh9FO50QOUQx26ii225luA1ZMpehatJJ5gzyWXzdYmDpwUMYo12cVhbcO/w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCUlTpfG+dRDuf949BIfGvE2UMrRdY2AcamUbNhELhfOwIhAOpF+gGdEm/4jXAFKMgy4gSV45w31DANE1JDWk6D/dGu"}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"1.0.0":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustering framework for Node.js","version":"1.0.0","repository":{"type":"git","url":"http://github.com/cantina/amino.git"},"license":"MIT","dependencies":{"idgen":"~1.1.1","amino-redis":"~0.0.2","amino-service":"~0.0.2","amino-request":"~0.1.0"},"keywords":["cluster","service","pub/sub","high-availability","cloud","redundant","ipc"],"devDependencies":{"mocha":"*"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"readme":"Amino\n=====\n\nClustering framework for Node.js\n\n[![build status](https://secure.travis-ci.org/cantina/amino.png)](http://travis-ci.org/cantina/amino)\n\nIdea\n----\n\nAmino is a toolkit for building clusterable, fault-taulerant apps in Node.js.\n\nFeatures:\n\n- Two robust communications patterns bundled: **publish/subscribe** and\n  **service/request**\n- Decentralized service registry\n- Supports [semver](http://semver.org) specifications\n- Automated host/port assignments and gossiping\n- Built-in load-balancing, sticky sessions, consistent hashing, and failover\n- Enables your app to have no single point of failure\n- Much, much faster and cooler than [hook.io](https://github.com/hookio/) ;)\n- Simple, extensible architecture\n\nInstallation\n------------\n\nIn the root of your project,\n\n```bash\n$ npm install --save amino\n```\n\nTo use the default configuration (requires [redis](http://redis.io) listening\nat `localhost:6379`), simply call:\n\n```javascript\nvar amino = require('amino').init();\n```\n\nPattern #1: publish/subscribe\n-----------------------------\n\n### Method: `amino.publish(ev [, arg, arg...])`\n\nPublishes an event, with optional arguments.\n\n- `ev`: Event name, can be any string.\n- `arg`: Any number of javascript objects. Note that since data must be\n  serialized, custom javascript class instances will not survive intact. Native\n  objects will attempt to be unserialized via\n  [hydration](https://github.com/carlos8f/hydration).\n\n#### Example\n\n```javascript\namino.publish('cool stuff', {cool: true});\n```\n\n### Method: `amino.subscribe(ev, handler)`\n\nSubscribes to an event.\n\n- `ev`: Event name as passed to `amino.publish()`\n- `handler`: An event handler, which will be passed any arguments that were\n  part of the `publish()` call.\n\n#### Example\n\n```javascript\namino.subscribe('cool stuff', function (stuff) {\n  // stuff.cool == true\n});\n```\n\n### Method: `amino.unsubscribe(ev [, handler])`\n\nUnsubscribes from an event.\n\n- `ev`: Event name as passed to `amino.subscribe()`\n- `handler`: The event handler used with `amino.subscribe()`. If not specified,\n  unsubscribes all handlers of the event.\n\n#### Example\n\n```javascript\namino.unsubscribe('cool stuff', coolStuffHandler);\n```\n\nPattern #2: service/request\n---------------------------\n\n### Method: `amino.createService(service-name[@version] | spec, server)`\n\nRegisters an Amino service.\n\n- `service-name`: The name of your service (should be alpha-numeric/dashes)\n  with an optional [semver](http://semver.org) specification.\n- `spec`: Alternatively, you may specify the full spec of your service, if\n  you already have a port (you will then have to call `listen()` yourself):\n\n  ```javascript\n  var spec = {\n    service: \"service-name@0.1.0\",\n    host: \"server-a\",\n    port: 5678\n  };\n  var service = amino.createService(spec, server);\n  server.listen(spec.port);\n  ```\n- `server`: A server instance returned by `net.createServer()` or\n  `http.createServer()`.\n\nReturns: a `Service` instance.\n\n- (event) `listening`: called when the service has published itself and is\n  available for requests.\n- (property) `spec`: an object containing info about the service (gossiped\n  around the cluster)\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n- (method) `close(onClose)`: close the service and the associated server. Called\n  automatically when the server closes.\n- (event) `close`: called when the service closes.\n\n#### Example\n\nTo create a service, first create a `net` or `http` server:\n\n```javascript\nvar server = require('http').createServer(function (req, res) {\n  res.end('cool stuff');\n});\n```\n\nThen pass the server to `amino.createService()`, which will `listen()` on an\nemphemeral port and broadcast the availability of your service.\n\n```javascript\nvar service = amino.createService('cool-stuff@0.1.0', server);\n```\n\n### Method: `amino.request(service-name[@version], pathSpec [, options, onResponse])`\n\nMakes round-robin requests to Amino `http` services.\n\n- Alternate syntax:\n    - (simple GET): `amino.request('amino://service-name/' [, onResponse])`\n    - (generic HTTP): `amino.request('http://some-site/' [, onResponse])`\n    - (url in options): `amino.request(options, [, onResponse])`\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification. Can be specified as the first\n  parameter to `amino.request()`, or as the hostname in an amino url such as\n  `amino://service-name/`.\n- `pathSpec`: the path to request, with an optional method before it, such as\n  `POST /posts` or `DELETE /everything`.\n- `options`: options object to pass to the request, containing keys such as\n  `headers` and `body` (for posts, etc.). See\n  [mikeal/request](https://github.com/mikeal/request) for more options.\n- `onResponse`: callback to be called with the arguments `err, res, body` when\n  a response is received.\n\nReturns: an `http.ClientRequest` object.\n\n#### Example\n\n```javascript\nvar req = amino.request('cool-stuff@0.1.x', '/', function (err, res, body) {\n  // body == 'cool stuff'\n});\n```\n\n#### \"Sticky\" sessions\n\nAmino has support for [consistent hashing](http://en.wikipedia.org/wiki/Consistent_hashing)\nwhich can be used to route multiple requests to the same server.\n\nTo enable this feature, pass a special header called `X-Amino-StickyId`\nto requests, containing an IP address, cookie value, or other identifier to\nconsistently route requests with.\n\nNote that as servers are added or removed from the service, sticky routing\ncan be subject to change.\n\n### Method: `amino.requestService(service-name[@version], onSpec)`\n\nRequests a round-robined server for the specified service. Use this for `net`\nservices, or to manually get a server spec for a given service.\n\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification.\n- `onSpec`: callback to be called with a server `spec` object containing:\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n\nReturns: a `ServiceRequest` instance:\n\n- (event) `spec`: called with the `spec` object.\n- (property) `headers`: an array of headers for the request (used internally)\n\n#### Example\n\n```javascript\namino.requestService('cool-stuff@0.1.x', function (spec) {\n  // now we can connect to spec.host/spec.port\n});\n```\n\nConfiguration\n-------------\n\nAmino is bundled with three plugins by default:\n[amino-redis](https://github.com/amino/amino-redis),\n[amino-service](https://github.com/amino/amino-service), and\n[amino-request](https://github.com/amino/amino-request).\n\nCore plugins can be configured by passing options to `init()`.\n\n```javascript\nvar amino = require('amino')\n  .init({\n    redis: redis options...\n    service: service options...\n    request: request options...\n  });\n```\n\nTo disable a plugin, just pass `false`.\n\n### Redis options\n\n- To specify a single redis server, just pass a `host`, `port`, or `host:port` to\n  `init`, for example:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: \"1.2.3.4:5679\"\n    });\n  ```\n- To use multiple redis servers for failover/load-balancing, just pass an array\n  of servers. See [haredis](https://github.com/carlos8f/haredis) for more\n  information.\n- To pass options to the redis client:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: {\n        nodes: \"1.2.3.4:5679\",\n        node_redis/haredis options here...\n      }\n    });\n  ```\n\n### Service options\n\n- `host`: By default, Amino will auto-detect your server's network IP by using a DNS\n  lookup on the server's `hostname`. If you already know the correct IP\n  (or hostname) to use, you can specify it with this option.\n\n### Request options\n\n- `specRequestThrottle`: interval (in ms) to throttle publishes when requesting\n  specs for a service. (Default: `5000`)\n- `specRequestInterval`: interval (in ms) to request \"straggler\" specs for all\n  services. (Default: `120000`)\n- `readyTimeout`: time (in ms) before a service is deemed \"ready\" after getting\n  the first spec. (Default: `200`)\n- (other options will also be passed to `http.Agent` constructor)\n\nExtending Amino\n---------------\n\nTo extend Amino, simply create a module which exports an `attach` function, which\nwill be called in Amino's scope:\n\n```javascript\nexports.attach = function (options) {\n  var amino = this;\n  // extend amino!\n});\n```\n\nTo load the plugin, call `amino.use()`:\n\n```javascript\nvar amino = require('amino')\n  .use(require('my-plugin'), {options...})\n  .init();\n```\n\n---\n\nDeveloped by [Terra Eclipse](http://www.terraeclipse.com)\n---------------------------------------------------------\n\nTerra Eclipse, Inc. is a nationally recognized political technology and\nstrategy firm located in Aptos, CA and Washington, D.C.\n\n[http://www.terraeclipse.com](http://www.terraeclipse.com)\n\n\nLicense: MIT\n------------\n\n- Copyright (C) 2012 Carlos Rodriguez (http://s8f.org/)\n- Copyright (C) 2012 Terra Eclipse, Inc. (http://www.terraeclipse.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_id":"amino@1.0.0","dist":{"shasum":"cdbec12220d2feedbb324e1d3ab7e34bdf464b7c","tarball":"https://registry.npmjs.org/amino/-/amino-1.0.0.tgz","integrity":"sha512-q450JXaM7tV/PQQCZkyPRXTVshtm5iifW5AOsLrf4FrYG1iOOXNqndni2w+o448we5O03j3SvLLqXMxizNsk3g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE3EOrTRgomKRFjiDfJBuD3d1MgIjTBx6v8lAE21bma+AiEAgokzFDxQbR0XpccLoCECcZmBHQYLjhwJnhjM9Qz0PM4="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"1.0.2":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustering framework for Node.js","version":"1.0.2","repository":{"type":"git","url":"http://github.com/amino/amino.git"},"license":"MIT","dependencies":{"idgen":"~1.1.1","amino-redis":"~0.0.4","amino-service":"~0.0.4","amino-request":"~0.1.2"},"homepage":"https://github.com/amino/amino","keywords":["load-balancing","failover","cluster","scalability","performance","service","pub/sub","high-availability","cloud","redundancy","ipc"],"devDependencies":{"mocha":"*"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"readme":"Amino\n=====\n\nClustering framework for Node.js\n\n[![build status](https://secure.travis-ci.org/amino/amino.png)](http://travis-ci.org/amino/amino)\n\nIdea\n----\n\nAmino is a toolkit for building clusterable, fault-taulerant apps in Node.js.\n\nFeatures:\n\n- Two robust communications patterns bundled: **publish/subscribe** and\n  **service/request**\n- Decentralized service registry\n- Supports [semver](http://semver.org) specifications\n- Automated host/port assignments and gossiping\n- Built-in load-balancing, sticky sessions, consistent hashing, and failover\n- Enables your app to have no single point of failure\n- Much, much faster and cooler than [hook.io](https://github.com/hookio/) ;)\n- Simple, extensible architecture\n\nInstallation\n------------\n\nIn the root of your project,\n\n```bash\n$ npm install --save amino\n```\n\nTo use the default configuration (requires [redis](http://redis.io) listening\nat `localhost:6379`), simply call:\n\n```javascript\nvar amino = require('amino').init();\n```\n\nPattern #1: publish/subscribe\n-----------------------------\n\n### Method: `amino.publish(ev [, arg, arg...])`\n\nPublishes an event, with optional arguments.\n\n- `ev`: Event name, can be any string.\n- `arg`: Any number of javascript objects. Note that since data must be\n  serialized, custom javascript class instances will not survive intact. Native\n  objects will attempt to be unserialized via\n  [hydration](https://github.com/carlos8f/hydration).\n\n#### Example\n\n```javascript\namino.publish('cool stuff', {cool: true});\n```\n\n### Method: `amino.subscribe(ev, handler)`\n\nSubscribes to an event.\n\n- `ev`: Event name as passed to `amino.publish()`\n- `handler`: An event handler, which will be passed any arguments that were\n  part of the `publish()` call.\n\n#### Example\n\n```javascript\namino.subscribe('cool stuff', function (stuff) {\n  // stuff.cool == true\n});\n```\n\n### Method: `amino.unsubscribe(ev [, handler])`\n\nUnsubscribes from an event.\n\n- `ev`: Event name as passed to `amino.subscribe()`\n- `handler`: The event handler used with `amino.subscribe()`. If not specified,\n  unsubscribes all handlers of the event.\n\n#### Example\n\n```javascript\namino.unsubscribe('cool stuff', coolStuffHandler);\n```\n\nPattern #2: service/request\n---------------------------\n\n### Method: `amino.createService(service-name[@version] | spec, server)`\n\nRegisters an Amino service.\n\n- `service-name`: The name of your service (should be alpha-numeric/dashes)\n  with an optional [semver](http://semver.org) specification.\n- `spec`: Alternatively, you may specify the full spec of your service, if\n  you already have a port (you will then have to call `listen()` yourself):\n\n  ```javascript\n  var spec = {\n    service: \"service-name@0.1.0\",\n    host: \"server-a\",\n    port: 5678\n  };\n  var service = amino.createService(spec, server);\n  server.listen(spec.port);\n  ```\n- `server`: A server instance returned by `net.createServer()` or\n  `http.createServer()`.\n\nReturns: a `Service` instance.\n\n- (event) `listening`: called when the service has published itself and is\n  available for requests.\n- (property) `spec`: an object containing info about the service (gossiped\n  around the cluster)\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n- (method) `close(onClose)`: close the service and the associated server. Called\n  automatically when the server closes.\n- (event) `close`: called when the service closes.\n\n#### Example\n\nTo create a service, first create a `net` or `http` server:\n\n```javascript\nvar server = require('http').createServer(function (req, res) {\n  res.end('cool stuff');\n});\n```\n\nThen pass the server to `amino.createService()`, which will `listen()` on an\nemphemeral port and broadcast the availability of your service.\n\n```javascript\nvar service = amino.createService('cool-stuff@0.1.0', server);\n```\n\n### Method: `amino.request(service-name[@version], pathSpec [, options, onResponse])`\n\nMakes round-robin requests to Amino `http` services.\n\n- Alternate syntax:\n    - (simple GET): `amino.request('amino://service-name/' [, onResponse])`\n    - (generic HTTP): `amino.request('http://some-site/' [, onResponse])`\n    - (url in options): `amino.request(options, [, onResponse])`\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification. Can be specified as the first\n  parameter to `amino.request()`, or as the hostname in an amino url such as\n  `amino://service-name/`.\n- `pathSpec`: the path to request, with an optional method before it, such as\n  `POST /posts` or `DELETE /everything`.\n- `options`: options object to pass to the request, containing keys such as\n  `headers` and `body` (for posts, etc.). See\n  [mikeal/request](https://github.com/mikeal/request) for more options.\n- `onResponse`: callback to be called with the arguments `err, res, body` when\n  a response is received.\n\nReturns: an `http.ClientRequest` object.\n\n#### Example\n\n```javascript\nvar req = amino.request('cool-stuff@0.1.x', '/', function (err, res, body) {\n  // body == 'cool stuff'\n});\n```\n\n#### \"Sticky\" sessions\n\nAmino has support for [consistent hashing](http://en.wikipedia.org/wiki/Consistent_hashing)\nwhich can be used to route multiple requests to the same server.\n\nTo enable this feature, pass a special header called `X-Amino-StickyId`\nto requests, containing an IP address, cookie value, or other identifier to\nconsistently route requests with.\n\nNote that as servers are added or removed from the service, sticky routing\ncan be subject to change.\n\n### Method: `amino.requestService(service-name[@version], onSpec)`\n\nRequests a round-robined server for the specified service. Use this for `net`\nservices, or to manually get a server spec for a given service.\n\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification.\n- `onSpec`: callback to be called with a server `spec` object containing:\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n\nReturns: a `ServiceRequest` instance:\n\n- (event) `spec`: called with the `spec` object.\n- (property) `headers`: an array of headers for the request (used internally)\n\n#### Example\n\n```javascript\namino.requestService('cool-stuff@0.1.x', function (spec) {\n  // now we can connect to spec.host/spec.port\n});\n```\n\nConfiguration\n-------------\n\nAmino is bundled with three plugins by default:\n[amino-redis](https://github.com/amino/amino-redis),\n[amino-service](https://github.com/amino/amino-service), and\n[amino-request](https://github.com/amino/amino-request).\n\nCore plugins can be configured by passing options to `init()`.\n\n```javascript\nvar amino = require('amino')\n  .init({\n    redis: redis options...\n    service: service options...\n    request: request options...\n  });\n```\n\nTo disable a plugin, just pass `false`.\n\n### Redis options\n\n- To specify a single redis server, just pass a `host`, `port`, or `host:port` to\n  `init`, for example:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: \"1.2.3.4:5679\"\n    });\n  ```\n- To use multiple redis servers for failover/load-balancing, just pass an array\n  of servers. See [haredis](https://github.com/carlos8f/haredis) for more\n  information.\n- To pass options to the redis client:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: {\n        nodes: \"1.2.3.4:5679\",\n        node_redis/haredis options here...\n      }\n    });\n  ```\n\n### Service options\n\n- `host`: By default, Amino will auto-detect your server's network IP by using a DNS\n  lookup on the server's `hostname`. If you already know the correct IP\n  (or hostname) to use, you can specify it with this option.\n\n### Request options\n\n- `specRequestThrottle`: interval (in ms) to throttle publishes when requesting\n  specs for a service. (Default: `5000`)\n- `specRequestInterval`: interval (in ms) to request \"straggler\" specs for all\n  services. (Default: `120000`)\n- `readyTimeout`: time (in ms) before a service is deemed \"ready\" after getting\n  the first spec. (Default: `200`)\n- (other options will also be passed to `http.Agent` constructor)\n\nExtending Amino\n---------------\n\nTo extend Amino, simply create a module which exports an `attach` function, which\nwill be called in Amino's scope:\n\n```javascript\nexports.attach = function (options) {\n  var amino = this;\n  // extend amino!\n});\n```\n\nTo load the plugin, call `amino.use()`:\n\n```javascript\nvar amino = require('amino')\n  .use(require('my-plugin'), {options...})\n  .init();\n```\n\n---\n\nDeveloped by [Terra Eclipse](http://www.terraeclipse.com)\n---------------------------------------------------------\n\nTerra Eclipse, Inc. is a nationally recognized political technology and\nstrategy firm located in Aptos, CA and Washington, D.C.\n\n[http://www.terraeclipse.com](http://www.terraeclipse.com)\n\n\nLicense: MIT\n------------\n\n- Copyright (C) 2012 Carlos Rodriguez (http://s8f.org/)\n- Copyright (C) 2012 Terra Eclipse, Inc. (http://www.terraeclipse.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_id":"amino@1.0.2","dist":{"shasum":"482df297ce5ea3a0d176486a6bd326153d15dcbe","tarball":"https://registry.npmjs.org/amino/-/amino-1.0.2.tgz","integrity":"sha512-bG9oKa9uFuvW2SHYWCfnsaHx9jG1Q8PVAqLq6nQI7r9Ko0PqTqtktgnYJZStIkp8dQ3kS7c3LfFw3tEp1kymow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGUcYo7tzQLXHG+LypunCinKHMEJ0c9pzRx+L36RMC2uAiA3jumMEC5EzklabOQSuRVKI8s3Fc2Pt2hJR6js/qzdtg=="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"1.1.2":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustering framework for Node.js","version":"1.1.2","repository":{"type":"git","url":"http://github.com/amino/amino.git"},"license":"MIT","dependencies":{"idgen":"~1.1.1","amino-redis":"~0.0.4","amino-service":"~0.1.0","amino-request":"~0.2.0","amino-spec":"~0.1.0"},"homepage":"https://github.com/amino/amino","keywords":["load-balancing","failover","cluster","scalability","performance","service","pub/sub","high-availability","cloud","redundancy","ipc"],"devDependencies":{"mocha":"*"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"readme":"Amino\n=====\n\nClustering framework for Node.js\n\n[![build status](https://secure.travis-ci.org/amino/amino.png)](http://travis-ci.org/amino/amino)\n\nIdea\n----\n\nAmino is a toolkit for building clusterable, fault-taulerant apps in Node.js.\n\nFeatures:\n\n- Two robust communications patterns bundled: **publish/subscribe** and\n  **service/request**\n- Decentralized service registry\n- Supports [semver](http://semver.org) specifications\n- Automated host/port assignments and gossiping\n- Built-in load-balancing, sticky sessions, consistent hashing, and failover\n- Enables your app to have no single point of failure\n- Much, much faster and cooler than [hook.io](https://github.com/hookio/) ;)\n- Simple, extensible architecture\n\nInstallation\n------------\n\nIn the root of your project,\n\n```bash\n$ npm install --save amino\n```\n\nTo use the default configuration (requires [redis](http://redis.io) listening\nat `localhost:6379`), simply call:\n\n```javascript\nvar amino = require('amino').init();\n```\n\nPattern #1: publish/subscribe\n-----------------------------\n\n### Method: `amino.publish(ev [, arg, arg...])`\n\nPublishes an event across the cluster, with an optional payload.\n\n- `ev`: Event name, can be any string.\n- `arg`: Argument(s) to pass to subscriber handlers. Note that since data must be\n  serialized, custom javascript class instances will not survive intact. Native\n  objects will attempt to be unserialized via\n  [hydration](https://github.com/carlos8f/hydration).\n\n#### Example\n\n```javascript\namino.publish('cool stuff', {cool: true});\n```\n\n### Method: `amino.subscribe(ev, handler)`\n\nSubscribes to an event.\n\n- `ev`: Event name as passed to `amino.publish()`\n- `handler`: An event handler, which will be passed any arguments that were\n  part of the `publish()` call.\n\n#### Example\n\n```javascript\namino.subscribe('cool stuff', function (stuff) {\n  // stuff.cool == true\n});\n```\n\n### Method: `amino.unsubscribe(ev [, handler])`\n\nUnsubscribes from an event.\n\n- `ev`: Event name as passed to `amino.subscribe()`\n- `handler`: The event handler used with `amino.subscribe()`. If not specified,\n  unsubscribes all handlers of the event.\n\n#### Example\n\n```javascript\namino.unsubscribe('cool stuff', coolStuffHandler);\n```\n\nPattern #2: service/request\n---------------------------\n\n### Method: `amino.createService(service-name[@version] | spec, server)`\n\nRegisters an Amino service.\n\n- `service-name`: The name of your service (should be alpha-numeric/dashes)\n  with an optional [semver](http://semver.org) specification.\n- `spec`: Alternatively, you may specify the full spec of your service, if\n  you already have a port (you will then have to call `listen()` yourself):\n\n  ```javascript\n  var spec = {\n    service: \"service-name@0.1.0\",\n    host: \"server-a\",\n    port: 5678\n  };\n  var service = amino.createService(spec, server);\n  server.listen(spec.port);\n  ```\n- `server`: A server instance returned by `net.createServer()` or\n  `http.createServer()`.\n\nReturns: a `Service` instance.\n\n- (event) `listening`: called when the service has published itself and is\n  available for requests.\n- (property) `spec`: an object containing info about the service (gossiped\n  around the cluster)\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n- (method) `close(onClose)`: close the service and the associated server. Called\n  automatically when the server closes.\n- (event) `close`: called when the service closes.\n\n#### Example\n\nTo create a service, first create a `net` or `http` server:\n\n```javascript\nvar server = require('http').createServer(function (req, res) {\n  res.end('cool stuff');\n});\n```\n\nThen pass the server to `amino.createService()`, which will `listen()` on an\nemphemeral port and broadcast the availability of your service.\n\n```javascript\nvar service = amino.createService('cool-stuff@0.1.0', server);\n```\n\n### Method: `amino.request(service-name[@version], pathSpec [, options, onResponse])`\n\nMakes round-robin requests to Amino `http` services.\n\n- Alternate syntax:\n    - (simple GET): `amino.request('amino://service-name/' [, onResponse])`\n    - (generic HTTP): `amino.request('http://some-site/' [, onResponse])`\n    - (url in options): `amino.request(options, [, onResponse])`\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification. Can be specified as the first\n  parameter to `amino.request()`, or as the hostname in an amino url such as\n  `amino://service-name/`.\n- `pathSpec`: the path to request, with an optional method before it, such as\n  `POST /posts` or `DELETE /everything`.\n- `options`: options object to pass to the request, containing keys such as\n  `headers` and `body` (for posts, etc.). See\n  [mikeal/request](https://github.com/mikeal/request) for more options.\n- `onResponse`: callback to be called with the arguments `err, res, body` when\n  a response is received.\n\nReturns: an `http.ClientRequest` object.\n\n#### Example\n\n```javascript\nvar req = amino.request('cool-stuff@0.1.x', '/', function (err, res, body) {\n  // body == 'cool stuff'\n});\n```\n\n#### \"Sticky\" sessions\n\nAmino has support for [consistent hashing](http://en.wikipedia.org/wiki/Consistent_hashing)\nwhich can be used to route multiple requests to the same server.\n\nTo enable this feature, pass a special header called `X-Amino-StickyId`\nto requests, containing an IP address, cookie value, or other identifier to\nconsistently route requests with.\n\nNote that as servers are added or removed from the service, sticky routing\ncan be subject to change.\n\n### Method: `amino.requestService(service-name[@version], onSpec)`\n\nRequests a round-robined server for the specified service. Use this for `net`\nservices, or to manually get a server spec for a given service.\n\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification.\n- `onSpec`: callback to be called with a server `spec` object containing:\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n\nReturns: a `ServiceRequest` instance:\n\n- (event) `spec`: called with the `spec` object.\n- (property) `headers`: an array of headers for the request (used internally)\n\n#### Example\n\n```javascript\namino.requestService('cool-stuff@0.1.x', function (spec) {\n  // now we can connect to spec.host/spec.port\n});\n```\n\nConfiguration\n-------------\n\nAmino is bundled with three plugins by default:\n[amino-redis](https://github.com/amino/amino-redis),\n[amino-service](https://github.com/amino/amino-service), and\n[amino-request](https://github.com/amino/amino-request).\n\nCore plugins can be configured by passing options to `init()`.\n\n```javascript\nvar amino = require('amino')\n  .init({\n    redis: redis options...\n    service: service options...\n    request: request options...\n  });\n```\n\nTo disable a plugin, just pass `false`.\n\n### Redis options\n\n- To specify a single redis server, just pass a `host`, `port`, or `host:port` to\n  `init`, for example:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: \"1.2.3.4:5679\"\n    });\n  ```\n- To use multiple redis servers for failover/load-balancing, just pass an array\n  of servers. See [haredis](https://github.com/carlos8f/haredis) for more\n  information.\n- To pass options to the redis client:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: {\n        nodes: \"1.2.3.4:5679\",\n        node_redis/haredis options here...\n      }\n    });\n  ```\n\n### Service options\n\n- `host`: By default, Amino will auto-detect your server's network IP by\n  performing a DNS lookup on the server's `hostname`. If you already know the\n  correct IP (or hostname) to use, you can specify it with this option.\n\n### Request options\n\n- `specRequestThrottle`: interval (in ms) to throttle publishes when requesting\n  specs for a service. (Default: `5000`)\n- `specRequestInterval`: interval (in ms) to request \"straggler\" specs for all\n  services. (Default: `120000`)\n- `readyTimeout`: time (in ms) before a service is deemed \"ready\" after getting\n  the first spec. (Default: `200`)\n- (other options will also be passed to `http.Agent` constructor)\n\nExtending Amino\n---------------\n\nTo extend Amino, simply create a module which exports an `attach` function, which\nwill be called in Amino's scope:\n\n```javascript\nexports.attach = function (options) {\n  var amino = this;\n  // extend amino!\n});\n```\n\nTo load the plugin, call `amino.use()`:\n\n```javascript\nvar amino = require('amino')\n  .use(require('my-plugin'), {options...})\n  .init();\n```\n\n---\n\nDeveloped by [Terra Eclipse](http://www.terraeclipse.com)\n---------------------------------------------------------\n\nTerra Eclipse, Inc. is a nationally recognized political technology and\nstrategy firm located in Aptos, CA and Washington, D.C.\n\n[http://www.terraeclipse.com](http://www.terraeclipse.com)\n\n\nLicense: MIT\n------------\n\n- Copyright (C) 2012 Carlos Rodriguez (http://s8f.org/)\n- Copyright (C) 2012 Terra Eclipse, Inc. (http://www.terraeclipse.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_id":"amino@1.1.2","dist":{"shasum":"8edeb29dc4860d71e081c5a150bb13c04b5bd181","tarball":"https://registry.npmjs.org/amino/-/amino-1.1.2.tgz","integrity":"sha512-2ILhgArDiLvhsfmMW70emhH5QFbOYd7vIsS/NnPimNhPRUOMp5XJyZrHU2E9ryvFwotZk1ZGlwDO98LtQCImpA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEuMdL5CQmWM2ycFdedetJxdwpMkJeD3xwbhXasJ/WNTAiAvRH0p5a5IrjU5fAhzKnsio1yGeRSax7d7zQM4HeZoVA=="}]},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"1.1.3":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustering framework for Node.js","version":"1.1.3","repository":{"type":"git","url":"http://github.com/amino/amino.git"},"license":"MIT","dependencies":{"idgen":"~1.1.1","amino-redis":"~0.0.4","amino-service":"~0.1.0","amino-request":"~0.2.0","amino-spec":"~0.1.0"},"homepage":"https://github.com/amino/amino","keywords":["load-balancing","failover","cluster","scalability","performance","service","pub/sub","high-availability","cloud","redundancy","ipc"],"devDependencies":{"mocha":"*"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"readme":"Amino\n=====\n\nClustering framework for Node.js\n\n[![build status](https://secure.travis-ci.org/amino/amino.png)](http://travis-ci.org/amino/amino)\n\nIdea\n----\n\nAmino is a toolkit for building clusterable, fault-taulerant apps in Node.js.\n\nFeatures:\n\n- Two robust communications patterns bundled: **publish/subscribe** and\n  **service/request**\n- Decentralized service registry\n- Supports [semver](http://semver.org) specifications\n- Automated host/port assignments and gossiping\n- Built-in load-balancing, sticky sessions, consistent hashing, and failover\n- Enables your app to have no single point of failure\n- Much, much faster and cooler than [hook.io](https://github.com/hookio/) ;)\n- Simple, extensible architecture\n\nInstallation\n------------\n\nIn the root of your project,\n\n```bash\n$ npm install --save amino\n```\n\nTo use the default configuration (requires [redis](http://redis.io) listening\nat `localhost:6379`), simply call:\n\n```javascript\nvar amino = require('amino').init();\n```\n\nPattern #1: publish/subscribe\n-----------------------------\n\n### Method: `amino.publish(ev [, arg, arg...])`\n\nPublishes an event across the cluster, with an optional payload.\n\n- `ev`: Event name, can be any string.\n- `arg`: Argument(s) to pass to subscriber handlers. Note that since data must be\n  serialized, custom javascript class instances will not survive intact. Native\n  objects will attempt to be unserialized via\n  [hydration](https://github.com/carlos8f/hydration).\n\n#### Example\n\n```javascript\namino.publish('cool stuff', {cool: true});\n```\n\n### Method: `amino.subscribe(ev, handler)`\n\nSubscribes to an event.\n\n- `ev`: Event name as passed to `amino.publish()`\n- `handler`: An event handler, which will be passed any arguments that were\n  part of the `publish()` call.\n\n#### Example\n\n```javascript\namino.subscribe('cool stuff', function (stuff) {\n  // stuff.cool == true\n});\n```\n\n### Method: `amino.unsubscribe(ev [, handler])`\n\nUnsubscribes from an event.\n\n- `ev`: Event name as passed to `amino.subscribe()`\n- `handler`: The event handler used with `amino.subscribe()`. If not specified,\n  unsubscribes all handlers of the event.\n\n#### Example\n\n```javascript\namino.unsubscribe('cool stuff', coolStuffHandler);\n```\n\nPattern #2: service/request\n---------------------------\n\n### Method: `amino.createService(service-name[@version] | spec, server)`\n\nRegisters an Amino service.\n\n- `service-name`: The name of your service (should be alpha-numeric/dashes)\n  with an optional [semver](http://semver.org) specification.\n- `spec`: Alternatively, you may specify the full spec of your service, if\n  you already have a port (you will then have to call `listen()` yourself):\n\n  ```javascript\n  var spec = {\n    service: \"service-name@0.1.0\",\n    host: \"server-a\",\n    port: 5678\n  };\n  var service = amino.createService(spec, server);\n  server.listen(spec.port);\n  ```\n- `server`: A server instance returned by `net.createServer()` or\n  `http.createServer()`.\n\nReturns: a `Service` instance.\n\n- (event) `listening`: called when the service has published itself and is\n  available for requests.\n- (property) `spec`: an object containing info about the service (gossiped\n  around the cluster)\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n- (method) `close(onClose)`: close the service and the associated server. Called\n  automatically when the server closes.\n- (event) `close`: called when the service closes.\n\n#### Example\n\nTo create a service, first create a `net` or `http` server:\n\n```javascript\nvar server = require('http').createServer(function (req, res) {\n  res.end('cool stuff');\n});\n```\n\nThen pass the server to `amino.createService()`, which will `listen()` on an\nemphemeral port and broadcast the availability of your service.\n\n```javascript\nvar service = amino.createService('cool-stuff@0.1.0', server);\n```\n\n### Method: `amino.request(service-name[@version], pathSpec [, options, onResponse])`\n\nMakes round-robin requests to Amino `http` services.\n\n- Alternate syntax:\n    - (simple GET): `amino.request('amino://service-name/' [, onResponse])`\n    - (generic HTTP): `amino.request('http://some-site/' [, onResponse])`\n    - (url in options): `amino.request(options, [, onResponse])`\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification. Can be specified as the first\n  parameter to `amino.request()`, or as the hostname in an amino url such as\n  `amino://service-name/`.\n- `pathSpec`: the path to request, with an optional method before it, such as\n  `POST /posts` or `DELETE /everything`.\n- `options`: options object to pass to the request, containing keys such as\n  `headers` and `body` (for posts, etc.). See\n  [mikeal/request](https://github.com/mikeal/request) for more options.\n- `onResponse`: callback to be called with the arguments `err, res, body` when\n  a response is received.\n\nReturns: an `http.ClientRequest` object.\n\n#### Example\n\n```javascript\nvar req = amino.request('cool-stuff@0.1.x', '/', function (err, res, body) {\n  // body == 'cool stuff'\n});\n```\n\n#### \"Sticky\" sessions\n\nAmino has support for [consistent hashing](http://en.wikipedia.org/wiki/Consistent_hashing)\nwhich can be used to route multiple requests to the same server.\n\nTo enable this feature, pass a special header called `X-Amino-StickyId`\nto requests, containing an IP address, cookie value, or other identifier to\nconsistently route requests with.\n\nNote that as servers are added or removed from the service, sticky routing\ncan be subject to change.\n\n### Method: `amino.requestService(service-name[@version], onSpec)`\n\nRequests a round-robined server for the specified service. Use this for `net`\nservices, or to manually get a server spec for a given service.\n\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification.\n- `onSpec`: callback to be called with a server `spec` object containing:\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n\nReturns: a `ServiceRequest` instance:\n\n- (event) `spec`: called with the `spec` object.\n- (property) `headers`: an array of headers for the request (used internally)\n\n#### Example\n\n```javascript\namino.requestService('cool-stuff@0.1.x', function (spec) {\n  // now we can connect to spec.host/spec.port\n});\n```\n\nConfiguration\n-------------\n\nAmino is bundled with three plugins by default:\n[amino-redis](https://github.com/amino/amino-redis),\n[amino-service](https://github.com/amino/amino-service), and\n[amino-request](https://github.com/amino/amino-request).\n\nCore plugins can be configured by passing options to `init()`.\n\n```javascript\nvar amino = require('amino')\n  .init({\n    redis: redis options...\n    service: service options...\n    request: request options...\n  });\n```\n\nTo disable a plugin, just pass `false`.\n\n### Redis options\n\n- To specify a single redis server, just pass a `host`, `port`, or `host:port` to\n  `init`, for example:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: \"1.2.3.4:5679\"\n    });\n  ```\n- To use multiple redis servers for failover/load-balancing, just pass an array\n  of servers. See [haredis](https://github.com/carlos8f/haredis) for more\n  information.\n- To pass options to the redis client:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: {\n        nodes: \"1.2.3.4:5679\",\n        node_redis/haredis options here...\n      }\n    });\n  ```\n\n### Service options\n\n- `host`: By default, Amino will auto-detect your server's network IP by\n  performing a DNS lookup on the server's `hostname`. If you already know the\n  correct IP (or hostname) to use, you can specify it with this option.\n\n### Request options\n\n- `specRequestThrottle`: interval (in ms) to throttle publishes when requesting\n  specs for a service. (Default: `5000`)\n- `specRequestInterval`: interval (in ms) to request \"straggler\" specs for all\n  services. (Default: `120000`)\n- `readyTimeout`: time (in ms) before a service is deemed \"ready\" after getting\n  the first spec. (Default: `200`)\n- (other options will also be passed to `http.Agent` constructor)\n\nExtending Amino\n---------------\n\nTo extend Amino, simply create a module which exports an `attach` function, which\nwill be called in Amino's scope:\n\n```javascript\nexports.attach = function (options) {\n  var amino = this;\n  // extend amino!\n});\n```\n\nTo load the plugin, call `amino.use()`:\n\n```javascript\nvar amino = require('amino')\n  .use(require('my-plugin'), {options...})\n  .init();\n```\n\n---\n\nDeveloped by [Terra Eclipse](http://www.terraeclipse.com)\n---------------------------------------------------------\n\nTerra Eclipse, Inc. is a nationally recognized political technology and\nstrategy firm located in Aptos, CA and Washington, D.C.\n\n[http://www.terraeclipse.com](http://www.terraeclipse.com)\n\n\nLicense: MIT\n------------\n\n- Copyright (C) 2012 Carlos Rodriguez (http://s8f.org/)\n- Copyright (C) 2012 Terra Eclipse, Inc. (http://www.terraeclipse.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.","_id":"amino@1.1.3","dist":{"shasum":"724bdfa21e699873539c0c722930bf1ca64e7627","tarball":"https://registry.npmjs.org/amino/-/amino-1.1.3.tgz","integrity":"sha512-dL4WNWXTjjLMx4sjhWH3wtgzJZNSIfxrkHNLsWARprZSKfAFeeID3pv4flunr+sgQfH/toGuTVv4ySctrNpMiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBYTo8mXEIGNWYMXdoUB6JR/82Mx6D2p0yNJi8YVhxD9AiAraLw3UrhJLeofMjkQrhwWOKScYsl/s/892mGIPWE3Fw=="}]},"_npmVersion":"1.1.59","_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"1.1.4":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustering framework for Node.js","version":"1.1.4","repository":{"type":"git","url":"http://github.com/amino/amino.git"},"license":"MIT","dependencies":{"idgen":"~1.1.1","amino-redis":"~0.0.4","amino-service":"~0.1.0","amino-request":"~0.2.2","amino-spec":"~0.1.0"},"homepage":"https://github.com/amino/amino","keywords":["load-balancing","failover","cluster","scalability","performance","service","pub/sub","high-availability","cloud","redundancy","ipc"],"devDependencies":{"mocha":"*"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"readme":"![amino](http://dl.dropbox.com/u/31196457/amino-rectangle.png)\n\nClustering framework for Node.js\n\n[![build status](https://secure.travis-ci.org/amino/amino.png)](http://travis-ci.org/amino/amino)\n\nIdea\n----\n\nAmino is a toolkit for building clusterable, fault-taulerant apps in Node.js.\n\nFeatures:\n\n- Two robust communications patterns bundled: **publish/subscribe** and\n  **service/request**\n- Decentralized service registry\n- Supports [semver](http://semver.org) specifications\n- Automated host/port assignments and gossiping\n- Built-in load-balancing, sticky sessions, consistent hashing, and failover\n- Enables your app to have no single point of failure\n- Much, much faster and cooler than [hook.io](https://github.com/hookio/) ;)\n- Simple, extensible architecture\n\nInstallation\n------------\n\nIn the root of your project,\n\n```bash\n$ npm install --save amino\n```\n\nTo use the default configuration (requires [redis](http://redis.io) listening\nat `localhost:6379`), simply call:\n\n```javascript\nvar amino = require('amino').init();\n```\n\nPattern #1: publish/subscribe\n-----------------------------\n\n### Method: `amino.publish(ev [, arg, arg...])`\n\nPublishes an event across the cluster, with an optional payload.\n\n- `ev`: Event name, can be any string.\n- `arg`: Argument(s) to pass to subscriber handlers. Note that since data must be\n  serialized, custom javascript class instances will not survive intact. Native\n  objects will attempt to be unserialized via\n  [hydration](https://github.com/carlos8f/hydration).\n\n#### Example\n\n```javascript\namino.publish('cool stuff', {cool: true});\n```\n\n### Method: `amino.subscribe(ev, handler)`\n\nSubscribes to an event.\n\n- `ev`: Event name as passed to `amino.publish()`\n- `handler`: An event handler, which will be passed any arguments that were\n  part of the `publish()` call.\n\n#### Example\n\n```javascript\namino.subscribe('cool stuff', function (stuff) {\n  // stuff.cool == true\n});\n```\n\n### Method: `amino.unsubscribe(ev [, handler])`\n\nUnsubscribes from an event.\n\n- `ev`: Event name as passed to `amino.subscribe()`\n- `handler`: The event handler used with `amino.subscribe()`. If not specified,\n  unsubscribes all handlers of the event.\n\n#### Example\n\n```javascript\namino.unsubscribe('cool stuff', coolStuffHandler);\n```\n\nPattern #2: service/request\n---------------------------\n\n### Method: `amino.createService(service-name[@version] | spec, server)`\n\nRegisters an Amino service.\n\n- `service-name`: The name of your service (should be alpha-numeric/dashes)\n  with an optional [semver](http://semver.org) specification.\n- `spec`: Alternatively, you may specify the full spec of your service, if\n  you already have a port (you will then have to call `listen()` yourself):\n\n  ```javascript\n  var spec = {\n    service: \"service-name@0.1.0\",\n    host: \"server-a\",\n    port: 5678\n  };\n  var service = amino.createService(spec, server);\n  server.listen(spec.port);\n  ```\n- `server`: A server instance returned by `net.createServer()` or\n  `http.createServer()`.\n\nReturns: a `Service` instance.\n\n- (event) `listening`: called when the service has published itself and is\n  available for requests.\n- (property) `spec`: an object containing info about the service (gossiped\n  around the cluster)\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n- (method) `close(onClose)`: close the service and the associated server. Called\n  automatically when the server closes.\n- (event) `close`: called when the service closes.\n\n#### Example\n\nTo create a service, first create a `net` or `http` server:\n\n```javascript\nvar server = require('http').createServer(function (req, res) {\n  res.end('cool stuff');\n});\n```\n\nThen pass the server to `amino.createService()`, which will `listen()` on an\nemphemeral port and broadcast the availability of your service.\n\n```javascript\nvar service = amino.createService('cool-stuff@0.1.0', server);\n```\n\n### Method: `amino.request(service-name[@version], pathSpec [, options, onResponse])`\n\nMakes round-robin requests to Amino `http` services.\n\n- Alternate syntax:\n    - (simple GET): `amino.request('amino://service-name/' [, onResponse])`\n    - (generic HTTP): `amino.request('http://some-site/' [, onResponse])`\n    - (url in options): `amino.request(options, [, onResponse])`\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification. Can be specified as the first\n  parameter to `amino.request()`, or as the hostname in an amino url such as\n  `amino://service-name/`.\n- `pathSpec`: the path to request, with an optional method before it, such as\n  `POST /posts` or `DELETE /everything`.\n- `options`: options object to pass to the request, containing keys such as\n  `headers` and `body` (for posts, etc.). See\n  [mikeal/request](https://github.com/mikeal/request) for more options.\n- `onResponse`: callback to be called with the arguments `err, res, body` when\n  a response is received.\n\nReturns: an `http.ClientRequest` object.\n\n#### Example\n\n```javascript\nvar req = amino.request('cool-stuff@0.1.x', '/', function (err, res, body) {\n  // body == 'cool stuff'\n});\n```\n\n#### \"Sticky\" sessions\n\nAmino has support for [consistent hashing](http://en.wikipedia.org/wiki/Consistent_hashing)\nwhich can be used to route multiple requests to the same server.\n\nTo enable this feature, pass a special header called `X-Amino-StickyId`\nto requests, containing an IP address, cookie value, or other identifier to\nconsistently route requests with.\n\nNote that as servers are added or removed from the service, sticky routing\ncan be subject to change.\n\n### Method: `amino.requestService(service-name[@version], onSpec)`\n\nRequests a round-robined server for the specified service. Use this for `net`\nservices, or to manually get a server spec for a given service.\n\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification.\n- `onSpec`: callback to be called with a server `spec` object containing:\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n\nReturns: a `ServiceRequest` instance:\n\n- (event) `spec`: called with the `spec` object.\n- (property) `headers`: an array of headers for the request (used internally)\n\n#### Example\n\n```javascript\namino.requestService('cool-stuff@0.1.x', function (spec) {\n  // now we can connect to spec.host/spec.port\n});\n```\n\nConfiguration\n-------------\n\nAmino is bundled with three plugins by default:\n[amino-redis](https://github.com/amino/amino-redis),\n[amino-service](https://github.com/amino/amino-service), and\n[amino-request](https://github.com/amino/amino-request).\n\nCore plugins can be configured by passing options to `init()`.\n\n```javascript\nvar amino = require('amino')\n  .init({\n    redis: redis options...\n    service: service options...\n    request: request options...\n  });\n```\n\nTo disable a plugin, just pass `false`.\n\n### Redis options\n\n- To specify a single redis server, just pass a `host`, `port`, or `host:port` to\n  `init`, for example:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: \"1.2.3.4:5679\"\n    });\n  ```\n- To use multiple redis servers for failover/load-balancing, just pass an array\n  of servers. See [haredis](https://github.com/carlos8f/haredis) for more\n  information.\n- To pass options to the redis client:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: {\n        nodes: \"1.2.3.4:5679\",\n        node_redis/haredis options here...\n      }\n    });\n  ```\n\n### Service options\n\n- `host`: By default, Amino will auto-detect your server's network IP by\n  performing a DNS lookup on the server's `hostname`. If you already know the\n  correct IP (or hostname) to use, you can specify it with this option.\n\n### Request options\n\n- `specRequestThrottle`: interval (in ms) to throttle publishes when requesting\n  specs for a service. (Default: `5000`)\n- `specRequestInterval`: interval (in ms) to request \"straggler\" specs for all\n  services. (Default: `120000`)\n- `readyTimeout`: time (in ms) before a service is deemed \"ready\" after getting\n  the first spec. (Default: `200`)\n- (other options will also be passed to `http.Agent` constructor)\n\nExtending Amino\n---------------\n\nTo extend Amino, simply create a module which exports an `attach` function, which\nwill be called in Amino's scope:\n\n```javascript\nexports.attach = function (options) {\n  var amino = this;\n  // extend amino!\n});\n```\n\nTo load the plugin, call `amino.use()`:\n\n```javascript\nvar amino = require('amino')\n  .use(require('my-plugin'), {options...})\n  .init();\n```\n\n---\n\nDeveloped by [Terra Eclipse](http://www.terraeclipse.com)\n---------------------------------------------------------\n\nTerra Eclipse, Inc. is a nationally recognized political technology and\nstrategy firm located in Aptos, CA and Washington, D.C.\n\n[http://www.terraeclipse.com](http://www.terraeclipse.com)\n\n\nLicense: MIT\n------------\n\n- Copyright (C) 2012 Carlos Rodriguez (http://s8f.org/)\n- Copyright (C) 2012 Terra Eclipse, Inc. (http://www.terraeclipse.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","readmeFilename":"README.md","_id":"amino@1.1.4","dist":{"shasum":"4ea23a18b0f39f0e3fcae66690b1ebef5392d1fa","tarball":"https://registry.npmjs.org/amino/-/amino-1.1.4.tgz","integrity":"sha512-5KNiU0KVoodFZwWomOuC9dvGoAfi37rdr67UcTpIMwh08YsFLjD4CJ2sIog59eL/dhRe2ptei39Addtcm6jiww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCuX+OQu3KZbND8TYxr1dVa8qYL55qnMMC6EPw+IFujjgIgdzvhgB/l6NqTJ0Z8rSl+m1tZ5BihmfBCo5kJ4+70Uug="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"1.1.5":{"author":{"name":"Carlos Rodriguez","email":"carlos@s8f.org","url":"http://s8f.org/"},"name":"amino","description":"Clustering framework for Node.js","version":"1.1.5","repository":{"type":"git","url":"http://github.com/amino/amino.git"},"license":"MIT","dependencies":{"idgen":"~1.1.1","amino-redis":"~0.1.0","amino-service":"~0.1.0","amino-request":"~0.2.2","amino-spec":"~0.1.0"},"homepage":"https://github.com/amino/amino","keywords":["load-balancing","failover","cluster","scalability","performance","service","pub/sub","high-availability","cloud","redundancy","ipc"],"devDependencies":{"mocha":"*"},"engines":{"node":">= 0.6.0"},"scripts":{"test":"make test"},"readme":"![amino](http://dl.dropbox.com/u/31196457/amino-rectangle.png)\n\nClustering framework for Node.js\n\n[![build status](https://secure.travis-ci.org/amino/amino.png)](http://travis-ci.org/amino/amino)\n\nIdea\n----\n\nAmino is a toolkit for building clusterable, fault-taulerant apps in Node.js.\n\nFeatures:\n\n- Two robust communications patterns bundled: **publish/subscribe** and\n  **service/request**\n- Decentralized service registry\n- Supports [semver](http://semver.org) specifications\n- Automated host/port assignments and gossiping\n- Built-in load-balancing, sticky sessions, consistent hashing, and failover\n- Enables your app to have no single point of failure\n- Much, much faster and cooler than [hook.io](https://github.com/hookio/) ;)\n- Simple, extensible architecture\n\nInstallation\n------------\n\nIn the root of your project,\n\n```bash\n$ npm install --save amino\n```\n\nTo use the default configuration (requires [redis](http://redis.io) listening\nat `localhost:6379`), simply call:\n\n```javascript\nvar amino = require('amino').init();\n```\n\nPattern #1: publish/subscribe\n-----------------------------\n\n### Method: `amino.publish(ev [, arg, arg...])`\n\nPublishes an event across the cluster, with an optional payload.\n\n- `ev`: Event name, can be any string.\n- `arg`: Argument(s) to pass to subscriber handlers. Note that since data must be\n  serialized, custom javascript class instances will not survive intact. Native\n  objects will attempt to be unserialized via\n  [hydration](https://github.com/carlos8f/hydration).\n\n#### Example\n\n```javascript\namino.publish('cool stuff', {cool: true});\n```\n\n### Method: `amino.subscribe(ev, handler)`\n\nSubscribes to an event.\n\n- `ev`: Event name as passed to `amino.publish()`\n- `handler`: An event handler, which will be passed any arguments that were\n  part of the `publish()` call.\n\n#### Example\n\n```javascript\namino.subscribe('cool stuff', function (stuff) {\n  // stuff.cool == true\n});\n```\n\n### Method: `amino.unsubscribe(ev [, handler])`\n\nUnsubscribes from an event.\n\n- `ev`: Event name as passed to `amino.subscribe()`\n- `handler`: The event handler used with `amino.subscribe()`. If not specified,\n  unsubscribes all handlers of the event.\n\n#### Example\n\n```javascript\namino.unsubscribe('cool stuff', coolStuffHandler);\n```\n\nPattern #2: service/request\n---------------------------\n\n### Method: `amino.createService(service-name[@version] | spec, server)`\n\nRegisters an Amino service.\n\n- `service-name`: The name of your service (should be alpha-numeric/dashes)\n  with an optional [semver](http://semver.org) specification.\n- `spec`: Alternatively, you may specify the full spec of your service, if\n  you already have a port (you will then have to call `listen()` yourself):\n\n  ```javascript\n  var spec = {\n    service: \"service-name@0.1.0\",\n    host: \"server-a\",\n    port: 5678\n  };\n  var service = amino.createService(spec, server);\n  server.listen(spec.port);\n  ```\n- `server`: A server instance returned by `net.createServer()` or\n  `http.createServer()`.\n\nReturns: a `Service` instance.\n\n- (event) `listening`: called when the service has published itself and is\n  available for requests.\n- (property) `spec`: an object containing info about the service (gossiped\n  around the cluster)\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n- (method) `close(onClose)`: close the service and the associated server. Called\n  automatically when the server closes.\n- (event) `close`: called when the service closes.\n\n#### Example\n\nTo create a service, first create a `net` or `http` server:\n\n```javascript\nvar server = require('http').createServer(function (req, res) {\n  res.end('cool stuff');\n});\n```\n\nThen pass the server to `amino.createService()`, which will `listen()` on an\nemphemeral port and broadcast the availability of your service.\n\n```javascript\nvar service = amino.createService('cool-stuff@0.1.0', server);\n```\n\n### Method: `amino.request(service-name[@version], pathSpec [, options, onResponse])`\n\nMakes round-robin requests to Amino `http` services.\n\n- Alternate syntax:\n    - (simple GET): `amino.request('amino://service-name/' [, onResponse])`\n    - (generic HTTP): `amino.request('http://some-site/' [, onResponse])`\n    - (url in options): `amino.request(options, [, onResponse])`\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification. Can be specified as the first\n  parameter to `amino.request()`, or as the hostname in an amino url such as\n  `amino://service-name/`.\n- `pathSpec`: the path to request, with an optional method before it, such as\n  `POST /posts` or `DELETE /everything`.\n- `options`: options object to pass to the request, containing keys such as\n  `headers` and `body` (for posts, etc.). See\n  [mikeal/request](https://github.com/mikeal/request) for more options.\n- `onResponse`: callback to be called with the arguments `err, res, body` when\n  a response is received.\n\nReturns: an `http.ClientRequest` object.\n\n#### Example\n\n```javascript\nvar req = amino.request('cool-stuff@0.1.x', '/', function (err, res, body) {\n  // body == 'cool stuff'\n});\n```\n\n#### \"Sticky\" sessions\n\nAmino has support for [consistent hashing](http://en.wikipedia.org/wiki/Consistent_hashing)\nwhich can be used to route multiple requests to the same server.\n\nTo enable this feature, pass a special header called `X-Amino-StickyId`\nto requests, containing an IP address, cookie value, or other identifier to\nconsistently route requests with.\n\nNote that as servers are added or removed from the service, sticky routing\ncan be subject to change.\n\n### Method: `amino.requestService(service-name[@version], onSpec)`\n\nRequests a round-robined server for the specified service. Use this for `net`\nservices, or to manually get a server spec for a given service.\n\n- `service-name`: the name of the service to request, with an optional\n  [semver](http://semver.org) specification.\n- `onSpec`: callback to be called with a server `spec` object containing:\n    - `service`: the service name\n    - `version`: the service version, if specified\n    - `host`: the hostname the server is reachable from\n    - `port`: the server's listening port\n    - `id`: a unique string identifying the server\n\nReturns: a `ServiceRequest` instance:\n\n- (event) `spec`: called with the `spec` object.\n- (property) `headers`: an array of headers for the request (used internally)\n\n#### Example\n\n```javascript\namino.requestService('cool-stuff@0.1.x', function (spec) {\n  // now we can connect to spec.host/spec.port\n});\n```\n\nConfiguration\n-------------\n\nAmino is bundled with three plugins by default:\n[amino-redis](https://github.com/amino/amino-redis),\n[amino-service](https://github.com/amino/amino-service), and\n[amino-request](https://github.com/amino/amino-request).\n\nCore plugins can be configured by passing options to `init()`.\n\n```javascript\nvar amino = require('amino')\n  .init({\n    redis: redis options...\n    service: service options...\n    request: request options...\n  });\n```\n\nTo disable a plugin, just pass `false`.\n\n### Redis options\n\n- To specify a single redis server, just pass a `host`, `port`, or `host:port` to\n  `init`, for example:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: \"1.2.3.4:5679\"\n    });\n  ```\n- To use multiple redis servers for failover/load-balancing, just pass an array\n  of servers. See [haredis](https://github.com/carlos8f/haredis) for more\n  information.\n- To pass options to the redis client:\n\n  ```javascript\n  var amino = require('amino')\n    .init({\n      redis: {\n        nodes: \"1.2.3.4:5679\",\n        node_redis/haredis options here...\n      }\n    });\n  ```\n\n### Service options\n\n- `host`: By default, Amino will auto-detect your server's network IP by\n  performing a DNS lookup on the server's `hostname`. If you already know the\n  correct IP (or hostname) to use, you can specify it with this option.\n\n### Request options\n\n- `specRequestThrottle`: interval (in ms) to throttle publishes when requesting\n  specs for a service. (Default: `5000`)\n- `specRequestInterval`: interval (in ms) to request \"straggler\" specs for all\n  services. (Default: `120000`)\n- `readyTimeout`: time (in ms) before a service is deemed \"ready\" after getting\n  the first spec. (Default: `200`)\n- (other options will also be passed to `http.Agent` constructor)\n\nExtending Amino\n---------------\n\nTo extend Amino, simply create a module which exports an `attach` function, which\nwill be called in Amino's scope:\n\n```javascript\nexports.attach = function (options) {\n  var amino = this;\n  // extend amino!\n});\n```\n\nTo load the plugin, call `amino.use()`:\n\n```javascript\nvar amino = require('amino')\n  .use(require('my-plugin'), {options...})\n  .init();\n```\n\n---\n\nDeveloped by [Terra Eclipse](http://www.terraeclipse.com)\n---------------------------------------------------------\n\nTerra Eclipse, Inc. is a nationally recognized political technology and\nstrategy firm located in Aptos, CA and Washington, D.C.\n\n[http://www.terraeclipse.com](http://www.terraeclipse.com)\n\n\nLicense: MIT\n------------\n\n- Copyright (C) 2012 Carlos Rodriguez (http://s8f.org/)\n- Copyright (C) 2012 Terra Eclipse, Inc. (http://www.terraeclipse.com/)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is furnished\nto do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n","readmeFilename":"README.md","_id":"amino@1.1.5","dist":{"shasum":"6ff2dcd09dc87a91c9208ce99ebf604c670ea22b","tarball":"https://registry.npmjs.org/amino/-/amino-1.1.5.tgz","integrity":"sha512-6yONA4ucMaP68YFvreRo8EFnGE8g1e1nR5+0/niPIiwnfV+x1VWPyVRMdCoYg7wCRxgd8EuagsGy1LNYkIC0Lg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFvqyb+PIW7vMT7v9GY+64oy7Jyh6DzOwcLQHR6PFHkUAiEA64cj+nUzt9H/aGxq/k9e93wwvqgXMBfMTmodEqRzv0M="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"carlos8f","email":"carlos@s8f.org"},"maintainers":[{"name":"carlos8f","email":"carlos@s8f.org"}],"directories":{}},"2.0.3":{"name":"amino","version":"2.0.3","main":"dist/index.js","types":"dist/index.d.ts","license":"MIT","scripts":{"go":"tsc && node ./dist/index.js","test1":"tsc && node ./dist/tests/chat.js"},"dependencies":{"node-fetch":"^2.6.1","ws":"^7.3.1"},"devDependencies":{"@types/node-fetch":"^2.5.7","@types/ws":"^7.2.7"},"gitHead":"140a3dd72f0115cd6d175245187872576c178f93","description":"<div style=\"text-align: center\">\r     <h1>\r         Amino API\r     </h1>","_id":"amino@2.0.3","_nodeVersion":"14.4.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-QxkGB0EOvd0XomMJ7jP6pJc5z/ho8sI4dLSm6ErjUQrWIVrZZJCmG2rIIJxYWEy0trtmS5I97qxOOoYSZqNmvw==","shasum":"384df29e432ded9bf46d86c3c478cb90166fe012","tarball":"https://registry.npmjs.org/amino/-/amino-2.0.3.tgz","fileCount":27,"unpackedSize":41907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnIi+CRA9TVsSAnZWagAAOc0P/0t6nnPfPXGdp2wlDLDH\nw+h3Et2bJBhhbBESZwQcXjbTZeW9yTMWbMD5t2Vsqf+OZ8kziYXrxPFlhoQr\naJSEnBiaSNMX8AFCqt/JwcniY1V28365eYj6SBHTrYqho/i/Q/FyEelbXOL5\nAbDUHovjU6YBADJ0rZtLvl1Are+2kr4fJlShl8i8DR0aX1Bj7YoLxvTc/sdn\n+jvPMt78h0/hMkq6radWaqWGgDRbYg44xV5SaqW5P5chNdb/2Ofja4U5FmVg\nchrqZ3+faHg6+/1pvH0RtWNCdQPkA4nA+xjz/81Psp4Zho0DnreiXfeJ8v8b\n8EbcJ+8dMVFl8CqBCSPeTRQjlMvZjLFArn6xZge1Rhl1FMD/XUc1Z79sscZ3\n0LskrmYckydHHB5USVrd5YEwYP6IGEN3xgQGkXemOmEVxp7eManq07JEB64/\neOa6d3htVdo5VM/XdsFRcLvE67LuETri89rw94Ju81jMK02p9DGazi+2ZFiG\ntRzApb2oZ33athHqfzbiNNfJkLqF9ZLA02FGf/tix/JTDtOz3j/GGVzurRxF\n5AxxzJfixb/TljV8HgSVAfx6NJIcCohhxL2FNxJz9JkYf46PmqrzkULZ6xZb\nM7M5mQERM7plm1mof6R/LWcl3FzPJB8RoreWO3BLUMkso1VWJ0ZA55HZWAkh\n5LhG\r\n=QEKb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHsn7eH7Du1fLNbz1OZG6CNaWf3aHqIwbN/rbGdwLM4eAiAPFY0X3E7aeu+FWkJd87GV8eHnEnTD6W7LeRaZ+TxahQ=="}]},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_2.0.3_1604094142300_0.384785802353107"},"_hasShrinkwrap":false},"2.0.4":{"name":"amino","version":"2.0.4","main":"dist/index.js","types":"dist/index.d.ts","license":"MIT","bugs":{"url":"https://github.com/furry/amino-api/issues"},"keywords":["api","amino","amino api","social","social media"],"repository":{"type":"git","url":"git+https://github.com/furry/amino-api.git"},"scripts":{"go":"tsc && node ./dist/index.js","test1":"tsc && node ./dist/tests/chat.js"},"dependencies":{"node-fetch":"^2.6.1","ws":"^7.3.1"},"devDependencies":{"@types/node-fetch":"^2.5.7","@types/ws":"^7.2.7"},"gitHead":"140a3dd72f0115cd6d175245187872576c178f93","description":"<div style=\"text-align: center\">\r     <h1>\r         Amino API\r     </h1>","homepage":"https://github.com/furry/amino-api#readme","_id":"amino@2.0.4","_nodeVersion":"14.4.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-YfwBL8JuL5IU/CvreGt2ox3wvefbBnLvlYfxp0/4buz6CiTQWTao8QbyLFewjweMdWmIek/f0r8TVYRT77xbqA==","shasum":"5f9f2b974991649e985277369cb086d39cc1ffd7","tarball":"https://registry.npmjs.org/amino/-/amino-2.0.4.tgz","fileCount":27,"unpackedSize":42184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnIphCRA9TVsSAnZWagAAcncP/iYdscqIjnpE8unN0KrH\nc1qdF1ubyNCTsAMnaaGIiV83ycr4GPeEGo9QtedWnAwGyn2n6ZPGAo0DBgOR\n1nyGMUUgXfrRpRxLKKP5lOuwwBJw3AkvA/lZmh+LnMkzQ8sRCzidbaZ0pyRk\nJMntqmAmmmesFMRAj9GiuYNzLXA7W9i0OqlpzNvgiu+6xEzwswrTJ8Ohq+PX\nUzZQh5ces2VEUN+oFtxULfE9AdvPXxNS26iejEawgOWn79CiLtuHoj7RnAuE\nXq0UOElK8F/HMpC15jDkVRkL9mUcDIRZAkHXQZiYkB6msbhzt8nNC3phW/gF\nY2BEv+/Ia4PYXetEymcD8HU4h2w1pSkjWR6S7LuMnsa8C+KhC0unznqy5gf4\n0YRWkkO4otmW6jGaSrHIxSi0okTTM7/WHNn7pMEjHOIfNkfADzm19tiuT4Fw\ncfBXtnOg0zI/jsp7SfDoqjoQqCjA4cUIo+LJ+LahJxQ+crFo5hklCj3NIbUH\nsZvl59jcZ56cHvBhY+CaX1qMjoYW+A/kBKNKRe+HQ1129tfWVakb/gkqQjk9\ncnw7YUpBaW2Lk/1PMGeg+bjaTFE3059Tej3yuVbeVrL9SClGC2fXoDHS/nYd\nCXASR4gsVcO6vwhNXqKa9nLQm9Ms1FgdIsVt+zywfT2fcSom8s0A/FUaZpXG\ntcp2\r\n=w4DA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFxWo8iq3Ntgb86N4KQZRkk+TcEfYaA4CdhJ6QRDZuDhAiAIW6rmxWB3TjvVB4ffrN7SdRvz0nbZq93pCViyEQoaNQ=="}]},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_2.0.4_1604094560600_0.0006736713437638375"},"_hasShrinkwrap":false},"2.0.5":{"name":"amino","version":"2.0.5","main":"dist/index.js","types":"dist/index.d.ts","license":"MIT","bugs":{"url":"https://github.com/furry/amino-api/issues"},"keywords":["api","amino","amino api","social","social media"],"repository":{"type":"git","url":"git+https://github.com/furry/amino-api.git"},"scripts":{"go":"tsc && node ./dist/index.js","test1":"tsc && node ./dist/tests/chat.js"},"dependencies":{"node-fetch":"^2.6.1","ws":"^7.3.1"},"devDependencies":{"@types/node-fetch":"^2.5.7","@types/ws":"^7.2.7"},"gitHead":"140a3dd72f0115cd6d175245187872576c178f93","description":"<div style=\"text-align: center\">\r     <h1>\r         Amino API\r     </h1>","homepage":"https://github.com/furry/amino-api#readme","_id":"amino@2.0.5","_nodeVersion":"14.4.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-588tzKAdCH+XrcOs+RrJBoY7t2bOZaBOllD0FMpktlr+D98Dd4zrq60qV+jGwMGJHfSGVAR+c5HQHwhjUMdOdg==","shasum":"b4c41cbf0c15d0d3d94baf55720633fac5bf10d8","tarball":"https://registry.npmjs.org/amino/-/amino-2.0.5.tgz","fileCount":27,"unpackedSize":42176,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnIqRCRA9TVsSAnZWagAA3bEP/R9R5h95GDOeecvrhicj\nVETCtXNwvVlyiPzOtQm7j3pIOQE1LQblMK24UuSVn8b15rf+hgdJ9F7cuXoB\nNr1YcT0M62R9DgxN1IuL5v1QexXJ1R/dgDqKemj0ENgoaAgTytNB3u3HW0R2\n30fEEXwFu/HzAkViVFnjEWdrNckiGh2OlObMT38Lc03Sf9DhQ4C9ZHuN6//C\nx6LKucQlZWvBaIJf8kxdBEmZAR2fy0cnbP74ygr52/CcYlzCB+NgMrjMqayZ\nohh3MEfhPGwCA7vJ7MNUzDCverzUn+iIICsd6Kr5lr5Dh49p5hhQ6bOHTte+\nwBy61hy118AVMVTF0XGeJZSYFid4JzdRP2ZpuWTOb7im9HGvlRNysBSX0Uo6\nNzswDrWiFj00mFXUWUn1CtwKKjyKlHr1QOtltugU2dhdloFxK0YCU+5mLk0C\n1I4X92hdh7VtCWWijE5l4yTLuGjqIByE0zq2yQVmkF7+1lzKjLMXBoAl98Iz\nJ8FHUrTkWuGzSx0yhqCmM6eIhT+DXrZ62o+UmzR4ChXt9YbnVB43CYqkbsLc\nYcTuVz6aUO52oHJ4GuC/Ce2AD46B000AdD28n4kdZr/9F/pePca/ZpJxEbSF\nwEzaWa/kd4vbRRzRYFA5YMt5zSnhuKNRzoZZTjD8x81Do9qMNyxzTIbL9R+Q\nPn3z\r\n=IGCb\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCslnhLfan1f2GkDliJsXO3ZpuBwCBCTgXApfdeLtRzWgIhAILi//SQHyB7NIZiXbVLQFovgtvcB5f+f6OTTEy/24St"}]},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_2.0.5_1604094603326_0.7936514530535212"},"_hasShrinkwrap":false},"2.0.6":{"name":"amino","version":"2.0.6","main":"dist/index.js","types":"dist/index.d.ts","license":"MIT","bugs":{"url":"https://github.com/furry/amino-api/issues"},"keywords":["api","amino","amino api","social","social media"],"repository":{"type":"git","url":"https://github.com/furry/amino-api.git"},"scripts":{"go":"tsc && node ./dist/index.js","test1":"tsc && node ./dist/tests/chat.js"},"dependencies":{"node-fetch":"^2.6.1","ws":"^7.3.1"},"devDependencies":{"@types/node-fetch":"^2.5.7","@types/ws":"^7.2.7"},"description":"- A functioning chat-based api - Dynamic user fetching - Strong typings for all endpoints","_id":"amino@2.0.6","dist":{"shasum":"61d668592169a6d5bca258e30707528bb1a70233","integrity":"sha512-k38hkNZsKUfbEBiPsmi76DzqRDKbWUoUO0DpyFBF/fNPlOy7hmVnZXug4NXs+R6PPkNjQuMJxaDm4fEhi5BROA==","tarball":"https://registry.npmjs.org/amino/-/amino-2.0.6.tgz","fileCount":34,"unpackedSize":35613,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnbyxCRA9TVsSAnZWagAAqWsP/066M3T/k83U3fDnN5YQ\nTWc0p8XQSu4e9XH15XauK2aqbugcWT89sCp+YqyHxjhQNs/mCJac1ebLBREH\nacS7x4AEm0HtM/F065oymuxLtlLvDZ20tssOHFzLP7D7ECkbDMlsdngV9COO\ndlSj+74BwK98MtddAFi1pUirEZKMI1rj3TlKOTzb2vn3YEg4BaLoAiFpvXjX\ngZnGkMLkWZzoapOPHHNxoROKYK/v3RcM4AaiO6ls9O+0rvmfal0m3vN4z0rW\nuwiWI1JV0PAw9SYlZ9HvBM/sqiSVbQr24h8Lx7S6BE+nsZJggDjp6OODoJRF\nYwBsZ9reQcDGp2RDF6xVj5xvOVgnffNm8fDmrVZJjF97MJJRw55yo2zGxMVY\nXPkElHwU5SqgXccvlCsSLbdTyS9Y2tSSKhtXGedNogD/oF8wP1C4J3WZdATT\nhjMLn5OAgHKjyTVLWwWD3yaLcMiSJ9SAh+fjRPqsfh1nekYzdHrCfzUt5zj8\nkA2W3aUYOd1wkLbB3V2rFLmnmQBrsUug/yFZUco4jjS17GsyVnMx9ONWSp5t\njhOFEfZygvle8IwPpchUR2Sghca1NoGu+cEFLdlFbqyTNYuYgNlCHGt0c+fr\nM4dH63XRUHXCSCpg1lM1JWGLoe6xRaUpycceZMTvmscnKIZBrXlQZfyP+ihY\nB/Wa\r\n=WxWm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCZXvaaXd7OkFUUZ4VW5IVVOAkZFAI9Q3Qg7Wa2n0YjTgIhAKwXnURosIZzot+8uwzZ5tgZi/ehvPPU7Z8Ggpbt5BiR"}]},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_2.0.6_1604172977241_0.5717468713793967"},"_hasShrinkwrap":false},"3.0.0":{"name":"amino","version":"3.0.0","description":"Search for a community's id ```ts import * as Amino from \"amino\";","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"eslint":"eslint","lint":"yarn build && eslint dist/**/*.ts","fix":"yarn lint --fix","build":"tsc","go":"yarn build && node ./dist/index.js","test":"yarn build && node ./tests/runClient.js"},"repository":{"type":"git","url":"git+https://github.com/furry/amino.git"},"author":{},"license":"ISC","bugs":{"url":"https://github.com/furry/amino/issues"},"homepage":"https://github.com/furry/amino#readme","dependencies":{"file-type":"^16.2.0","node-fetch":"^2.6.1","ws":"^7.4.3"},"devDependencies":{"@types/file-type":"^10.9.1","@types/node":"^14.14.25","@types/node-fetch":"^2.5.8","@types/ws":"^7.4.0","@typescript-eslint/eslint-plugin":"^4.14.2"},"_id":"amino@3.0.0","dist":{"shasum":"1ae5ed46115088f34a868c433072361232309f31","integrity":"sha512-nuLtpuQSsadlae29f2kP104p49tEtVQ8glyjGFnK62q8zxgjaOZ2LVlif8/GnCTeP6yGhD8Kg1nvpc6k8YXn0A==","tarball":"https://registry.npmjs.org/amino/-/amino-3.0.0.tgz","fileCount":61,"unpackedSize":62065,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHwizCRA9TVsSAnZWagAAMpgQAIk9WH3xLl5edzwh/pRM\nq7veEkfN6/AqSfjgxmRBooDXjeEZrtxjgYwdwA7V+e1Eoxzvu/lQBwwUZ3eT\nyE7HLJZ/JKy2iNXsuBHbqjElB0YpmVPbk4jpvXtLWAiSaxBLHBPSyDmCE0ng\nOyUBkivv666rM1osWa8ozSmhnpFu/eETo51JPp5v6fFN/6BUObCm8vms4+aM\nxLVGZlehezxAVgB0cIz4MB2lq7VytGhUSBG2/1mlXmTHWJkLQG+BT86NEC12\nacXEI/BBuZwKPdr3QsaNauaZiXxPrR6z1Ccr+rG0+BHdra5hNtAfmTt6CMni\ngwYLW5wf7VAIRfs2hPcOlegj41r8SOViuUaQETqzlMgWnRsnz8mBxCTcEl4B\noJuqlDK1hCBhNobLMILkGsfcNU4Ht25F2TGrDRw+GDf/X+P4hw5A6Kw59pRS\nMSmcAbaAeX5NRxgUo/gt2QNXPuOxoFzHK5ajF1MnJHuGnDm6IWxtN6Hvkd8U\nfwugC/hVqeGkJp1Uu6UZST+XF+84k3AzhD14Hg+9bCj0tiA/dXGjDX72oOWn\noHF5LfK8sWyOBXPL8TYFig8nNP6rz14daIBPrfYnvyUcNWDpULCsu9YYm05J\n0KajbtW4adXNPbnrjVngSvBkEPqbOgjK7GZDnDvdF6Qv0Q6PjtJa+GDPGa/5\nmFYW\r\n=tMwR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE9oYIVQyMPATsfXwh54kvmp5WOMZu6Yc513TpCuhkH3AiEAoP7pCLNTcHSL+tTS53PeuZJXGhj/uKHUZWkfPVi6JFc="}]},"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_3.0.0_1612646579390_0.6265637299209479"},"_hasShrinkwrap":false},"3.0.1":{"name":"amino","version":"3.0.1","description":"Search for a community's id ```ts import * as Amino from \"amino\";","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"eslint":"eslint","lint":"yarn build && eslint dist/**/*.ts","fix":"yarn lint --fix","build":"tsc","go":"yarn build && node ./dist/index.js","test":"yarn build && node ./tests/runClient.js"},"repository":{"type":"git","url":"git+https://github.com/furry/amino.git"},"author":{},"license":"ISC","bugs":{"url":"https://github.com/furry/amino/issues"},"homepage":"https://github.com/furry/amino#readme","dependencies":{"file-type":"^16.2.0","node-fetch":"^2.6.1","ws":"^7.4.3"},"devDependencies":{"@types/file-type":"^10.9.1","@types/node":"^14.14.25","@types/node-fetch":"^2.5.8","@types/ws":"^7.4.0","@typescript-eslint/eslint-plugin":"^4.14.2"},"_id":"amino@3.0.1","dist":{"shasum":"6b13be77aee5f9455368920d4039f1a34842e7e8","integrity":"sha512-c7iARd1XwTldgvRxWGdbqmLAJVcUD8Zh+b1ogFO103HY9D+XRYv8yE3tn4B6k0LZmbyjN4lP4ZRRjS5YDwXAfA==","tarball":"https://registry.npmjs.org/amino/-/amino-3.0.1.tgz","fileCount":61,"unpackedSize":63349,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHw20CRA9TVsSAnZWagAAsIAP/A6Zfv9s5m3Ra/EbbOy8\nP/f4Ifg6Lmj//DW2WSaovjMMHR7Wdx5bRrhFJ1Fqzmx424rFIrq5bS1C9WR5\nIxCodfeEnObsBJyeYxUScedqYiVXEZAU6FftTv8dwnp6WNPNNogWU6aCOgcG\nuaW8rEgK0iYbQ+rmkPdQSouz4RShcx/tseWig/ZjrueXGyNI4CPPtPRQNK+F\nvM7s+/aQgYDB1Y96OBsa/SYgReWXI7CSnz/WAoWbmJcZxpUzQwhTPMxDNBJk\nT9R/uX+lk0qfo/8cUXtMHxkN2dmjlftcuptM1/xVzKQz5NYPA3bGz0kzaPE/\nRt/Nyp1jweqgjoKgBwBPxlQOaeDlEJPrxrz6gvnv3RcMUjsSBHtNbKs74rMx\nNbQymZSVmmgvSuKhb/KUY+HFxgRNzdED2XCLjD8veNprjk+00VPuIzsNXoCL\nDEwcylY3pxmpMOfwBt/1uIzXohylO6EQTBauYVK6XA6sIbEc69H34JSG2mjR\ne3u8dl62FMSZnh3UDwy3NZyQ7pm2oG15tBUMhA49OtiDE/npMrnScoxeFLQB\nuJUNNd1xViQQs/Hy0ZyGWHNR1sQZJjtAIzZc2muqaen5bnpiYXIj/CL8Hvd0\nXaz8TUBXxmNN8JC08M9LnWwbFqPKRWdvVYCKVc8x8bg99uGUd4a5UmB6c5gD\nYrW5\r\n=STJ3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6ktbMjxHCn7UbbXp1mSqhdx/0imZly1pDimQgvE5e2QIgZ+KkFQYUQhKD9W/hBQt2x/f1bq9XZLtG4jPG7TuBJX0="}]},"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_3.0.1_1612647859929_0.6449534971737945"},"_hasShrinkwrap":false},"3.0.2":{"name":"amino","version":"3.0.2","description":"Search for a community's id ```ts import * as Amino from \"amino\";","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"eslint":"eslint","lint":"yarn build && eslint dist/**/*.ts","fix":"yarn lint --fix","build":"tsc","go":"yarn build && node ./dist/index.js","test":"yarn build && node ./tests/runClient.js"},"repository":{"type":"git","url":"git+https://github.com/furry/amino.git"},"author":{},"license":"ISC","bugs":{"url":"https://github.com/furry/amino/issues"},"homepage":"https://github.com/furry/amino#readme","dependencies":{"file-type":"^16.2.0","node-fetch":"^2.6.1","ws":"^7.4.3"},"devDependencies":{"@types/file-type":"^10.9.1","@types/node":"^14.14.25","@types/node-fetch":"^2.5.8","@types/ws":"^7.4.0","@typescript-eslint/eslint-plugin":"^4.14.2"},"_id":"amino@3.0.2","dist":{"shasum":"f8949175bc20c103d907a5531d06976ddebc96fd","integrity":"sha512-D3gLWBYNa21Gjjn8TCsXY7igwsHezDMyovd6qOJy+BP3dVpqdA9glnCtK665GrbfNljvQAf6r4m0roq1zQdU3A==","tarball":"https://registry.npmjs.org/amino/-/amino-3.0.2.tgz","fileCount":61,"unpackedSize":63351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgH0mtCRA9TVsSAnZWagAAzqgP/Rt1qZYXaYiFwR/Pvtwu\ncmF3BUuFWSm/hX8p9KO4nKBWam9ge2pI+16aYsV2vWp6A+38rcFhq6uHfMnr\nIN5KTyBnt0l4TZllz1QmplhwKLX9JevHGNlnTMEHBdz2F2SVTWHjdk8YY7xY\nYPdPaTnEbGgT2xTEwc/fY+ztpTzTdPWG/33dWQoNog6FXm63ihzNMMN4R65X\nBmW/HWurOBly0jZL9imiBRTdWgQl1NAFD2syBLhEkv7PKmD0AZxtGx2L1YaC\n1WJTkL0JfxeQvSFav1uvHH5Un34jj0xC3a7UhEshtNRFzkRNsyNluS2Ghbxr\n9M/5AK3Yg94EAEW2SK0ao8eT2pA0TtgWFXMIE2HW/BVHAmZxoj99cByXVFwX\nlPx8/wbbUM/tUSeFPhRiQLrEDFXtF0XfV1RcvSwaPi/oDnrO3giqImOMImXz\nhUHzMcpfwvDkW774yMUbN/2cQkoXIa0gp9SUCwimHGiUACmKHGueCARCEwoG\neN4jCFimjvjCgHiX4KGGsanOdKAc4ho4tFemCg/c1yJzL0jnwF56nHcj88im\nZ61APoN5kzTzDkeOhU3d0ddSLMIf2TwhfxJ7CZ+zASlUbjwWZpU8X5GhNdTo\n7QI0THUx63bHqd2fQCoyC+SbdLYeUtR1BKanjHEldJC5QCxqQYjC6hkePa3A\nywKn\r\n=ZWdC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDo54LC4Nq2ax85+SgVR+wtIIRK+3SWgbFmJqPMpAV6bwIhAO9pD1i4N4dBSbI+or3sFGtJ7X5ucAjZ73a+uTShN6cw"}]},"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_3.0.2_1612663212802_0.09874880024963817"},"_hasShrinkwrap":false},"3.0.3":{"name":"amino","version":"3.0.3","description":"Search for a community's id ```ts import * as Amino from \"amino\";","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"eslint":"eslint","lint":"yarn build && eslint dist/**/*.ts","fix":"yarn lint --fix","build":"tsc","go":"yarn build && node ./dist/index.js","test":"yarn build && node ./tests/runClient.js"},"repository":{"type":"git","url":"git+https://github.com/furry/amino.git"},"author":{},"license":"ISC","bugs":{"url":"https://github.com/furry/amino/issues"},"homepage":"https://github.com/furry/amino#readme","dependencies":{"file-type":"^16.2.0","node-fetch":"^2.6.1","ws":"^7.4.3"},"devDependencies":{"@types/file-type":"^10.9.1","@types/node":"^14.14.25","@types/node-fetch":"^2.5.8","@types/ws":"^7.4.0","@typescript-eslint/eslint-plugin":"^4.14.2"},"_id":"amino@3.0.3","dist":{"shasum":"e92ad5273a7573624ede52a50607c5abd1863c37","integrity":"sha512-fa1c7D9IMFAcUoypjBO87VKwVD6KK4pJa4MVqMtqxQnykz/W1DQh8eCC16hTUJ9C7TWgprK4wvgT6EL8fubJBw==","tarball":"https://registry.npmjs.org/amino/-/amino-3.0.3.tgz","fileCount":64,"unpackedSize":67142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgIToWCRA9TVsSAnZWagAAHT8P/AhQ2W5iE8AX+h/7Xxol\n8kIQdv8/X0za1cxhBMVWbzm+aiZqsesH7yrDpz5hATSY9GFN3sCzmA97RDg9\n8DAIFDSGd0vvi//Bi+BvPEzQ9cxabzszfqU07sa11RTNa+F4zGfkqhSHsjFI\ncBZ8eb6xKCW2gPUY6PIKSC3baiuQBQDCzRxRD2lpzqz1ezgDMixfn02iQvga\nicBrs1NCxgNXNGHhiKyUXrTtI2UiRfeRaORLSeLr1jOfqWFXlgf51JZBNwAh\n8Uq2DHh1HZf/6ySbyj/huUkSZIWZzpJbBw52wqY60fmYadqCicmlolchQSTQ\n1xR0vXzwBh7SkNFF6ED+G25IH1RebAYtmmVZKPoLxxdCh3uZKExSTrw4XzgY\n9w5NLxx1D7HW4eOUebEbNyKnx1Wxm3w+VZmWsgxBTIyaoLmNX5zif/Ibhsvt\nd9A5YyjQUIjNVU3aqjbqg7wmr5HELCVvVpi+xVr8LxURDR5ZEGerrmGHupxh\nVzBCwNYKQ2luXNrIFYdwLAWLXjcoheG3gcVMv/EA2b0mfz2fgEOiIY58NKRK\n3j7YDToYdNfxCr+rLHh/pn+AUU9tRbaWXg8cOngV9c/6WmdDfy/b1OZdJT5L\nEkghD1EzuLhmJve3L3u3e7ZJ37I1DOZG5MG89mgS2KFlZeazpaHbZqnkjM16\n/mAK\r\n=u5lP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGXLF2X+EC0Ijobvi2qw4sWym51tBayRnFQAUvUzyA2uAiEAk7LDmgBluvfdifQIqnElp89dohSBBehf3CN5INLmUmU="}]},"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_3.0.3_1612790293991_0.8304363411639808"},"_hasShrinkwrap":false},"3.0.4":{"name":"amino","version":"3.0.4","description":"Search for a community's id ```ts import * as Amino from \"amino\";","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"eslint":"eslint","lint":"yarn build && eslint dist/**/*.ts","fix":"yarn lint --fix","build":"tsc","go":"yarn build && node ./dist/index.js","test":"yarn build && node ./tests/runClient.js"},"repository":{"type":"git","url":"git+https://github.com/furry/amino.git"},"author":{},"license":"ISC","bugs":{"url":"https://github.com/furry/amino/issues"},"homepage":"https://github.com/furry/amino#readme","dependencies":{"file-type":"^16.2.0","node-fetch":"^2.6.1","ws":"^7.4.3"},"devDependencies":{"@types/file-type":"^10.9.1","@types/node":"^14.14.25","@types/node-fetch":"^2.5.8","@types/ws":"^7.4.0","@typescript-eslint/eslint-plugin":"^4.14.2"},"_id":"amino@3.0.4","dist":{"shasum":"379298536872c2c603dd135a342d0a4050e6a0e6","integrity":"sha512-kd683dhxdTVI2BwlYSMqpxLSKAs+TQ1s+MsA7xYssI+4FizIUr/eiXlOLbVUeOGSHDOCRfLz7RsSITbw2HJpog==","tarball":"https://registry.npmjs.org/amino/-/amino-3.0.4.tgz","fileCount":64,"unpackedSize":67843,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPUYRCRA9TVsSAnZWagAAd/IP/174Z7FzIZ6jtUQ5zDW4\ne22TyIEHueskUju3aeTU4ROuMSuUS5skbW6prXctZsKLRaPEaBjng/wxyoR0\nPhx126YOuhG0R+HmOpoNXsg08HCGI1Xq2SHX6w8hMhJMwHZoI+26vp7VLkbz\nlNQ68GN78G/tRRzJSf5WjUGvKQD+PoePrA9XOhCTrnHaFiVwDh2vM+TeYhWh\nrmdefzOyp7NXa7PjJGR8Cg6M47yxy7ABrSa/+CwxYSJobSezfAs7anZsmlBC\nu12n+YFneyPZaVsrtmqd6xOJndUS3nQv5Q9xko/OVvueVzVVynVFlLLU0Cz2\n8buw33HrI3oTDbIDWnpFvfExiCiBQf1vZHAMFJkM4xXL/QMTTk3g89aKaaDt\nXXU9V8t3fbNP3VBTtDM2IbpFYIcJECMCoflmSduzFh8Qrbp8H28rVhxo/+aF\n+3M7DsIvPULkr56c4C19f4N3IBD2DlnbkPcwV91ptQUeXaev33BWKdrfkPBT\n/Dhwk9s3/zZuI0yxG0VShI5MroCrc6K26QeJ2651QKephrKiy8aKN9vXwhdR\n6TR/ODRkiWdacVkwSW0zCZYs5zkLkypFDI+GzhHaDIZRAEi56c8ZVbRSmuLb\ngnZ4yNTie4SqCEa2Cya92k5uh+M5Kvrp0h1VBTWl8lHjLPem+S4hnSZThqB3\n91te\r\n=oTbH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC+gUrJGjsVosVFBpnb08dM4Jahb/JQwdR+yHAeMdL+7wIhAP9rTw6aIVGfKKR9r0QBqT4gZD1HcxRw03FXdL/VGfif"}]},"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_3.0.4_1614628369366_0.691765324132088"},"_hasShrinkwrap":false},"3.0.5":{"name":"amino","version":"3.0.5","description":"Search for a community's id ```ts import * as Amino from \"amino\";","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"eslint":"eslint","lint":"yarn build && eslint dist/**/*.ts","fix":"yarn lint --fix","build":"tsc","go":"yarn build && node ./dist/index.js","test":"yarn build && node ./tests/runClient.js"},"repository":{"type":"git","url":"git+https://github.com/furry/amino.git"},"author":{},"license":"ISC","bugs":{"url":"https://github.com/furry/amino/issues"},"homepage":"https://github.com/furry/amino#readme","dependencies":{"file-type":"^16.2.0","node-fetch":"^2.6.1","ws":"^7.4.3"},"devDependencies":{"@types/file-type":"^10.9.1","@types/node":"^14.14.25","@types/node-fetch":"^2.5.8","@types/ws":"^7.4.0","@typescript-eslint/eslint-plugin":"^4.14.2"},"_id":"amino@3.0.5","dist":{"shasum":"3576f7db78afa706ae47d3104067200e2afd15be","integrity":"sha512-cYvRwZ2rflaA4Mhy7Msk6IzgliWIr0B7PRxgY2dy9ritRm+vBE+jJlIsNBz0cujHDrCl8RU2EaAKfKzM7dqfeQ==","tarball":"https://registry.npmjs.org/amino/-/amino-3.0.5.tgz","fileCount":64,"unpackedSize":67944,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgPUcHCRA9TVsSAnZWagAAEGUQAImkO65L2+tB+CKBnTEc\npV7x58xWsnJ3Vm0aQqkKu0dkHWXho15Oua9/F6awmLto3s0LeFmxedtVA3Nd\nITWZJXJ9lGPx2dC80R2ZpP/jnU39+OqbSthnqo+D53qn5kmSH6hI1iVphxGs\nVibo1d+jgYwxVn2N0pge5wir7nRD2S47OLVSkCJk7NyUVcWCAZNMqZmBjA3O\nSBeYubmPRUhpFSfWmeERCetFLE1Wzzv4B2CyAoJsi4BHnRe+M71tm3sqWkIL\n0WMN7cFALne4J2meO8Ror4oaMyOlZXmqbfvSx2TnWpoz6m7EYdkqGL0OJftu\nBe+54JnN1Cf0o0/dOWSXyHlSl6UnTDgm9F3XAVsEbkSNnfIuGbjlyRd20lFl\nM126TR74LOnS3uMOjT2KwXDn7K7pRhzSc+c1Dvf1tOVOTyoj68A9omU4ljLg\nXuLRygfPjH11/IjbwrE2NuKHCNisHGvaE+FTttyLYNe+z+irl9/NRtVgN4Bk\nphps5agIXeOee5awhRgdD+AbB1oL9MDas5qxHqafM40BH5iTXh4QwIDWJJJc\nE1/iRcrantO/uhocUaxuKyDrBVWnkmD/Ja8wpbjgVOtJeBzZSQ4A4T+fMfGI\nYN49C5sZ0xOGq01dYlr528mMaKMKiDDZ7fPwnehE13Tw05SQvW2V75DsmuYr\noL18\r\n=9+Vc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD4SkUFYcqkwxWZtB0SoEXvWPMriZUtQpvfOHEPvdkdfQIgJ9vwAb5jCg4eKCYpiquE7fHu3AS3d74JWwZDwKaqyDY="}]},"_npmUser":{"name":"blairspalace","email":"auroraspalace2@gmail.com"},"directories":{},"maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/amino_3.0.5_1614628614974_0.794189281233963"},"_hasShrinkwrap":false}},"readme":"<div style=\"text-align: center\">\n    <h1>\n        Amino\n    </h1>\n\n\n<a href=\"https://discord.gg/S8sw2ud\">\n    <img src=\"https://discordapp.com/api/guilds/769020183540400128/widget.png?style=banner2\" alt=\"Discord Banner 2\"/>\n</a>\n\n![Discord Shield](https://img.shields.io/github/commit-activity/m/furry/amino)\n![Size](https://img.shields.io/bundlephobia/min/amino)\n![Downloads](https://img.shields.io/npm/dw/amino)\n\n</div>\n\n<hr>\n\n<div style=\"text-align: center\">\n    <h2>An API wrapper around the Amino app.</h2>\n</div>\n\n<h1>Features</h1>\n\n<h2>Chat:</h2>\n<ul>\n    <li>Message Events</li>\n    <li>Join / Leave Events</li>\n    <li>Sending text-messages</li>\n    <li>Sending image-messages</li>\n    <li>Thread & DM support</li>\n</ul>\n\n<h2>Utility:</h2>\n<ul>\n    <li>Thread Searching</li>\n    <li>Community Searching</li>\n</ul>\n\n<h2>Classes & Documentation:</h2>\n<ul>\n    <li>\n        <a href=\"https://github.com/Furry/amino/tree/master/docs/client.md\">Client</a>\n    </li>\n    <li>\n        <a href=\"https://github.com/Furry/amino/tree/master/docs/wallet.md\">Wallet</a>\n    </li>\n    <li>\n        <a href=\"https://github.com/Furry/amino/tree/master/docs/community.md\">Community</a>\n    </li>\n    <li>\n        <a href=\"https://github.com/Furry/amino/tree/master/docs/account.md\">Account</a>\n    </li>\n    <li>\n        <a href=\"https://github.com/Furry/amino/tree/master/docs/message.md\">Message</a>\n    </li>\n    <li>\n        <a href=\"https://github.com/Furry/amino/tree/master/docs/thread.md\">Thread</a>\n    </li>\n    <li>\n        <a href=\"https://github.com/Furry/amino/tree/master/docs/profile.md\">Profile</a>\n    </li>\n</ul>\n\n## Examples:\n\nSearch for a community's id\n```ts\nimport * as Amino from \"amino\";\n\n// Uses default 'g' community if none is specified\nconst client = new Amino.Client();\n\nclient.login(\"myEmail@gmail.com\", \"myAccountsPassword\")\n.then(async () => {\n    const overwatchAmino = await client.searchCommunities(\"overwatch\")[0]\n    console.log(overwatchAmino.ndcId); // Pull the community ID\n})\n```\n\nStart a chatbot on a community:\n```ts\nimport * as Amino from \"amino\";\n\n// Furry Amino's ID (235196899)\nconst client = new Amino.Client(\"235196899\")\n\nclient.login(\"myEmail@gmail.com\", \"myAccountsPassword\")\n.then(() => {\n    // Start the websocket listener\n    // This is optional if you don't want to use chat features.\n    client.listen()\n})\n\nclient.on(\"message\", async (message) => {\n    if (message.content == \"!ping\") {\n        await message.reply(`${message.author.nickname}, Pong!`)\n    }\n})\n```\n\n# Contribution & Requests\n\n## Requests\nEnjoying the library? Good! Have something you want to see in it? Awesome! Please make a new issue in the github repository, and I'll get to it promptly!\n\nThere's still a lot of things I need to add, so if something's important to you, I'll put it at the top of my amino to-do list!\n\n## I need help!\nOkay, join my discord and I can help you with any issue. The discord is at the top of the ReadMe.\n\n## Contribution Guidelines\n- All pull requests must provide valid reason for the change / implementation\n- All **CORE CHANGES** require an issue made before the PR will be looked at\n- All PR's must follow the general structure of this code base.\n- New structures must be defined similarely to how they are in the ./src/structs directory, with the typings below the class.\n- If you have any questions, feel free to make an issue and i'll answer asap!\n\n\n<hr>\n<div style=\"text-align: center\"> If you enjoy my projects and have a few dollars to spare, buy me a coffee!</div>\n<div style=\"text-align: center\">\n<a href=\"https://www.buymeacoffee.com/ether\" target=\"_blank\"><img src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;-webkit-box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" ></a>\n</div>\n","maintainers":[{"name":"blairspalace","email":"auroraspalace2@gmail.com"}],"time":{"modified":"2022-06-13T02:44:44.237Z","created":"2012-05-01T01:35:27.014Z","0.1.0":"2012-05-01T01:35:28.532Z","0.1.1":"2012-05-01T04:41:30.629Z","0.2.0":"2012-05-03T01:04:28.088Z","0.3.0":"2012-05-03T03:48:42.123Z","0.4.0":"2012-05-04T03:32:50.081Z","0.5.0":"2012-05-04T19:23:07.148Z","0.5.1":"2012-05-04T19:27:11.462Z","0.6.1":"2012-05-05T01:10:19.298Z","0.7.0":"2012-05-07T22:01:43.504Z","0.8.0":"2012-05-08T23:34:15.096Z","0.9.0":"2012-05-21T19:44:09.513Z","0.10.0":"2012-05-24T19:57:50.333Z","0.11.0":"2012-06-18T22:02:46.459Z","0.11.1":"2012-06-20T19:59:25.618Z","0.12.0":"2012-06-26T18:57:35.787Z","0.12.1":"2012-07-13T18:28:31.453Z","0.13.0":"2012-07-17T22:32:49.373Z","0.13.1":"2012-07-17T23:02:27.845Z","0.13.3":"2012-07-18T02:02:37.793Z","0.13.4":"2012-07-26T00:00:56.511Z","0.13.5":"2012-08-09T00:38:40.313Z","0.13.6":"2012-08-15T20:28:16.349Z","1.0.0":"2012-08-24T01:23:09.689Z","1.0.2":"2012-08-24T02:50:47.893Z","1.1.2":"2012-08-24T19:07:34.388Z","1.1.3":"2012-10-11T20:52:44.973Z","1.1.4":"2013-03-28T21:16:35.245Z","1.1.5":"2013-05-22T00:45:00.183Z","2.0.3":"2020-10-30T21:42:22.473Z","2.0.4":"2020-10-30T21:49:20.811Z","2.0.5":"2020-10-30T21:50:03.756Z","2.0.6":"2020-10-31T19:36:17.379Z","3.0.0":"2021-02-06T21:22:59.518Z","3.0.1":"2021-02-06T21:44:20.032Z","3.0.2":"2021-02-07T02:00:12.919Z","3.0.3":"2021-02-08T13:18:14.182Z","3.0.4":"2021-03-01T19:52:49.476Z","3.0.5":"2021-03-01T19:56:55.124Z"},"users":{"fgribreau":true,"cpsubrian":true,"rlihm":true},"license":"ISC","readmeFilename":"readme.md","repository":{"type":"git","url":"git+https://github.com/furry/amino.git"},"bugs":{"url":"https://github.com/furry/amino/issues"},"homepage":"https://github.com/furry/amino#readme","author":{}}