{"_id":"kinvey-backend-sdk","_rev":"57-639bbb910f52269dc292b3ec9fcc2285","name":"kinvey-backend-sdk","description":"Backend SDK","dist-tags":{"latest":"0.5.2"},"versions":{"0.0.0":{"name":"kinvey-backend-sdk","version":"0.0.0","description":"Backend SDK","engines":{"node":"= 0.10.x"},"dependencies":{"coffee-script":"1.7.1","request":"2.55.0","moment":"*","bson":"*","code-task-runner":"git+ssh://git@github.com:Kinvey/kinvey-task-receiver.git"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/*"},"gitHead":"0ef6387492b9cab470bee5d7c7e9fa7422b56ac9","_id":"kinvey-backend-sdk@0.0.0","_shasum":"cb722ef58abdb110ab83d70764ba0118dd8595b1","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"}],"dist":{"shasum":"cb722ef58abdb110ab83d70764ba0118dd8595b1","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.0.0.tgz","integrity":"sha512-aJ8qd8DjX8bNfsVkRDwYuVJ7JdhQW5qoesn/gpupJKmiLM94CrswCsBYUeKwRaHhgdw3wNKcjkHtA/0JxIO0AA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFPOyra+E8ZTp9fvpYY2QcANf+Eks8K0oroWqQFB/erAAiEAodo3dsriMMN50zAlzFGvhB1ot+Vur7RQknMI+jNc2qA="}]}},"0.1.0":{"name":"kinvey-backend-sdk","version":"0.1.0","description":"Backend SDK","engines":{"node":"= 0.10.x"},"dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.11","kinvey-code-task-runner":"0.0.5"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"9eacdbf7a5ea813974218d273cd13da103393e05","_id":"kinvey-backend-sdk@0.1.0","_shasum":"22356ffb5845a1a6afcbb67c2ec4f61099bb71b6","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"}],"dist":{"shasum":"22356ffb5845a1a6afcbb67c2ec4f61099bb71b6","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.1.0.tgz","integrity":"sha512-6DNtFxz1ltY6SgOugwfD26ii+sQtRRTYtoDK4dSYvhrtePkTee7gUqHhNDUnwQHcBkLktwJlTlYWUt5V03iQ5g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoeAuGwXf9AKVdawSgbO4y04dAKLNsV5skniIatUx/XAIgGg2LzGvO9ONwFflfq8ERg4bZT2FpU8b7D+qak6B3e7U="}]}},"0.1.1":{"name":"kinvey-backend-sdk","version":"0.1.1","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.11","kinvey-code-task-runner":"0.1.1"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"fab7baad7e0aaf3cc119351d7f0e93c0a6f63f3a","_id":"kinvey-backend-sdk@0.1.1","_shasum":"7788f39d5bfcdde278236901c4eed5b8f63f3c5a","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"}],"dist":{"shasum":"7788f39d5bfcdde278236901c4eed5b8f63f3c5a","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.1.1.tgz","integrity":"sha512-jiLfezl/jHeIGyDhS4sKr/umfPe3vh45T6tVm/0c3qrnYtQUWiZEcfp1wIGoLfycm1qGOoQYR/mAuaIayj00Ow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCOK+13vEhlgSh1Oe5jL3MWZg1TVijQpbz+CvY1/r2fQIgJtZj2Au1iuj023aFb8wvkGmsMvPoC4gTh2ZSk4rdOqI="}]}},"0.1.2":{"name":"kinvey-backend-sdk","version":"0.1.2","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.1"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"c22b4789f3db67e8d5a195ed9fd0e265edbced08","_id":"kinvey-backend-sdk@0.1.2","_shasum":"1fb5db57b888ffc4a45da3a57c853bf7193157fa","_from":".","_npmVersion":"1.4.28","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"}],"dist":{"shasum":"1fb5db57b888ffc4a45da3a57c853bf7193157fa","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.1.2.tgz","integrity":"sha512-r1+OsYDl4BrQmM+eX8jY2M6uCDr1TO7G41JDOeeg/j3T5DDvHVJVAwMeM3zCvCMUy94wcU4mLuMdNAZoiuN4Ig==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDhxxwcMUpT8eSEBr2h/prfV+xOTR2ho/yGVt3n/DgfiwIgNx4K+a6QZTbXCSFDYUKTnBvp65qdftdh86CGoeZm10s="}]}},"0.2.0":{"name":"kinvey-backend-sdk","version":"0.2.0","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.1"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"aff79bb9c5dd0dad98ad12213652f2628e3f8e28","_id":"kinvey-backend-sdk@0.2.0","_shasum":"97c0c3cb1ed1df55736dad7c7633e9a6d7e61f12","_from":".","_npmVersion":"2.14.14","_nodeVersion":"0.10.41","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"97c0c3cb1ed1df55736dad7c7633e9a6d7e61f12","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.2.0.tgz","integrity":"sha512-5+zire4PWS4biHQwCnqIRHfCS1lWw205NLAKwf/fbCH3/jGYi/8uG2PKNsNV7osdFpLyptmygbwuhF+XYtMxwA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHH0a+SOfty8rE3FWkraaZzpgHdPAHYm7htLmWNzOgXiAiEA+5Mdg0Ajp7FnPiIEMu3uc8r4PDcSKRvqneOhqh/GTLs="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.2.0.tgz_1454621894518_0.055401487508788705"}},"0.2.1":{"name":"kinvey-backend-sdk","version":"0.2.1","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.2"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"b36df3c04f44ae25e1e05234a992b23cd4ff30e7","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.2.1","_shasum":"8e6a1697573c251179f92a5bc88fdaa77f1e0f50","_from":".","_npmVersion":"2.14.16","_nodeVersion":"0.10.41","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"dist":{"shasum":"8e6a1697573c251179f92a5bc88fdaa77f1e0f50","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.2.1.tgz","integrity":"sha512-0UJxQz1AsWqgM4W16wV2owdYlzBlfuQs2F+EoQw2/BXuaU4zeBnUS3C570xbuxc618DpLrZnwYOUYwPWpf0+tQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCW3WYhZxWNiw5VYPMojvn0dxipcsulRrIAn3HTq2MVxgIhALt8z9NbvFVs8h7QJsL5Lyp5J5fRHmOWSsWWD0NzKHsB"}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.2.1.tgz_1454693424850_0.26250764122232795"}},"0.2.2":{"name":"kinvey-backend-sdk","version":"0.2.2","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"repository":{"type":"git","url":"https://github.com/Kinvey/backend-sdk"},"license":"Apache-2.0","dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.2","kinvey-datalink-errors":"0.2.2"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"04265a88fe21d0279144583fbe2d4ac84ec19df5","bugs":{"url":"https://github.com/Kinvey/backend-sdk/issues"},"homepage":"https://github.com/Kinvey/backend-sdk","_id":"kinvey-backend-sdk@0.2.2","_shasum":"fd6c72eceba6e1bba89c87f1106800fe5e3bfabc","_from":".","_npmVersion":"1.4.29","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"dist":{"shasum":"fd6c72eceba6e1bba89c87f1106800fe5e3bfabc","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.2.2.tgz","integrity":"sha512-zzijiZ+T4/ZWJXGosXr0FRcEgRqknOVddbsKn7HqlfyBLpcTpOheLINnx/ZGtxmN/Fqxee9j1DCou4ZuAZtPMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDnbpSt3akrkbhqheNIqK4UrFiA4nJxELU9MX+ztipGqQIhAIe8i6vIuWVMuDsbW5SAbtZAPJUljigAmDxsrjuw63Lk"}]},"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.2.2.tgz_1456322504724_0.057682136073708534"}},"0.2.3":{"name":"kinvey-backend-sdk","version":"0.2.3","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.3","kinvey-datalink-errors":"0.2.2"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"4558d31d0cbc8633952715448747b324505d1e58","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.2.3","_shasum":"1b5d41c80442853634cc7aa7dbf7f03c78c959ac","_from":".","_npmVersion":"2.14.17","_nodeVersion":"0.10.42","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"1b5d41c80442853634cc7aa7dbf7f03c78c959ac","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.2.3.tgz","integrity":"sha512-+czX5yHjq1OnkIOXWLiUA97oAEvzK+V+gZQI54XrO2ehopxzMnJGhXE7cARc0sizeXDQgBh08NLiSjyWTSB6Fg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC86DY0Z9ByMatbe8tQPNeFOghp6AShmFmzIOu/DiPGAAIgec43uXa7J6T4UXAgsi9Z/ArztInGQVEuRwRn+MLIKHA="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-9-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.2.3.tgz_1456346556549_0.24364247894845903"}},"0.3.0":{"name":"kinvey-backend-sdk","version":"0.3.0","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.3","kinvey-datalink-errors":"0.2.2"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"765546c170b4e014e52c544d760cc9e420b81025","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.3.0","_shasum":"3d47c9754a8ca65d15b665f4e030a13f01c6f6b7","_from":".","_npmVersion":"2.14.17","_nodeVersion":"0.10.42","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"3d47c9754a8ca65d15b665f4e030a13f01c6f6b7","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.3.0.tgz","integrity":"sha512-Zx5qrB9emG+sAFvSO7zkPw9FwAokcza7MT9q7DuudAMXF0ydhSe5jkh4ISFILJJFe+lInYc1RQyZKkoywsSzIg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAOfAhmEdd0mJJOOxGWCrghbMCU/ky/F1Ut3F/CIxM2wAiAN7nw2RBVP0vCe57yoQHTTS8yZMi6zCpDCdtubXL4CYQ=="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-13-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.3.0.tgz_1457588382817_0.014341816073283553"}},"0.3.1":{"name":"kinvey-backend-sdk","version":"0.3.1","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.3","kinvey-datalink-errors":"0.2.2"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"e354f57c199074d89a05cc9ce89d6715c3087fb9","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.3.1","_shasum":"14df799a90bcae9cfaf81885338ed77f6e74bae1","_from":".","_npmVersion":"2.14.17","_nodeVersion":"0.10.42","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"14df799a90bcae9cfaf81885338ed77f6e74bae1","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.3.1.tgz","integrity":"sha512-RS3J3vIHYZ8JqyQdP0QNFmDYB1uHttpHOHP0D5B+MlOdBAd9A/gopXkyziP1KRyKhkK1XXF1DAQCAgEiiwvQjg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCQzhvyiyLGu7WLAJZanfHOQA9vs1r2wgoVjqr3zwBCxAIhAMefFySRxsLQyh5kXj60l0mDWeQuusljR5M7DGliLy0M"}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.3.1.tgz_1459191553817_0.9096750416792929"}},"0.3.2":{"name":"kinvey-backend-sdk","version":"0.3.2","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.3","kinvey-datalink-errors":"0.2.2"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"ecc550eb8306b8252c8a990860bf78be1d2a6a6e","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.3.2","_shasum":"c2850287008cb036a5860bbeb9eb23373085a0f9","_from":".","_npmVersion":"2.14.17","_nodeVersion":"0.10.42","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"c2850287008cb036a5860bbeb9eb23373085a0f9","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.3.2.tgz","integrity":"sha512-qlEmepuZaLftGc0e/ZvdmOSbDifB16+qyTDmKIYUxUNa5BiWpx9FoFMDT7Gty8TfgADdM60opGNYVCfCA/vWow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCID+nL49u3rq1R3H7mQ+Ry9fKKMKNdOpAfJWTcy/NUU6MAiEAo68XCm9lBW/gE6DVUuOJ2a4cJSUFbDyqB1aCgesbdMo="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.3.2.tgz_1460765006442_0.5937813809141517"}},"0.3.3":{"name":"kinvey-backend-sdk","version":"0.3.3","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"repository":{"type":"git","url":"https://github.com/Kinvey/backend-sdk"},"license":"Apache-2.0","dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.3","kinvey-datalink-errors":"0.2.2"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"2ee24832a3ef41279cdecbe8d8ee293d3bfc28cb","bugs":{"url":"https://github.com/Kinvey/backend-sdk/issues"},"homepage":"https://github.com/Kinvey/backend-sdk","_id":"kinvey-backend-sdk@0.3.3","_shasum":"f16959d8e28fe89e560271d8606ae584e7e3fa2e","_from":".","_npmVersion":"1.4.29","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"dist":{"shasum":"f16959d8e28fe89e560271d8606ae584e7e3fa2e","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.3.3.tgz","integrity":"sha512-317dSIgcBC1t0bzVaA8tXOcU9LUjOo063Lln52IZvLw0+yFiGx/yPhQ0mnJjyQJCP0jzbvuXrRklNquTaT7Pdw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD/o9lSwn4gItU0LCQCf16pSEtR3miZptos7WGxMbVriQIhAOB1Xvg8CRUL/9XEjWBUFMaHl/8Dx8zQP/WFXMzdkM1H"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.3.3.tgz_1460939770286_0.98068848089315"}},"0.3.4":{"name":"kinvey-backend-sdk","version":"0.3.4","description":"Backend SDK","engines":{"node":"= 0.10.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"}],"repository":{"type":"git","url":"https://github.com/Kinvey/backend-sdk"},"license":"Apache-2.0","dependencies":{"coffee-script":"1.7.1","request":"2.44.0","moment":"2.10.6","bson":"0.4.15","kinvey-code-task-runner":"0.1.3","kinvey-datalink-errors":"0.2.2"},"devDependencies":{"mocha":"1.21.4","should":"3.3.2","coffeelint":"1.8.1","proxyquire":"1.0.1","sinon":"1.10.3"},"scripts":{"pretest":"coffeelint --file ./coffeelint.json lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.coffee","test-datalink":"mocha test/lib/dataLink.test.coffee","test-businesslogic":"mocha test/lib/businessLogic.test.coffee","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.coffee","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.coffee","test-email":"mocha test/lib/modules/email.test.coffee","test-entity":"mocha test/lib/modules/entity.test.coffee","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.coffee","test-logger":"mocha test/lib/modules/logger.test.coffee","test-push":"mocha test/lib/modules/push.test.coffee","test-requestcontext":"mocha test/lib/modules/requestContext.test.coffee","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.coffee","test-validation":"mocha test/lib/modules/validation.test.coffee"},"gitHead":"dd7f44e9fff87fd25c03d72c0f85e959509e0726","bugs":{"url":"https://github.com/Kinvey/backend-sdk/issues"},"homepage":"https://github.com/Kinvey/backend-sdk","_id":"kinvey-backend-sdk@0.3.4","_shasum":"b7ea91bbb702dbcf09ac3cf7d4f2508eaa2cd773","_from":".","_npmVersion":"1.4.29","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"dist":{"shasum":"b7ea91bbb702dbcf09ac3cf7d4f2508eaa2cd773","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.3.4.tgz","integrity":"sha512-y1fGeRKz/aLQDXErZqPqYbqpPHlqcB9stqntwum7mb2bcj5uZqmyUNP/W6HGmKHatsZ/7DYQU9iENVxw3/LXMA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDWXvc4ICJJpO8YGz5NvdFcDE8vV2cSkAwJXqwZo23vYgIhALp78X9ttTH3JaGEpJLq/hFVtDoiJp36LAS186MZj6V2"}]},"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.3.4.tgz_1460941378027_0.2813317046966404"}},"0.4.0":{"name":"kinvey-backend-sdk","version":"0.4.0","description":"Backend SDK","engines":{"node":"= 6.2.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"bson":"0.4.23","kinvey-code-task-runner":"0.2.0","kinvey-datalink-errors":"0.2.2","lodash.forown":"4.2.0","lodash.get":"4.3.0","lodash.has":"4.4.0","lodash.isnil":"4.0.0","moment":"2.13.0","request":"2.72.0"},"devDependencies":{"eslint":"2.11.1","eslint-config-airbnb-base":"3.0.1","eslint-plugin-import":"1.8.1","mocha":"2.5.3","proxyquire":"1.7.9","should":"3.3.2","sinon":"1.17.4"},"scripts":{"pretest":"eslint lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.js","test-datalink":"mocha test/lib/dataLink.test.js","test-businesslogic":"mocha test/lib/businessLogic.test.js","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.js","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.js","test-email":"mocha test/lib/modules/email.test.js","test-entity":"mocha test/lib/modules/entity.test.js","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.js","test-logger":"mocha test/lib/modules/logger.test.js","test-push":"mocha test/lib/modules/push.test.js","test-requestcontext":"mocha test/lib/modules/requestContext.test.js","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.js","test-validation":"mocha test/lib/modules/validation.test.js"},"gitHead":"8c22d7276c703297e6384277e75de3d097c1a7ad","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.4.0","_shasum":"ece2d558cd2ca5eaa2a31bdbed97424488e54f86","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"dist":{"shasum":"ece2d558cd2ca5eaa2a31bdbed97424488e54f86","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.4.0.tgz","integrity":"sha512-TbCznZChfTaow3F09XnEsXzlsBI3JLC+JezU9Q74BGFvfrLvkKIyELQUvPbMvCHMqEi7T3kyJ0AbkzPQy8Ppow==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxK6phdYSuVKnQihw3qjjhwp1rONzdO05jL0OeHxYqYAiEA20+wIMSmn03TyoPmNIW/SFSUhvnl/kbDjupL4Bp6xTc="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.4.0.tgz_1466005438234_0.27979916892945766"}},"0.4.1":{"name":"kinvey-backend-sdk","version":"0.4.1","description":"Backend SDK","engines":{"node":"= 6.2.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"bson":"0.4.23","kinvey-code-task-runner":"0.2.0","kinvey-datalink-errors":"0.2.2","lodash.forown":"4.2.0","lodash.get":"4.3.0","lodash.has":"4.4.0","lodash.isnil":"4.0.0","moment":"2.13.0","request":"2.72.0"},"devDependencies":{"eslint":"2.11.1","eslint-config-airbnb-base":"3.0.1","eslint-plugin-import":"1.8.1","mocha":"2.5.3","proxyquire":"1.7.9","should":"3.3.2","sinon":"1.17.4"},"scripts":{"pretest":"eslint lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.js","test-datalink":"mocha test/lib/dataLink.test.js","test-businesslogic":"mocha test/lib/businessLogic.test.js","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.js","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.js","test-email":"mocha test/lib/modules/email.test.js","test-entity":"mocha test/lib/modules/entity.test.js","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.js","test-logger":"mocha test/lib/modules/logger.test.js","test-push":"mocha test/lib/modules/push.test.js","test-requestcontext":"mocha test/lib/modules/requestContext.test.js","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.js","test-validation":"mocha test/lib/modules/validation.test.js"},"gitHead":"62d1ed962f035979eb7b61d08272bec1d613d99a","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.4.1","_shasum":"af3cc856e5cc7d13bb831fed0accfce57c2700fd","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"af3cc856e5cc7d13bb831fed0accfce57c2700fd","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.4.1.tgz","integrity":"sha512-hgcqwde9N5vdLzLH2zLUM3X13jssCud/y0LXz2FAnLKYqe9iv/hV7L17Ey60bZbF3pwHiKp1TEKiXDnHjpX3nw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCe3g+NbcAd5Vh07rXty2Uo4l9u/+kB7z2qOkDRPgrEVAIgSctgPO2GewSfzmdn/8gCfJNpP1vkyBNWrmKS4ZWZ4sY="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.4.1.tgz_1468351415993_0.4228902435861528"}},"0.4.2":{"name":"kinvey-backend-sdk","version":"0.4.2","description":"Backend SDK","engines":{"node":"= 6.2.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"bson":"0.4.23","kinvey-code-task-runner":"0.2.0","kinvey-datalink-errors":"0.2.2","lodash.forown":"4.2.0","lodash.get":"4.3.0","lodash.has":"4.4.0","lodash.isnil":"4.0.0","moment":"2.13.0","request":"2.72.0"},"devDependencies":{"eslint":"2.11.1","eslint-config-airbnb-base":"3.0.1","eslint-plugin-import":"1.8.1","mocha":"2.5.3","proxyquire":"1.7.9","should":"3.3.2","sinon":"1.17.4","test-console":"1.0.0","uuid":"2.0.2"},"scripts":{"pretest":"eslint lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.js","test-datalink":"mocha test/lib/dataLink.test.js","test-businesslogic":"mocha test/lib/businessLogic.test.js","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.js","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.js","test-email":"mocha test/lib/modules/email.test.js","test-entity":"mocha test/lib/modules/entity.test.js","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.js","test-logger":"mocha test/lib/modules/logger.test.js","test-push":"mocha test/lib/modules/push.test.js","test-requestcontext":"mocha test/lib/modules/requestContext.test.js","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.js","test-validation":"mocha test/lib/modules/validation.test.js"},"gitHead":"2721ba502a79e0630988ebb0a3597b69af1f1739","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.4.2","_shasum":"c472ab88e5923aea6079a822e8c7a595d47b1557","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"c472ab88e5923aea6079a822e8c7a595d47b1557","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.4.2.tgz","integrity":"sha512-FV01SyfZUsSWJoYZHmqPj9tDZ2jVt5HMA7wvoU+ea4BJb4ecW1ks7pZa0AwQEgSFs9w+8mUNhEDACe+jZX0dCQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIByR9cciGEwptpFq6jDeu+ToJLBH1JUBWkYw2sGB+9eSAiAR5Xmdn4pU/YnIaUKWDfdkpwjPfTL8XVq3h4rpIy/wHA=="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.4.2.tgz_1470054892573_0.2204008714761585"}},"0.4.3":{"name":"kinvey-backend-sdk","version":"0.4.3","description":"Backend SDK","engines":{"node":"= 6.2.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"bson":"0.4.23","kinvey-code-task-runner":"0.2.0","kinvey-datalink-errors":"0.2.2","lodash.forown":"4.2.0","lodash.get":"4.3.0","lodash.has":"4.4.0","lodash.isnil":"4.0.0","moment":"2.13.0","request":"2.72.0"},"devDependencies":{"eslint":"2.11.1","eslint-config-airbnb-base":"3.0.1","eslint-plugin-import":"1.8.1","mocha":"2.5.3","proxyquire":"1.7.9","should":"3.3.2","sinon":"1.17.4","test-console":"1.0.0","uuid":"2.0.2"},"scripts":{"pretest":"eslint lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.js","test-datalink":"mocha test/lib/dataLink.test.js","test-businesslogic":"mocha test/lib/businessLogic.test.js","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.js","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.js","test-email":"mocha test/lib/modules/email.test.js","test-entity":"mocha test/lib/modules/entity.test.js","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.js","test-logger":"mocha test/lib/modules/logger.test.js","test-push":"mocha test/lib/modules/push.test.js","test-requestcontext":"mocha test/lib/modules/requestContext.test.js","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.js","test-validation":"mocha test/lib/modules/validation.test.js"},"gitHead":"fc6498d3c5c484d27e3fc5be4b13b2a6b13d15d6","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.4.3","_shasum":"aa42a8b4ff93d3da7eabf7d01d887e935bbc4acb","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"aa42a8b4ff93d3da7eabf7d01d887e935bbc4acb","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.4.3.tgz","integrity":"sha512-V+6H8cGYK+cfal448E5SHZiL5jG8Ju8Nh1wne+TdRG6jycjosUbGIfyZVjWD1d42p4+NdJyjnlW0PkCwek4Kjw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7MUcUX2G+aAteM/DQVtjxOiKY1MKk9iJE4AnS9oeZGgIgH5hecSFg4iukORiL06JnpQVauukp4T1rp3j81G1aUvY="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.4.3.tgz_1470678700061_0.27186297019943595"}},"0.4.4":{"name":"kinvey-backend-sdk","version":"0.4.4","description":"Backend SDK","engines":{"node":"= 6.2.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"bson":"0.4.23","kinvey-code-task-runner":"0.2.0","kinvey-datalink-errors":"0.2.2","lodash.forown":"4.2.0","lodash.get":"4.3.0","lodash.has":"4.4.0","lodash.isnil":"4.0.0","moment":"2.13.0","request":"2.72.0"},"devDependencies":{"eslint":"2.11.1","eslint-config-airbnb-base":"3.0.1","eslint-plugin-import":"1.8.1","mocha":"2.5.3","proxyquire":"1.7.9","should":"3.3.2","sinon":"1.17.4","test-console":"1.0.0","uuid":"2.0.2"},"scripts":{"pretest":"eslint lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.js","test-datalink":"mocha test/lib/dataLink.test.js","test-businesslogic":"mocha test/lib/businessLogic.test.js","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.js","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.js","test-email":"mocha test/lib/modules/email.test.js","test-entity":"mocha test/lib/modules/entity.test.js","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.js","test-logger":"mocha test/lib/modules/logger.test.js","test-push":"mocha test/lib/modules/push.test.js","test-requestcontext":"mocha test/lib/modules/requestContext.test.js","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.js","test-validation":"mocha test/lib/modules/validation.test.js"},"gitHead":"f6b0acb9457f43b5960d7832a5a26cbb69e39f15","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.4.4","_shasum":"c9489e951d1e98c6627d63fe1c7196bba4de3f22","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"dist":{"shasum":"c9489e951d1e98c6627d63fe1c7196bba4de3f22","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.4.4.tgz","integrity":"sha512-7lax/YazG6q/rxvPhxsqo7LyMawHTjXgN3qFpYuf+sjDb3eIcRImVa6+2WDlBxavcUikHb4QTyY8eOQTmiEYFQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC6xKqxUEmQpFJ4O7UBs+YFujbBgdytZzLiW6y3rjFUPAiEAuHRmS788nCHCZGOafTUUMuRzXpXJZB7WMPnnnc039iY="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.4.4.tgz_1471008260808_0.8265299997292459"}},"0.5.0":{"name":"kinvey-backend-sdk","version":"0.5.0","description":"Backend SDK","engines":{"node":"= 6.2.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"bson":"0.4.23","kinvey-code-task-runner":"0.2.0","kinvey-datalink-errors":"0.2.2","lodash.forown":"4.2.0","lodash.get":"4.3.0","lodash.has":"4.4.0","lodash.isnil":"4.0.0","lodash.isempty":"4.4.0","lodash.assign":"4.2.0","lodash.foreach":"4.5.0","moment":"2.13.0","request":"2.72.0","sift":"3.2.6"},"devDependencies":{"eslint":"2.11.1","eslint-config-airbnb-base":"3.0.1","eslint-plugin-import":"1.8.1","mocha":"2.5.3","nock":"8.0.0","proxyquire":"1.7.9","should":"11.1.0","sinon":"1.17.4","test-console":"1.0.0","uuid":"2.0.2"},"scripts":{"pretest":"eslint lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.js","test-datalink":"mocha test/lib/dataLink.test.js","test-businesslogic":"mocha test/lib/businessLogic.test.js","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.js","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.js","test-dataStore":"mocha test/lib/modules/dataStore.test.js","test-email":"mocha test/lib/modules/email.test.js","test-entity":"mocha test/lib/modules/entity.test.js","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.js","test-push":"mocha test/lib/modules/push.test.js","test-query":"mocha test/lib/modules/query.test.js","test-requestcontext":"mocha test/lib/modules/requestContext.test.js","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.js"},"gitHead":"05a92f3c3fa1a0eb05e3ad40bed7bc032b9b3ced","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.5.0","_shasum":"65e7eb8012a6c2fafc03539467873acc0fc6beba","_from":".","_npmVersion":"3.9.5","_nodeVersion":"6.2.2","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"dist":{"shasum":"65e7eb8012a6c2fafc03539467873acc0fc6beba","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.5.0.tgz","integrity":"sha512-jaZHHe+IOVqMXvolvHj2V08BYwMsRXs0WoeDUU3ob0GZKvQJKpIE22te3RyJunEnZjEWJXjmJSfw/bgrkj/YNA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDd99sY9rX9d+99YwECemnO6EcBzIz14P6Ju6ywZ5GIEwIgFkNAUqKlOWjSNfDMVfcbqbL1cw5gZObvq+AyPcN8kEQ="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.5.0.tgz_1474647657674_0.24935679673217237"}},"0.5.1":{"name":"kinvey-backend-sdk","version":"0.5.1","description":"Backend SDK","engines":{"node":"= 6.2.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"bson":"0.4.23","kinvey-code-task-runner":"0.3.0","kinvey-datalink-errors":"0.2.2","lodash.forown":"4.2.0","lodash.get":"4.3.0","lodash.has":"4.4.0","lodash.isnil":"4.0.0","lodash.isempty":"4.4.0","lodash.assign":"4.2.0","lodash.foreach":"4.5.0","moment":"2.13.0","request":"2.72.0","sift":"3.2.6"},"devDependencies":{"eslint":"2.11.1","eslint-config-airbnb-base":"3.0.1","eslint-plugin-import":"1.8.1","mocha":"2.5.3","nock":"8.0.0","proxyquire":"1.7.9","should":"11.1.0","sinon":"1.17.4","test-console":"1.0.0","uuid":"2.0.2"},"scripts":{"pretest":"eslint lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.js","test-datalink":"mocha test/lib/dataLink.test.js","test-businesslogic":"mocha test/lib/businessLogic.test.js","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.js","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.js","test-dataStore":"mocha test/lib/modules/dataStore.test.js","test-email":"mocha test/lib/modules/email.test.js","test-entity":"mocha test/lib/modules/entity.test.js","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.js","test-push":"mocha test/lib/modules/push.test.js","test-query":"mocha test/lib/modules/query.test.js","test-requestcontext":"mocha test/lib/modules/requestContext.test.js","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.js"},"gitHead":"921c91f09ee51f2d4406f481227ff3b73b3cd720","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.5.1","_shasum":"cfe87bd0b5efb5e1ade8d9d72cbf7d5484c9aa4f","_from":".","_npmVersion":"3.9.3","_nodeVersion":"6.2.1","_npmUser":{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},"dist":{"shasum":"cfe87bd0b5efb5e1ade8d9d72cbf7d5484c9aa4f","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.5.1.tgz","integrity":"sha512-/48SNdcJSochHJFULipyoHL6XpUEDu7J3i59WsDu/VSG0zuKpDjL1HDWynjMdJiHgwW41X/d5UGBc5fcWrkNMQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFxoGq6spaXMOBBy3Iv8hcJgQkmodOF4qhyD8nUe4k69AiEAgjn36DxviVamLdKPOmdF8QRe7z0JjZi1oXN/kGSjMT8="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-12-west.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.5.1.tgz_1475865569469_0.7754068251233548"}},"0.5.2":{"name":"kinvey-backend-sdk","version":"0.5.2","description":"Backend SDK","engines":{"node":"= 6.2.x"},"author":{"name":"Kinvey","email":"support@kinvey.com"},"contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"license":"Apache-2.0","dependencies":{"bson":"0.4.23","kinvey-code-task-runner":"0.3.1","kinvey-datalink-errors":"0.2.2","lodash.forown":"4.2.0","lodash.get":"4.3.0","lodash.has":"4.4.0","lodash.isnil":"4.0.0","lodash.isempty":"4.4.0","lodash.assign":"4.2.0","lodash.foreach":"4.5.0","moment":"2.13.0","request":"2.72.0","sift":"3.2.6"},"devDependencies":{"eslint":"2.11.1","eslint-config-airbnb-base":"3.0.1","eslint-plugin-import":"1.8.1","mocha":"2.5.3","nock":"8.0.0","proxyquire":"1.7.9","should":"11.1.0","sinon":"1.17.4","test-console":"1.0.0","uuid":"2.0.2"},"scripts":{"pretest":"eslint lib test","test":"mocha test/lib/modules/* test/lib/*","test-core":"mocha test/lib/*","test-sdk":"mocha test/lib/sdk.test.js","test-datalink":"mocha test/lib/dataLink.test.js","test-businesslogic":"mocha test/lib/businessLogic.test.js","test-moduleGenerator":"mocha test/lib/moduleGenerator.test.js","test-modules":"mocha test/lib/modules/*","test-backendcontext":"mocha test/lib/modules/backendContext.test.js","test-dataStore":"mocha test/lib/modules/dataStore.test.js","test-email":"mocha test/lib/modules/email.test.js","test-entity":"mocha test/lib/modules/entity.test.js","test-kinveydate":"mocha test/lib/modules/kinveyDate.test.js","test-push":"mocha test/lib/modules/push.test.js","test-query":"mocha test/lib/modules/query.test.js","test-requestcontext":"mocha test/lib/modules/requestContext.test.js","test-tempobjectstore":"mocha test/lib/modules/tempObjectStore.test.js"},"gitHead":"12c7154a554bc2a0837c009d26199c906f46b8c8","bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"homepage":"https://github.com/kinvey/backend-sdk#readme","_id":"kinvey-backend-sdk@0.5.2","_shasum":"88f7fd10acedd5d3287363edab646d76add0b467","_from":".","_npmVersion":"3.10.3","_nodeVersion":"6.3.1","_npmUser":{"name":"sjl2024","email":"sjl2024@gmail.com"},"dist":{"shasum":"88f7fd10acedd5d3287363edab646d76add0b467","tarball":"https://registry.npmjs.org/kinvey-backend-sdk/-/kinvey-backend-sdk-0.5.2.tgz","integrity":"sha512-EhNugiCt6CnpCIt3zfszJAyHidlmF8o7l/P6BoAylzzEzFtMMeo6f0KPFBTisQx6BYgBgJCtcDKDM1QCLYT8SQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH4qu3KlxqUrMtN8hBdbb/VN+uFSlqKW9EvmDzFrRaesAiEAjRqiqq/enG2GcHCHe6IlwHB7upXFLS5wjgXbJYpOd8c="}]},"maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"_npmOperationalInternal":{"host":"packages-16-east.internal.npmjs.com","tmp":"tmp/kinvey-backend-sdk-0.5.2.tgz_1476734030509_0.6887560107279569"},"deprecated":"WARNING: This module has been renamed to kinvey-flex-sdk. Please install it instead. See https://github.com/kinvey/flex-sdk for more information."}},"readme":"# Kinvey Backend SDK (beta)\n\nThis is the SDK for Backend code execution for kinvey-hosted Data Link Connectors and Logic tasks. The module provides a framework for building kinvey-backed Data Link Connectors easily.\n\nThis module provides an easy way to connect to a Kinvey Business Logic (BL) instance running on docker. It is up to the user to download, configure and start the docker image itself before running code using this module. Two [utility](#Utilities) functions are provided to automate setting up the docker image.\n\n## [Installation](#installation)\n\nTo install this project, add it to your `package.json` file and install it via `npm`\n```\nnpm install kinvey-backend-sdk\n```\n\nTo use this module, require it in your project and\n```\nconst sdk = require('kinvey-backend-sdk');\n```\n\nYou then must initialize the sdk to retrieve a reference to the backend service:\n\n```\nconst service = sdk.service((err, service) => {\n  // code goes here\n};\n```\n\n\nWhen running locally, you can specify a host and port to listen on by passing an options object with an optional host and port.  If no host/port is specified, localhost:10001 will be used:\n\n```\nconst service = sdk.service({ host: 'somehost', port: 7777 }, (err, service) => {\n  // code goes here\n});\n```\n\nTo run your code locally, execute `node .` in the root of your project.  Routes conform to the Kinvey Data Link specification.  \n\n## [DataLink framework](#datalink-framework)\n\nThe DataLink framework can be accessed via the sdk's `dataLink` property.\n\n```\nconst dataLink = service.dataLink;\n```\n\n### Registering ServiceObjects\n\nOnce you initialize the DataLink framework, you define your entites by defining ServiceObjects, and then wire up data access event handlers to those ServiceObjects.  To register a ServiceObject, use the `serviceObject` method of the `dataLink` framework:\n\n```\n// To register the 'widgets' ServiceObject:\nconst widgets = service.dataLink.serviceObject('widgets');\n```\n\n### Data Events\n\nEach ServiceObject exposes data events that are invoked by Kinvey collections.  The data event takes a single handler function to be executed.\n\n\n| event     | description |\n| --------- | ----------- |\n| onInsert  | executed on inserts (or POST to REST API) |\n| onUpdate  | executed on updates (or PUT to the REST API) |\n| onDeleteById | executed when a single entity is to be deleted |\n| onDeleteByQuery | executed when a query is included as part of a DELETE |\n| onDeleteAll | executed when the DELETE command is invoked |\n| onGetById | get a single entity by Id |\n| onGetByQuery | retrieve results based on a query |\n| onGetAll | get all entities in a given ServiceObject |\n| onGetCount | get the count of the entities in a ServiceObject |\n| onGetCountByQuery | get the count of the entities in a query result |\n\nFor example, to get all entities in `widgets`:\n\n```\nwidgets.onGetAll(callbackFunction);\n```\n\n### Data Handler Functions\n\nThe data events take a handler funciton, which takes three arguments:  `request`, `complete`, and `modules`.  `request` represents the request made to Kinvey, and `complete` is a completion handler for completing the data request.  The modules `modules` argument is an object containing several libraries for accessing Kinvey functionality via your service (for more information, see the section on [modules](#modules)).  \n\n#### request object\n\nThe request object contains the following properties\n\n| property | description |\n| --------- | ----------- |\n| method    | the HTTP method (GET, POST, PUT, DELETE) |\n| headers   | the HTTP request headers |\n| entityId  | the entityId, if specified |\n| serviceObjectName | the name of the serviceObject |\n| body | the HTTP body |\n| query | the query object |\n\n#### Completion Handler\n\nThe completion handlers object follows a builder pattern for creating the datalink's response.  The pattern for the completion handler is `complete(<entity>).<status>.<done|next>`\n\nFor example, a sample completion handler is:\n\n```\ncomplete(myEntity).ok().next()\n```\n\n##### complete\n\nThe `complete` handler takes either an entity, an array of entities, or an error description.  The result of the `complete` handler is an object of status functions.\n\n```\n// Sets the response to include an entity.\ncomplete({\"foo\", \"bar\"});\n\n// Sets the response to include an array of entities\ncomplete([{\"foo\":\"bar\"}, {\"abc\":\"123}]);\n\n// Sets the response to an error string, to be used with error status codes\ncomplete(\"Record 123 was not found\");\n```\n\n##### status functions\n\nStatus functions set the valid status codes for a Data Link Connector.  The status function also sets the body to a Kinvey-formatted error, and uses the value passed into the `complete` function as the debug property, if it is present.\n\nThe available status functions are:\n\n| Function | Status Code | Description |\n| --------- | ----------- |------------|\n| ok | 200 | Used for a normal success response |\n| created | 201 | Used for creating new records |\n| accepted | 202 | Used when the request has been submitted for processing, but will be processed asynchronously |\n| notFound | 404 | Used when the entity or entities could not be found |\n| badRequest | 400 | Used when the request is invalid |\n| unauthorized | 401 | Used when the request has not been authorized for the given user context |\n| forbidden | 403 | Used when the specific request is forbidden for some reason |\n| notAllowed | 405 | Used when the specific request or request method is not allowed |\n| notImplemented | 501 | Used when the specific handler has no implementation |\n| runtimeError | 550 | Used for custom runtime errors |\n\nFor example:\n\n```\n// Return that the record has been created\ncomplete(myRecord).created();\n\n// Entity wasn't found\ncomplete(\"The given entity wasn't found\").notFound();\n```\n\n##### End processing\n\nOnce the status is set, you can end the processing of the dataLink request with either `done` or `next`.  Most requests should normally end with `next`, which will continue the Kinvey request pipeline with Business Logic.  `done` will return the response that was set in the DataLink, and end request processing without executing any further business logic.\n\n```\n// This will continue the request chain\ncomplete(myEntity).ok().next();\n\n// This will end the request chain with no further processing\ncomplete(myEntity).ok().done();\n```\n\n### Example\n\nThe following is an example\n\n```\nconst sdk = require('kinvey-backend-sdk');\nconst service = sdk.service(function(err, service) {\n  const dataLink = service.dataLink;   // gets the datalink object from the service\n\n  function getRecordById(request, complete, modules) {\n    let entityId = request.entityId;\n    let entity = null;\n\n    // Do some logic to get the entity id from the remote data store\n    // Assume that data is retrieved and stored in \"entity\" variable\n\n    // After entity is retrieved, check to see if it exists\n    if (typeof entity === 'undefined' || entity === null) {\n      return complete(\"The entity could not be found\").notFound().next();\n    } else  {\n      // return the entity\n      return complete(entity).ok().next();\n    }\n  }\n\n  // set the serviceObject\n  const widgets = dataLink.serviceObject('widgets');\n\n  // wire up the event that we want to process\n  widgets.onGetById(getRecordById);\n\n  // wire up the events that we are not implementing\n  widgets.onGetByQuery(notImplementedHandler);\n  widgets.onGetAll(notImplementedHandler);\n  widgets.onGetCount(notImplementedHandler);\n  widgets.onInsert(notImplementedHandler);\n  widgets.onUpdate(notImplementedHandler);\n  widgets.onDeleteAll(notImplementedHandler);\n  widgets.onDeleteByQuery(notImplementedHandler);\n  widgets.onDeleteById(notImplementedHandler);\n};\n```\n\n## [Business Logic framework](#business-logic-framework)\n\nThe Business Logic framework can be accessed via the sdk's `businessLogic` property.\n\n```\nconst dataLink = sdk.businessLogic;\n```\n\n### Registering Business Logic Handlers\n\nIn order to register a business logic handler, you define that handler and give it a name by using the `register` method of the `businessLogic` framework:\n\n```\n// To register the '' handler:\nconst widgets = sdk.businessLogic.register('someEventHanlerName', eventHandlerCallbackFunction);\n```\n\nIn the console, when you define business logic, you will be presented your list of event handlers to tie to a collection hook or custom endpoint.\n\n### Business Logic Handler Functions\n\nLike the DataLink handlers, business logic events take a handler funciton, which takes three arguments:  `request`, `complete`, and `modules`.  `request` represents the request made to Kinvey, and `complete` is a completion handler for completing the business logic.  The modules `modules` argument is an object containing several libraries for accessing Kinvey functionality via your service (for more information, see the section on [modules](#modules)).  \n\n#### request object\n\nThe request object contains the following properties:\n\n| property | description |\n| --------- | ----------- |\n| method    | the HTTP method (GET, POST, PUT, DELETE) |\n| headers   | the HTTP request headers |\n| entityId  | the entityId included in the request, if specified |\n| collectionName | the name of the collection |\n| body | the HTTP body |\n| query | the query object |\n\n#### Completion Handler\n\nThe completion handlers object follows a builder pattern for creating the business logic's response.  The pattern for the completion handler is `complete(<entity>).<status>.<done|next>`\n\nFor example, a sample completion handler is:\n\n```\ncomplete(myEntity).ok().next()\n```\n\nThe entity is optional, as it will not always be returned.  \n\nYou can also alter the request object by making changes to the query, body, or headers objects.  If the request body is modified, it will be persisted back for subsequent steps in the request pipeline.   \n\n##### complete\n\nThe `complete` handler takes either an entity, an array of entities, or an error description.  The result of the `complete` handler is an object of status functions.\n\n```\n\n// No entity as part of the response\ncomplete();\n\n// Sets the response to include an entity.\ncomplete({\"foo\", \"bar\"});\n\n// Sets the response to include an array of entities\ncomplete([{\"foo\":\"bar\"}, {\"abc\":\"123}]);\n\n// Sets the response to an error string, to be used with error status codes\ncomplete(\"Record 123 was not found\");\n```\n\n##### status functions\n\nStatus functions set the valid status codes for the request.  The status function also sets the body to a Kinvey-formatted error, and uses the value passed into the `complete` function as the debug property, if it is present.\n\nThe available status functions are:\n\n| Function | Status Code | Description |\n| --------- | ----------- |------------|\n| ok | 200 | Used for a normal success response |\n| created | 201 | Used for creating new records |\n| accepted | 202 | Used when the request has been submitted for processing, but will be processed asynchronously |\n| notFound | 404 | Used when the entity or entities could not be found |\n| badRequest | 400 | Used when the request is invalid |\n| unauthorized | 401 | Used when the request has not been authorized for the given user context |\n| forbidden | 403 | Used when the specific request is forbidden for some reason |\n| notAllowed | 405 | Used when the specific request or request method is not allowed |\n| notImplemented | 501 | Used when the specific handler has no implementation |\n| runtimeError | 550 | Used for custom runtime errors |\n\nFor example:\n\n```\n// Return that the record has been created\ncomplete(myRecord).created();\n\n// Entity wasn't found\ncomplete(\"The given entity wasn't found\").notFound();\n```\n\n##### End processing\n\nOnce the status is set, you can end the processing of the business logic request with either `done` or `next`.  Most requests should normally end with `next`, which will continue the Kinvey request pipeline with Business Logic.  `done` will return the response that was set in the handler, and end request processing without executing any further part of the kinvey request pipeline.\n\n```\n// This will continue the request chain\ncomplete(myEntity).ok().next();\n\n// This will end the request chain with no further processing\ncomplete(myEntity).ok().done();\n```\n\n### Example\n\nThe following is an example\n\n```\nconst sdk = require('kinvey-backend-sdk');\nconst request = require('request'); // assumes that the request module was added to package.json\nconst service = sdk.service(function(err, service) {\n  \n  const bl = service.businessLogic;   // gets the businessLogic object from the service\n\n  function getRedLineSchedule(req, complete, modules) {\n    requset.get('http://developer.mbta.com/Data/Red.json', (err, response, body) => {\n      // if error, return an error\n      if (err) {\n        return complete(\"Could not complete request\").runtimeError().done();\n      }\n      \n      //otherwise, return the results\n      return complete(body).ok().done();\n    });\n    \n   }\n\n  // set the handler\n  bl.register('getRedLineData', getRedLineSchedule);\n};\n```\n\nYou can include both dataLink and business logic handlers in the same flex service, but it is recommended to separate the two.\n\n## [Executing a long-running script](#long-running-scripts)\n\nBecause the services are persisted, you can execute long running tasks that run in the background.  However, all requests still need to be completed in less than 60 seconds.  \n\nTo accomplish this, you can execute a function asynchronously using one of the `Timer` functions from node.js: `setImmediate`, `setTimeout`, or `setInterval`.  \n  \nFor example:  \n\n```\nconst sdk = require('kinvey-backend-sdk');\nconst request = require('request'); // assumes that the request module was added to package.json\nconst service = sdk.service(function(err, service) {\n  \n  const bl = service.businessLogic;   // gets the businessLogic object from the service\n\n    function calcSomeData() {\n        // do something\n    }\n\n  function calcAndPostData() {\n    auth = {\n      user: '<MY_APP_KEY>',\n      pass: '<MY_APP_SECRET>'\n     };\n     \n    options = {\n        url: 'https://baas.kinvey.com/appdata/<MY_APP_KEY?/someCollection',\n        auth: auth,\n        json: {\n            someData: calcSomeData(),\n            date: new Date().toString()\n        }\n     }\n        \n    request.get(options, (err, response, body) => {\n      // if error, return an error\n      if (err) {\n        return console.log('Error: ' + err);\n      }\n      \n      //otherwise, just return\n      return; \n    });\n    \n  }\n   \n  function initiateCalcAndPost(req, complete, modules) {\n    // Since the calc and post data function may take a long time, execute it asynchronously\n    setImmediate(calcAndPostData);  \n    \n    // Immediately complete the business logic script.  The response will be returned to the caller, and calcAndPostData will execute in the background.  \n    complete().accepted().done();\n    \n  // set the handler to point to the initiateCalcAndPost header\n  bl.register('getRedLineData', initiateCalcAndPost);\n};\n```\n\nIn the above example, the handler receives a request and executes the `initiateCalcAndPost` function.  The function schedules an immediate asynchronous execution of `calcAndPostData`, and then executes the complete handler, returning control to the client and sending the response (in this case, `accepted`, because the request is accepted for processing).  The service stays running in the background, and the long-running `calcAndPostData` function is executed asynchronously.  \n\n\n## [Modules](#modules)\n\nModules are a set of libraries inteded for accessing Kinvey-specific functionality.  The optional `modules` argument is passed as the third argument to all handler functions.  For example:\n\n```\n// data handler\nfunction onGetById(request, complete, modules) {\n  const appKey = modules.backendContext.getAppKey();\n  // etc...\n}\n```\n\nYou can use any non-Kinvey libraries or modules you want by including them in your `package.json` as you would for a standard node.js project.  \n\nThe following modules are available:\n\n* [backendContext](#backendcontext) Provides methods to access information about the current backend context.\n* [dataStore](#datastore) Fetch, query, and write to Kinvey collections.\n* [email](#email) Send Email notifications\n* [Kinvey Entity](#kinvey-entity) Kinvey entity utilities\n* [kinveyDate](#kinvey-date) Kinvey date utilities\n* [push](#push) Send push notifications to a user's device\n* [Query](#query) Create queries to be used by the dataStore.  \n* [requestContext](#request-context) Provides methods to access information about the current request context.\n* [tempObjectStore](#temp-object-store) Key-value store for persisting temporary data between a pre- and post-hook.\n\n### [backendContext](#backend-context-module)\n\nUsed to return data and perform functions against the current backend context.      \n\n| Method             | Behavior           |\n|:-------------------|:-------------------|\n| `getAppKey()` | Returns the current backend appKey |\n| `getAppSecret()` | Returns the current backend appSecret |\n| `getMasterSecret()` | Returns the current backend masterSecret |\n\nOne common use case for these functions is for calling requests against the current backend to provide a method to obtain the correct authentication credentials.  This allows for BL scripts to be migrated from backend to backend without code changes, such as in the case of seperate development and production backends.  \n\n```javascript\nconst request = require('request');\n\nfunction myHandler(request, complete, modules){\n  \n  const context = modules.backendContext;\n\n  const appKey = context.getAppKey();\n  const masterSecret = context.getMasterSecret();\n  \n  const uri = 'https://' + request.headers.host + '/appdata/'+ appKey +'/myCollection/';\n  const authString = \"Basic \" + utils.base64.encode(appKey + \":\" + masterSecret);\n  const requestOptions = {\n    uri:uri, \n    headers: {\n      \"Authorization\":authString\n    }\n  };\n  \n  var auth = request.get(requestOptions, (error, res, body) => {\n    if (error){\n      complete(error).runtimeError.done();\n    } else {\n      complete(body).ok().next();\n    }\n  });\n}\n```\n\n### [dataStore](#data-store-module)\n\nUse the dataStore module to interact with Kinvey Data at the collection level.  The dataStore module can be used to interact with both the Kinvey DataStore or with external data such as RAPID connectors or Flex Data Services.  \n\nTo initialize the DataStore:\n\n```\nconst store = modules.dataStore();\n```\n\nThe `dataStore` method also takes an optional `options` argument is an optional object containing store options for the current store.  The options are:\n\n| Option             | Description                  |\n|:-------------------|:------------------------| \n| `useMasterSecret` | Uses the mastersecret credentials to access the datastore if set to `true`.  If not included or set to false, will use the current user credentials. |\n| `skipBl` | If set to true, skips BL processing when accessing the datastore.  If false or not included, it will default to executing any BL associated with the store. |\n\nFor example:  \n\n```\nconst options = {\n  useBl: true,\n  useMasterSecret: false\n}\n\nconst store = modules.dataStore(options);\n```\n\nThe `dataStore` object contains a single method, `collection` for specifying the collection to query.  \n\n```\nconst myCollection = modules.dataStore().collection('myCollection');\n```\n\nThe `collection` object contains methods for accessing data within the collection.  All methods take a `callback(err, results)` function.  \n\n| Method             | Description                  |\n|:-------------------|:------------------------|\n| `find(query, callback)` | Finds the records contained in the `query`.  The `query` is a `Query` object created with `modules.Query`.  If no `Query` object is supplied, the `find` method will return all entities in the collection. |\n| `findById(entityId, callback)` | Finds a single entity by its `_id`.  |\n| `save(entity, callback)` | Saves the provided `entity` to the dataStore, either as an insert or update.  (NOTE:  if an `_id` is provided and that `_id` already exists, the `save` will update the existing entity by replacing it with the entity passed into this function).  |\n| `remove(query, callback)` | Removes the records contained in the `query`.  The `query` is a `Query` object created with `modules.Query`. |\n| `removeById(entityId, callback)` | Removes a single entity by its `_id`. |\n| `count(query, callback)` | Gets a count of all records that would be returned by the `query`.  The `query` is a `Query` object created with `modules.Query`.  If no `Query` object is supplied, the `count` method will return a count of the number of entities in the collection. | \n\nFor example:\n\n```\n  const store = dataStore({ useMasterSecret: true });\n  const products = store.collection('products');\n  products.findById(1234, (err, result) => {\n    if (err) {\n      return complete(err).runtimeError().done();\n    }\n    result.status = 'Approved';\n    products.save(result, (err, savedResult) => {\n      if (err) {\n        return complete(err).runtimeError().done();\n      }\n      complete(savedResult).ok().next();\n    });\n  });\n});\n```\n\n**NOTE** When testing dataStore in particular locally, special headers need to be added to your local tests.  These headers will be added automatically by Kinvey in production use.  For information on the required headers, see the section on [testing locally](#testing-locally)\n\n### [Email](#email-module)\n\nUse the email module to send email to any valid email address.\n\nAvailable Methods:\n\n| Method             | Action                  |\n|:-------------------|:------------------------|\n| `send(from, to, subject, text_body, reply_to, html_body, cc, bcc, callback)` | Send an email to `to` from `from` using the `subject` and `body`.  `reply_to` is an optional argument for the reply to line of the message.  For the email body, `text_body` is for the plain-text version of the email and is required.  `html_body` is an optional parameter that accepts an HTML-formatted string, which creates an optional html body for the email message.  `cc` and `bcc` are optional arguments for adding cc and bcc users. |\n\nFor example, to send a text email:\n```\n\tconst email = modules.email;\n\temail.send('my-app@my-app.com',\n\t\t\t   request.body.friendEmail,\n\t\t\t   'Join my octagon in my-app!',\n\t\t\t   \"You've been invited to join \" + request.body.name + \"'s octagon in my-app!\", function(err, result) {\n\t\t\t   complete.ok().next();\n\t\t\t   });\n```\n\t\nTo send an HTML email, it is important to note that the reply-to *must* be included; if you want the reply-to to be the same as the from address, you can either also pass the from address in the reply_to argument, or simply pass a null value (which will default the reply to to the from address).  For example:\"\"\n\n```\n\tconst email = modules.email;\n\temail.send('my-app@my-app.com',\n           request.body.friendEmail,\n           'Join my octacgon in my-app!',\n           \"You've been invited to join \" + request.body.name + \"'s octagon in my-app!\",\n           null,\n           '<html>You've been invited to join  <b>'+request.body.first_name+'</b>'s octagon in my-app!</html>', callback);\n```\n\nEmail calls are asynchronous in nature.  They can be invoked without a callback, but are not guaranteed to complete before continuing to the next statement.  However, once invoked they will complete the sending of the email, even if the function ends via a complete handler. \n\n*Note:* The email module is currently only available for services running on the Kinvey Microservices Runtime, and is not available externally or for local testing.  \n\n### [Kinvey Entity](#kinvey-entity-module)\n\nA Kinvey Entity is a JSON object containing Kinvey-specific metadata for use with AppData collections. Kinvey Entities also contain methods to manipulate Kinvey metadata.  \n\nThe `kinveyEntity` module provides the following  methods:\n\n| Method             | Behavior           |\n|:-------------------|:-------------------|\n| `entity()` | Returns a Kinvey Entity with system generated `_id`. |\n| `entity(id)` | Returns a Kinvey Entity with the supplied `id` as the `_id` property.|\n| `entity(JsonObject)` | Updates `JsonObject` with Kinvey-specific metadata and functions, and returns a Kinvey Entity as the result. |\n| `isKinveyEntity(someObject)` | Returns true if `someObject` is a Kinvey Entity returned from one of the entity() methods above.  |\n\nFor example, to create a Kinvey Entity with only Kinvey metadata:\n\n```javascript\nfunction someHandler(request, complete, modules) {\n  complete(modules.kinveyEntity.entity()).ok().done();\n}\n```\n\nThe response would contain an entity containing no additional attributes, except for Kinvey metatada attributes:\n\n```json\n{\n  \"_acl\": {\n    \"creator\": \"kid_VT5YYv2KWJ\"\n  },\n  \"_kmd\": {\n    \"lmt\": \"2013-05-08T13:48:36+00:00\",\n    \"ect\": \"2013-05-08T13:48:36+00:00\"\n  },\n  \"_id\": \"518a57b4d79b4d4308000002\"\n}\n```\n\nTo use your own `_id`, you can simply pass that ID as a `String` into the method:\n\n```javascript\nfunction handler(request, complete, modules){\n  var myID = \"000-22-2343\";\n  complete()modules.kinvey.entity(myID)).ok().done();\n}\n```  \n\n```json\n{\n  \"_acl\": {\n    \"creator\": \"kid_VT5YYv2KWJ\"\n  },\n  \"_kmd\": {\n    \"lmt\": \"2013-05-08T13:51:02+00:00\",\n    \"ect\": \"2013-05-08T13:51:02+00:00\"\n  },\n  \"_id\": \"000-22-2343\"\n}\n```\n\nYou can add Kinvey metatada to your own JavaScript object by passing that object into the function.  \n\n```javascript\nfunction handler(request, complete, modules){\n  function employee() {\n    this.firstName = \"John\";\n    this.lastName = \"Doe\";\n    this.status = \"Active\";\n    this.dob = \"5/5/1985\";\n    this.doh = \"1/12/2012\";\n  }\n    \n  complete(modules.kinvey.entity(new employee())).ok().done();\n}\n```\n\nThis example results in the Kinvey metadata being added to your employee object.  \n\n```json\n{\n  \"firstName\": \"John\",\n  \"lastName\": \"Doe\",\n  \"status\": \"Active\",\n  \"dob\": \"5/5/1985\",\n  \"doh\": \"1/12/2012\",\n  \"_acl\": {\n    \"creator\": \"kid_VT5YYv2KWJ\"\n  },\n  \"_kmd\": {\n    \"etc\": \"2013-05-08T13:57:11+00:00\",\n    \"lmt\": \"2013-05-08T13:57:11+00:00\"\n  },\n  \"_id\": \"518a59b7d79b4d4308000003\"\n}\n```\n\nNote that you can add properties directly to a Kinvey Entity and pass it directly into a `dataStore method that takes an entity as an argument:\n\n```javascript\nfunction handler(request, complete, modules) {\n\tconst entity = modules.kinveyEntity.entity();\n\tentity.name = \"Sachin\";\n\tmodules.dataStore().collection('People').save(entity, (err, result) => \n\t  if (err) {\n\t    // handle error\n\t  } else {\n\t    complete(result).ok().next(); \n\t  }\n\t});\n}\n```\n\n*Note:* If you call `entity(JsonObject)` with an object that already contains Kinvey metadata, the original metadata will be maintained.  Only `lmt` will be updated with the current date and time.  \n\n#### _acl Namespace\n\nKinvey Entities returned from `entity()` are also imbued with an `_acl` namespace containing methods for accessing that entity's user and group access privileges:\n\n| Method             | Behavior           |\n|:-------------------|:-------------------|\n| `_acl.getCreator()` | Return entity creator user ID as a `String`|\n| `_acl.getReaders()` | Return `Array` of `String` containing user IDs with read access |\n| `_acl.getWriters()` | Return `Array` of `String` containing user IDs with write access |\n| `_acl.getReaderGroups()` |  Return `Array` of `String` containing group IDs with read access  |\n| `_acl.getWriterGroups()` | Return `Array` of `String` containing group IDs with write access |\n| `_acl.addReader(userId)` | Grant read access to `userId`, passed as `String`. Returns the _acl namespace for method chaining. |\n| `_acl.addWriter(userId)` | Grant write access to `userId`, passed as `String`. Returns the _acl namespace for method chaining. |\n| `_acl.addReaderGroup(groupId)` | Grant read access to `groupId`, passed as `String`. Returns the _acl namespace for method chaining. |\n| `_acl.addWriterGroup(groupId)` | Grant write access to `groupId`, passed as `String`. Returns the _acl namespace for method chaining. |\n| `_acl.removeReader(userId)` | Revoke read access for `userId `, passed as `String`. Returns the _acl namespace for method chaining. (`userId` will retain read access if part of a group with read access) |\n| `_acl.removeWriter(userId)` | Revoke write access for `userId `, passed as `String`. Returns the _acl namespace for method chaining. (`userId` will retain write access if part of a group with write access) |\n| `_acl.removeReaderGroup(groupId)` | Revoke group read access for `groupId`, passed as `String`. Returns the _acl namespace for method chaining.|\n| `_acl.removeWriterGroup(groupId)` | Revoke group write access for `groupId`, passed as `String`. Returns the _acl namespace for method chaining.|\n| `_acl.getGloballyReadable()` | Return `bool` indicating whether entity is readable by all users |\n| `_acl.getGloballyWritable()` | Return `bool` indicating whether entity is writable by all users |\n| `_acl.setGloballyReadable(gr)` | Set global readability to `gr`, passed as `bool`. Returns the _acl namespace for method chaining.|\n| `_acl.setGloballyWritable(gw)` | Set global writability to `gw`, passed as `bool`. Returns the _acl namespace for method chaining.|\n\n##### ACL method chaining\n\nAll `_acl` methods can be chained to the `modules.kinveyEntity.entity()` by chaining the `_acl` namespace followed by the desired method. Furthermore the `_acl` modifier methods (those that return the `_acl` namespace) can be chained to each other. Since the `_acl` modifier methods return the `_acl` namespace, there's no need to restate the `_acl` namespace for the next method in the chain. \n\nFor example, the following line will create a Kinvey Entity, add a reader, add a writer, then return all readers. NOTE: Since getReaders() returns an array, no futher `_acl` methods can be chained to it.\n\n```\nmodules.kinveyEntity.entity(someObject)._acl.addReader(readUserId).addWriter(writeUserId).getReaders();\n```\n\n##### Example\n\nThe example below uses `kinveyEntity.entity()._acl` along with the [Request Context](#requestcontext-module) module to grant write access on the requested entity to the user making the request:\n\n```javascript\nfunction handler(request, complete, modules) {\n\tconst currentUser = modules.requestContext.getAuthenticatedUserId();\n    const serviceObjectName = request.collectionName;\n\tconst entityId = request.entityId;\n\t\n\tconst collection = modules.dataStore().collection(collectionName);\n\t\n\tcollection.findById({entityId, (err, doc) => {\n\t  \tif (err){\n\t  \t  //handle error\n\t  \t} else if (doc) {\n                  \n\t  \t  const entity = modules.kinveyEntity.entity(doc)._acl.addWriter(currentUser);\n\t  \t  //Note we directly pass the Kinvey Entity to the save method. \n\t  \t  collection.save(entity, (err, result) => {\n\t  \t    complete(result).ok().next();\n\t  \t  });\n\t  \t} else {\n                  // entity not found\n                  complete(new Error \"Entity not found\").runtimeError().done();\n                }\n\t});\n}\n```\n\n### [Kinvey Date](#kinvey-date-module)\n\nA utility for converting dates.  \n\n| Method             | Behavior           |\n|:-------------------|:-------------------|\n| `toKinveyDateString(date)` | Converts a Date object, a moment, or a date string into the Kinvey date format.  If the passed in date is not a valid date, \"Invalid date\" will be returned.  |\n| `fromKinveyDateString(str, format)` | Decodes a Kinvey date string into the specified format.  Valid formats are 'date', 'moment' and 'string'.  If no format is provided, a JavaScript Date object is returned.  If the passed in *str* is not a valid date, \"Invalid date\" will be returned.   |\n\nFor example, to convert a date to to a Kinvey Date string:  \n\n```\nmyDate = new Date();\nkinveyDate = modules.kinveyDate.toKinveyDateString(myDate);\n```\n\nTo convert a Kinvey Date string to a JavaScript date object:\n\n```\nmyDate = modules.kinveyDate.fromKinveyDateString(kinveyDate, 'date');\n// note:  this could also be accomplished via modules.kinveyDate.fromKinveyDateString(kinveyDate);\n```\n\nTo convert a Kinvey Date string to a moment:  \n\n```\nmyMoment = modules.kinveyDate.fromKinveyDateString(kinveyDate, 'moment');\n```\n\nTo convert a Kinvey Date into a standard ISO-8601 date string\n\n```\nmyDateString = modules.kinveyDate.fromKinveyDateString(kinveyDate, 'string');\n```\n\n### [Push](#push-module)\n\nUse the push module to send a push notification to a device registered with your app.\n\n\nAvailable Methods:\n\n| Method             | Action                  |\n|:-------------------|:------------------------|\n| `broadcastMessage(message, calback)`   | Broadcasts `message` to all devices registered with this app |\n| `sendMessage(users, message, callback)` | Sends `messages` to the users in `users` |\n| `sendPayload(users, iOSAps, iOSExtras, androidPayload, callback)` | Sends a custom payload to the users in `users` |\n| `broadcastPayload(iOSAps, iOSExtras, androidPayload, callback)` | Broadcasts custom payloads to all devices registered with this app.\n\nFor example, to send a broadcast message:\n\n```javascript\n\tvar push = modules.push;\n\tif (request.body.sendMessageToAll){\n\t\tpush.broadcastMessage(request.body.message, (err, result) => {\n \t\t  complete.ok().next();\n \t\t});\n\t}\n```\n\nThe `users` argument to `send` is either an array of Kinvey User documents or a single user document.  The message\nwill be sent to all iOS or Android devices that are contained in the documents in `users`.\n\nYou can query the `user` collection with the [`dataStore` module](#data-store-module) to get a list of users.\n\nFor example:\n\n```javascript\n\tconst push = modules.push;\n\tconst dataStore = dataStore();\n\tconst query = new modules.Query();\n\t\n\tquery.equalTo('firstName', request.body.firstName);\n\t\n\tdataStore.collection('user').find(query, (err, userColl) => {\n\t  if (err) {\n\t\tcomplete(err).runtimeError().done();\n\t  } else {\n\t\tuserColl.forEach((user) => {\n\t\t  push.sendMessage(user, `People who are named ${user.firstName} are awesome!\", (err, result) => {\n\t\t  //complete here \n\t\t  });\n\t\t});\n\t  }\n\t});\n```\n\t\n##### Payloads\n\nThe methods `sendPayload` and `broadcastPayload` allow for more robust push\n messages.  For iOS, the payload consists of two arguments, `iOSAps` and\n `iOSExtras`.  `iOSAps` is a JSON object that can have the following properties:\n\n| Field               | Value                                                                 |\n|:--------------------|:----------------------------------------------------------------------|\n| `alert`             |  An alert message to display to the user                              |\n| `badge`             |  The badge number to appear on the notification                       |\n| `sound`             |  The name of the sound file in the application package to play        |\n| `content-available` |  If set to 1, the remote notification acts as a \"silent\" notification |\n\n`iOSExtras` is a JSON object with custom name-value pairs to be included in the push notification.  \n\nFor Android, the payload is contained in the `androidPayload` attribute, which is any JSON object to be sent to Google Cloud Messaging (GCM).  \n\nEach of the arguments above are null-safe.\n\nFor example, to send a broadcast with payloads:\n\n```javascript\nconst iOSAps = { alert: \"You have a new message\", badge: 2, sound: \"notification.wav\" }\nconst iOSExtras = {from: \"Kinvey\", subject: \"Welcome to Business Logic\"}\nconst androidPayload = {message: \"You have a new Message\", from: \"Kinvey\", subject: \"Welcome to BL\" }\nconst push = modules.push;\npush.broadcastPayload(iOSAps, iOSExtras, androidPayload, callback);\n```\n\nPush calls are asynchronous in nature.  They can be invoked without a callback, but are not guaranteed to complete before continuing to the next statement.  However, once invoked they will complete the sending of the push messages, even if the business logic is terminated via a completion handler.  \n\n*Note:* The email module is currently only available for services running on the Kinvey Microservices Runtime, and is not available externally or for local testing.  \n\n### [Query](#query-module)\n\nThe `Query` module allows you to build queries for use in the `dataStore` module. \n\n```\nconst query = new modules.Query();\n```\n\n#### Operators\n\nAll operator methods as exposed by the `Query` module follow the same pattern: the first argument must be the field under condition, while the other arguments specify the exact condition on that field. All operators return the query itself, so it is easy to concatenate multiple conditions on one line.\n\nFor example, to select all models with a rate between 25 and 50:\n\n```\nconst query = new modules.Query();\nquery.greaterThanOrEqualTo('rate', 25).lessThanOrEqualTo('rate', 50);\n```\n\n##### Comparison Operators\n* `equalTo` matches if the field is = the supplied value.\n* `greaterThan` matches if the field is > the supplied value.\n* `greaterThanOrEqualTo` matches if the field is >= the supplied value.\n* `lessThan` matches if the field is < the supplied value.\n* `lessThanOrEqualTo` matches if the field is <= the supplied value.\n* `notEqualTo` matches if the field is != the supplied value.\n* `exists` matches if the field exists.\n* `mod` matches if the field modulo the supplied divisor (second argument) has the supplied remainder (third argument).\n* `matches` matches if the field matches the supplied regular expression.\n\n**Note:** Regular expressions need to be anchored (prefixed with `^`), and case sensitive. To do case insensitive search, create a normalized (i.e. all lowercase) field in your collection and perform the match on that field.\n\n##### Array Operators\n* `contains` matches if any of the supplied values is an element in the field.\n* `containsAll` matches if the supplied values are all elements in the field.\n* `notContainedIn` matches if the supplied value is not an element in the field.\n* `size` matches if the number of elements in the field equals the supplied value.\n\n#### Modifiers\nQuery modifiers control how query results are presented. A distinction is made between limit, skip, and sort modifiers.\n\n##### Limit and Skip\nLimit and skip modifiers allow for paging of results. Set the limit to the number of results you want to show per page. The skip modifier indicates how many results are skipped from the beginning.\n\n```\n// Show results 20–40\nconst query = new modules.Query();\nquery.limit = 20;\nquery.skip = 20;\n```\n\n##### Sort\nQuery results are sorted either in ascending or descending order. It is possible to add multiple fields to sort on.\n\n```\n// Sort on last name (ascending), then on age (descending).\nconst query = new modules.Query();\nquery.ascending('last_name');\nquery.descending('age');\n```\n\n**Note** Data is sorted lexicographically, meaning `B` comes before `a`, and `10` before `2`.\n\n##### Field Selection\nBy default, all fields in an entity will be retrieved. You can, however, specify specific fields to retrieve. This can be useful to save bandwidth.\n\n```\nconst query = new modules.Query();\nquery.fields = [ 'last_name', 'age' ];\n```\n\nSaving entities after retrieving them using Field Selection will result in the loss of all fields not selected. Further, these partial entities will not be available for use with [Caching & Offline Saving](/guides/caching-offline).\n\n#### Compound Queries\nYou can combine filters with modifiers within a single query.\n\n```\n// Returns the first five users with last_name “Doe”, sorted by first_name.\nconst query = new modules.Query();\nquery.limit = 5;\nquery.equalTo('last_name', 'Doe');\nquery.ascending('first_name');\n```\n\n##### Joining Operators\nIt is very easy to join multiple queries into one. In order of precedence, the three joining operators are listed below in order of precendence.\n\n* `and` joins two or more queries using a logical AND operation.\n* `nor` joins two or more queries using a logical NOR operation.\n* `or` joins two or more queries using a logical OR operation.\n\nThe example below demonstrates how to join two separate queries.\n\n```\nconst query = new modules.Query();\nquery.equalTo('last_name', 'Doe');\nconst secondQuery = new modules.Query();\nsecondQuery.equalTo('last_name', 'Roe')\n\n// Selects all users with last_name “Doe” or “Roe”.\nquery.or(secondQuery);\n```\n\nAlternatively, the snippet above can be shortened using the join operator inline.\n\n```\n// Selects all users with last_name “Doe” or “Roe”.\nconst query = new modules.Query();\nquery.equalTo('last_name', 'Doe').or().equalTo('last_name', 'Roe');\n```\n\nYou can build arbitrary complex queries using any join operators. The rule of thumb is to take the precendence order into account when building queries to make sure the correct results are returned.\n\n#### Location Queries\n\n**Note** Location Queries are only available on fields named `_geoloc`. The value of this field should be an array holding two elements: longitude and latitude (in that order). Kinvey indexes that attribute for optimal location querying.  \n\nThe following Location Operators are supported by `modules.Query`:\n\n* `near` matches if the field is within the supplied radius (in miles) of the supplied coordinate.\n* `withinBox` matches if the field is within the box specified by the two supplied coordinates.\n* `withinPolygon` matches if the field is within the polygon specified by the supplied list of coordinates.\n\nFor example, a query to retrieve all restaurants close (10 mile radius) to a users’ current location could look as follows:\n\n```\n// Get users current position\nfunction handler(request, complete, modules) {\n  const coord = [request.body.longitude, request.body.latitude];\n\n  // Query for restaurants close by.\n  var query = new modules.Query();\n  query.near('_geoloc', coord, 10);\n\n  var dataStore = modules.dataStore().collection('restaurants');\n  var stream = dataStore.find(query, (err, result) => {  \n  \tif (err) {\n  \t  return complete(err).runtimeError().done():\n  \t}\n  \tcomplete(result).ok().next();\n  });\n});\n```\n\n### [requestContext](#requestcontext-module)\n\nUsed to return data and perform functions against the current request context.\n\n| Method             | Behavior           |\n|:-------------------|:-------------------|\n| `getAuthenticatedUserId()` | Returns the ID of the user who submitted the request. When the app or master secret is used to authenticate, the application ID is returned. |\n| `getAuthenticatedUsername()` | Returns the username of the user who submitted the request. |\n| `getAuthoritativeUsername()` | Returns the authoritative username of the user who submitted the request.  The authoritative username is determined based on the type of user.  If the user logged in with a token obtained from Mobile Identity Connect, and a MIC Enterprise ID is defined, this method returns the value defined in that field from the enterprise identity source.  If the user logged in in with a MIC token and no MIC enterprise id is defined, or a social login, the social provider's `id` is used. If the user logs in with a Kinvey native login, the `user.username` value is used. |\n| `getSecurityContext()` | Returns the context of the current user - possible values are __user__ for a user account, __app__ for the app account with app secret, and __master__ for the app account with master secret |\n\n#### Custom Request Properties\nKinvey Client libraries provide API to pass Custom Request Properties when communicating with Kinvey services. The requestContext module provides methods to read and manipulate those properties.\n\n\n| Method             | Behavior           |\n|:-------------------|:-------------------|\n| `getCustomRequestProperty(propertyName)` | Takes string value `propertyName` and returns value of key `propertyName` from the Custom Request Properties object. Returns `undefined` if key `propertyName` does not exist. |\n| `setCustomReqeustProperty(propertyName, propertyValue)` | Creates Custom Request Property `propertyName` using the provided string `propertyName`, and assigns `propertyValue` as its value. If `propertyName` doesn't exist, it will be created. `propertyValue` can be any valid JSON value.|\n\nThe Custom Request Properties object will be available throughout the entire Kinvey Request pipeline. For example, you can add/modify a Custom Request Property in a preFetch hook, and those changes will be available in a postFetch hook on the same transaction.\n\n##### Example Code\n```\n//Assume {officeLocation: 'Paris'} was provided as the Custom Request Properties object\n\nfunction handlerForPrefetch(request, complete, modules){\n \n  const requestContext = modules.requestContext;\n  const officeLocation = requestContext.getCustomRequestProperty('officeLocation');\n  \n  if (officeLocation === 'Paris'){\n  \t  try {\n  \t     //Perform some 'preprocessing' logic for requests from Paris\n  \t     //...\n  \t     //Set didPreprocess to true in the Custom Request Properties\n  \t     requestContext.setCustomRequestProperty('didPreprocess', true);\n  \t  } catch (error) {\n\t     //If preprocessing fails due to an error, set didPreprocess to false\n\t     requestContext.setCustomRequestProperty('didPreprocess', false);\n  \t  }  \n  }\n \n  //Continue the execution\n  complete().ok().next();\n  \n}\n```\n\nThe above code checks the Custom Request Properties for a property, `officeLocation`. If the `officeLocation` is Paris, then some custom pre-processing is done as part of the pre-fetch hook. If the pre-processing succeeds, we set `didPreprocess` to `true` in the Custom Request Properties. If an error is encountered during preprocessing, we set `didPreprocess` to `false`.\n\nWe could implement a post-fetch hook that looks for the `didPreprocess` flag on the Custom Request Properties object:\n\n```\n//Assume {officeLocation: 'Paris', didPreprocess: true} was provided as the Custom Request Properties object\n\nfunction handlerForPostFetch(request, complete, modules){\n \n  const requestContext = modules.requestContext;\n  const officeLocation = requestContext.getCustomRequestProperty('officeLocation');\n  const didPreprocess = requestContext.getCustomRequestProperty('didPreprocess');\n  \n  if (officeLocation === 'Paris'){\n  \t  if (didPreprocess === true) {\n  \t  \t//perform some post-processing specific to pre-process success\n  \t  } else {\n  \t  \t//optionally perform some other post-processing\n  \t  }\n  }\n \n  //Finish the execution\n  complete().ok().done();\n  \n}\n```\n\nFor details on passing Custom Request Properties to Kinvey backend services, please see the API reference for the Kinvey Client Library of your choice.\n\n#### Client App Version\nAll of the Kinvey client libraries provide API to pass a client-app-specific version string (for implementation details, see the Kinvey Dev Center reference documentation for the library of your choice). The requestContext module provides a `clientAppVersion` namespace, which includes API to retrieve details about the version of the client app making the request. \n\n**Note** Kinvey *recommends* (but does not require) using version strings that conform to the pattern `major.minor.patch`, where all values are integers and `minor` and `patch` are optional. The `majorVersion()`, `minorVersion()` and `patchVersion()` methods defined below are convenience methods designed to work with version strings conforming to this pattern. If `major`, `minor` or `patch` contain any non-digit characters (i.e. 'v1' contains a non-digit character, 'v'), the corresponding convenience method will return `NaN`.\n\nThe requestContext.clientAppVersion namespace provides the following methods: \n\n| Method             | Behavior           |\n|:-------------------|:-------------------|\n| `stringValue()` | Returns the client app version value as a `String`. Returns `null` if no client app version is passed in. |\n| `majorVersion()` | Returns the first dot-separated field of the client app version string (or the entire version string if there are no 'dot' characters) as a `Number`, or `NaN` if that field contains any non-digit characters. See [A note on version numbering](#version-numbering) above for details on formatting version strings. |\n| `minorVersion()` | Returns the second dot-separated field of the client-app version string as a `Number`, or `NaN` if that field contains any non-digit characters. See [A note on version numbering](#version-numbering) above for details on formatting version strings. |\n| `patchVersion()` | Returns the third dot-separated field of the client-app version string as a `Number`, or `NaN` if that field contains any non-digit characters. See [A note on version numbering](#version-numbering) above for details on formatting version strings. |\n\n\n##### Example Code\n\nAssuming a client app version string of \"1.1.5\":\n\n```\n\nfunction handler(request, complete, modules){\n  const context = modules.requestContext;\n  \n  const majorVersion = context.clientAppVersion.majorVersion(); //majorVersion will be 1\n  const minorVersion = context.clientAppVersion.minorVersion(); //minorVersion will be 1\n  const patchVersion = context.clientAppVersion.patchVersion(); //patchVersion will be 5\n  \n  if (majorVersion < 2) {\t\t\t\t\t\t\t\t//will be true\n  \t//Perform some version 1 compatible logic\n  \tif ((minorVersion >= 1) && (patchVersion === 5)) {\t//Will be true\n  \t\t//perform some logic for a specific patch release\n  \t}\n  } else if (majorVersion >= 2) {\t\t\t\t\t\t//Will be false\n  \t//Perform some version 2+ compatible logic\n  }\n \n  \n  //Finish the execution\n  complete().ok().done();\n  \n}\n```\n\nAssuming a client app version string of \"1.0.1-beta\":\n\n```\n\nfunction handler(request, response, modules){\n  const context = modules.backendContext;\n  \n  const versionString = context.clientAppVersion.stringValue(); //versionString will be \"1.0.1-beta\"\n  const majorVersion = context.clientAppVersion.majorVersion();   //majorVersion will be 1\n  const patchVersion = context.clientAppVersion.patchVersion();   //patchVersion will be NaN\n  \n  if (majorVersion < 2) { \t\t\t\t\t\t//Will be true\n  \t//Perform some version 1 compatible logic\n  \tif (patchVersion > 1) {\t\t\t\t\t\t//Will be FALSE as patchVersion is NaN\n  \t\t//Perform some patch-specific logic\n  \t}\n  }\n   \n  if (versionString.match(\"beta\") !== null){\t//Will be true\n  \t//Perform some beta-specific logic\n  }\n  \n  //Finish the execution\n  complete().ok().done();\n  \n}\n```\n\n\n### [Temp Object Store](#temp-object-store-module)\n\nA key-value store for persisting temporary data between a pre- and post-hook. `tempObjectStore` is an ephemeral store that only lives for the duration of a single request, but will allow for data that is written in a pre-hook to be read in a dataLino and/or in the post-hook.  The module implements three methods:\n   \n\n| Method             | Behavior           |\n|:-------------------|:-------------------|\n| `set(key, value)` | Writes a value for the given key to the `tempObjectStore` |\n| `get(key)` | Returns the value of the supplied key |\n| `getAll()` | Returns all key/values in the `tempObjectStore` as an object |\n\nFor example, to store an item in a handler:\n\n```javascript\nfunction handler1(request, complete, modules) {\n  var tempObjectStore = modules.tempObjectStore;\n  tempObjectStore.set('token', request.body.token);\n  complete().ok().next();\n}\n```\n\nThen, to retrieve it:  \n```\nfunction handler2(request, response, modules) {\n  var tempObjectStore = modules.tempObjectStore;\n  var token = tempObjectStore.get('token');\n  complete({ message: `Object for token ${token} was saved successfully.` }).ok().done();\n}\n```\n\n*Note:* `tempObjectStore` is meant for storing small, temporary amounts of data to be passed between different functions.  Large amounts of data / large objects should not be stored in the `tempObjectStore` for performance reasons.    \n\n\n## [Testing Locally](#testing-locally)\n\nIn production use, certain data is sent to the the service by Kinvey for use in certain modules.  This data can be sent via HTTP headers when testing locally.  Different modules within the backend-sdk require these arguments. All are optional, but required if you want to make use of certain features in local testing.  \n\n\n| Header             | Description           | What requires it |\n|:-------------------|:-------------------|:-------------------|\n| `X-Kinvey-App-Metadata` | A stringified JSON object that contains information about the app context from which this request is being executed.  | `backendContext`, `dataStore` | \n| `X-Kinvey-Original-Request-Headers` | A stringified JSON object that contains the request headers that belong to the request context of the BL or data request | `requestContext`, `dataStore`, the `request` argument in all handlers (if you want to access request headers) |\n| `X-Kinvey-Username` | The username of the user making the request. | `requestContext`, `dataStore` |\n| `X-Kinvey-User-Id` | The User Id | `requestContext`, `dataStore` |\n\nThe `X-Kinvey-App-Metadata` object contains:\n\n| Property             | Description           |\n|:-------------------|:-------------------|\n| `_id` | The environmentId | \n| `appsecret` | The app secret | \n| `mastersecret` | The master secret |  \n| `baasUrl` | The base URL for the Kinvey instance you are using.  For example, `https://baas.kinvey.com` | \n\nThe `X-Kinvey-Original-Request-Headers` object can contain any number of custom headers, but should contain:\n\n| Property             | Description           |\n|:-------------------|:-------------------|\n| `x-kinvey-api-version` | The API version to use (number).  Note this is important for the `dataStore` module. | \n| `authorization` | The authorization string (either Basic or Kinvey auth) for accessing Kinvey's REST service. | \n| `x-kinvey-client-app-version` | The Client App Version string |\n| `x-kinvey-custom-request-properties` | A JSON-stringified The custom request properties.  |  \n","maintainers":[{"name":"mjsalinger","email":"mjsalinger@kinvey.com"},{"name":"sjl2024","email":"sjl2024@gmail.com"}],"time":{"modified":"2022-06-19T08:48:49.485Z","created":"2015-09-03T15:53:06.828Z","0.0.0":"2015-09-03T15:53:06.828Z","0.0.1":"2015-09-03T16:04:01.046Z","0.0.2":"2015-09-03T21:24:07.502Z","0.0.3":"2015-09-04T00:26:17.043Z","0.0.4":"2015-09-04T12:27:57.996Z","0.0.5":"2015-09-08T11:22:37.517Z","0.0.6":"2015-09-08T13:49:59.996Z","0.0.7":"2015-09-08T14:08:51.181Z","0.0.8":"2015-09-08T15:01:01.915Z","0.0.9":"2015-09-08T15:11:51.275Z","0.0.10":"2015-09-08T15:19:18.863Z","0.0.11":"2015-09-08T15:31:47.452Z","0.0.12":"2015-09-08T15:41:26.271Z","0.0.13":"2015-09-08T19:16:17.338Z","0.0.14":"2015-09-10T11:21:26.947Z","0.0.15":"2015-09-10T12:00:39.149Z","0.0.17":"2015-09-10T13:07:11.192Z","0.1.0":"2015-09-17T00:35:40.860Z","0.1.1":"2015-09-17T01:16:15.766Z","0.1.2":"2015-10-06T13:26:21.157Z","0.2.0":"2016-02-04T21:38:17.409Z","0.2.1":"2016-02-05T17:30:27.219Z","0.2.2":"2016-02-24T14:01:47.682Z","0.2.3":"2016-02-24T20:42:39.214Z","0.3.0":"2016-03-10T05:39:45.339Z","0.3.1":"2016-03-28T18:59:14.793Z","0.3.2":"2016-04-16T00:03:29.057Z","0.3.3":"2016-04-18T00:36:11.428Z","0.3.4":"2016-04-18T01:02:59.030Z","0.4.0":"2016-06-15T15:44:01.720Z","0.4.1":"2016-07-12T19:23:37.772Z","0.4.2":"2016-08-01T12:34:54.429Z","0.4.3":"2016-08-08T17:51:41.747Z","0.4.4":"2016-08-12T13:24:22.354Z","0.5.0":"2016-09-23T16:20:59.022Z","0.5.1":"2016-10-07T18:39:31.428Z","0.5.2":"2016-10-17T19:53:52.756Z"},"readmeFilename":"README.md","contributors":[{"name":"Michael Salinger","email":"mjsalinger@kinvey.com"},{"name":"Sam Levin","email":"sam@kinvey.com"}],"author":{"name":"Kinvey","email":"support@kinvey.com"},"homepage":"https://github.com/kinvey/backend-sdk#readme","repository":{"type":"git","url":"git+https://github.com/kinvey/backend-sdk.git"},"bugs":{"url":"https://github.com/kinvey/backend-sdk/issues"},"license":"Apache-2.0"}