{"_id":"remjs","_rev":"35-338d736240007c9d917a302732c0d0cf","name":"remjs","description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","dist-tags":{"latest":"0.5.1"},"versions":{"0.1.0":{"name":"remjs","version":"0.1.0","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"git@github.com:amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1"},"scripts":{"test":"mocha"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.1.0","dist":{"shasum":"6b041d78c918edfcf4b0eeb9d44b04e41e2235b2","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.1.0.tgz","integrity":"sha512-Jtyz6HkuqM9Onf/Rf1SG35pxFL3ttHuDa+6H6f7x2hWX15/0eB1n+Dxlmu9LFq7gZp9euM4nP0vUPyQXgFbisA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFpgjcTObJNZRVnQZWCOHoP9BjOH0l4XmY16tMUnVAgYAiEAupU2CBShf6PoLI94k9Ipq4abwmM09v5H7DAgrN1JXc0="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.1.1":{"name":"remjs","version":"0.1.1","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1"},"scripts":{"test":"mocha"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.1.1","dist":{"shasum":"10e2f3883108fa454fda90fdff6847be975197e1","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.1.1.tgz","integrity":"sha512-NDgguf+2Rf9+xpPQa3Hjse+p4NH3qk7ueb7BKkwgAs9PTQ3tonzwzfP6+2yhAp01TfD6lY7HYlbG4rbMfZWGBA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFTmBEwVayVwlNzcbG4oUXGdsyqm5y7vVgr8KjsxELdiAiEA7Q2nY7ZOl/N0qFtCYiq7hqIntThlz1HD5LqfpNOekH0="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.1.2":{"name":"remjs","version":"0.1.2","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1"},"scripts":{"test":"mocha"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.1.2","dist":{"shasum":"25625ac94200af358f65abab13afd797ef937567","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.1.2.tgz","integrity":"sha512-BwCUaU+2o3RQq82VOwdLrwxY6jKv9FB4CGFHKXvB30gToEJKJrBxiS9CXtedODZMfswV2D6Idpxwxtyy+pLHAw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHHPzLMr4nv+nhe4EAH8lESniVPvewBZU2lsjvKdyonUAiBkMd44diDj1r7LkOqm8GLH9L7Ohaltp0kzD1y7e6wV8A=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.1.3":{"name":"remjs","version":"0.1.3","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1"},"scripts":{"test":"mocha"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.1.3","dist":{"shasum":"35f158cc8cc6a69668492d1009acf96aad601893","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.1.3.tgz","integrity":"sha512-IvAF8zQJ1yKoadGso4hTj0sYBDpuxbRma/x4o+HSOHJHQWfgWYP0icxxqN7USgi57dE0ANI8Of8suy8D/2kF5w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICp/qz/ngF/1eurNSy6MdRDnz8y/amdtwPJAG3F0qi7VAiB+LYSf7p+8v9aIIMVA3FY2d1sqlmY6b3Ms7wlhhv+URg=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.2.0":{"name":"remjs","version":"0.2.0","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1"},"scripts":{"test":"mocha"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.2.0","dist":{"shasum":"6682562cebcc4f076465828a5f43297fcc9a1ae9","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.2.0.tgz","integrity":"sha512-D+oheXipQuEylZ6lkmRS6OQ7KNpzw3GboevAbYfx+9jwj7KoBRBjo6gBpnEOykJ+absFcZfb/lpsGlbcXPj+WQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEudrvhGqUKBwoKwMef1GhxqDkMD2bq/575cXUTgq43yAiBCD7PWsq3aXqCobJaudhQYRi/NY7vEH6Ol0hD0DYPOqQ=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.2.1":{"name":"remjs","version":"0.2.1","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1"},"scripts":{"test":"mocha"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.2.1","dist":{"shasum":"ed2dd4611246b741f2b8b847787e1a49575fa489","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.2.1.tgz","integrity":"sha512-GOo7AuH+jsIHBCgBGOAAdqlQTLbTDWDvMTFRoGWfzvczhYCCJ2pyaI9u+vzsUbtVAZkX0stADoxFSvv6agA4cw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAWc4Ay73IXOYvG91EUHIX2tOqlTx9E0vUlz9hc+XFlkAiA+iumqg6TLE8jyFn83W4gqh7g/0NbXCG3hbU38zjzNuA=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.2.2":{"name":"remjs","version":"0.2.2","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1"},"scripts":{"test":"mocha"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.2.2","dist":{"shasum":"7874660e9a2cef92ab13fece0ca6803ecdcc7e3d","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.2.2.tgz","integrity":"sha512-X3sAueaqDylkP9tDPQLNBlbu+LipgTMV6qTTVg/Fc6d5qBEyKz3Shxq6CNaOOffm64gjwxGZARJ8Z7KokcdYlw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG1YbEwzlZZ5qDaQbedQu1aXOXVSiRWv1cCl36f3LeGzAiBOU9HwYmFS1teKy+pa2dLkAqDCjYKw2H5Um98KEF+YpA=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.2.3":{"name":"remjs","version":"0.2.3","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.1","istanbul":"^0.3.2","jshint":"^2.5.10"},"scripts":{"test":"jshint index.js lib test && ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.2.3","dist":{"shasum":"4047876c1a3f81c537cdb5b2b98aadca8b775e65","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.2.3.tgz","integrity":"sha512-0XY+c3mOVx2l/KANbNAmhGwAL1MO263UskxoOK/0DTexcsFFmGAxvmBPaaES5q5tN4cjnqmJkp/q5HenheP1ug==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICrNMscHkQPJHKUV6hM3up4vaJr/17NtiKU/JOs3XVcBAiEA7tg4NIat1SnLb3V+EbhzvJieeWQn6crI+y1FaFwwVhA="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.2.4":{"name":"remjs","version":"0.2.4","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0","bluebird":"^2.3.11","mongodb":"^1.4.26"},"devDependencies":{"mocha":"^2.0.1","expect.js":"^0.3.1","superagent":"^0.21.0","nedb":"^0.11.1","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.1","istanbul":"^0.3.2","jshint":"^2.5.10"},"scripts":{"test":"jshint index.js lib test && ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha --report lcovonly"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.2.4","dist":{"shasum":"8f92db59c774096ad7a1c339aa1f3a6480ca0c70","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.2.4.tgz","integrity":"sha512-yOnXFi0tI9NkZsfd9sbZZ8G2xw7XcHll5v5qQ6txm7f+pZLY9a5PFFIAGLRtz4Z1/PCp8sUi2BEfmRMeoBa73A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEV1EhzqsE4miQuGaHWLWZFJ5OQD1fM+dgw4XXQ7aSaBAiEArFAn5G+zIyEkt3DAH1don8Va7JNiIN+PO8I1hR83bhM="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.3.0":{"name":"remjs","version":"0.3.0","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0","bluebird":"^2.3.11"},"devDependencies":{"mocha":"^2.0.1","supertest":"^0.15.0","chai":"^1.10.0","nedb":"^0.11.1","mongodb":"^1.4.26","knex":"^0.7.3","influx":"^3.2.0","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.1","istanbul":"^0.3.2","jshint":"^2.5.10","retire":"^0.3.7"},"scripts":{"test":"retire -p && jshint index.js lib test && istanbul cover mocha --report lcovonly"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.3.0","dist":{"shasum":"9434f5f5dd0f1a64cf2ff2e7ae8fe37ed45701c0","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.3.0.tgz","integrity":"sha512-VwXkotlGfn+ARLQlfzTrEZHJ7Crun9vWhqIetkaZH4Ic7poCH06dYZwS/4ztQP0jEDWKUGv1JlsMewlQ23Bw1A==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICggxXqojFQPhS2O6k7xJtzutdB5KCdA45LZrEzQwPKfAiEA3ESAJdH1ANTUWqA57VCg6AZxmor0npjkHhTT7/SrvBQ="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.3.1":{"name":"remjs","version":"0.3.1","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0","bluebird":"^2.3.11","nedb":"^1.1.1","influxdb":"0.0.1","mongodb":"^1.4.28","knex":"^0.7.3"},"devDependencies":{"mocha":"^2.0.1","supertest":"^0.15.0","chai":"^1.10.0","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.1","istanbul":"^0.3.2","jshint":"^2.5.10","retire":"^0.3.7"},"scripts":{"test":"retire -p && jshint index.js lib test && istanbul cover mocha --report lcovonly"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.3.1","dist":{"shasum":"c0b5fb52369a7fb25880f27cda56b6b31b8e53ae","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.3.1.tgz","integrity":"sha512-u4WTYU9BoKPUJ4HdFOkkff/B2fuARURfZB8deLxC6PXvNKuM//wccR68VDBtQQiEzmvijZJxQD62j7i/KjenbA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDJx4hdIqwH8rK0muehqeWNWcmap9MU+3oKqhDyVdj+VAiBqQuw9RXZUaGB4v4dS6c/zkR5c2uvE+f98I8xqz7sW2Q=="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.3.2":{"name":"remjs","version":"0.3.2","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0","bluebird":"^2.3.11","nedb":"^1.1.1","mongodb":"^1.4.28","knex":"^0.7.3","influx":"^3.2.0"},"devDependencies":{"mocha":"^2.0.1","supertest":"^0.15.0","chai":"^1.10.0","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.1","istanbul":"^0.3.2","jshint":"^2.5.10","retire":"^0.3.7"},"scripts":{"test":"retire -p && jshint index.js lib test && istanbul cover mocha --report lcovonly"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.3.2","dist":{"shasum":"ab393ab2089c4dbb07e70dace08f99ccc33cfd3a","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.3.2.tgz","integrity":"sha512-QvwBtG+czMeXacD+xtwnIgKwXPOHb8xtOnRVV1V0jtLztnHf31n8hMFgjxplmkfsV0CysTeyR+sg7EriM0WjZw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAI3H0pC6ffUZOIKN5Ym1KqquPxJTNCLmeY+eO7kl5cUAiEAk7c5RbyI7YxL8Mqqgds1oaMbUnuo0cLsgnI6VNKmIa4="}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.3.3":{"name":"remjs","version":"0.3.3","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0","bluebird":"^2.3.11"},"devDependencies":{"mocha":"^2.0.1","supertest":"^0.15.0","chai":"^1.10.0","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.1","istanbul":"^0.3.2","jshint":"^2.5.10","retire":"^0.3.7","nedb":"^1.1.1","mongodb":"^1.4.28","knex":"^0.7.3","influx":"^3.2.0"},"scripts":{"test":"retire -p && jshint index.js lib test && istanbul cover mocha --report lcovonly"},"main":"index","licence":"MIT","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.3.3","dist":{"shasum":"9f8446946150de08806e9bf58f75d13cb971080a","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.3.3.tgz","integrity":"sha512-7VYj0gtsN9/Bd0wlybg9jAsbVpQxHK020FP3fORQvk3I2spEC2nZ4yvzDBQuMaAgsfJg1L0LBk9m/GUee7vn1Q==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCo/SOGGMOoiDBK2RYE7DQ6PsDpCiwvYBHXyVG5DZ0CogIhAK1AjMcUF8+TqdO3++T0coaPJ3FnnsPo409ECDtiAgdD"}]},"_from":".","_npmVersion":"1.4.3","_npmUser":{"name":"amcgee","email":"austin@remjs.org"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.3.5":{"name":"remjs","version":"0.3.5","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0","bluebird":"^2.3.11"},"devDependencies":{"mocha":"^2.0.1","supertest":"^0.15.0","chai":"^1.10.0","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.1","istanbul":"^0.3.2","jshint":"^2.5.10","retire":"^0.3.7","nedb":"^1.1.1","mongodb":"^1.4.28","knex":"^0.7.3","influx":"^3.2.0"},"scripts":{"test":"jshint index.js lib test && istanbul cover mocha --report lcovonly"},"main":"index","licence":"MIT","gitHead":"6f88b8ac1d7317dc3d753f08d8899f75b054792d","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.3.5","_shasum":"a14ebd6399474007e1123ed214d860ee4dfbb036","_from":".","_npmVersion":"2.0.0","_npmUser":{"name":"amcgee","email":"austinwm@gmail.com"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}],"dist":{"shasum":"a14ebd6399474007e1123ed214d860ee4dfbb036","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.3.5.tgz","integrity":"sha512-IdKqJhM/d9Zqm4lx0kCRGjdyLOZiOi+EkeV4ZV+SYR9afX7DnKmeT6hVpiaUzTZRpWFFHOEUHerFde/ACbYcig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwKg/35k/oNcM/z7hHOvpDUZy2/ZeoGXgFrmSpNn4SLAiEAjWKuDs2PU5rjc0xnHFfqsvjWyjlAhr3sMH5SwFetJ6Q="}]}},"0.3.6":{"name":"remjs","version":"0.3.6","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"https://github.com/amcgee/remjs.git"},"dependencies":{"lodash":"^2.4.1","express":"^4.10.2","body-parser":"^1.9.2","jwt-simple":"^0.2.0","bluebird":"^2.3.11"},"devDependencies":{"mocha":"^2.0.1","supertest":"^0.15.0","chai":"^1.10.0","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.1","istanbul":"^0.3.2","jshint":"^2.5.10","retire":"^0.3.7","nedb":"^1.1.1","mongodb":"^1.4.28","knex":"^0.7.3","influx":"^3.2.0"},"scripts":{"test":"jshint index.js lib test && istanbul cover mocha --report lcovonly"},"main":"index","licence":"MIT","gitHead":"30159a0e78b53ff42761ae7e0e22209ab7fc1ea8","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.3.6","_shasum":"7d9d03f0ad92c73f5f7671cdff5da83506a3bc19","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"amcgee","email":"austinwm@gmail.com"},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}],"dist":{"shasum":"7d9d03f0ad92c73f5f7671cdff5da83506a3bc19","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.3.6.tgz","integrity":"sha512-fRrYCpfgsRN4QortSYnubIRhsVGn4AprseYE0tRqI4uqSHfq7ez0ukacvbEikhiRgqQzT1fLY5DCOKOlW76tLA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIChbS3cp16Qcs28eQlegerj85lDBSqHfyLzr60q+l7u1AiACAtelIUUZEJXJkzrJnCsLEZfrJaE9cm3OvnEuLYCB/w=="}]}},"0.5.0":{"name":"remjs","version":"0.5.0","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"git+https://github.com/amcgee/remjs.git"},"dependencies":{"bluebird":"^2.3.11","body-parser":"^1.9.2","express":"^4.10.2","jwt-simple":"^0.3.1","lodash":"^3.10.1","traverse":"^0.6.6"},"devDependencies":{"mocha":"^2.0.1","supertest":"^1.1.0","chai":"^3.2.0","coveralls":"^2.11.2","mocha-lcov-reporter":"0.0.2","istanbul":"^0.3.2","jshint":"^2","retire":"^1.1.1","nedb":"^1.1.1","mongodb":"^2.0.42","knex":"^0.8.6","jscs":"^2.2.1"},"scripts":{"test":"scripts/test.sh"},"main":"index","license":"MIT","gitHead":"7d3cd5b2e71b5bac09ca47555acf48d50697335c","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.5.0","_shasum":"e1af6d575c584b9c2e1be741fff194f1930528bb","_from":".","_npmVersion":"2.11.3","_nodeVersion":"0.12.7","_npmUser":{"name":"amcgee","email":"austinwm@gmail.com"},"dist":{"shasum":"e1af6d575c584b9c2e1be741fff194f1930528bb","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.5.0.tgz","integrity":"sha512-eLD/3QX9kAnegnRu85Ht78IqSdkaTMfXXvkes07Yrf3ZjxuGb2a6fKIcr7AnAW3M//cjLbLKU+b4BbtDMsE8Lg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHlmY7sG/k2Pl+zbXBEtVLMeBiRDqfKo4CJn/5+GFHVOAiB4Q6GytBk3oGO3x9pn+YyXQySLLPkLZh29hzKZqzmJ/Q=="}]},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}]},"0.5.1":{"name":"remjs","version":"0.5.1","author":{"name":"Austin McGee","email":"austin@remjs.org"},"contributors":[{"name":"Austin McGee"}],"description":"Rapid Eye Movement (REM) : A dead-simple, full-featured REST API database wrapper.  Now go back to sleep, you were having a good dream.","keywords":["rest","api","database"],"homepage":"http://www.remjs.org","repository":{"type":"git","url":"git+https://github.com/amcgee/remjs.git"},"dependencies":{"bluebird":"^3.3.5","body-parser":"^1.15.0","express":"^4.13.4","jwt-simple":"^0.5.0","lodash":"^4.11.1","traverse":"^0.6.6"},"devDependencies":{"chai":"^3.5.0","coveralls":"^2.11.9","istanbul":"^0.4.3","jscs":"^3.0.3","jshint":"^2.9.2","knex":"^0.10.0","mocha":"^2.4.5","mocha-lcov-reporter":"^1.2.0","mongodb":"^2.1.17","nedb":"^1.8.0","retire":"^1.1.4","supertest":"^1.2.0"},"scripts":{"test":"scripts/test.sh"},"main":"index","license":"MIT","gitHead":"93ec7a92db72aa7f3be2695d57b962f312b302d1","bugs":{"url":"https://github.com/amcgee/remjs/issues"},"_id":"remjs@0.5.1","_shasum":"326550dc229aa21930b61b77d60b6d057bc3e89c","_from":".","_npmVersion":"2.15.11","_nodeVersion":"0.12.18","_npmUser":{"name":"amcgee","email":"austinwm@gmail.com"},"dist":{"shasum":"326550dc229aa21930b61b77d60b6d057bc3e89c","tarball":"https://registry.npmjs.org/remjs/-/remjs-0.5.1.tgz","integrity":"sha512-MYsBh6uuXI6wgSTdsznlftfyM0p7dmlBoWI2P8olxCZl+sxrXzLs+/9e8w04uVb4pEXeYV4HEsFX7+IAqXackw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFbQKaG68gOfzAa1/uPvBVvixj7eQJ0rFwY3DEfzOg3fAiEAtBWhf0pkX/ZFc1ruJTE3qtx8hAOb1FDWHED/FTatRhM="}]},"maintainers":[{"name":"amcgee","email":"austin@remjs.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/remjs-0.5.1.tgz_1498033810233_0.41903694346547127"}}},"readme":"# REM\n\n[![npm version](https://badge.fury.io/js/remjs.svg)](http://badge.fury.io/js/remjs)\n[![stability](https://img.shields.io/badge/stability-alpha-orange.svg?style=flat)](https://remjs.org)\n\n[![Build Status](https://travis-ci.org/amcgee/remjs.svg)](https://travis-ci.org/amcgee/remjs)\n[![Coverage Status](https://coveralls.io/repos/amcgee/remjs/badge.svg)](https://coveralls.io/r/amcgee/remjs)\n[![Code Climate](https://codeclimate.com/github/amcgee/remjs/badges/gpa.svg)](https://codeclimate.com/github/amcgee/remjs)\n[![Dependencies](https://david-dm.org/amcgee/remjs.svg)](https://david-dm.org/amcgee/remjs)\n\nRapid Eye Movement (REM) : A dead-simple REST API framework for NodeJS.  Now go back to sleep, you were having a good dream.\n\nThis library is not yet fit for production use, but is steadily marching in that direction.  It is being developed to support [WellDone](https://www.welldone.org)'s management and data analytics portal.  Want to help out?  [Contact me](https://austinmcgee.net/contact) or just dive in.\n\nCurrently, only NeDB and a subset of MongoDB are supported backend engines, but more will be introduced soon.\n\n<!-- START doctoc generated TOC please keep comment here to allow auto update -->\n<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->\n**Table of Contents**  *generated with [DocToc](https://github.com/thlorenz/doctoc)*\n\n  - [Installation](#installation)\n  - [Basic Usage](#basic-usage)\n  - [Resources](#resources)\n  - [Modifiers](#modifiers)\n    - [fields](#fields)\n    - [sort](#sort)\n    - [limit](#limit)\n    - [skip](#skip)\n  - [Authentication](#authentication)\n    - [Anonymous access](#anonymous-access)\n    - [Login](#login)\n    - [Authenticated Requests](#authenticated-requests)\n    - [Signup](#signup)\n    - [/Me](#me)\n    - [Authentication Options](#authentication-options)\n- [Utilities](#utilities)\n  - [REM Server](#rem-server)\n    - [REM.serve](#remserve)\n- [Other fun stuff](#other-fun-stuff)\n  - [Contributing](#contributing)\n    - [Tests](#tests)\n  - [License](#license)\n\n<!-- END doctoc generated TOC please keep comment here to allow auto update -->\n\n\n## Installation\n\nPrerequisites:\n\n- [NodeJS](http://www.nodejs.org)\n- [npm](http://www.npmjs.org)\n\nInstall your favorite database, currently supported: \n\n- [NeDB](https://github.com/louischatriot/nedb) for local data storage\n- [MongoDB](http://www.mongodb.org/) for more robust, production-grade use cases\n- *More coming soon, including various flavors of SQL by way of [knex](http://knexjs.org/)!*\n\nNow, install [remjs](http://npmjs.org/package/remjs) via [npm](http://npmjs.org)\n```shell\nnpm install remjs\n```\n\n## Basic Usage\n\nA simple example using the [REM.serve](#utilities-rem-server-remserve) utility function and [NeDB](https://github.com/louischatriot/nedb) for local data storage\n```javascript\nvar REM = require('remjs');\n\nvar options = {\n    dataDirectory: \"./data/simple_example\",\n    version: \"1.0\",\n    resources: {\n        'employees': {},\n        'departments': {\n            children: ['employees']\n        }\n    }\n}\n\nREM.serve( options );\n```\n\nThat's it!\n\nThe important part is the options hash, which supports the following ([REM.Server](#utilities-rem-server) and [REM.serve](#utilities-rem-server-remserve) extensions excluded):\n\n- *version* : The version to expose at `/_version`, useful if you're serving multiple REM versions.\n- *engine* : The database engine to use.  This should be a hash with a MongoDB-style accessor object for each resource.\n- *resources* : This is the meat and potatoes of the whole meal.  Each key in the resources has becomes a REST API collection, and there are various options you can specify for each one (more details forthcoming)\n\nTry it!\n```shell\ngit clone https://github.com/amcgee/remjs.git\ncd remjs\nnpm install\nnode examples/simple_example.js\n```\n\nNow, you can interact with your new API however you please.  The following examples assume [cURL](http://curl.haxx.se/), [jq](http://stedolan.github.io/jq/) for JSON parsing, and basic linux terminal familiarity.\n\nFirst, get the list of available resources at `_help`\n```shell\ncurl http://localhost:3000/api/_help | jq '.'\n[\n  \"employees\",\n  \"departments\"\n]\n```\n\nNow, try getting the entire collection at `/departments` (it's empty)\n```shell\ncurl http://localhost:3000/api/departments | jq '.'\n[]\n```\n\nOk, now let's POST a new department to that resource.  (Your `_id` will be different)\n```shell\ncurl -H \"Content-Type: application/json\" -d '{\"name\":\"TPSReportDepartment\",\"purpose\":\"NONE\"}' \\\n    http://localhost:3000/api/departments | jq '.'\n{\n  \"name\": \"TPSReportDepartment\",\n  \"purpose\": \"NONE\",\n  \"_id\": \"9QWrPtnkK63Hb0WF\"\n}\n```\n\nGreat, now let's make sure it showed up.\n```shell\ncurl http://localhost:3000/api/departments | jq '.'\n[\n  {\n    \"name\": \"TPSReportDepartment\",\n    \"purpose\": \"NONE\",\n    \"_id\": \"9QWrPtnkK63Hb0WF\"\n  }\n]\n```\n\nOK, now let's save off the new department's ID (or you could do this manually).\n```shell\nDPTID=`curl http://localhost:3000/api/departments | jq '.[0]._id' | sed -e 's/^\"//'  -e 's/\"$//'`\n```\n\nUse that ID to get the individual department\n```shell\ncurl http://localhost:3000/api/departments/$DPTID | jq '.'\n{\n  \"name\": \"TPSReportDepartment\",\n  \"purpose\": \"NONE\",\n  \"_id\": \"9QWrPtnkK63Hb0WF\"\n}\n```\n\nGet the list of employees in the new department (currently empty)\n```shell\ncurl http://localhost:3000/api/departments/$DPTID/employees | jq '.'\n[]\n```\n\nMake it not empty.\n```shell\ncurl -H \"Content-Type: application/json\" -d '{\"name\":\"Joe Schmoe\",\"salary\":250}' \\\n    http://localhost:3000/api/departments/$DPTID/employees | jq '.'\n{\n  \"departments_id\": \"9QWrPtnkK63Hb0WF\",\n  \"name\": \"Joe Schmoe\",\n  \"salary\": 250,\n  \"_id\": \"tGmX6t8G6rha8ma4\"\n}\n```\n\nGet the non-empty list.\n```shell\ncurl http://localhost:3000/api/departments/$DPTID/employees | jq '.'\n[\n    {\n      \"departments_id\": \"9QWrPtnkK63Hb0WF\",\n      \"name\": \"Joe Schmoe\",\n      \"salary\": 250,\n      \"_id\": \"tGmX6t8G6rha8ma4\"\n    }\n]\n```\n\nProfit.\n\n## Resources\n\nAt the heart of any REM configuration is a set of resources.  These are effectively the top-level collections in the data model.  Available REM options (which can also be specified at the top REM options level and will be inherited by sub-collections) are:\n\n- `engine`: The backend database engine\n- `id_key`: (partial support only) Specify the property to use as the canonical ID reference for this resource.  Default: `_id`, changing this may break things.\n- `private`: If set to `true`, this resoure will not be exposed at this location by the REST API.  The resource could still be exposed as a child or another resource, or used as an authentication user store.\n- `children`: The children of a particular resource.  This is effectively a `has-many` relationship.\n- `forbid`: The actions to forbid on this resource.  For instance, you can specify `fobid: ['post']` on a top-level resource to prevent users from POST-ing without going through a parent object (i.e. you can only create new employees within a department)\n- `filter`: The base filter to apply to all queries to the backend DB.\n- `defaults`: The default values to use when generating new documents within this resource.\n- `immutable_keys`: The set of keys that cannot be set or modified by an API user.  This can be useful when used in combination with `defaults`\n- `makeForeignKey`: A function used to name foreign-key properties that point to this resource.  Default: `function(target) { return target + \"_id\" }`\n\n## Modifiers\n\nThe following can be added to the query string of a URL to modify or limit the results.  They modify the resulting database query, so the server doesn't need to do the processing.\n\n### fields\n\nReturn only certain fields in the response.  This is a comma-delimeted list\n\nFor instance, only include the employee names with `fields=name`\n\n```\nGET /employees?fields=name\n```\n\nOr the name and salary of a particular employee with `fields=name,salary`\n\n```\nGET /employees/<id>?fields=name,salary\n```\n\n*NOTE*: the id is also stripped by default, to include it add `_id` as a field parameter\n\n### sort\n\nSort the results by the fields listed in the comma-delimited `sort` perameter.  Pre-pend a `-` to the field name to sort in reverse order.\n\nThe database engine determines the sorting heuristics.\n\nSort by salary (ascending), then by title (descending)\n\n```\nGET /employees?sort=salary,-title\n```\n\n\n### limit\n\nOnly return the first `N` results with `?limit=N`, useful for pagination.\n\ni.e. get the top 3 highest-paid employees\n\n```\nGET /employees?sort=-salary&limit=3\n```\n\n### skip\n\nSkip the first `N` results with `?skip=N`, useful for pagination.\n\ni.e. return the fourth, fifth, and sixth highest-paid employees\n\n```\nGET /employees?sort=-salary&limit=3&skip=3\n```\n\n## Authentication\nREM can easily be configured to perform user authentication and session management (using JSON Web Tokens, so no actual session state is needed on the server).  To enable authentication, simply supply an `authentication` property to your REM options.\n\n```javascript\nvar REM = require('../');\n\nvar options = {\n    dataDirectory: \"./data/authentication_example\",\n    version: \"1.0\",\n    authentication: {\n      anonymous_signup: true,\n      login_authority: {\n        resource: 'employees'\n      }\n    },\n    resources: {\n        'employees': {},\n        'departments': {\n            children: ['employees']\n        }\n    }\n}\n\nREM.serve( options );\n```\n\nIn this example, we specify `employees` as the authentication login authority.  This allows employees to log in (assuming they've been added to the login system correctly, see [signup](#rem-authentication-signup) below).  In this example we also allow anyone to sign up as an employee, which probably isn't a good way to run a business.\n\n### Anonymous access\n\nOnce authentication has been configured, un-authenticated users will always receive an `HTTP 401` error when accessing any REM resource.  The two notable exceptions are the [login](#rem-authentication-login) and [signup](#rem-authentication-signup) endpoints described in the following sections.\n\n### Login\n\nAssuming a user has been created and a password assigned, logging in is simple.\n\n```shell\ncurl -d '{\"login\": \"joseph\",\"password\": \"MyP4SSW0RD!\"}' http://localhost:3000/_login\n```\n\nIf authentication fails because the login or password are incorrect, the REM server replies with an HTTP 400 error.  If it succeeds, the server replies with an HTTP 200 OK and the body of the response is the new JSON Web Token which can be used to make authenticated requests.  A JSON web token looks like a bunch of random text:\n\n```\neyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6eyJ1c2VybmFtZSI6ImF1c3RpbiIsIl9pZC\nI6InNBajBzbnIzaHF3MjNob0oifSwiaWF0IjoxNDE2ODc1MDEwLjc5OCwiZXhwIjoxNDE2ODc2ODEwL\njc5OH0.18gIxEhLpBuLnkiwBJbAWpEb-uQesH1E5q0dBa35Hqo\n```\n\nbut it encodes the following:\n\n- The identity of the logged-in user\n- An expiration time for the token (enforced server-side)\n\n### Authenticated Requests\nTo make authenticated requests, include the JWT token as a Bearer token in the `Authorization` HTTP header, like so (assuming the token has been saved in the TOKEN environment variable):\n\n```shell\ncurl -H \"Authorization:Bearer $TOKEN\" http://localhost:3000/departments\n```\n\n### Signup\nIf `options.authentication.anonymous_signup` is set to `true`, REM will allow unauthenticated POST requests to `signup_path` (`/_signup` by default) to create new user accounts.  There is currently no spam protection or rate limiting on this endpoint, so use `anonymous_signup` with caution.\n\n### /Me\nOnce a user has authenticated, the underlying user resource is exposed via the `/me` shortcut path.  This is a direct alias to the user resource, so if `login_authority.resource` is `users` and the logged-in user has ID `Om77wPVRTJWZSjNf`, the `/me` will return the same result as `/users/Om77wPVRTJWZSjNf`.\n\nAdditionally, the following actions are available under the `/me` namespace:\n\n- `POST /me/_password`: Change the current user's password.  Requires a JSON-formatted body with `old_password` and `new_password` specified.  Return `200 OK` on success.\n- `DELETE /me/_password`: Reset the current user's password to something random.  Requires a JSON-formatted body with `old_password` specified.  Returns `200 OK` with the user's newly-generated password as the response body.\n\n### Authentication Options\nThe following are options available in the `options.authentication` object:\n\n```javascript\nvar rem_options = {\n  authentication: {\n    login_path: '/_login',\n    signup_path: '/_signup',\n    me_path: '/me',\n    anonymous_signup: false,\n    login_authority: {\n      type: 'basic',\n      resource: 'users',\n      login_property: 'username',\n      auth_property: '_auth',\n\n    },\n    password_min_length: 6,\n    password_key_length: 64,\n    password_salt_size: 64,\n    password_pbkdf2_iterations: 10000,\n    token_expiration_minutes: 30,\n    jwt_secret: 'THISISATOPSECRETVALUETHATSHOULDBEUNGUESSABLEANDNEVERSHARED'\n  }\n  ...\n})\n```\n\n- `login_path`: The path at which to listen for logins.  Default: `/_login`\n- `signup_path`: The path at which to listen for new signups.  Does nothing if `anonymous_signup` is not set to `true`.  Default: `/_signup`\n- `me_path`: The path at which to expose data about the currently logged in user.  Default: `/me`\n- `anonymous_signup`: set to `true` if anonymous users are allowed to create new accounts by posting a login and password to the `signup_path`.  Default: `false` \n- `login_authority.resource`: The resource to use as the user store.  It must already exist.  Default: `users`\n- `login_authority.login_property`: The property of the login authority resource to use when looking up login names.  Must be unique.  Default: `username`\n- `login_authority.type`: The type of login authority.  Currently, the only available type is `basic`, also the default.\n- `login_authority.auth_property`: The property of the login authority resource to use when storing sensitive login information (namely the encrypted password, password salt, and number of pbkdf2 iterations.  Must begin with an `_` so it is never exposed by the API itself.  Default: `_auth`\n- `password_min_length`: The minimum character length of new passwords.  Default: `6`\n- `password_key_length`: (ADVANCED) The size to use when generating an encrypted password using pbkdf2.  Default: `64`\n- `password_salt_size`: (ADVANCED) The size to use when generating a password salt to use during pbkdf2 encryption.  Default: `64`\n- `password_pbkdf2_iterations`: (ADVANCED) The number of iterations to use when generating an encrypted password using pbkdf2.  Default: `10000`\n- `token_expiration_minutes`: (ADVANCED) The lifespan of authentication tokens.  Once a token has been issued, it will remain valid (meaning whoever presents that token will successfully authenticate as that user) for some number (token_expiration_minutes) of minutes.  Default: `30`\n- `jwt_secret`: (ADVANCED) The secret used to encrypt and decrypt JWT tokens.  By default this is a randomly generated string (which is secure but doesn't allow for horizontal scaling or token validity across server restarts).\n\n\n# Utilities\n\n## REM Server\n\nThere is a simple Express server at `REM.Server`, a sample of its usage can be found in the `examples` directory.  The REMServer constructor takes a normal REM options object, but with the following additions:\n\n- *port* may be specified to indicate where the server should do its thing.  Defaults to process.env['PORT'] or 3000\n- *baseURL* the base URL at which the express server should do its thing.  Defaults to '/'\n\nThe following API methods are available on a REMServer object:\n\n- *start*: Start the server (returns itself for chaining purposes)\n- *stop*: Stop the server\n\n### REM.serve\n\nTo make things even more dead-simple, you can create and start a REMServer in one go by calling `REM.serve(options)`.  `options` is a REMServer options object with one addition:\n\n- *dataDirectory*: If specified, `options.engine` is no longer required and the server will automatically create local NeDB databases for you in the directory provided.  See the examples for use of `REM.serve`.\n\n# Other fun stuff\n\n## Contributing\n\nContributions are welcome.  This is still an early prototype, so there's a lot to do.\n\n### Tests\n\nAny new features should be testable, and the existing tests should pass.\n\nRun `npm test` to be sure everything is working.\n\n## License\n\n[MIT](http://opensource.org/licenses/MIT)\n","maintainers":[{"name":"amcgee","email":"austin@remjs.org"}],"time":{"modified":"2022-06-26T11:06:05.507Z","created":"2014-11-19T06:31:53.220Z","0.1.0":"2014-11-19T06:31:53.220Z","0.1.1":"2014-11-19T06:35:15.816Z","0.1.2":"2014-11-19T07:07:29.125Z","0.1.3":"2014-11-19T07:08:52.140Z","0.2.0":"2014-11-20T03:33:34.877Z","0.2.1":"2014-11-20T04:37:25.878Z","0.2.2":"2014-11-25T00:22:13.255Z","0.2.3":"2014-11-27T08:13:28.785Z","0.2.4":"2014-12-29T17:49:18.309Z","0.3.0":"2015-01-14T08:43:01.423Z","0.3.1":"2015-01-14T08:53:14.168Z","0.3.2":"2015-01-14T08:56:51.465Z","0.3.3":"2015-01-15T22:07:24.648Z","0.3.5":"2015-01-17T04:05:10.586Z","0.3.6":"2015-03-11T12:12:48.977Z","0.5.0":"2015-10-26T22:03:54.814Z","0.5.1":"2017-06-21T08:30:11.369Z"},"homepage":"http://www.remjs.org","keywords":["rest","api","database"],"repository":{"type":"git","url":"git+https://github.com/amcgee/remjs.git"},"contributors":[{"name":"Austin McGee"}],"author":{"name":"Austin McGee","email":"austin@remjs.org"},"bugs":{"url":"https://github.com/amcgee/remjs/issues"},"readmeFilename":"README.md","users":{"amcgee":true},"license":"MIT"}