{"_id":"sunny","_rev":"17-bdc034515e220ec31bd08313e03651cc","name":"sunny","description":"Multi-cloud datastore client.","dist-tags":{"latest":"0.0.6"},"versions":{"0.0.1":{"name":"sunny","description":"Multi-cloud datastore client.","version":"0.0.1","author":{"name":"Ryan Roemer","email":"ryan@loose-bits.com"},"url":"http://ryan-roemer.github.com/node-sunny","main":"index","engines":{"node":">=0.4.5"},"dependencies":{"xml2js":"0.1.9"},"devDependencies":{"jake":"0.1.14","findit":"0.1.1","jslint":"0.1.0","nodeunit":"0.5.3","node-uuid":"1.2.0","showdown":"0.0.1","async":"0.1.9","stylus":"0.15.1"},"repository":{"type":"git","url":"git://github.com/ryan-roemer/node-sunny.git"},"keywords":["sunny","cloud","amazon","aws","amazon web services","s3","simple storage service","google storage for developers"],"_npmJsonOpts":{"file":"/Users/rye/.npm/sunny/0.0.1/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"sunny@0.0.1","_engineSupported":true,"_npmVersion":"1.0.27","_nodeVersion":"v0.5.0","_defaultsLoaded":true,"dist":{"shasum":"459b12d77944d69ae389cf3905e2728e698063b6","tarball":"https://registry.npmjs.org/sunny/-/sunny-0.0.1.tgz","integrity":"sha512-BoPfTM0wTEoS2w2Q3y7Ua3JOqDdZtSGPtq2+KzyY70GGkwzn237ymFRLgRat0gCcMqKaLsockOZTKV3/MceRJQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEbMWUu0UF0WZ4dioCHnMuZNp2skx46gcy9XPa4wz1R3AiA0QM596B+Z4E96hLD0WCW4pFfyyIyPiYQqKKy4Mi+E7A=="}]},"maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}]},"0.0.2":{"name":"sunny","description":"Multi-cloud datastore client.","version":"0.0.2","author":{"name":"Ryan Roemer","email":"ryan@loose-bits.com"},"url":"http://ryan-roemer.github.com/node-sunny","main":"index","engines":{"node":">=0.4.5"},"dependencies":{"xml2js":"0.1.9"},"devDependencies":{"jake":"0.1.14","findit":"0.1.1","jslint":"0.1.0","nodeunit":"0.5.3","node-uuid":"1.2.0","showdown":"0.0.1","async":"0.1.9","stylus":"0.15.1"},"repository":{"type":"git","url":"git://github.com/ryan-roemer/node-sunny.git"},"keywords":["sunny","cloud","amazon","aws","amazon web services","s3","simple storage service","google storage for developers"],"_npmJsonOpts":{"file":"/Users/rye/.npm/sunny/0.0.2/package/package.json","wscript":false,"contributors":false,"serverjs":false},"_id":"sunny@0.0.2","_engineSupported":true,"_npmVersion":"1.0.30","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"bd0fec7e8762c7b6d620a7fa615ad296c59bbc03","tarball":"https://registry.npmjs.org/sunny/-/sunny-0.0.2.tgz","integrity":"sha512-nyjMtO+7tobLFDin449afdRf4o1uPaqyC6NopHqTVF2Tzu/pT4uWLU1hJAhm408sVL5hJkM5trF7dmC+GJrnIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbXQ7DIXAsFlzaL5MtM9frvDq0Gy7O3jXAwh+o5vSpHgIgfAPCivrNQMiSpNRz1I/wXSv0+YUfqCHg+ORzqzFx52E="}]},"maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}]},"0.0.3":{"name":"sunny","description":"Multi-cloud datastore client.","version":"0.0.3","author":{"name":"Ryan Roemer","email":"ryan@loose-bits.com"},"url":"http://sunnyjs.org/","main":"index","engines":{"node":">=0.4.5"},"dependencies":{"xml2js":"0.1.9"},"devDependencies":{"jake":"0.1.19","findit":"0.1.1","jslint":"0.1.0","nodeunit":"0.5.5","node-uuid":"1.2.0","showdown":"0.0.1","async":"0.1.9","stylus":"0.15.1"},"repository":{"type":"git","url":"git://github.com/ryan-roemer/node-sunny.git"},"keywords":["sunny","cloud","amazon","aws","amazon web services","s3","simple storage service","google storage for developers"],"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"_id":"sunny@0.0.3","_engineSupported":true,"_npmVersion":"1.0.103","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"abbf40eb7c00e03a409fdde31f67b9ac50454c13","tarball":"https://registry.npmjs.org/sunny/-/sunny-0.0.3.tgz","integrity":"sha512-JHbx5MhK2KVCAgbO/EgzA+5gOxHt+xdVTmGy248U9UGkuFAzX08djV8FEPgn/pokHDnLvc2jbbHDdLAQWKrxxw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgJ+kMqAd5haRJzmDKDA8AHo0OOyAEVSpK8MLFCVAFEwIhAJOySjZebE+MGiXMwWBTMbNd5jxGf296S/HZoI8V08hy"}]},"maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}]},"0.0.4":{"name":"sunny","description":"Multi-cloud datastore client.","version":"0.0.4","author":{"name":"Ryan Roemer","email":"ryan@loose-bits.com"},"url":"http://sunnyjs.org/","main":"index","engines":{"node":">=0.4.5"},"dependencies":{"xml2js":"0.1.9"},"devDependencies":{"jake":"0.1.19","findit":"0.1.1","jslint":"0.1.0","nodeunit":"0.5.5","node-uuid":"1.2.0","showdown":"0.0.1","async":"0.1.9","stylus":"0.15.1"},"repository":{"type":"git","url":"git://github.com/ryan-roemer/node-sunny.git"},"keywords":["sunny","cloud","amazon","aws","amazon web services","s3","simple storage service","google storage for developers"],"_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"_id":"sunny@0.0.4","_engineSupported":true,"_npmVersion":"1.0.103","_nodeVersion":"v0.4.9","_defaultsLoaded":true,"dist":{"shasum":"6342b1e730f788fa8ecf2a854b87dfcc6c1a812e","tarball":"https://registry.npmjs.org/sunny/-/sunny-0.0.4.tgz","integrity":"sha512-T+SPYzc++O8n6mESaj81yGEZzo806mRKAjm8uqEckgnFIhZE6K5sX1AeZ+gSIkg3fefV0+XgFF2CZHOrrU1SjA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDMde3+k7SyGpDWe3eFVr4F6Dkj0C7jgTC6aOcSJ7scawIgeAeC/KSeN67xpoJC0PuPvexJS0ggIzOic8+tmozYvPw="}]},"maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}]},"0.0.5":{"name":"sunny","description":"Multi-cloud datastore client.","version":"0.0.5","author":{"name":"Ryan Roemer","email":"ryan@loose-bits.com"},"url":"http://sunnyjs.org/","main":"index","engines":{"node":">=0.4.5"},"dependencies":{"xml2js":"0.1.9"},"devDependencies":{"jake":"0.1.19","findit":"0.1.1","jslint":"0.1.0","nodeunit":"0.7.4","node-uuid":"1.2.0","showdown":"0.0.1","async":"0.1.22","stylus":"0.15.1","cakepop":"0.1.0"},"repository":{"type":"git","url":"git://github.com/ryan-roemer/node-sunny.git"},"keywords":["sunny","cloud","amazon","aws","amazon web services","s3","simple storage service","google storage for developers"],"readme":"# Sunny.js\nSunny is a multi-cloud datastore client for [Node.js](http://nodejs.org).\nSunny aims for an efficient, event-based common interface to various cloud\nstores to enable cloud-agnostic programming that retains flexibility and\nspeed.\n\n* [Sunny.js Documentation](http://sunnyjs.org): Guides and API documentation.\n* [Sunny.js GitHub Page](http://github.com/ryan-roemer/node-sunny): Source\n  repository and issue tracker.\n\n## Features\n* Abstracts cloud provider differences. Focus on writing your application,\n  not juggling \"x-amz-\" vs. \"x-goog-\" headers.\n* Fully configurable headers, cloud headers, cloud metadata.\n* Sensible and cloud-agnostic error handling.\n* \"One-shot\" requests whenever possible.\n* SSL support.\n* Blob GET/PUT operations implement Node [Readable][ReadStream] and\n  [Writable][WriteStream] Stream interfaces.\n\n[ReadStream]: http://nodejs.org/docs/v0.4.9/api/streams.html#readable_Stream\n[WriteStream]: http://nodejs.org/docs/v0.4.9/api/streams.html#writable_Stream\n\n## Cloud providers\nSunny has full blob support for:\n\n* [Amazon S3][S3]: Amazon Simple Storage Service.\n* [Google Storage][GSFD]: Google Storage for Developers.\n\n[S3]: http://aws.amazon.com/s3/\n[GSFD]: http://code.google.com/apis/storage/\n\nFuture support is planned for:\n\n* [Rackspace Cloud Files][CF]: Rackspace Cloud Files\n* [OpenStack Storage][OS]: OpenStack Storage\n* (Maybe) local file system as a dummy cloud provider.\n\n[CF]: http://www.rackspacecloud.com/cloud_hosting_products/files/\n[OS]: http://openstack.org/projects/storage/\n\n## Installation / Getting Started\nInstall Sunny directly from [npm][NPM]:\n\n    $ npm install sunny\n\nor the [GitHub][SGH] repository:\n\n    $ git clone git@github.com:ryan-roemer/node-sunny.git\n    $ npm install ./node-sunny\n\n[NPM]: http://npmjs.org/\n[SGH]: https://github.com/ryan-roemer/node-sunny\n\nPlease read the docs (in source at \"docs/\") and review the \"live\" tests\n(in source at \"test/live\") that perform the entire range of Sunny operations\nagainst real cloud datastores.\n\n## Project Goals\n### A common cloud interface.\nThe cloud providers that Sunny supports (or will support) provide similar, but\nnot quite equivalent interfaces. Amazon S3 and Google Storage share a nearly\nidentical interface, as well as Rackspace Cloud Files and OpenStack Storage.\nHowever, there are some subtle differences, particularly with naming, errors,\nstatus codes, etc.\n\n### Extensible and accessible.\nNotwithstanding the goal for a common API, Sunny aims to provide access to\nas much of the internals of a given cloud datastore as possible. In the current\ndevelopment phase, that means exposing as many of the query / header / metadata\nfeatures and functionality in the underlying store as won't make maintaining\na common interface unpalatable.\n\n### Strong bias for \"one-shot\" requests.\nMost cloud operations can be performed with a single HTTP request. However,\nmany cloud client libraries add in extra HTTP calls along the way for say\na blob file GET request (perhaps first requesting an authorization URL,\nchecking the container path for existence, etc.).\n\nSunny aims to perform the minimum amount of calls possible by default. That\nsaid, sometimes it is good to have a few sanity check intermediate operations,\nso Sunny can make calls with validation (e.g., checking a bucket exists first).\n\n## Cloud Operations\n### Supported\nSunny currently supports the following cloud operations:\n\n* List containers:\n  ``connection.getContainers()``\n* PUT / DELETE container:\n  ``container.put()``,\n  ``container.del()``\n* List blobs in a container:\n  ``container.getBlobs()``\n* PUT / HEAD / GET / DELETE blob:\n  ``blob.put()``,\n  ``blob.putFromFile()``,\n  ``blob.head()``,\n  ``blob.get()``,\n  ``blob.getToFile()``,\n  ``blob.del()``\n\n### Future\nSunny is under rapid development. Some areas for enhancements:\n\n* Copy blob.\n* Update blob metadata without PUT.\n* Set blob / container ACL, policies, etc.","_id":"sunny@0.0.5","dist":{"shasum":"62960324c7520ee62b34cc725f1ae580579bbf31","tarball":"https://registry.npmjs.org/sunny/-/sunny-0.0.5.tgz","integrity":"sha512-N0N9oOyxu/IDdpDVIjo6mXd2fwz+YPfMfh5QQr6z+lqrpUlb6L9TG9EaAiA2d1t62nM9QxzW2PxBKC2tIZSCkw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD6jepkFFi0sGTd49DyWaNTU4vxhl2sVWHV5bj5/7sYSQIhAIy7HFXJ+OdEA3LrzUSBMRvL1fNKVUB7hn1QjWT58rhZ"}]},"_npmVersion":"1.1.59","_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}]},"0.0.6":{"name":"sunny","description":"Multi-cloud datastore client.","version":"0.0.6","author":{"name":"Ryan Roemer","email":"ryan@loose-bits.com"},"url":"http://sunnyjs.org/","main":"index","engines":{"node":">=0.4.5"},"dependencies":{"xml2js":"0.1.9"},"devDependencies":{"jake":"0.1.19","findit":"0.1.1","jslint":"0.1.0","nodeunit":"0.7.4","node-uuid":"1.2.0","showdown":"0.0.1","async":"0.1.22","stylus":"0.15.1","cakepop":"0.1.0"},"repository":{"type":"git","url":"git://github.com/ryan-roemer/node-sunny.git"},"keywords":["sunny","cloud","amazon","aws","amazon web services","s3","simple storage service","google storage for developers"],"readme":"# Sunny.js\nSunny is a multi-cloud datastore client for [Node.js](http://nodejs.org).\nSunny aims for an efficient, event-based common interface to various cloud\nstores to enable cloud-agnostic programming that retains flexibility and\nspeed.\n\n* [Sunny.js Documentation](http://sunnyjs.org): Guides and API documentation.\n* [Sunny.js GitHub Page](http://github.com/ryan-roemer/node-sunny): Source\n  repository and issue tracker.\n\n## Features\n* Abstracts cloud provider differences. Focus on writing your application,\n  not juggling \"x-amz-\" vs. \"x-goog-\" headers.\n* Fully configurable headers, cloud headers, cloud metadata.\n* Sensible and cloud-agnostic error handling.\n* \"One-shot\" requests whenever possible.\n* SSL support.\n* Blob GET/PUT operations implement Node [Readable][ReadStream] and\n  [Writable][WriteStream] Stream interfaces.\n\n[ReadStream]: http://nodejs.org/docs/v0.4.9/api/streams.html#readable_Stream\n[WriteStream]: http://nodejs.org/docs/v0.4.9/api/streams.html#writable_Stream\n\n## Cloud providers\nSunny has full blob support for:\n\n* [Amazon S3][S3]: Amazon Simple Storage Service.\n* [Google Storage][GSFD]: Google Storage for Developers.\n\n[S3]: http://aws.amazon.com/s3/\n[GSFD]: http://code.google.com/apis/storage/\n\nFuture support is planned for:\n\n* [Rackspace Cloud Files][CF]: Rackspace Cloud Files\n* [OpenStack Storage][OS]: OpenStack Storage\n* (Maybe) local file system as a dummy cloud provider.\n\n[CF]: http://www.rackspacecloud.com/cloud_hosting_products/files/\n[OS]: http://openstack.org/projects/storage/\n\n## Installation / Getting Started\nInstall Sunny directly from [npm][NPM]:\n\n    $ npm install sunny\n\nor the [GitHub][SGH] repository:\n\n    $ git clone git@github.com:ryan-roemer/node-sunny.git\n    $ npm install ./node-sunny\n\n[NPM]: http://npmjs.org/\n[SGH]: https://github.com/ryan-roemer/node-sunny\n\nPlease read the docs (in source at \"docs/\") and review the \"live\" tests\n(in source at \"test/live\") that perform the entire range of Sunny operations\nagainst real cloud datastores.\n\n## Project Goals\n### A common cloud interface.\nThe cloud providers that Sunny supports (or will support) provide similar, but\nnot quite equivalent interfaces. Amazon S3 and Google Storage share a nearly\nidentical interface, as well as Rackspace Cloud Files and OpenStack Storage.\nHowever, there are some subtle differences, particularly with naming, errors,\nstatus codes, etc.\n\n### Extensible and accessible.\nNotwithstanding the goal for a common API, Sunny aims to provide access to\nas much of the internals of a given cloud datastore as possible. In the current\ndevelopment phase, that means exposing as many of the query / header / metadata\nfeatures and functionality in the underlying store as won't make maintaining\na common interface unpalatable.\n\n### Strong bias for \"one-shot\" requests.\nMost cloud operations can be performed with a single HTTP request. However,\nmany cloud client libraries add in extra HTTP calls along the way for say\na blob file GET request (perhaps first requesting an authorization URL,\nchecking the container path for existence, etc.).\n\nSunny aims to perform the minimum amount of calls possible by default. That\nsaid, sometimes it is good to have a few sanity check intermediate operations,\nso Sunny can make calls with validation (e.g., checking a bucket exists first).\n\n## Cloud Operations\n### Supported\nSunny currently supports the following cloud operations:\n\n* List containers:\n  ``connection.getContainers()``\n* PUT / DELETE container:\n  ``container.put()``,\n  ``container.del()``\n* List blobs in a container:\n  ``container.getBlobs()``\n* PUT / HEAD / GET / DELETE blob:\n  ``blob.put()``,\n  ``blob.putFromFile()``,\n  ``blob.head()``,\n  ``blob.get()``,\n  ``blob.getToFile()``,\n  ``blob.del()``\n\n### Future\nSunny is under rapid development. Some areas for enhancements:\n\n* Copy blob.\n* Update blob metadata without PUT.\n* Set blob / container ACL, policies, etc.","readmeFilename":"README.md","_id":"sunny@0.0.6","dist":{"shasum":"6d0270ea92e64fdd3e51c56380d71d37ebaea0a2","tarball":"https://registry.npmjs.org/sunny/-/sunny-0.0.6.tgz","integrity":"sha512-NOvqwsHrvr/q2dPlRq4Q32cLE9GX4OJEUfMoJ5KFrmtjldNHkZGqyDIHX0uPQ7ygr+cXTUX4FSPJbV5QqEucIQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEHUmFiqbungx7DwmaZ6eh5GxqSFifipE9if1W16wolNAiEAzFT0dxmQAEnr6RbGESeRXcht7ToQNgnRFEfnTatKYmw="}]},"_npmVersion":"1.2.0","_npmUser":{"name":"ryan.roemer","email":"ryan@loose-bits.com"},"maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}]}},"maintainers":[{"name":"ryan.roemer","email":"ryan@loose-bits.com"}],"time":{"modified":"2022-06-27T02:06:21.344Z","created":"2011-08-24T23:16:33.971Z","0.0.1":"2011-08-24T23:16:34.366Z","0.0.2":"2011-10-13T22:56:23.326Z","0.0.3":"2011-10-29T19:12:15.167Z","0.0.4":"2011-11-09T13:14:06.748Z","0.0.5":"2012-09-08T17:31:22.416Z","0.0.6":"2013-01-14T04:32:56.517Z"},"author":{"name":"Ryan Roemer","email":"ryan@loose-bits.com"},"repository":{"type":"git","url":"git://github.com/ryan-roemer/node-sunny.git"},"users":{}}