{"_id":"omni","_rev":"47-822555402709507be2202c6f3e4cdcb7","name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","dist-tags":{"latest":"0.2.6"},"versions":{"0.0.1":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Framework for simple javascript applications","version":"0.0.1","repository":{"url":""},"main":"./lib/spt","dependencies":{"socket.io":"","express":"","backbone":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"gitHead":"f389f96fa7d79aa7656e7ddf0026676978195a83","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"BSD","_id":"omni@0.0.1","dist":{"shasum":"41f6d0ccb4492cce868ab59c14df66b7f23fd486","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.1.tgz","integrity":"sha512-+U//zUAk6Bs4I1S3kd7TLR5QXLmaB8z0EA4iyikhJskbeJP2opqViZ36qzYtgJclI9xiC0dEeSzHNLBqZE2QZQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDyW47N3Zy1OaqmDebYgID8xh0g4XgwMMLpFKku3RMv0AIgav6fFXJdOjlYxXZbWam5sJWwGr0IoAexGM5sqsfXUdU="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.2":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Framework for simple javascript applications","version":"0.0.2","repository":{"type":"git","url":"https://github.com/Mashlol/omni"},"main":"./lib/omni","dependencies":{"socket.io":"","express":"","backbone":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.2","dist":{"shasum":"1f48780c3aa791678f03aa9a0c53b0ce9d072203","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.2.tgz","integrity":"sha512-PX5l2Aprm6BisbRrjp33yQox4D9QuYSxuOH/3Xv6c4Nc8rxVDUJpUmrI21I73+E3oPfRt/if8Q8t7ACQbc9STw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDqr8u3xdhIkO0STJ0LQspRXo1qw2Sz81e9P9q/z0XCTAIhAOFbjt3nb7gEqdA1Rm1Py+/ABL1npdBm6TX6przEwKG2"}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.3":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Framework for simple javascript applications","version":"0.0.3","repository":{"type":"git","url":"https://github.com/Mashlol/omni"},"main":"./lib/omni","dependencies":{"socket.io":"","express":"","backbone":"","ejs":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.3","dist":{"shasum":"819e94cf592d77b0b2f1bcc3ca8ee02d78ca63bb","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.3.tgz","integrity":"sha512-iBYCriSNM5Yhe9D8gFH3+VESLZSsXI+Sw07H6W6MstJVawdA5UUXK2A4gfI5RbekKD+A81lQxHRPg+v6cHSjkg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBAv4D1arNwFoPFq/cTYAglLmrZK02ryD3Ds8jD/Wh2EAiEAvF84+6cJ8aZBk737vSYV0BLKEHGPulYTikFtdZ5Upj8="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.4":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.0.4","repository":{"type":"git","url":"https://github.com/Mashlol/omni"},"main":"./lib/omni","dependencies":{"socket.io":"","express":"","backbone":"","ejs":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.4","dist":{"shasum":"ab8cf6b7e37a65f5d5618ca91b083611a6cb1eaf","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.4.tgz","integrity":"sha512-FUzUVRNBe7SSdEMx7kBm1lboewp+uwMY8YplQmAnTktnzGQ1VM63Z0RWrViB+i6fpV5YY/B4soKxqrQa/NJQVw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIaFPQh3oEzXRUjmdfLTUDfb/IhkvVYJOnG9FXYrzMmwIgSmw1troPJSolJDoQFH8CFUsjmJBiu3qvoDHcZjRrwnw="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.5":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.0.5","repository":{"type":"git","url":"https://github.com/Mashlol/omni"},"main":"./lib/omni","dependencies":{"socket.io":"","express":"","backbone":"","ejs":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.5","dist":{"shasum":"82ad1f7ed2af4530d14223bb4f97c8740ae83480","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.5.tgz","integrity":"sha512-Hs/Tq8f2/bXtpe5l9SK0f9gOs4pmngLNEVkbElSXqpMkE8V9sZbXsdgG/H+h5vepAf+joVVNDIWemXV3HnDabg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBpp6qsXXl85sLhEkmG4tI5MJXWtBs91nGSDgPs8ml8+AiBrMgHSIjtF6brH+HQB+Ni4OnrtfGn6k+DyMmQYuDhfhQ=="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.6":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.0.6","repository":{"type":"git","url":"https://github.com/Mashlol/omni"},"main":"./lib/omni","dependencies":{"socket.io":"","express":"","backbone":"","ejs":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.6","dist":{"shasum":"ed96f8a961b3b7c719ba621b643e5848cb8e02d8","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.6.tgz","integrity":"sha512-SHAlZozUSzx6R8VjQOjuVc+Op/vNfoykNnS1s0H8jta+VkZBnS0tmfu7iB8TKLgsibsqyFmnqwkt31ANpVexcQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDyPNihXfkTJOLx4kLHkJXDQeIbdc3++xIVnrcvw64BvAiAJYmSIjyqhmHlBNmRiJz4COB95QY7wO45v4LkJEpQkQg=="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.7":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.0.7","repository":{"type":"git","url":"https://github.com/Mashlol/omni"},"main":"./lib/omni","dependencies":{"socket.io":"","express":"","backbone":"","ejs":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.7","dist":{"shasum":"40b88ec5c77e4e28be23cca2ff12f64f0b859f63","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.7.tgz","integrity":"sha512-3wTPnupekfCWB4f/A+dTbmueY7jKlIGKvF4pxmXOauy9okftBqSmsimy5HawlznE85lI1o1DyMszXj9HI1PUZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFnBYjb2nSLJolPDsurI3CGjgwj8hwRPV9S5UejhYWFWAiAftjmsTty/ZaWXmLGjOJ3GmhN8aDN0VnPgGlAw6LF0NA=="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.8":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.0.8","repository":{"type":"git","url":"https://github.com/Mashlol/omni"},"main":"./lib/omni","dependencies":{"socket.io":"","express":"","backbone":"","ejs":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.8","dist":{"shasum":"ed44b44c679b2ea676e0509339448d1a0051df28","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.8.tgz","integrity":"sha512-CzstlRkiuEHDaaTyOQ8y9CtbTebuHvBrebV2fJzZV8EOPsMfs4fNDdx2lmqIWk+ro7mVv/O42tl21alS0JKEpw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChgodrczh1xbo6FccOxAL2iiWrh/+pDZBDh3T0WikN0wIhANmUn7VYaQFd5yMEXg9/PUXSkWoonpK5ZWvIMqQlKzFi"}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.9":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.0.9","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"","express":"","backbone":"","ejs":"","uglify-js":""},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.9","dist":{"shasum":"0f00cd742c472761794b1fd78c15b0aab04a3953","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.9.tgz","integrity":"sha512-2GRtuVPfBsoaWKub/rL9Vl6SVtAH/kdQY7pQj/3MedEiwqWO14YLZ8drRMXKhsGBoPNlxbg9NraF2XYHHdTUyA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGrdJfU3TgX4NGpvFnIyIBxXnZ/iQLeVn3xP1mXPFp0uAiBI1sx3P2p1jsAcZDhBLhYxqy1Cr6oMPJ4tgesS7eC/Cg=="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.10":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.0.10","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.10","dist":{"shasum":"82853b050e7294e72bc71f8ff43d9cccb0c671a1","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.10.tgz","integrity":"sha512-MSuIM/4ADFl8ZbCr6PkWfeHUukpAuKYaPHTgW/8/ALxTP7UUVN4U3cmY6su3gJfQZqPC8xBZHy4Amht8MCux7A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICLsu7t5Z5ppCGWE0DKPO1T3aL7y2gtnehIXi839ftv8AiBLQTf7GN4GdhEbrNkC3qarGmaoGc0ZMeWsHGmLkxWJeQ=="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.0.11":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.0.11","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.0.11","dist":{"shasum":"14c18d6172aac62a14b7d570931fc7ab8c26e964","tarball":"https://registry.npmjs.org/omni/-/omni-0.0.11.tgz","integrity":"sha512-2Ukrhb8ScqAQzDLhJ5APMyxnWpnASx+WyP6zxRxty3GPugloPrfbqillbecuM57Btg1lqjw1f20qUrl3PfwFkA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFLKmI8LRZbdA1IMdM4t5ZsHnLffvjYb9Bn/ppDghjzkAiEA84g3irn8F68miAYlP7Ex2HlNINyPEVqvzsSNQTeNhRY="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.1.0":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.1.0","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.1.0","dist":{"shasum":"465fe340b77afc277c55d67319ed3d08dd11b9d2","tarball":"https://registry.npmjs.org/omni/-/omni-0.1.0.tgz","integrity":"sha512-21tgPnoiYxoXeLTePdygz85IIc8+w+3n+5eSrqAN8K7kS2tyal9UeaHO8g0kCXU/n6t9+WPq5tT/2vpGJcleIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC3Ihp4FQYYwyfqbSuyscEI+IZfjGESmwuIZYgL1zphKQIgDjfOF2XRAyVSX08Py8lhx0xc5iSEJ3XP0ycR0OJHEtI="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.1.1":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.1.1","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.1.1","dist":{"shasum":"99cd75da469fdd21ccd5fe0cec3835582403c88d","tarball":"https://registry.npmjs.org/omni/-/omni-0.1.1.tgz","integrity":"sha512-QJIk3tKc1HxVDt7KXEJO9qXgq9l89dG7cPyxhJPErKXqeEqIxfpdSgIBWmBJno9gOzLjJ1a7tLQV36+mjG4AkQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEDvMb225rVMzpp8AnfTmfx4VWTjm2As90Wcb5TzLlOiAiEAgtEQeB2GYzeBdefztmi44ROoxBlZU2LotZqqxwa1jMM="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.2.0":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.2.0","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"license":"MIT","_id":"omni@0.2.0","dist":{"shasum":"af33111c5b7401f972b1309143b56bb1a09faf7b","tarball":"https://registry.npmjs.org/omni/-/omni-0.2.0.tgz","integrity":"sha512-NPFxzTHYN+bGCIfubAD0FZ/ecr5IyTgNgC/6yraqMIfpcwgyQ2tDkWwFCcg5Dy2Vc98PzHd/H7nmXZTttCUkIQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHc7zIqtiTr1U1sCsQED6xWf37wERrzBEUvMDVHizw3rAiBp4Fr+Fk+glvUkSlbTPnJMhRaIB9xOThSH6N6dwjoPTg=="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.2.1":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.2.1","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{"mocha":"*","should":"*","sinon":"*"},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"make test"},"license":"MIT","_id":"omni@0.2.1","dist":{"shasum":"7fd3cb847269619fd725185f36afedfca4fdb3ac","tarball":"https://registry.npmjs.org/omni/-/omni-0.2.1.tgz","integrity":"sha512-HBZPZhUm8VB9+F2eOHNfrg5etWEO8eqn3BSDhdspjV1w10z0rqRoQfMjjIbF4zM0bQOAa9cJYtRymxSE5AldKw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHO3/niPJpZI6RVatOhLr1ZUJiFPoxA6wNbDeO0hqArvAiBn5Seu2lLdwCTcp2dgMBT1hcP+c2Yl7Coddni3QnjhNg=="}]},"_from":".","_npmVersion":"1.2.18","_npmUser":{"name":"mashlol","email":"kevin@kevinbedi.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.2.2":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.2.2","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{"mocha":"*","should":"*","sinon":"*"},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"make test"},"license":"MIT","_id":"omni@0.2.2","dist":{"shasum":"b7301d882da0fc67424e6e4eeea7660baf36f601","tarball":"https://registry.npmjs.org/omni/-/omni-0.2.2.tgz","integrity":"sha512-uO5+sUtRjL5Tto1NjbcnECkXCZuAkhAajS1YWwEViWxXIMAhzYUHrEFS7O8xVuMvg0bnYw0RTpcmI9mmFSJKgw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCaihPOtBDO1iXmwUtAroFAjmiJ0aG/EqluEe/033S/mwIgExBA21UIDtb9p+FswmOV/ZvHOp9Kp7HGt+7QChUQ/5Q="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.2.3":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.2.3","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{"mocha":"*","should":"*","sinon":"*"},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"make test"},"license":"MIT","_id":"omni@0.2.3","dist":{"shasum":"b22ef8543520e691d8517007573e00881a6d3b3b","tarball":"https://registry.npmjs.org/omni/-/omni-0.2.3.tgz","integrity":"sha512-lL09UJzw3f4Ry1iDhlSzYj5bZFehRvAtT53oLexo/rqU1G+K0O2zkqcznl7tNNE0vAmZLSBgaaaeox0pxCtLYg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH6UP2nLLikWAIsrgSgoxjnGVFmasztzBiNyQYbNRXSNAiEAjBAOHgkZn/jcxVWSatAgCrF9Cf6NyZeJzqCwoH2/CPQ="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.2.4":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.2.4","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{"mocha":"*","should":"*","sinon":"*"},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"make test"},"license":"MIT","_id":"omni@0.2.4","dist":{"shasum":"b270c1e12bcf7207dafc88d6a60a458f72bb782f","tarball":"https://registry.npmjs.org/omni/-/omni-0.2.4.tgz","integrity":"sha512-V1ucaUwqtAjREy0ZkmuqGlqlnQ868HuNP9ohnO9+rk/2swLld1pHFbM+/5XXDoGeamKUYclzCdbqlXRd1d00CA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8ukYVmbzETrnLztkQ3shlMyxxS2Mpb8lFLuRy54XgnQIgbQbhPdXu86h1f7kdzYIWBAz88VvO9dWhIlo0L8oBEG8="}]},"_from":".","_npmVersion":"1.2.14","_npmUser":{"name":"mashlol","email":"kevin.m.bedi@gmail.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.2.5":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.2.5","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{"mocha":"*","should":"*","sinon":"*"},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"make test"},"license":"MIT","bugs":{"url":"https://github.com/Mashlol/omni/issues"},"_id":"omni@0.2.5","dist":{"shasum":"688609d2082535076234296c191fc1872441f57c","tarball":"https://registry.npmjs.org/omni/-/omni-0.2.5.tgz","integrity":"sha512-V46EWnVDYqwA4J1Iv3coJW5sC9t9ehc9QWBqnrtdjc0xBQ9m2JQbe+S5uxXTi8tHlVhvSlYAPbWXgU1UgO/jsg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC4g3Ke+7/dSPs0puE2D0PeKTC0Khjhxly8qSL0YUWoeAIhAIGoKZRIVZV3If3x1yRXpX8NVmaTsTJbi3pq+YaMHHRh"}]},"_from":".","_npmVersion":"1.2.25","_npmUser":{"name":"mashlol","email":"kevin@kevinbedi.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}]},"0.2.6":{"author":{"name":"Kevin Bedi"},"name":"omni","description":"Omni.js - Javascript framework to easily build real-time web apps.","version":"0.2.6","repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"main":"./lib/omni","dependencies":{"socket.io":"0.9.14","express":"3.2.0","backbone":"1.0.0","uglify-js":"2.2.5"},"devDependencies":{"mocha":"*","should":"*","sinon":"*"},"optionalDependencies":{},"engines":{"node":"*"},"scripts":{"test":"make test"},"license":"MIT","bugs":{"url":"https://github.com/Mashlol/omni/issues"},"homepage":"https://github.com/Mashlol/omni","_id":"omni@0.2.6","_shasum":"a38ddf493e894ad3935bee4bb542480acfb88cbe","_from":".","_npmVersion":"1.4.9","_npmUser":{"name":"mashlol","email":"kevin@kevinbedi.com"},"maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}],"dist":{"shasum":"a38ddf493e894ad3935bee4bb542480acfb88cbe","tarball":"https://registry.npmjs.org/omni/-/omni-0.2.6.tgz","integrity":"sha512-M9/1CjUMg03lUWwZ5xXtf6MhRkZY12A97OQhOfULN0JtFRl4jjh6XjER0DqEU0A8XY51qOPnKwxlL9oYIZrQJg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCgOcl+dI704RZJD6tS6myY60L6xJixz/u4o42pmxCJqQIhALKD0zh2iqKWnh3ZlmSsmqtsTr/F+IV1JqKbqBlv7t2D"}]}}},"readme":"![Omni.js](http://i.imgur.com/S1C8rDt.png)\n\n[![Build Status](https://travis-ci.org/Mashlol/omni.png?branch=master)](https://travis-ci.org/Mashlol/omni)\n\n\n[![ScreenShot](http://i.imgur.com/5ONLYhK.png)](http://youtu.be/2UPGrQgLJqQ)\n\nOmni.js is a framework designed to make building real-time apps with Backbone.js extremely easy.  Simply define models, collections, and events on the server, and when a client connects it will automatically be given all of the information it has permission to see.  Using Backbone.js from the client, you can then update the models and collections directly (i.e. `Omni.collections.players.findWhere({name: \"Jim\"}).set(\"x\", 10);`, and all of the new information will be propagated by the server to any other clients who have permission to see these changes.  You can define who has permission to read and write to models, and who has permission to add and remove models from collections.\n\n# Installation\n```sh\nnpm install omni\n```\n\n# Example Apps\n\n* https://github.com/Mashlol/omni-chat-example - a very simple of example of how to use Omni.js effectively. - Demo: http://chat.kevinbedi.com\n* https://github.com/Mashlol/omni-arena - a much more complex usage of Omni.js, building a realtime HTML5 arena game. - Demo: http://arena.kevinbedi.com\n* https://github.com/jasmeeto/sketch-server - an online canvas-based sketch pad that syncs to all users in real-time. - Demo: http://sketch-server.herokuapp.com/\n\n\n# Usage\n```javascript\nvar Omni = require(\"omni\");\nvar collection = new Omni.Collection([\n    new Omni.Model({\n        name: \"foo\",\n        bar: \"baz\"\n    })\n]);\nOmni.listen(3000, {\n    collection: collection\n});\n```\nThe `.listen(port, collections, events, options)` method takes in a port, a list of instantiated collections, and a list of event objects.  It returns a hash containing `webSocket` and `express` which contain the raw `webSocket` and `express` servers.  The options parameter can take the following options:\n\n* `static` - boolean, defaults to true.  If false, Omni.js will not serve your `/public` folder automatically.\n* `development` - boolean, defaults to false.  If true, Omni.js will serve the client javascript unminified.\n\n\nThere is also a list of collections available on the Omni object, `Omni.collections`, which should work the same on both the client and the server.  This way, within models and collections, you can use `Omni.collections` to keep code working on both the client and server.  The `Omni.collections` object is only set after you have called `Omni.listen()`.\n\n\n# Connection Properties\n`connection.sync()` - This method can be called on any `connection` object that is passed between the permissions and event methods, and will run through each collection and each model and check if there are any changes in the permissions, and push the changes to the client.  This is useful for instances where a change in one model might trigger some permission changes in another model or collection.  For example, if a user has permission to read all other users in the same \"room\" as them, and you change that users room, you need to call this event to propagate all the new players they might be able to see, and remove all the old players they can no longer see.  Note that this is a relatively intense method, use it wisely.\n\n`connection.socket` - The raw socket.io socket object associated with this connection.\n\n`connection.connections` - Returns an object containing all of the other connection objects, where the key is the socket ID.  You can do things like:\n\n```javascript\nfor (var x in connection.connections) {\n    connection.connections[x].socket.emit(\"myCustomEvent\", {some: args});\n}\n```\n\n# Models\n```javascript\nvar Omni = require(\"omni\");\n\nvar Player = Omni.Model.extend({\n    defaults: {\n        online: false,\n        x: 0,\n        y: 0,\n        name: \"name\",\n        password: \"hash\"\n    },\n\n    readPermission: function (connection, property) {\n        if (property != undefined && property != \"password\" && this.get(\"online\") || property == undefined) {\n            return true;\n        } else if (connection.player != null && connection.player == this) {\n            return true;\n        }\n        return false;\n    },\n\n    writePermission: function (connection, property, value) {\n        if  (connection.player != null && connection.player == this) {\n            return true;\n        }\n        return false;\n    }\n});\n```\nA model is essentially the same as a model in Backbone, however a `readPermission(connection, property)` and `writePermission(connection, property, value)` method can be supplied to determine whether or not there is permission to read or write to this model.\n\nThe `readPermission()` method should return a value even if the `property` parameter is not passed in.  The result of the method should be whether or not ANY attributes will be available.  The method is called with only the `connection` parameter before checking each property individually, as if it returns false we won't need to iterate over all of the parameters.  The `connection` parameter should be always be passed in, however.\n\nAll of the methods and properties you define in a model will also be propagated to the client.  Prefix properties with an \"_\" if you wish to keep them on the server only.  The `readPermission` and `writePermission` methods are kept on the server only.  All of the backbone methods are also kept on the server, so overriding native Backbone methods is currently not possible on the client, but should still work on the server.  If you wish to access or modify collections, use `Omni.collections` as this will work on both the client and the server.\n\n\n# Collections\n```javascript\nvar Omni = require(\"omni\");\n\nvar Players = Omni.Collection.extend({\n    model: Player,\n    createPermission: function(connection) {\n        return true;\n    },\n    destroyPermission: function(connection) {\n        if (connection.player.get(\"admin\")) {\n            return true;\n        }\n        return false;\n    }\n});\n```\nA collection is essentially the same collection as Backbone, however a `createPermission(connection)` and `destroyPermission(connection)` method can be supplied to determine whether or not there is permission to add or remove models to/from this collection.\n\nAll of the methods and properties you define in a collection will also be propagated to the client.  Prefix properties with an \"_\" if you wish to keep them on the server only.  The `createPermission` and `destroyPermission` methods are kept on the server only.  All of the backbone methods are also kept on the server, so overriding native Backbone methods is currently not possible on the client, but should still work on the server.  If you wish to access or modify collections, use `Omni.collections` as this will work on both the client and the server.\n\n\n# Events\n```javascript\nvar loginEvent = {\n    run: function (connection, collections, data) {\n        if (connection.player) {\n            return {error: \"Already logged in.\"};\n        }\n        if (data.name && data.password) {\n            var player = collections.players.findWhere({name: data.name, password: data.password});\n            if (player) {\n                connection.player = player;\n                console.log(player.get(\"name\") + \" logged in.\");\n                return {success: \"Logged in.\"};\n            }\n        }\n        return {error: \"Incorrect username or password.\"};\n    }\n}\n```\nEvents allow for custom code to be run on the server when the client triggers the event.\n\nEvents are passed into the `listen` method of Omni as a hash, such as `Omni.listen(1337, {collection: new Omni.Collection()}, {loginEvent: loginEvent});`.\n\nPredefined Events: `connect`, and `disconnect`.  Any event passed in with these keys will be called automatically, and ignored in your `Omni.trigger()` calls on the client.  The third (data) parameter will not be passed in for these events.\n\n# Client\nEverything you should need should be readily available to access on the client.  Right now, Omni.js automatically serves the `public` folder of your app at the port you specify.  It also serves a client file (omni.js) at `/omni.js`.  The client requires socket.io and Backbone, and Backbone requires Underscore, so your `index.html` head might look something like:\n\n```html\n<head>\n    <script src=\"/socket.io/socket.io.js\"></script>\n    <script src=\"http://underscorejs.org/underscore-min.js\"></script>\n    <script src=\"http://backbonejs.org/backbone-min.js\"></script>\n    <script src=\"/omni.js\"></script>\n\n    <script src=\"./your-custom-script.js\"></script>\n</head>\n```\n\nThe omni.js file automatically gives you the following:\n\n`Omni.collections (alias: window.Collections)` - All the collections you defined on the server and passed into the `listen` method are automatically available in the global `Collections` object on the client, provided they have permission to see it.  If I passed in a collection to the server with `Omni.listen(1337, {messages: new Omni.Collection()});`, I'd be able to access this collection on the client with `Collections.messages`.  Then I can do things like `Collections.messages.add({message: \"Hello!\"})` and the server will propagate this new message to all clients who have permission to see it.\n\n`Omni.trigger(eventName, args, callback)` - This is how you trigger custom events.  Once you trigger this custom event, the server will execute the code that you wrote inside the `event hash` with the name `eventName`.  For example, with the `loginEvent` defined above, if the client sends `Omni.trigger(\"loginEvent\", {name: \"foo\", password: \"bar\"});`, assuming a user with the name \"foo\" and password \"bar\" exists, it will set connection.player to that player model.  This allows for the server to change the permissions of this user now, maybe to allow them to modify their own model more freely, or grant admin access, or other actions.  The callback takes in a single parameter, which is the response hash.\n\n`Omni.ready(callback)` - You can call `Omni.ready()` any number of times, providing callbacks.  When Omni has downloaded the initial data from the server, these callbacks will be executed.  If you call `Omni.ready()` after Omni has already initialized, your callback will be called immediately.\n\n`Omni.on(eventName, callback)` - Add a callback for a certain client sided event.  Currently the only event is `sync`, triggered when the server calls `connection.sync()` on this client's connection.\n\n\n# A note on persistance\n\nOmni.js does nothing to interface with any databases, and so there is currently no persistance by default.  You can, however, use Backbone's methods just like you would normally to persist objects.  Unfortunately Backbone relies on jQuery or Zepto for this, using `$.ajax` to fetch information from the server.  In order to get the Backbone methods that use `$.ajax` to work with Omni.js, you need to set `Backbone.$` to an object with has an `ajax` method.  E.g. `require(\"backbone\").$ = require(\"jquery\");`  Then you can use methods like `Collection.fetch()` or `Model.save()`, or any other persistance method just like normal.\n\n\n# Contributing\nFeel free to contribute fixes, features or refactors.  Just fork & submit a pull request.  Please make sure the tests pass, and to update them if need be.\n\n\n# IRC\nHop on `#omni.js` on `irc.freenode.net` to discuss Omni.js, or to ask questions.\n\n\n# Testing\nRun `make test` or `npm test` to run the tests.\n\n\n# Changelogs\nv0.2.6\n\n* Fix server listeners for model changes not triggering client updates for the client who triggered the server update \n\nv0.2.5\n\n* Fix removing models from collections\n\nv0.2.4\n\n* Quick bugfix\n\nv0.2.3\n\n* Fix client bug on sync which was adding listeners multiple times\n* make sure change event is not triggered on the client when an objects oid and defaults are set by the server\n\nv0.2.2\n\n* Fix typo/bug causing `sync()` to be called every connect.\n\nv0.2.1\n\n* Add tests\n* Add alias for `recheckAllPermissions()` to be `sync()` or `resync()`\n* Add `Omni.collections` on the server.\n\nv0.2.0\n\n* Add the concept of OIDs, which are used internally by Omni to keep objects in sync with clients.  This way, when clients add new models, they can still update their attributes without having to assign an ID.  The server can also assign an ID after saving to a database, and the client will be updated based on the models OID.\n* No longer reset collections when connection.recheckAllPermissions() is called.  This way there is no need for updating references on the client every time the permissions are rechecked.\n\nv0.1.1\n\n* Add new option `development` which if true will serve the client javascript unminified.\n* The url property for collections and models is now hidden from the client, defaults from models are now shown to the client.\n\nv0.1.0\n\n* Methods and properties from models and collections now propagate to the client.  This does not include overridden Backbone methods.  Any method prefixed with \"_\" is kept private to the server.\n* Fixed serving of /public with no options param - Thanks to [@evanbarter](https://github.com/evanbarter) for this fix!\n\nv0.0.11\n\n* Remove leaked events on client\n* Fix leak on server\n* Add options parameter to Omni.listen(), currently with just the `static` option.\n\nv0.0.10\n\n* Lock versions for dependencies\n* No longer use EJS to render the port into the client file, instead just use javascript to find the port.\n\nv0.0.9\n\n* The client.js file is now served minified.\n* Added `Omni.on(eventName, callback)` on the client side.  Currently the only event is `recheckPermissions`, triggered when the server calls `connection.recheckAllPermissions()` on this client's connection.\n* Added `connection.connections` to the `connection` object so you can access other connections within events or permission methods.\n\nv0.0.8\n\n* Add `connection.recheckAllPermissions()` method to recheck permissions and propagate all data for that connection.\n* Move `connect` event trigger to occur before Omni.js sends any data to the client.  This way you can modify the connection object to change the outcome of the data that ends up being propagated.\n\n\n# License - MIT\n\nCopyright © 2013 Kevin Bedi\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n","maintainers":[{"name":"mashlol","email":"kevin.m.bedi@gmail.com"}],"time":{"modified":"2022-06-22T21:12:06.289Z","created":"2013-04-21T23:38:49.243Z","0.0.1":"2013-04-21T23:38:51.512Z","0.0.2":"2013-04-21T23:56:06.393Z","0.0.3":"2013-04-23T01:40:58.521Z","0.0.4":"2013-04-24T00:31:55.746Z","0.0.5":"2013-04-24T00:33:03.162Z","0.0.6":"2013-04-25T01:51:23.986Z","0.0.7":"2013-04-26T02:37:14.161Z","0.0.8":"2013-04-27T03:16:41.574Z","0.0.9":"2013-04-29T02:57:41.629Z","0.0.10":"2013-04-29T03:36:22.977Z","0.0.11":"2013-05-03T00:10:20.571Z","0.1.0":"2013-05-07T22:38:06.526Z","0.1.1":"2013-05-10T18:50:25.424Z","0.2.0":"2013-05-13T16:50:56.393Z","0.2.1":"2013-05-16T15:38:22.506Z","0.2.2":"2013-05-16T22:36:02.032Z","0.2.3":"2013-05-16T23:03:50.228Z","0.2.4":"2013-05-16T23:16:17.378Z","0.2.5":"2014-05-23T03:30:38.247Z","0.2.6":"2014-06-01T06:14:35.232Z"},"author":{"name":"Kevin Bedi"},"repository":{"type":"git","url":"git://github.com/Mashlol/omni.git"},"users":{"mashlol":true,"blueyes":true},"license":"MIT","readmeFilename":"README.md","bugs":{"url":"https://github.com/Mashlol/omni/issues"},"homepage":"https://github.com/Mashlol/omni"}