{"_id":"lore-auth","_rev":"51-365a7d7a0c1974e9d54e29b755b7f4bd","name":"lore-auth","description":"Set of decorators to help with authentication and authorization","dist-tags":{"latest":"0.13.0","next":"0.13.0-rc.2"},"versions":{"0.9.0-rc.1":{"name":"lore-auth","version":"0.9.0-rc.1","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.0.0","react-router":"^2.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.0.0","react-router":"^2.0.0"},"_id":"lore-auth@0.9.0-rc.1","_shasum":"6035ae5c29fa4c6c379eecbe3055ed77f5547896","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"6035ae5c29fa4c6c379eecbe3055ed77f5547896","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.9.0-rc.1.tgz","integrity":"sha512-yIvghL03NA5HQVMCJP2LS5HAdz0nNyp1Ovzgaj5nVQMpyEcAy15DT9h3V7OgLzzB/HMV32pySIrVB6SrJ9WFNw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDE+T9amtWcGHlKKO67Q0CYIKHleMWX7R8s9839Rc41/AIhAIiPqyqP1Hkq2fwJ3eWTkn4E0ecALRD/foY7BBumhUjq"}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/lore-auth-0.9.0-rc.1.tgz_1473454911809_0.8399567494634539"},"directories":{}},"0.9.0":{"name":"lore-auth","version":"0.9.0","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.0.0","react-router":"^2.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.0.0","react-router":"^2.0.0"},"_id":"lore-auth@0.9.0","_shasum":"659ccfb1ab339f8181eea124c07d81017c93774c","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"659ccfb1ab339f8181eea124c07d81017c93774c","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.9.0.tgz","integrity":"sha512-pBy+F15BfKVqqpvNFcP3uYmq/ltpIwT6mTgH6Tr7Id8riWsYo4yvnnROnpV9Uh7PNqJ4UzOp3BrJ6OpRtaI9AA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG4fTw9eL1pLcq6qzuMbIZ1dFomP0dpa0TG2njT1ZCGgAiABhURG9srhLGMZD4nBRlIQvS8ImWkNmmP4v5D/2tfoNQ=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lore-auth-0.9.0.tgz_1473582752359_0.7818048300687224"},"directories":{}},"0.10.0":{"name":"lore-auth","version":"0.10.0","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.0.0","react-router":"^2.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.0.0","react-router":"^2.0.0"},"_id":"lore-auth@0.10.0","_shasum":"e345f92e3e977122b96b5650add0fe5274d4f4a4","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"e345f92e3e977122b96b5650add0fe5274d4f4a4","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.10.0.tgz","integrity":"sha512-ZZ0QytV6Wgb7SQKfgQPYo7HQ3F47XTZyQk3XoCrwSpqRVgcnAuC980MZNGvii/X3pPjABZdd+gzQXQb12Gpcww==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC12uewKLMbW3dthPjFqo/gbyhT3MRJoXOdNSf2KcgdjAIgCVGFp+PFTuTTt1oGveejiShGyNE4NmkKB9z+YBHwap4="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lore-auth-0.10.0.tgz_1476336615309_0.9084668783470988"},"directories":{}},"0.11.0-beta.1":{"name":"lore-auth","version":"0.11.0-beta.1","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.0.0","react-router":"^2.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.0.0","react-router":"^2.0.0"},"_id":"lore-auth@0.11.0-beta.1","_shasum":"d7e3738a996a423cbc3bd65e1acdf0541f8874ca","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"d7e3738a996a423cbc3bd65e1acdf0541f8874ca","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.11.0-beta.1.tgz","integrity":"sha512-OPe9tSICVZCEh+x0f/uYrh1LwnQ9FotnDRW36uK5qFWvN7ziG2A6Xg4WJ/woflfyYinnM+tnfPwcaAn0rssYRw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCP2hHqKIoKO2eRrcTwBbR5muStPcyRlxkOrG3dkj6+SAIhALWHbtdQTSVmF/YAKzh8+jKz+tTbzT8s7dG8wOAE1Dop"}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/lore-auth-0.11.0-beta.1.tgz_1481523850420_0.7231370073277503"},"directories":{}},"0.11.0-beta.2":{"name":"lore-auth","version":"0.11.0-beta.2","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.11.0-beta.2","_shasum":"138c9de89928e1d963c34e2b2e45f9e2d6e35653","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"138c9de89928e1d963c34e2b2e45f9e2d6e35653","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.11.0-beta.2.tgz","integrity":"sha512-JSOAtikXtvgFBWAxk8YoGDPM3zt7kYZLksyjM/R/bLwwMEXmH/pj2xru+aF0yF6Otn5dde8Sxz9e29YgJ98WEg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDidZwmsPcaEAM/AlPE2WZ4H4HPeq1gvqOn35v+/zhxeAiEA30scdsNofqnF+5OQ+ilphzC1kMM+58dFC8Ov67FidVo="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/lore-auth-0.11.0-beta.2.tgz_1481530348925_0.4328828793950379"},"directories":{}},"0.11.0-rc.1":{"name":"lore-auth","version":"0.11.0-rc.1","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.11.0-rc.1","_shasum":"8b004542001ba93b02908097bd2fa5dc78eb5a4e","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"8b004542001ba93b02908097bd2fa5dc78eb5a4e","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.11.0-rc.1.tgz","integrity":"sha512-FhUxVRsnMnS9RC27B+bGFaTrcr7jlqdL2WfCC59taKdgl6R84XW+7quCfj7H1kXZ56N2IqylyXdb+9/yE2+r1w==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZyBRAAr1eVlzU+UHpAYl7R+fsPUEbesU8Xap972nsbQIgQNDPcMMiI/PUgBx2bw2P/8tb8gHqKkvzWvfBdGL9oY0="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/lore-auth-0.11.0-rc.1.tgz_1485239101390_0.38515092618763447"},"directories":{}},"0.11.0":{"name":"lore-auth","version":"0.11.0","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.11.0","_shasum":"a78425ce181d8602d23fe568376d9470bf9e5050","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"a78425ce181d8602d23fe568376d9470bf9e5050","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.11.0.tgz","integrity":"sha512-gehjTUuSpyiIrlnEXVrDdytQq/rQs87bWwkTXNINYgMxlLVsoI2RQFGViyD96Q98RPWEhnWOvRzeskzvq9ZsuQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhwgttmIh0hL20Ai4tuQphtpIlomsBEx0bMtloY2O2EwIgcdKkyxmUNj94uwNZtKXq2g0fa7z9hD6SESDljB1ugYA="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lore-auth-0.11.0.tgz_1485665699229_0.2710476426873356"},"directories":{}},"0.12.0-beta.1":{"name":"lore-auth","version":"0.12.0-beta.1","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.12.0-beta.1","_shasum":"5f60261a6db24fc7d9b9a1d110803d89e72febee","_from":".","_npmVersion":"4.4.0","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"5f60261a6db24fc7d9b9a1d110803d89e72febee","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.12.0-beta.1.tgz","integrity":"sha512-DzVxFKM8fPrhTDdzk9ArWMvoCiY1QSRd2OUw1CglhKRX50WE/jNADAUp523hQkYXALnSRIoiQEC9TjMoyoeBiA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHCa4y9iWyaRgFUx/F/w6d7HIxBArHk/d48UUJLrN1PUAiBACFlbMApsdZQJEhVUW+H/jBtypJkOKj0/pkMnUKpI7Q=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/lore-auth-0.12.0-beta.1.tgz_1488758359076_0.6998502763453871"},"directories":{}},"0.11.5":{"name":"lore-auth","version":"0.11.5","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.11.5","_shasum":"66d032f895a60614bbfe376d471328792bff98c1","_from":".","_npmVersion":"4.4.4","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"66d032f895a60614bbfe376d471328792bff98c1","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.11.5.tgz","integrity":"sha512-0z8cNkgKQzhk+hCxNlHKEWjrL0VGa8VhDXvc4wmVxyhBlberyi8M8YpO2oDMemlkMJyE9xx72i0tkGCmaoGNLw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDvEhWVety8LmWI4x2SPkELD+vsdTWLkKi/sz161gN2cAiEA3i0GkbAKV5I73lx3LhAeOPUvkr09hyEy3tHOHDyeR94="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/lore-auth-0.11.5.tgz_1493711953932_0.7755499628838152"},"directories":{}},"0.12.0-rc.1":{"name":"lore-auth","version":"0.12.0-rc.1","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.12.0-rc.1","_shasum":"901791f63062299e680945b087d77ea6db86fb4e","_from":".","_npmVersion":"4.4.4","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"901791f63062299e680945b087d77ea6db86fb4e","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.12.0-rc.1.tgz","integrity":"sha512-VZToeDnT1t0NEhPP/DN7+h6TyNXYhgYxvxW4t9Rujh/KYITCevCNxb3oDGjhDzsCVQvlkALCGTZHH4V9NrMImA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC2b/lNQGGaJK9HsxLLj6cUDBycjJ7DtapqSYHNu9BEBwIgcXjFK9ysBoLAO6Z2EV6N2GO3ybAIjs7eFZkvg0EolH8="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/lore-auth-0.12.0-rc.1.tgz_1493715332532_0.5987952412106097"},"directories":{}},"0.12.0":{"name":"lore-auth","version":"0.12.0","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^3.10.1","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.12.0","_shasum":"c55ac726ce111b15d22577b1c1744f634be70619","_from":".","_npmVersion":"4.4.4","_nodeVersion":"6.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"shasum":"c55ac726ce111b15d22577b1c1744f634be70619","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.12.0.tgz","integrity":"sha512-ltvp6IQABADTWcxN4MkUv7D/gNcSG+ofhXZficXT99VVO32SZSEY1YPvCdkzTz6s1i8pG0bBbmatsJzOiGyHxg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGAf59a6OJ7IA0Sw7riFQlkMyvu2MJq+43OjwFdCpEnfAiA2Xb8IuP0z8EPntUPxcNdwAZwZCkyogoqmO+Tr5KFSYw=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/lore-auth-0.12.0.tgz_1494219597221_0.8599100022111088"},"directories":{}},"0.12.5":{"name":"lore-auth","version":"0.12.5","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^4.0.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.12.5","_npmVersion":"5.0.4","_nodeVersion":"6.11.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-HaXNdQRixcv6mvdgNFam5M2iEdOBC0roBjoeEFjqIXUcjHQZACTmEnzeLUona15SSxEDJJxgDbLaSdNu1oD8MQ==","shasum":"3a3e3612a40007cbda5ec91a9537296a3b4d17c2","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.12.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFYrENJ6XCaQuXR7EVtsm1x4VsCVZSTqc4LZEaIdrbfFAiABoj42ofuaW6sKsLuHIjgRZ8xhzqbvi5NRqYra8UfUxQ=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.12.5.tgz_1499144120374_0.6832080001477152"},"directories":{}},"0.12.6":{"name":"lore-auth","version":"0.12.6","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"../../node_modules/.bin/babel src --out-dir lib","clean":"rimraf lib","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^4.0.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.12.6","_npmVersion":"5.0.4","_nodeVersion":"6.11.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-eu0Sj6WoDUdqDzcaKGkva8aLTe5ttoGiWECtjlgzTTyQAwm1rNirWOlAEbzYhACkE2guVTHKTzhQymz/mCo6Yg==","shasum":"841c3b4358dad32a2ca8895ccedf1e4b7772dca2","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.12.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHivo0PhEpyg7EU4stoS50kwG6hWMpuOyWoL8sqxeFvuAiEAxTCkHDf/ipp59rIpj8J33cVf/pUKY6hdmX+zL16Kc4c="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.12.6.tgz_1499144957999_0.7037866760510951"},"directories":{}},"0.12.7-rc.1":{"name":"lore-auth","version":"0.12.7-rc.1","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^4.0.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.12.7-rc.1","_npmVersion":"5.1.0","_nodeVersion":"6.11.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-KNarZmEC0qudR1exUk/lMxdmH/AwCkeDoXcC7UoAOUXSSwRCf8Ri54ACjxIX4cdyG30HMP8qobySA39WK6EQUg==","shasum":"c181b3c8a49fd1e00d5ec8fa80c40a91991344ad","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.12.7-rc.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCNUeODu10Cf5XqWOhS55OCf4Px28+kp7KM6dJG2fqYaQIgBWlIt6DZR09comupXNZomrVI0eygk64377+yj2tTXFU="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.12.7-rc.1.tgz_1499638549221_0.31465980340726674"},"directories":{}},"0.13.0-beta.1":{"name":"lore-auth","version":"0.13.0-beta.1","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0-beta.1","_npmVersion":"5.4.2","_nodeVersion":"8.5.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-qdW7R1b/ThdbayO9EdX3s0eMeezHtjJzQrHDT1QCgIOP9y9sMBxxgdXPL3dkbDo2SzjaxytOYId4m/tE24/sZA==","shasum":"750798bfe8fc8bc5384f09c68283e43d2f76ca52","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.1.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFNlWjxyCYIMITvYoocbjkSLl1hSm6eiizdCJAGwTw2XAiAnlGfl20DtUCIEKS9/68BMv5mJfS9CF5Z2p7vZgdAhwg=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.13.0-beta.1.tgz_1505764629082_0.34346704627387226"},"directories":{}},"0.13.0-beta.3":{"name":"lore-auth","version":"0.13.0-beta.3","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^15.4.0","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^15.4.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0-beta.3","_npmVersion":"5.4.2","_nodeVersion":"8.5.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-BEeTzQncLBr7/G0J6c1o629zKKPUbgwZXMIy2AbnFlRY79QLkcmXUbylAZENzWyxZFZwer7azywm+lHefpv8aQ==","shasum":"9ed06bdae7ac4845625bdab42f1734a059d9e934","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.3.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDVbo2/7y+9qgis83msfMO7fbkdeI85oHhgQXoCKq9WQAiBD4qMYCgFt0sATixrkjVTY2Dgi/DR9lQ6DkYl3zXCLzQ=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.13.0-beta.3.tgz_1505773894976_0.14032308897003531"},"directories":{}},"0.13.0-beta.5":{"name":"lore-auth","version":"0.13.0-beta.5","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0-beta.5","_npmVersion":"5.4.2","_nodeVersion":"8.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-hZ4UVWf+ew8+XMTwDPUBk2FaeshjRH6HfNk1HVLe4fzvcckTz+p5jlGGvliAyPTJ0XElBgyECNAIXWQyWka6Uw==","shasum":"ca56d7037172aa069261442799056dcda3a86e03","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.5.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVQ78g8Fe3e8EsTBpe9z/Fr8KQaeRYiDnHw9AzjBazHgIgPimM1CDHGouElESnukfQJ7rc7saBiRjggJpFpX6sbT8="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.13.0-beta.5.tgz_1510692758694_0.1782051702030003"},"directories":{}},"0.13.0-beta.6":{"name":"lore-auth","version":"0.13.0-beta.6","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0-beta.6","_npmVersion":"5.4.2","_nodeVersion":"8.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-L6yrYABeVcRaZkessCNiHI3cIyqm9K/p0pWfZx8ediWs4UaElBbehbuOd+qdewUC2j0AQYlI3sEbm4mDYc/4jw==","shasum":"e6a3536897c6abd513b97fcca9aad563565536af","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.6.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAGkly4ODsfXP9YJzFIX3Gn29EoM9pi6UUaY3OvWlEw0AiAK+cr61oxgUFnt448z35vIUQkBWAJMI0owS9ROqrrhuQ=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.13.0-beta.6.tgz_1510698362400_0.5815155766904354"},"directories":{}},"0.13.0-beta.7":{"name":"lore-auth","version":"0.13.0-beta.7","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0-beta.7","_npmVersion":"5.4.2","_nodeVersion":"8.6.0","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-6iIBK6jsACENPA4Ffxlnlr6MdD6UDTFQPan5nq16YCZKQLwfefvxM4B8sxeExZzjH6MIAFIxfoWHjhMNxy8Ojw==","shasum":"b238813078ccf65d8e4a636c98cef038125a6470","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.7.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGfx+2enAeJ3Mg7ZKlizhR9nJan5Vq5UYIPHb+VjI3q+AiBs9kEjEHKO+kC16Y88ZoW2HN8jkqilwnRN/oTtl/a/kw=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.13.0-beta.7.tgz_1510699113044_0.017023974796757102"},"directories":{}},"0.13.0-beta.9":{"name":"lore-auth","version":"0.13.0-beta.9","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0-beta.9","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-TtN0oKkytONFuq+ZhfiS5b0h7p0XSPea1OipQIGVilSmINmNSYWGZPUyJosyDp4dIdz/UFSNsNXGxnNMh+YrsQ==","shasum":"3e7d27bfa2877a1850588588541bf6385bbef08e","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.9.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDKhADI9dX21iuG6G2yadP+shRMkYYS2G2A7sKFPj8LggIhAINiq9v4NB8AgBM3uTdeQP0RS6MQaaR3cMlA0qIXoc+o"}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.13.0-beta.9.tgz_1511594294840_0.5629300873260945"},"directories":{}},"0.13.0-beta.10":{"name":"lore-auth","version":"0.13.0-beta.10","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0-beta.10","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-Mjr61ZqTLo9rZVF+v5E96ohfvVs3F1kXquV+AO7AiWOZ0SgASw2cyKDM1YcSdhxTD+Xg0O1F9GhgHBXtagjgcA==","shasum":"eb21ca74a3e94e2e33fde28a774519e88570e13e","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.10.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnjT2ceOMjqcFYSNFtVXcq0xUM7rGGLZFUaqIZywN53AIhAL64D7pu/8uaAQAOHvu+D1oOPW3B6UuNouc/qgidDtkb"}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.13.0-beta.10.tgz_1513286404257_0.8700107063632458"},"directories":{}},"0.13.0-beta.11":{"name":"lore-auth","version":"0.13.0-beta.11","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0-beta.11","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-l0N0+UR/AEnYexHim6+9ZAHATxQFjhJPxMHEAThcYTHZaolbOoNRKA5DyRYlmSyVl9ZcNlWYwP5wClBsDJuAgQ==","shasum":"dbc0ac1318e870a4c833799ae07c7f680cf2e0c5","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.11.tgz","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCID/7jKK7Kb7OiDT3LtIthWJ9F6ND3zaoz15mOBm5pBVFAiA8hqiKx/SxI3sI/JLG9G5D2lg+yUpJ4WpogBsptYuDeA=="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth-0.13.0-beta.11.tgz_1513716328448_0.4080656045116484"},"directories":{}},"0.13.0-beta.12":{"name":"lore-auth","version":"0.13.0-beta.12","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"readme":"# Purpose\nProvides a set of decorators for handling authentication and authorization concerns within a React application.\n\n# Use Cases\n### Authentication\nA common need when building React applications is the ability to detect if the user is logged in and redirect them to the login page/experience if they are not.\n\nFor this example, pretend we have an application that displays a collection of blog posts for the logged in user. If the user is not logged in (not authenticated) then we want to redirect them to `/login`. If they are authenticated, then we want to display the application as normal.\n\nTo accomplish that, we're going to wrap the root component of our application (called `Master`) with a `UserIsAuthenticated` decorator that determines whether the user is logged in. For this example, we're storing a user token in localStorage, so our condition for determining whether the user is logged in is whether that token exists.\n\n```jsx\n// file: routes.js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n\n// Routes\nvar Master = require('./src/components/Master');\nvar Posts = require('./src/components/Posts');\nvar Login = require('./src/components/Login');\nvar Logout = require('./src/components/Logout');\n\nmodule.exports = (\n  <Route>\n    <Route path=\"/login\" component={Login} />\n    <Route path=\"/logout\" component={Logout} />\n    <Route>\n      <Route path=\"/\" component={UserIsAuthenticated(Master)}>\n        <Route path=\"posts\" component={Posts} />\n      </Route>\n    </Route>\n  </Route>\n);\n```\n\n### Authorization\nLet's say our example application is changed to display a list of posts for _all_ users, but the API only lets users edit their own posts (i.e. posts they created). Translating that concern to the user interface, it means we only want to display the `edit` button if a user is the creator of the post.\n\n```jsx\n// file: src/components/Post\n// This component will render the EditPostButton component, but we \n// only want that component to be rendered if the user created the Post\nvar React = require('react');\nvar EditPostButton = require('./EditPostButton');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n  displayName: 'Post',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  render: function () {\n    var user = this.props.user;\n    var post = this.props.post;\n\n    return (\n      <div>\n        <h1>{post.data.title}</h1>\n        <p>{post.data.text}</p>\n        <EditPostButton post={post} user={user} />\n      </div>\n    );\n  }\n});\n```\n\n```jsx\n// file: src/components/EditPostButton\n// This component will be wrapped in a custom decorator called 'UserIsPostCreator' that \n// will only display the button if the current user created the post\nvar React = require('react');\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creatorId === user.id;\n  }\n});\n\nmodule.exports = UserIsPostCreator(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\n# Usage\n\n### factories/AuthGeneratorFactory.js\nThis file provides the component that `generators/AuthenticationGenerator` and `generators/AuthorizationGenerator` use as their foundation. It contains the following methods that can/should be overriden by the generators created from it in order to tailor it's behavior to provide a more semantic interface:\n\n* predicate: function that returns true or false\n* onSuccess: function invoked during `componentWillMount` is `predicate` returns true. No-op by default (function does nothing).\n* onFailure: function invoked during `componentWillMount` is `predicate` returns false. No-op by default (function does nothing)\n* renderSuccess: function invoked during render cycle if `predicate` returns true. By default, this renders the component it decorates, passing down the properties it received\n* renderFailure: function invoked during render cycle if `predicate` returns false. By defult, this renders `null`.\n\n### generators/AuthenticationGenerator.js\nThis file is intended to be used as the foundation for your `UserIsAuthenticated` decorator. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthenticated(storeState): should return true if the user is authenticated, otherwise false\n* redirectUrl: the url the user should be redirected to if the use is not authenticated\n\n###### Example Usage\n```js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n```\n\n### generators/AuthorizationGenerator.js\nThis file is intended to be used as the foundation for custom `UserIsX` decorators that determine whether components should be displayed based on some user permission. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthorized(storeState): should return true if the user is authorized for the action, otherwise false\n\nIf the user is not authorized, the component it wraps will not be rendered, though you could provide a custom component (or pass down additional props) by overriding the `renderFailure` method to change that default.\n\n###### Example Usage\n```js\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creator === user.id;\n  }\n\n});\n```\n\n### decorators/UserIsAuthorized.js\nThis file is intended to be used as a generic decorator that will only render the decorated component if the function it takes returns true. It's mostly a conveinance decorator, so you don't neccesarily have to create custom decorators like `UserIsPostCreator` or `UserIsAdmin`.\n\nFor example, instead of creating a custom `UserIsPostCreator` decorator as in our example above, we could use this decorator instead like so:\n\n```jsx\nvar UserIsAuthorized = require('lore-auth').decorators.UserIsAuthorized;\nvar PropTypes = require('prop-types');\n\nmodule.exports = UserIsAuthorized(function(props, storeState){\n  return props.post.data.creatorId === props.user.id;\n})(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\nThe disadvantage to using this component is that it is not as semantically clear what this decorator is doing. Instead of being able to read something like `UserIsPostCreator` and thinking _\"okay, so this component will be rendered if the user is the creator of the post\"_ you (or other developers) will need to read the code to decipher the intent.\n\n# Alternate Uses\nAnother use for authorization might be to show/hide a badge based on information about the relationship between two people. For example, maybe you want to display a badge on all posts that were created by your friends, or on all posts that have over 500 likes. You could also use the \"Authorization\" component to control that behavior, or create your own generator using `AuthGeneratorFactory` and referencing `AuthenticationGenerator` or `AuthorizationGenerator` as an example implementation.\n","readmeFilename":"README.md","_id":"lore-auth@0.13.0-beta.12","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-pjGbnjkAwloCLHsHws835fS45RuGSujflhuF80JJwI3u285UtKPXZBH3tMVG2wRlV4H033EtBDrLFXYGvmMXFg==","shasum":"76b9c5b268abbbfce9d73b79e4bb205424947942","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.12.tgz","fileCount":21,"unpackedSize":29589,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDS1V48sDMpRJeth6l+eyL2EJ0g02e9Vv03+K8V9QoQSwIhAOhgA6nk7G5k1KtsYRVOQOfBKAWwqtWBjxl68f2SSRtF"}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth_0.13.0-beta.12_1520214942548_0.505504752117145"},"_hasShrinkwrap":false},"0.13.0-beta.13":{"name":"lore-auth","version":"0.13.0-beta.13","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"readme":"# Purpose\nProvides a set of decorators for handling authentication and authorization concerns within a React application.\n\n# Use Cases\n### Authentication\nA common need when building React applications is the ability to detect if the user is logged in and redirect them to the login page/experience if they are not.\n\nFor this example, pretend we have an application that displays a collection of blog posts for the logged in user. If the user is not logged in (not authenticated) then we want to redirect them to `/login`. If they are authenticated, then we want to display the application as normal.\n\nTo accomplish that, we're going to wrap the root component of our application (called `Master`) with a `UserIsAuthenticated` decorator that determines whether the user is logged in. For this example, we're storing a user token in localStorage, so our condition for determining whether the user is logged in is whether that token exists.\n\n```jsx\n// file: routes.js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n\n// Routes\nvar Master = require('./src/components/Master');\nvar Posts = require('./src/components/Posts');\nvar Login = require('./src/components/Login');\nvar Logout = require('./src/components/Logout');\n\nmodule.exports = (\n  <Route>\n    <Route path=\"/login\" component={Login} />\n    <Route path=\"/logout\" component={Logout} />\n    <Route>\n      <Route path=\"/\" component={UserIsAuthenticated(Master)}>\n        <Route path=\"posts\" component={Posts} />\n      </Route>\n    </Route>\n  </Route>\n);\n```\n\n### Authorization\nLet's say our example application is changed to display a list of posts for _all_ users, but the API only lets users edit their own posts (i.e. posts they created). Translating that concern to the user interface, it means we only want to display the `edit` button if a user is the creator of the post.\n\n```jsx\n// file: src/components/Post\n// This component will render the EditPostButton component, but we \n// only want that component to be rendered if the user created the Post\nvar React = require('react');\nvar EditPostButton = require('./EditPostButton');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n  displayName: 'Post',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  render: function () {\n    var user = this.props.user;\n    var post = this.props.post;\n\n    return (\n      <div>\n        <h1>{post.data.title}</h1>\n        <p>{post.data.text}</p>\n        <EditPostButton post={post} user={user} />\n      </div>\n    );\n  }\n});\n```\n\n```jsx\n// file: src/components/EditPostButton\n// This component will be wrapped in a custom decorator called 'UserIsPostCreator' that \n// will only display the button if the current user created the post\nvar React = require('react');\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creatorId === user.id;\n  }\n});\n\nmodule.exports = UserIsPostCreator(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\n# Usage\n\n### factories/AuthGeneratorFactory.js\nThis file provides the component that `generators/AuthenticationGenerator` and `generators/AuthorizationGenerator` use as their foundation. It contains the following methods that can/should be overriden by the generators created from it in order to tailor it's behavior to provide a more semantic interface:\n\n* predicate: function that returns true or false\n* onSuccess: function invoked during `componentWillMount` is `predicate` returns true. No-op by default (function does nothing).\n* onFailure: function invoked during `componentWillMount` is `predicate` returns false. No-op by default (function does nothing)\n* renderSuccess: function invoked during render cycle if `predicate` returns true. By default, this renders the component it decorates, passing down the properties it received\n* renderFailure: function invoked during render cycle if `predicate` returns false. By defult, this renders `null`.\n\n### generators/AuthenticationGenerator.js\nThis file is intended to be used as the foundation for your `UserIsAuthenticated` decorator. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthenticated(storeState): should return true if the user is authenticated, otherwise false\n* redirectUrl: the url the user should be redirected to if the use is not authenticated\n\n###### Example Usage\n```js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n```\n\n### generators/AuthorizationGenerator.js\nThis file is intended to be used as the foundation for custom `UserIsX` decorators that determine whether components should be displayed based on some user permission. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthorized(storeState): should return true if the user is authorized for the action, otherwise false\n\nIf the user is not authorized, the component it wraps will not be rendered, though you could provide a custom component (or pass down additional props) by overriding the `renderFailure` method to change that default.\n\n###### Example Usage\n```js\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creator === user.id;\n  }\n\n});\n```\n\n### decorators/UserIsAuthorized.js\nThis file is intended to be used as a generic decorator that will only render the decorated component if the function it takes returns true. It's mostly a conveinance decorator, so you don't neccesarily have to create custom decorators like `UserIsPostCreator` or `UserIsAdmin`.\n\nFor example, instead of creating a custom `UserIsPostCreator` decorator as in our example above, we could use this decorator instead like so:\n\n```jsx\nvar UserIsAuthorized = require('lore-auth').decorators.UserIsAuthorized;\nvar PropTypes = require('prop-types');\n\nmodule.exports = UserIsAuthorized(function(props, storeState){\n  return props.post.data.creatorId === props.user.id;\n})(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\nThe disadvantage to using this component is that it is not as semantically clear what this decorator is doing. Instead of being able to read something like `UserIsPostCreator` and thinking _\"okay, so this component will be rendered if the user is the creator of the post\"_ you (or other developers) will need to read the code to decipher the intent.\n\n# Alternate Uses\nAnother use for authorization might be to show/hide a badge based on information about the relationship between two people. For example, maybe you want to display a badge on all posts that were created by your friends, or on all posts that have over 500 likes. You could also use the \"Authorization\" component to control that behavior, or create your own generator using `AuthGeneratorFactory` and referencing `AuthenticationGenerator` or `AuthorizationGenerator` as an example implementation.\n","readmeFilename":"README.md","_id":"lore-auth@0.13.0-beta.13","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-3OOjBfQk8mDX666QfSibofmfFcw9HfcbypqCT6qnlgRsIO4LgNTpoqbhoxeCXpeDCuqJYmcQKslR+Z5CS2o5ZA==","shasum":"5081862c78c4010afc6bd93d4e6b516a38d86bf4","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.13.tgz","fileCount":21,"unpackedSize":29589,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCOA86WNpnrWl2hA7LpO38jfKzotU6OQAZS4Cw/rt/k+gIhAPCfCP6/OpycajrVhdkL1RzwzmRwRAcjmwgKHiXXpCTG"}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth_0.13.0-beta.13_1521939985140_0.7980291029414424"},"_hasShrinkwrap":false},"0.13.0-beta.14":{"name":"lore-auth","version":"0.13.0-beta.14","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"readme":"# Purpose\nProvides a set of decorators for handling authentication and authorization concerns within a React application.\n\n# Use Cases\n### Authentication\nA common need when building React applications is the ability to detect if the user is logged in and redirect them to the login page/experience if they are not.\n\nFor this example, pretend we have an application that displays a collection of blog posts for the logged in user. If the user is not logged in (not authenticated) then we want to redirect them to `/login`. If they are authenticated, then we want to display the application as normal.\n\nTo accomplish that, we're going to wrap the root component of our application (called `Master`) with a `UserIsAuthenticated` decorator that determines whether the user is logged in. For this example, we're storing a user token in localStorage, so our condition for determining whether the user is logged in is whether that token exists.\n\n```jsx\n// file: routes.js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n\n// Routes\nvar Master = require('./src/components/Master');\nvar Posts = require('./src/components/Posts');\nvar Login = require('./src/components/Login');\nvar Logout = require('./src/components/Logout');\n\nmodule.exports = (\n  <Route>\n    <Route path=\"/login\" component={Login} />\n    <Route path=\"/logout\" component={Logout} />\n    <Route>\n      <Route path=\"/\" component={UserIsAuthenticated(Master)}>\n        <Route path=\"posts\" component={Posts} />\n      </Route>\n    </Route>\n  </Route>\n);\n```\n\n### Authorization\nLet's say our example application is changed to display a list of posts for _all_ users, but the API only lets users edit their own posts (i.e. posts they created). Translating that concern to the user interface, it means we only want to display the `edit` button if a user is the creator of the post.\n\n```jsx\n// file: src/components/Post\n// This component will render the EditPostButton component, but we \n// only want that component to be rendered if the user created the Post\nvar React = require('react');\nvar EditPostButton = require('./EditPostButton');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n  displayName: 'Post',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  render: function () {\n    var user = this.props.user;\n    var post = this.props.post;\n\n    return (\n      <div>\n        <h1>{post.data.title}</h1>\n        <p>{post.data.text}</p>\n        <EditPostButton post={post} user={user} />\n      </div>\n    );\n  }\n});\n```\n\n```jsx\n// file: src/components/EditPostButton\n// This component will be wrapped in a custom decorator called 'UserIsPostCreator' that \n// will only display the button if the current user created the post\nvar React = require('react');\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creatorId === user.id;\n  }\n});\n\nmodule.exports = UserIsPostCreator(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\n# Usage\n\n### factories/AuthGeneratorFactory.js\nThis file provides the component that `generators/AuthenticationGenerator` and `generators/AuthorizationGenerator` use as their foundation. It contains the following methods that can/should be overriden by the generators created from it in order to tailor it's behavior to provide a more semantic interface:\n\n* predicate: function that returns true or false\n* onSuccess: function invoked during `componentWillMount` is `predicate` returns true. No-op by default (function does nothing).\n* onFailure: function invoked during `componentWillMount` is `predicate` returns false. No-op by default (function does nothing)\n* renderSuccess: function invoked during render cycle if `predicate` returns true. By default, this renders the component it decorates, passing down the properties it received\n* renderFailure: function invoked during render cycle if `predicate` returns false. By defult, this renders `null`.\n\n### generators/AuthenticationGenerator.js\nThis file is intended to be used as the foundation for your `UserIsAuthenticated` decorator. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthenticated(storeState): should return true if the user is authenticated, otherwise false\n* redirectUrl: the url the user should be redirected to if the use is not authenticated\n\n###### Example Usage\n```js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n```\n\n### generators/AuthorizationGenerator.js\nThis file is intended to be used as the foundation for custom `UserIsX` decorators that determine whether components should be displayed based on some user permission. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthorized(storeState): should return true if the user is authorized for the action, otherwise false\n\nIf the user is not authorized, the component it wraps will not be rendered, though you could provide a custom component (or pass down additional props) by overriding the `renderFailure` method to change that default.\n\n###### Example Usage\n```js\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creator === user.id;\n  }\n\n});\n```\n\n### decorators/UserIsAuthorized.js\nThis file is intended to be used as a generic decorator that will only render the decorated component if the function it takes returns true. It's mostly a conveinance decorator, so you don't neccesarily have to create custom decorators like `UserIsPostCreator` or `UserIsAdmin`.\n\nFor example, instead of creating a custom `UserIsPostCreator` decorator as in our example above, we could use this decorator instead like so:\n\n```jsx\nvar UserIsAuthorized = require('lore-auth').decorators.UserIsAuthorized;\nvar PropTypes = require('prop-types');\n\nmodule.exports = UserIsAuthorized(function(props, storeState){\n  return props.post.data.creatorId === props.user.id;\n})(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\nThe disadvantage to using this component is that it is not as semantically clear what this decorator is doing. Instead of being able to read something like `UserIsPostCreator` and thinking _\"okay, so this component will be rendered if the user is the creator of the post\"_ you (or other developers) will need to read the code to decipher the intent.\n\n# Alternate Uses\nAnother use for authorization might be to show/hide a badge based on information about the relationship between two people. For example, maybe you want to display a badge on all posts that were created by your friends, or on all posts that have over 500 likes. You could also use the \"Authorization\" component to control that behavior, or create your own generator using `AuthGeneratorFactory` and referencing `AuthenticationGenerator` or `AuthorizationGenerator` as an example implementation.\n","readmeFilename":"README.md","_id":"lore-auth@0.13.0-beta.14","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-wCFams7RM0sTIzlZlhulMnBnlXFM55KncqPb2Ll3zELXRie2ycbgxlKj9t8imdGtLH78CTiq1zoIzMR/kCrq/A==","shasum":"d7ada2157a644df5c2042fae16c577146786879b","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.14.tgz","fileCount":21,"unpackedSize":29589,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDy6aQNCyD5w9avEAO7uJttjEVJQn4k6fJpthX9SV4mXAIgLYBHG565sPQJ4U7O6Nrlwk8SJhN18KJyD1wtDovj7/g="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth_0.13.0-beta.14_1522531093644_0.5322773749947753"},"_hasShrinkwrap":false},"0.13.0-beta.15":{"name":"lore-auth","version":"0.13.0-beta.15","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"readme":"# Purpose\nProvides a set of decorators for handling authentication and authorization concerns within a React application.\n\n# Use Cases\n### Authentication\nA common need when building React applications is the ability to detect if the user is logged in and redirect them to the login page/experience if they are not.\n\nFor this example, pretend we have an application that displays a collection of blog posts for the logged in user. If the user is not logged in (not authenticated) then we want to redirect them to `/login`. If they are authenticated, then we want to display the application as normal.\n\nTo accomplish that, we're going to wrap the root component of our application (called `Master`) with a `UserIsAuthenticated` decorator that determines whether the user is logged in. For this example, we're storing a user token in localStorage, so our condition for determining whether the user is logged in is whether that token exists.\n\n```jsx\n// file: routes.js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n\n// Routes\nvar Master = require('./src/components/Master');\nvar Posts = require('./src/components/Posts');\nvar Login = require('./src/components/Login');\nvar Logout = require('./src/components/Logout');\n\nmodule.exports = (\n  <Route>\n    <Route path=\"/login\" component={Login} />\n    <Route path=\"/logout\" component={Logout} />\n    <Route>\n      <Route path=\"/\" component={UserIsAuthenticated(Master)}>\n        <Route path=\"posts\" component={Posts} />\n      </Route>\n    </Route>\n  </Route>\n);\n```\n\n### Authorization\nLet's say our example application is changed to display a list of posts for _all_ users, but the API only lets users edit their own posts (i.e. posts they created). Translating that concern to the user interface, it means we only want to display the `edit` button if a user is the creator of the post.\n\n```jsx\n// file: src/components/Post\n// This component will render the EditPostButton component, but we \n// only want that component to be rendered if the user created the Post\nvar React = require('react');\nvar EditPostButton = require('./EditPostButton');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n  displayName: 'Post',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  render: function () {\n    var user = this.props.user;\n    var post = this.props.post;\n\n    return (\n      <div>\n        <h1>{post.data.title}</h1>\n        <p>{post.data.text}</p>\n        <EditPostButton post={post} user={user} />\n      </div>\n    );\n  }\n});\n```\n\n```jsx\n// file: src/components/EditPostButton\n// This component will be wrapped in a custom decorator called 'UserIsPostCreator' that \n// will only display the button if the current user created the post\nvar React = require('react');\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creatorId === user.id;\n  }\n});\n\nmodule.exports = UserIsPostCreator(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\n# Usage\n\n### factories/AuthGeneratorFactory.js\nThis file provides the component that `generators/AuthenticationGenerator` and `generators/AuthorizationGenerator` use as their foundation. It contains the following methods that can/should be overriden by the generators created from it in order to tailor it's behavior to provide a more semantic interface:\n\n* predicate: function that returns true or false\n* onSuccess: function invoked during `componentWillMount` is `predicate` returns true. No-op by default (function does nothing).\n* onFailure: function invoked during `componentWillMount` is `predicate` returns false. No-op by default (function does nothing)\n* renderSuccess: function invoked during render cycle if `predicate` returns true. By default, this renders the component it decorates, passing down the properties it received\n* renderFailure: function invoked during render cycle if `predicate` returns false. By defult, this renders `null`.\n\n### generators/AuthenticationGenerator.js\nThis file is intended to be used as the foundation for your `UserIsAuthenticated` decorator. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthenticated(storeState): should return true if the user is authenticated, otherwise false\n* redirectUrl: the url the user should be redirected to if the use is not authenticated\n\n###### Example Usage\n```js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n```\n\n### generators/AuthorizationGenerator.js\nThis file is intended to be used as the foundation for custom `UserIsX` decorators that determine whether components should be displayed based on some user permission. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthorized(storeState): should return true if the user is authorized for the action, otherwise false\n\nIf the user is not authorized, the component it wraps will not be rendered, though you could provide a custom component (or pass down additional props) by overriding the `renderFailure` method to change that default.\n\n###### Example Usage\n```js\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creator === user.id;\n  }\n\n});\n```\n\n### decorators/UserIsAuthorized.js\nThis file is intended to be used as a generic decorator that will only render the decorated component if the function it takes returns true. It's mostly a conveinance decorator, so you don't neccesarily have to create custom decorators like `UserIsPostCreator` or `UserIsAdmin`.\n\nFor example, instead of creating a custom `UserIsPostCreator` decorator as in our example above, we could use this decorator instead like so:\n\n```jsx\nvar UserIsAuthorized = require('lore-auth').decorators.UserIsAuthorized;\nvar PropTypes = require('prop-types');\n\nmodule.exports = UserIsAuthorized(function(props, storeState){\n  return props.post.data.creatorId === props.user.id;\n})(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\nThe disadvantage to using this component is that it is not as semantically clear what this decorator is doing. Instead of being able to read something like `UserIsPostCreator` and thinking _\"okay, so this component will be rendered if the user is the creator of the post\"_ you (or other developers) will need to read the code to decipher the intent.\n\n# Alternate Uses\nAnother use for authorization might be to show/hide a badge based on information about the relationship between two people. For example, maybe you want to display a badge on all posts that were created by your friends, or on all posts that have over 500 likes. You could also use the \"Authorization\" component to control that behavior, or create your own generator using `AuthGeneratorFactory` and referencing `AuthenticationGenerator` or `AuthorizationGenerator` as an example implementation.\n","readmeFilename":"README.md","_id":"lore-auth@0.13.0-beta.15","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-35iwa+MFPS1JH9zWaODq2+XwSC/I2oRgJuKwQFohff7yNjD68/oL4xDK/8r7X4NHuX0bhnO7q0NCf22733WxOQ==","shasum":"f2d0ad18df1e851298364e12ef6fe318119de668","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.15.tgz","fileCount":19,"unpackedSize":26541,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGGcek8FxmBSl37BDJ7sxeKhwQw3xOoqPstjHWucW0iaAiEAiUI57iwiEfy26OVKzJriM/BZ4vFJH1RAVfd22OFXc5Y="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth_0.13.0-beta.15_1523329154706_0.3774678902573154"},"_hasShrinkwrap":false},"0.13.0-beta.16":{"name":"lore-auth","version":"0.13.0-beta.16","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"readme":"# Purpose\nProvides a set of decorators for handling authentication and authorization concerns within a React application.\n\n# Use Cases\n### Authentication\nA common need when building React applications is the ability to detect if the user is logged in and redirect them to the login page/experience if they are not.\n\nFor this example, pretend we have an application that displays a collection of blog posts for the logged in user. If the user is not logged in (not authenticated) then we want to redirect them to `/login`. If they are authenticated, then we want to display the application as normal.\n\nTo accomplish that, we're going to wrap the root component of our application (called `Master`) with a `UserIsAuthenticated` decorator that determines whether the user is logged in. For this example, we're storing a user token in localStorage, so our condition for determining whether the user is logged in is whether that token exists.\n\n```jsx\n// file: routes.js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n\n// Routes\nvar Master = require('./src/components/Master');\nvar Posts = require('./src/components/Posts');\nvar Login = require('./src/components/Login');\nvar Logout = require('./src/components/Logout');\n\nmodule.exports = (\n  <Route>\n    <Route path=\"/login\" component={Login} />\n    <Route path=\"/logout\" component={Logout} />\n    <Route>\n      <Route path=\"/\" component={UserIsAuthenticated(Master)}>\n        <Route path=\"posts\" component={Posts} />\n      </Route>\n    </Route>\n  </Route>\n);\n```\n\n### Authorization\nLet's say our example application is changed to display a list of posts for _all_ users, but the API only lets users edit their own posts (i.e. posts they created). Translating that concern to the user interface, it means we only want to display the `edit` button if a user is the creator of the post.\n\n```jsx\n// file: src/components/Post\n// This component will render the EditPostButton component, but we \n// only want that component to be rendered if the user created the Post\nvar React = require('react');\nvar EditPostButton = require('./EditPostButton');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n  displayName: 'Post',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  render: function () {\n    var user = this.props.user;\n    var post = this.props.post;\n\n    return (\n      <div>\n        <h1>{post.data.title}</h1>\n        <p>{post.data.text}</p>\n        <EditPostButton post={post} user={user} />\n      </div>\n    );\n  }\n});\n```\n\n```jsx\n// file: src/components/EditPostButton\n// This component will be wrapped in a custom decorator called 'UserIsPostCreator' that \n// will only display the button if the current user created the post\nvar React = require('react');\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creatorId === user.id;\n  }\n});\n\nmodule.exports = UserIsPostCreator(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\n# Usage\n\n### factories/AuthGeneratorFactory.js\nThis file provides the component that `generators/AuthenticationGenerator` and `generators/AuthorizationGenerator` use as their foundation. It contains the following methods that can/should be overriden by the generators created from it in order to tailor it's behavior to provide a more semantic interface:\n\n* predicate: function that returns true or false\n* onSuccess: function invoked during `componentWillMount` is `predicate` returns true. No-op by default (function does nothing).\n* onFailure: function invoked during `componentWillMount` is `predicate` returns false. No-op by default (function does nothing)\n* renderSuccess: function invoked during render cycle if `predicate` returns true. By default, this renders the component it decorates, passing down the properties it received\n* renderFailure: function invoked during render cycle if `predicate` returns false. By defult, this renders `null`.\n\n### generators/AuthenticationGenerator.js\nThis file is intended to be used as the foundation for your `UserIsAuthenticated` decorator. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthenticated(storeState): should return true if the user is authenticated, otherwise false\n* redirectUrl: the url the user should be redirected to if the use is not authenticated\n\n###### Example Usage\n```js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n```\n\n### generators/AuthorizationGenerator.js\nThis file is intended to be used as the foundation for custom `UserIsX` decorators that determine whether components should be displayed based on some user permission. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthorized(storeState): should return true if the user is authorized for the action, otherwise false\n\nIf the user is not authorized, the component it wraps will not be rendered, though you could provide a custom component (or pass down additional props) by overriding the `renderFailure` method to change that default.\n\n###### Example Usage\n```js\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creator === user.id;\n  }\n\n});\n```\n\n### decorators/UserIsAuthorized.js\nThis file is intended to be used as a generic decorator that will only render the decorated component if the function it takes returns true. It's mostly a conveinance decorator, so you don't neccesarily have to create custom decorators like `UserIsPostCreator` or `UserIsAdmin`.\n\nFor example, instead of creating a custom `UserIsPostCreator` decorator as in our example above, we could use this decorator instead like so:\n\n```jsx\nvar UserIsAuthorized = require('lore-auth').decorators.UserIsAuthorized;\nvar PropTypes = require('prop-types');\n\nmodule.exports = UserIsAuthorized(function(props, storeState){\n  return props.post.data.creatorId === props.user.id;\n})(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\nThe disadvantage to using this component is that it is not as semantically clear what this decorator is doing. Instead of being able to read something like `UserIsPostCreator` and thinking _\"okay, so this component will be rendered if the user is the creator of the post\"_ you (or other developers) will need to read the code to decipher the intent.\n\n# Alternate Uses\nAnother use for authorization might be to show/hide a badge based on information about the relationship between two people. For example, maybe you want to display a badge on all posts that were created by your friends, or on all posts that have over 500 likes. You could also use the \"Authorization\" component to control that behavior, or create your own generator using `AuthGeneratorFactory` and referencing `AuthenticationGenerator` or `AuthorizationGenerator` as an example implementation.\n","readmeFilename":"README.md","_id":"lore-auth@0.13.0-beta.16","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-IJDaM9Ic9h1ZonmOaZzfhTTm0+c1ShHZEms2lVNGupXrH1O6qCWLlSczaxN6O4YVxtymefekQcoMPkMgNxI2iw==","shasum":"19870624b92a416000f24bfb4b22053ea7691c27","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-beta.16.tgz","fileCount":15,"unpackedSize":21034,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa4kJkCRA9TVsSAnZWagAAqfwP/iWi2vvjO8OGv2qhSQIy\nSFdV3MVCLMT3HpES0uPYl+AdOD0oUdrYICEfVj2dqiDgM310Ech9wr9FkVC9\nftudYfgPTT7ldQWs6/bYjaY1IFU3sCL4ydmwSua+fBSDTX4TiHFNcx4+Sbn9\np60VRKx00Vn90HHB3PRNA1O0zUtuFK079mTbN9IAYVTM3k3KUdPk6DYnHjQr\n8bu6muBUQ/CS+QxfqUzaBhhyCj5CgyYKwp9osgwEQcTBtu42FuXsJ+33Yjkn\nzaXGgvsOU2mzo7hMZoZdG29xj+vdF0fE9cSa0AtSdHNlad+9jcTOdDMHmoZk\n7g8RiwV4GAmY0zNx07aImlpDYOmWU8liG8tA8laI1W02iNDUbviCn8GbFpvc\nzrKHCp8g1KhQTUts68dOkgDmmaGzo46fxSNbH5PthvAxjI2DVwQMN1h0lEC0\n14vOgfQ8PHkmSf+o1UEGiYqu4H6oC97twCo98uM2nhoY2T78HWCKHdnN5dF6\nmPZfFFKbF342i2gtOt5cKe2COCTxqy2X42rfDpNhCY27VArz/StcnUgYdOik\nJhUU2eITpStsX+inlBsaxTQ1Ydi9PVHZ0B7OYB/nUhkCL4O3NjfQ/8zEbrDZ\nNxBKTaqmKGdj0Et6ahG00jBygx8qTm3hKj9NoAz1PMdTC5UXRgURgK87f3rG\nh07M\r\n=ntoA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAFrgPjM5RI69ttSHQx3yM1GjZg1mTWt8tryre3SoquTAiEAqlNWoNDBVsz/4XksRcRYftj8K4nWpQ9fwyea1X06QQI="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth_0.13.0-beta.16_1524777571529_0.6456457122235362"},"_hasShrinkwrap":false},"0.13.0-rc.1":{"name":"lore-auth","version":"0.13.0-rc.1","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"readme":"# Purpose\nProvides a set of decorators for handling authentication and authorization concerns within a React application.\n\n# Use Cases\n### Authentication\nA common need when building React applications is the ability to detect if the user is logged in and redirect them to the login page/experience if they are not.\n\nFor this example, pretend we have an application that displays a collection of blog posts for the logged in user. If the user is not logged in (not authenticated) then we want to redirect them to `/login`. If they are authenticated, then we want to display the application as normal.\n\nTo accomplish that, we're going to wrap the root component of our application (called `Master`) with a `UserIsAuthenticated` decorator that determines whether the user is logged in. For this example, we're storing a user token in localStorage, so our condition for determining whether the user is logged in is whether that token exists.\n\n```jsx\n// file: routes.js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n\n// Routes\nvar Master = require('./src/components/Master');\nvar Posts = require('./src/components/Posts');\nvar Login = require('./src/components/Login');\nvar Logout = require('./src/components/Logout');\n\nmodule.exports = (\n  <Route>\n    <Route path=\"/login\" component={Login} />\n    <Route path=\"/logout\" component={Logout} />\n    <Route>\n      <Route path=\"/\" component={UserIsAuthenticated(Master)}>\n        <Route path=\"posts\" component={Posts} />\n      </Route>\n    </Route>\n  </Route>\n);\n```\n\n### Authorization\nLet's say our example application is changed to display a list of posts for _all_ users, but the API only lets users edit their own posts (i.e. posts they created). Translating that concern to the user interface, it means we only want to display the `edit` button if a user is the creator of the post.\n\n```jsx\n// file: src/components/Post\n// This component will render the EditPostButton component, but we \n// only want that component to be rendered if the user created the Post\nvar React = require('react');\nvar EditPostButton = require('./EditPostButton');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n  displayName: 'Post',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  render: function () {\n    var user = this.props.user;\n    var post = this.props.post;\n\n    return (\n      <div>\n        <h1>{post.data.title}</h1>\n        <p>{post.data.text}</p>\n        <EditPostButton post={post} user={user} />\n      </div>\n    );\n  }\n});\n```\n\n```jsx\n// file: src/components/EditPostButton\n// This component will be wrapped in a custom decorator called 'UserIsPostCreator' that \n// will only display the button if the current user created the post\nvar React = require('react');\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creatorId === user.id;\n  }\n});\n\nmodule.exports = UserIsPostCreator(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\n# Usage\n\n### factories/AuthGeneratorFactory.js\nThis file provides the component that `generators/AuthenticationGenerator` and `generators/AuthorizationGenerator` use as their foundation. It contains the following methods that can/should be overriden by the generators created from it in order to tailor it's behavior to provide a more semantic interface:\n\n* predicate: function that returns true or false\n* onSuccess: function invoked during `componentWillMount` is `predicate` returns true. No-op by default (function does nothing).\n* onFailure: function invoked during `componentWillMount` is `predicate` returns false. No-op by default (function does nothing)\n* renderSuccess: function invoked during render cycle if `predicate` returns true. By default, this renders the component it decorates, passing down the properties it received\n* renderFailure: function invoked during render cycle if `predicate` returns false. By defult, this renders `null`.\n\n### generators/AuthenticationGenerator.js\nThis file is intended to be used as the foundation for your `UserIsAuthenticated` decorator. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthenticated(storeState): should return true if the user is authenticated, otherwise false\n* redirectUrl: the url the user should be redirected to if the use is not authenticated\n\n###### Example Usage\n```js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n```\n\n### generators/AuthorizationGenerator.js\nThis file is intended to be used as the foundation for custom `UserIsX` decorators that determine whether components should be displayed based on some user permission. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthorized(storeState): should return true if the user is authorized for the action, otherwise false\n\nIf the user is not authorized, the component it wraps will not be rendered, though you could provide a custom component (or pass down additional props) by overriding the `renderFailure` method to change that default.\n\n###### Example Usage\n```js\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creator === user.id;\n  }\n\n});\n```\n\n### decorators/UserIsAuthorized.js\nThis file is intended to be used as a generic decorator that will only render the decorated component if the function it takes returns true. It's mostly a conveinance decorator, so you don't neccesarily have to create custom decorators like `UserIsPostCreator` or `UserIsAdmin`.\n\nFor example, instead of creating a custom `UserIsPostCreator` decorator as in our example above, we could use this decorator instead like so:\n\n```jsx\nvar UserIsAuthorized = require('lore-auth').decorators.UserIsAuthorized;\nvar PropTypes = require('prop-types');\n\nmodule.exports = UserIsAuthorized(function(props, storeState){\n  return props.post.data.creatorId === props.user.id;\n})(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\nThe disadvantage to using this component is that it is not as semantically clear what this decorator is doing. Instead of being able to read something like `UserIsPostCreator` and thinking _\"okay, so this component will be rendered if the user is the creator of the post\"_ you (or other developers) will need to read the code to decipher the intent.\n\n# Alternate Uses\nAnother use for authorization might be to show/hide a badge based on information about the relationship between two people. For example, maybe you want to display a badge on all posts that were created by your friends, or on all posts that have over 500 likes. You could also use the \"Authorization\" component to control that behavior, or create your own generator using `AuthGeneratorFactory` and referencing `AuthenticationGenerator` or `AuthorizationGenerator` as an example implementation.\n","readmeFilename":"README.md","_id":"lore-auth@0.13.0-rc.1","_npmVersion":"6.0.1","_nodeVersion":"8.11.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-6A6wrAPkkEyLwnWaV+ik4CMdlIZzF1xk3Z54UhBtFmweMWJSPTP6zIt3BtynEAlHrteuubQbCOSf/1+tPqs2Ow==","shasum":"1636008b617ef0239885a64d4049f9c4feaf63ae","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-rc.1.tgz","fileCount":15,"unpackedSize":21031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa+IbrCRA9TVsSAnZWagAAf/oP/1tRaqT7xZvpjkAmzChv\nsCsNS22zyhfsVHEuqZC7rI+8SqOuLeD7BMElposhIPREPW0azInQ7GjFjOeb\no90J66RQ225I+5btZpjJ4iyEH9l0k1Hrj7I4kA5fjreaIoS7s9fqZbSWL3ju\n0Tv6l4MmJa69P3bCcPEp9tAFpFL4ihpbsGr25yhZoUtVwSLgshK67UZOMFQI\nqyszzgoC64nfjKTU/flCyzYw+YHudVZ9J03uuE8vmOXLzfmC1y1au/vzdXYc\nmuLOKyPQrbxTX36bb1RKIGrDPMFHDyv2cOKVCnDmG2CRItU+knEGgb8BnQe0\nBehJlzAiMrQRmSQcghMAPmNcebXgHm5bY/r99Wlpe4tzocXhljT/CYD8ZbCl\nOD37v2EPdQhzaq2/D9fPebaGTVoPNMPG4RJx2aeVOGb5fSZaJw6dswYDyWjc\nwscfqcqVl/Q1qRwBzA8kumNwsk9xYOxxm0eMHn/LuOVpAlC/GIxkQUgsWajD\nDVtB3dwisdigRUNSXuqkwNeXCAMmciw/j8pz5gwVOHHMlMAhO1c+fEYJ6wv+\ntngERLjSDfX8rppw18ZDydcyhyK+dr1PVUfPSp0U71YnKHVvFQSZ6EhBl2XF\nbZNbQB7kOoHtVQWty7tBMbnaCbzeB7gg97nYTdUDZpgdZvR9G29d85hcrBnz\nJxLB\r\n=C6d1\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC9+txmzp1Xe3BS51WfZuClQ4VjNp0Suqf5CTieqvutAAIgCIeYVjSYBeKcqNn5KbLsNEZqc49I7jVDtPGsfqpOGbo="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth_0.13.0-rc.1_1526236906873_0.6945582525112395"},"_hasShrinkwrap":false},"0.13.0-rc.2":{"name":"lore-auth","version":"0.13.0-rc.2","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"readme":"# Purpose\nProvides a set of decorators for handling authentication and authorization concerns within a React application.\n\n# Use Cases\n### Authentication\nA common need when building React applications is the ability to detect if the user is logged in and redirect them to the login page/experience if they are not.\n\nFor this example, pretend we have an application that displays a collection of blog posts for the logged in user. If the user is not logged in (not authenticated) then we want to redirect them to `/login`. If they are authenticated, then we want to display the application as normal.\n\nTo accomplish that, we're going to wrap the root component of our application (called `Master`) with a `UserIsAuthenticated` decorator that determines whether the user is logged in. For this example, we're storing a user token in localStorage, so our condition for determining whether the user is logged in is whether that token exists.\n\n```jsx\n// file: routes.js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n\n// Routes\nvar Master = require('./src/components/Master');\nvar Posts = require('./src/components/Posts');\nvar Login = require('./src/components/Login');\nvar Logout = require('./src/components/Logout');\n\nmodule.exports = (\n  <Route>\n    <Route path=\"/login\" component={Login} />\n    <Route path=\"/logout\" component={Logout} />\n    <Route>\n      <Route path=\"/\" component={UserIsAuthenticated(Master)}>\n        <Route path=\"posts\" component={Posts} />\n      </Route>\n    </Route>\n  </Route>\n);\n```\n\n### Authorization\nLet's say our example application is changed to display a list of posts for _all_ users, but the API only lets users edit their own posts (i.e. posts they created). Translating that concern to the user interface, it means we only want to display the `edit` button if a user is the creator of the post.\n\n```jsx\n// file: src/components/Post\n// This component will render the EditPostButton component, but we \n// only want that component to be rendered if the user created the Post\nvar React = require('react');\nvar EditPostButton = require('./EditPostButton');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n  displayName: 'Post',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  render: function () {\n    var user = this.props.user;\n    var post = this.props.post;\n\n    return (\n      <div>\n        <h1>{post.data.title}</h1>\n        <p>{post.data.text}</p>\n        <EditPostButton post={post} user={user} />\n      </div>\n    );\n  }\n});\n```\n\n```jsx\n// file: src/components/EditPostButton\n// This component will be wrapped in a custom decorator called 'UserIsPostCreator' that \n// will only display the button if the current user created the post\nvar React = require('react');\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creatorId === user.id;\n  }\n});\n\nmodule.exports = UserIsPostCreator(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\n# Usage\n\n### factories/AuthGeneratorFactory.js\nThis file provides the component that `generators/AuthenticationGenerator` and `generators/AuthorizationGenerator` use as their foundation. It contains the following methods that can/should be overriden by the generators created from it in order to tailor it's behavior to provide a more semantic interface:\n\n* predicate: function that returns true or false\n* onSuccess: function invoked during `componentWillMount` is `predicate` returns true. No-op by default (function does nothing).\n* onFailure: function invoked during `componentWillMount` is `predicate` returns false. No-op by default (function does nothing)\n* renderSuccess: function invoked during render cycle if `predicate` returns true. By default, this renders the component it decorates, passing down the properties it received\n* renderFailure: function invoked during render cycle if `predicate` returns false. By defult, this renders `null`.\n\n### generators/AuthenticationGenerator.js\nThis file is intended to be used as the foundation for your `UserIsAuthenticated` decorator. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthenticated(storeState): should return true if the user is authenticated, otherwise false\n* redirectUrl: the url the user should be redirected to if the use is not authenticated\n\n###### Example Usage\n```js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n```\n\n### generators/AuthorizationGenerator.js\nThis file is intended to be used as the foundation for custom `UserIsX` decorators that determine whether components should be displayed based on some user permission. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthorized(storeState): should return true if the user is authorized for the action, otherwise false\n\nIf the user is not authorized, the component it wraps will not be rendered, though you could provide a custom component (or pass down additional props) by overriding the `renderFailure` method to change that default.\n\n###### Example Usage\n```js\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creator === user.id;\n  }\n\n});\n```\n\n### decorators/UserIsAuthorized.js\nThis file is intended to be used as a generic decorator that will only render the decorated component if the function it takes returns true. It's mostly a conveinance decorator, so you don't neccesarily have to create custom decorators like `UserIsPostCreator` or `UserIsAdmin`.\n\nFor example, instead of creating a custom `UserIsPostCreator` decorator as in our example above, we could use this decorator instead like so:\n\n```jsx\nvar UserIsAuthorized = require('lore-auth').decorators.UserIsAuthorized;\nvar PropTypes = require('prop-types');\n\nmodule.exports = UserIsAuthorized(function(props, storeState){\n  return props.post.data.creatorId === props.user.id;\n})(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\nThe disadvantage to using this component is that it is not as semantically clear what this decorator is doing. Instead of being able to read something like `UserIsPostCreator` and thinking _\"okay, so this component will be rendered if the user is the creator of the post\"_ you (or other developers) will need to read the code to decipher the intent.\n\n# Alternate Uses\nAnother use for authorization might be to show/hide a badge based on information about the relationship between two people. For example, maybe you want to display a badge on all posts that were created by your friends, or on all posts that have over 500 likes. You could also use the \"Authorization\" component to control that behavior, or create your own generator using `AuthGeneratorFactory` and referencing `AuthenticationGenerator` or `AuthorizationGenerator` as an example implementation.\n","readmeFilename":"README.md","_id":"lore-auth@0.13.0-rc.2","_npmVersion":"6.0.1","_nodeVersion":"8.11.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-l7P7MfAGdQZktcAZsf4z7SbFWBmsz0EAL9UqwysNNJQwXJ782HZyUfxQ9N4qcKBgxOwlFpOa07Nd6prKA0gQYg==","shasum":"87ab99fecef85239ed683dfb3bd490d5c4b05d7a","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0-rc.2.tgz","fileCount":15,"unpackedSize":21031,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbAhLHCRA9TVsSAnZWagAAsy4P/2+LAmmdCkkxd7OmGT0i\na0hwPCtAbUfBvdyGk1/CjopPQICaO/JJh/oTzN1Zk1v6Arvov6sRARkTbEGb\nvxPjU4o1jAKNwDhAcMjiNL/HtXLc72JnSBFx3r94yO59Man38kIL9CN9s0yS\nsaMOYhV7ka1loagT21+XNScBFgNrBBHtGoGAmqciLABJP2Ndw91J43mczq3K\nVgee4BB+uZtKOEts7IYPqGROJqEfyIB4ZWVtMd+8ucLY0FRxWscKfEDK7ad6\nkpo4Fq2Bcxo3QiZOiM+LQEKItbTCh7OU2lnfEHtnRZgJ2OP7Vy1dtdC1cxl4\nebOxGAGit+VBqT7pfvH4jUaxIhffRsD5w1WFUBFQq4veDwscnpzvo3KqUAEt\nd/zeWNgG3cDYL5sMfs5rVPfF4t5TCOM3koUN6I6cUalcmu56ysNVx3uFZR7c\nIrTH2SzPuqoVPo9SD/QjVUKfn28NNCN1w4pxzwPpA8cgtliFxOA3NK8dPQIQ\n97kWHpjeCk23DG5bGMFWwheGAzWenAjPwafm9Z+tYgJ5YEplchRG2VjKNnY/\nin2z0Q1lnOfHBqEDoxY7yydbVFo06dBMBhf6/vqfkyXl4ULUMHNOSjOVhvqU\nqmbX6gg72Gse2yW5715RCJ0dMQCdkCEhBrtl61DYIQiZue5YkCQH+2yRCNHt\n04bd\r\n=v+IC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/JPcOejqSqrGqAUqw3zHIyYa52TDfT3+zYPue+qn6iwIhAP8jxQISmygUxTV3vBHIjCDQerj/e3EsFuMsKMpXxQ1b"}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth_0.13.0-rc.2_1526862534229_0.33406012769126736"},"_hasShrinkwrap":false},"0.13.0":{"name":"lore-auth","version":"0.13.0","license":"MIT","description":"Set of decorators to help with authentication and authorization","homepage":"https://github.com/lore/lore#readme","main":"lib/index.js","module":"es/index.js","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"scripts":{"build":"npm run build:cjs && npm run build:es","build:cjs":"BABEL_ENV=cjs ../../node_modules/.bin/babel src --out-dir lib","build:es":"BABEL_ENV=es ../../node_modules/.bin/babel src --out-dir es","clean":"rimraf lib && rimraf es","debug":"mocha debug --compilers js:babel-core/register --recursive","lint":"../../node_modules/.bin/eslint src","prepublish":"npm run build","test":"BABEL_ENV=test mocha --compilers js:babel-core/register --recursive"},"dependencies":{"create-react-class":"^15.6.2","lodash":"^4.0.0","prop-types":"^15.5.0","url":"^0.11.0"},"devDependencies":{"chai":"^3.4.1","mocha":"^2.3.4","react":"^16.1.1","react-router":"^3.0.0","rimraf":"^2.5.2"},"peerDependencies":{"react":"^16.0.0","react-router":"^3.0.0"},"_id":"lore-auth@0.13.0","_npmVersion":"6.0.1","_nodeVersion":"8.11.1","_npmUser":{"name":"jchansen","email":"jason_hansen@outlook.com"},"dist":{"integrity":"sha512-/d1lkF8N4NKY7zaFmnamV8f3awUD2Kx6jWpkTRsDdjxPUM31G7q3D81kjEjgd08HCNljGOeALzr07D9c+nHmqQ==","shasum":"993739b684e1e6a27fbee038ad366e46d3e6ee8e","tarball":"https://registry.npmjs.org/lore-auth/-/lore-auth-0.13.0.tgz","fileCount":15,"unpackedSize":20975,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbLvinCRA9TVsSAnZWagAAL0AP/Auj8AiiPPnrN52tKYBc\n25Uq0kdHFDvPUosj8XWybI6JZm7HqtpTCZcq1ZWBPDHx/ZbKTQJmEYe0HPFt\nZAq4iG6Kim4d/Y3XxiHsFmTtRjBoIcLF0DCm4+P+Hu+ZGofkmBY/BdTkgrzz\nyw44XissZNjMcHflVqrSf3+tz66VlQhfqix1ruVnVQLh3dVLnLDCIDOsYjrt\nyBUZAgLsXkV7sR2+TltSLA/s8DfMyZsyTtwYX+52qQvaeIaDH4TNnl+eVV0f\nGF2l/Wzs0Y75AO4dvi3HQIYMTQRki/YrCt3zZIM63Jel3MSFg4YRnqmkQZBk\nv4S1F+2b+/EIdyY4KEha4rZPYhNJhjfjkLx65M5d+IM+eAOACR69xailgObU\ns/2VIcvfW3ZSzqfPBIqIhGtW2nbERA1amVTc4naQ59J3Yk/+MVL4VxNp9hEL\nJk8mS0B2iInofaWj1vI/F5DYPc9F79q08cBGX9tluyYygugNyqKON+BifZx3\nLxOBZXt/Zztw3qIPpda6AUoIKw3XpMOvFfFDHi0LnSFxfBgaIBrUrpZo1qnA\nV9eK8PqomREXVxOpBkIghK/HuhTvlralFjUjbIWDNPxSJtCICHDW8qGjzz4c\nyhotWZHOqH0/AqLNuLQB53yqABhlZdilAy1TSAH3axIdtz4rUPEWm9EskB0R\nfVuU\r\n=3RxM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChvpvie6jaiouRKIYnll61btPUCIbOmQ4qNeXHa4q0agIgEboY7zzju8QFLitDC3RwNokz65npKB0KWGcYuL7GjI0="}]},"maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/lore-auth_0.13.0_1529804967374_0.5788057215988134"},"_hasShrinkwrap":false}},"readme":"# Purpose\nProvides a set of decorators for handling authentication and authorization concerns within a React application.\n\n# Use Cases\n### Authentication\nA common need when building React applications is the ability to detect if the user is logged in and redirect them to the login page/experience if they are not.\n\nFor this example, pretend we have an application that displays a collection of blog posts for the logged in user. If the user is not logged in (not authenticated) then we want to redirect them to `/login`. If they are authenticated, then we want to display the application as normal.\n\nTo accomplish that, we're going to wrap the root component of our application (called `Master`) with a `UserIsAuthenticated` decorator that determines whether the user is logged in. For this example, we're storing a user token in localStorage, so our condition for determining whether the user is logged in is whether that token exists.\n\n```jsx\n// file: routes.js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n\n// Routes\nvar Master = require('./src/components/Master');\nvar Posts = require('./src/components/Posts');\nvar Login = require('./src/components/Login');\nvar Logout = require('./src/components/Logout');\n\nmodule.exports = (\n  <Route>\n    <Route path=\"/login\" component={Login} />\n    <Route path=\"/logout\" component={Logout} />\n    <Route>\n      <Route path=\"/\" component={UserIsAuthenticated(Master)}>\n        <Route path=\"posts\" component={Posts} />\n      </Route>\n    </Route>\n  </Route>\n);\n```\n\n### Authorization\nLet's say our example application is changed to display a list of posts for _all_ users, but the API only lets users edit their own posts (i.e. posts they created). Translating that concern to the user interface, it means we only want to display the `edit` button if a user is the creator of the post.\n\n```jsx\n// file: src/components/Post\n// This component will render the EditPostButton component, but we \n// only want that component to be rendered if the user created the Post\nvar React = require('react');\nvar EditPostButton = require('./EditPostButton');\nvar PropTypes = require('prop-types');\n\nmodule.exports = React.createClass({\n  displayName: 'Post',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  render: function () {\n    var user = this.props.user;\n    var post = this.props.post;\n\n    return (\n      <div>\n        <h1>{post.data.title}</h1>\n        <p>{post.data.text}</p>\n        <EditPostButton post={post} user={user} />\n      </div>\n    );\n  }\n});\n```\n\n```jsx\n// file: src/components/EditPostButton\n// This component will be wrapped in a custom decorator called 'UserIsPostCreator' that \n// will only display the button if the current user created the post\nvar React = require('react');\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creatorId === user.id;\n  }\n});\n\nmodule.exports = UserIsPostCreator(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\n# Usage\n\n### factories/AuthGeneratorFactory.js\nThis file provides the component that `generators/AuthenticationGenerator` and `generators/AuthorizationGenerator` use as their foundation. It contains the following methods that can/should be overriden by the generators created from it in order to tailor it's behavior to provide a more semantic interface:\n\n* predicate: function that returns true or false\n* onSuccess: function invoked during `componentWillMount` is `predicate` returns true. No-op by default (function does nothing).\n* onFailure: function invoked during `componentWillMount` is `predicate` returns false. No-op by default (function does nothing)\n* renderSuccess: function invoked during render cycle if `predicate` returns true. By default, this renders the component it decorates, passing down the properties it received\n* renderFailure: function invoked during render cycle if `predicate` returns false. By defult, this renders `null`.\n\n### generators/AuthenticationGenerator.js\nThis file is intended to be used as the foundation for your `UserIsAuthenticated` decorator. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthenticated(storeState): should return true if the user is authenticated, otherwise false\n* redirectUrl: the url the user should be redirected to if the use is not authenticated\n\n###### Example Usage\n```js\nvar AuthenticationGenerator = require('lore-auth').generators.AuthenticationGenerator;\n\nvar UserIsAuthenticated = AuthenticationGenerator({\n  wrapperDisplayName: 'UserIsAuthenticated',\n  \n  // redirectUrl: '/login',\n  \n  // redirectQueryParamName: 'redirect',\n  \n  isAuthenticated: function (storeState) {\n    return !!localStorage.userToken;\n  }\n});\n```\n\n### generators/AuthorizationGenerator.js\nThis file is intended to be used as the foundation for custom `UserIsX` decorators that determine whether components should be displayed based on some user permission. It overrides the default methods provided by the `AuthGeneratorFactory` component to provide the following interface:\n\n* isAuthorized(storeState): should return true if the user is authorized for the action, otherwise false\n\nIf the user is not authorized, the component it wraps will not be rendered, though you could provide a custom component (or pass down additional props) by overriding the `renderFailure` method to change that default.\n\n###### Example Usage\n```js\nvar AuthorizationGenerator = require('lore-auth').generators.AuthorizationGenerator;\nvar PropTypes = require('prop-types');\n\nvar UserIsPostCreator = AuthorizationGenerator({\n  wrapperDisplayName: 'UserIsPostCreator',\n\n  propTypes: {\n    post: PropTypes.object.isRequired,\n    user: PropTypes.object.isRequired\n  },\n\n  isAuthorized: function () {\n    var post = this.props.post;\n    var user = this.props.user;\n\n    return post.data.creator === user.id;\n  }\n\n});\n```\n\n### decorators/UserIsAuthorized.js\nThis file is intended to be used as a generic decorator that will only render the decorated component if the function it takes returns true. It's mostly a conveinance decorator, so you don't neccesarily have to create custom decorators like `UserIsPostCreator` or `UserIsAdmin`.\n\nFor example, instead of creating a custom `UserIsPostCreator` decorator as in our example above, we could use this decorator instead like so:\n\n```jsx\nvar UserIsAuthorized = require('lore-auth').decorators.UserIsAuthorized;\nvar PropTypes = require('prop-types');\n\nmodule.exports = UserIsAuthorized(function(props, storeState){\n  return props.post.data.creatorId === props.user.id;\n})(React.createClass({\n  displayName: 'EditPostButton',\n\n  propTypes: {\n    user: PropTypes.object.isRequired,\n    post: PropTypes.object.isRequired\n  },\n\n  onEditPost: function() {\n    // launch edit dialog...\n  },\n\n  render: function () {\n    return (\n      <button onClick={this.onEditPost}>\n        Edit Post\n      </button>\n    );\n  }\n}));\n```\n\nThe disadvantage to using this component is that it is not as semantically clear what this decorator is doing. Instead of being able to read something like `UserIsPostCreator` and thinking _\"okay, so this component will be rendered if the user is the creator of the post\"_ you (or other developers) will need to read the code to decipher the intent.\n\n# Alternate Uses\nAnother use for authorization might be to show/hide a badge based on information about the relationship between two people. For example, maybe you want to display a badge on all posts that were created by your friends, or on all posts that have over 500 likes. You could also use the \"Authorization\" component to control that behavior, or create your own generator using `AuthGeneratorFactory` and referencing `AuthenticationGenerator` or `AuthorizationGenerator` as an example implementation.\n","maintainers":[{"name":"jchansen","email":"jason_hansen@outlook.com"}],"time":{"modified":"2022-06-19T14:19:41.782Z","created":"2016-09-09T21:01:54.228Z","0.9.0-rc.1":"2016-09-09T21:01:54.228Z","0.9.0":"2016-09-11T08:32:32.636Z","0.10.0":"2016-10-13T05:30:15.523Z","0.11.0-beta.1":"2016-12-12T06:24:12.363Z","0.11.0-beta.2":"2016-12-12T08:12:30.817Z","0.11.0-rc.1":"2017-01-24T06:25:03.208Z","0.11.0":"2017-01-29T04:54:59.470Z","0.12.0-beta.1":"2017-03-05T23:59:21.009Z","0.11.5":"2017-05-02T07:59:15.877Z","0.12.0-rc.1":"2017-05-02T08:55:34.337Z","0.12.0":"2017-05-08T04:59:57.459Z","0.12.5":"2017-07-04T04:55:20.578Z","0.12.6":"2017-07-04T05:09:18.108Z","0.12.7-rc.1":"2017-07-09T22:15:49.327Z","0.13.0-beta.1":"2017-09-18T19:57:09.161Z","0.13.0-beta.3":"2017-09-18T22:31:35.060Z","0.13.0-beta.5":"2017-11-14T20:52:38.749Z","0.13.0-beta.6":"2017-11-14T22:26:02.460Z","0.13.0-beta.7":"2017-11-14T22:38:33.108Z","0.13.0-beta.9":"2017-11-25T07:18:15.487Z","0.13.0-beta.10":"2017-12-14T21:20:04.353Z","0.13.0-beta.11":"2017-12-19T20:45:29.884Z","0.13.0-beta.12":"2018-03-05T01:55:42.611Z","0.13.0-beta.13":"2018-03-25T01:06:25.182Z","0.13.0-beta.14":"2018-03-31T21:18:13.710Z","0.13.0-beta.15":"2018-04-10T02:59:14.812Z","0.13.0-beta.16":"2018-04-26T21:19:31.655Z","0.13.0-rc.1":"2018-05-13T18:41:46.967Z","0.13.0-rc.2":"2018-05-21T00:28:54.314Z","0.13.0":"2018-06-24T01:49:27.427Z"},"homepage":"https://github.com/lore/lore#readme","repository":{"type":"git","url":"git+https://github.com/lore/lore.git"},"bugs":{"url":"https://github.com/lore/lore/issues"},"license":"MIT","readmeFilename":"README.md"}