{"_id":"@appsocially/schedulerly-client","_rev":"85-db56d0cbd1e8773f6ae37e2827e252f6","name":"@appsocially/schedulerly-client","dist-tags":{"latest":"2.4.1","beta":"2.5.0-beta.1"},"versions":{"2.0.2":{"name":"@appsocially/schedulerly-client","version":"2.0.2","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec \"jest\"","test:watch":"firebase emulators:exec \"jest -o --watch --runInBand\""},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"gitHead":"55a493f6fc5f02ecfc27358d037a08df05b57415","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.0.2","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-7pn44kq8yWYAVpAtVAXwdmNZNMIpg3riiZEqGvcipbjks0TdnVZzKkhhJO8GKE86nQdRoF3H4uPgUpkg+wYCsA==","shasum":"75c0409e80add0414a0c1417bd1b75cc99baba06","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.0.2.tgz","fileCount":37,"unpackedSize":98251,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfKlusCRA9TVsSAnZWagAAHikQAIS1Kbm0ughPhaYl9v9t\n3ZszFJgLZokrDziZ7v3bzgbDUqTOwWLaP4E0K+xPlaRNzuHs2rx3Bs67S5pT\ngMvAPGB9rSKJsm5jaM1bUgQE5jii8c39jd/sunH7EYU3rGtNwhZ7vpT3EADQ\nPpHzgIr5WaQAmVDwhprypRvH0/mA4Oxd35I1kFVal+9tagUt/MA4t5yMEy3Y\ntIvCpYFcalvgQQvK8GOmNnrXCy/aQir+13aSW/mjeMr8gS7/w4+TO21tvyr6\nID2HPBiSx156RGa53Y3HGvivoWhfqcDge3+H4q2hCQgbaq/WeWsF97fJf/pS\nzk9TajavG8hOZvEsxMFtZh4mTUcXkendnevThQ7/dNdjbLzWEQ0CtY0LBQ2+\nbEfJUgNCJl5ySK89XTtrv580Ed1iHHO2r9h2ejtvIEp6bCtxOOuxQgOUTRLF\niLMwNlgxMle6iTqxJmSjwGXDr6dmfZOC7DjVgZOV9PRb8fNjJEFWhJee9nAy\nJGaQ5i4ragvx3GnXeRSm1EGFolhAiqMuQzmsp8+659lzL6f8QRPrjb//BJPz\neTAsbcScr4GUJmpndzOFH5FvRqsFYAEfoCM7GQNjP89Gtn674KjJ0Fv5ksUV\nsOnxEEbkYzCu0PYwIqxfvtkKXwYAgSKvyxi2x/uLS+6OWX3KMancLclZVKs3\nuCLi\r\n=5dG9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDS7BPVeec8ZdUqJRrM0ClkMaaJG9J0nB7aNkEt+ib2gwIgYRWvw3rvSSzUaQ7/2+bqMm2VK2Q2HSroujlbkMjZhqE="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.0.2_1596611499755_0.6000983098129096"},"_hasShrinkwrap":false},"2.0.3":{"name":"@appsocially/schedulerly-client","version":"2.0.3","main":"src/main.js","repository":{"type":"git","url":"git@github.com:appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec \"jest\"","test:watch":"firebase emulators:exec \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs","publish":"npm publish"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","_id":"@appsocially/schedulerly-client@2.0.3","dist":{"shasum":"8d2d6cf95237e5e64ede0d498fc3fa67f25be95e","integrity":"sha512-dLCJWNn3CzC+WjGP9eNUPI5SBdPSmZpakqvKOoU8znuPhhe09gomTQTUxVe7qHA+TdXD9BNL0Aa9IAxLNe+5EA==","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.0.3.tgz","fileCount":47,"unpackedSize":114345,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMkJcCRA9TVsSAnZWagAAekMP/3Qys40r2La3EZByGfXh\nxM8zMcV1NvP1b5A2yvEwKESnw4LZRtYSiiOxfZTdNJNpieNWJRMqkuBPgUng\nHYjU+S8F0O0c2pBwBgERnAsUtQLcEODZ30O1iD4HU085uMscF7zV+HDWyVnP\n5Hot8aL7EjHKzVvIQrNVVi2+uJ5l0xRt2x0E3wclsMOUlSmOP0UwWR5wE317\n0/VH/I8fO5+7vPeLi0mAy9TkGl+WydaOwRq3gbBpOViWWIB2X6B4Fh4/2gyx\n4Ozxwez5qZsnYivqYWx7/3EYw6X90nRk867ekM8YvZ/ol6LBbOtFALmmUjgh\nR7mh7mVUxi35fXhnYG6JZp1COE/DdhUHVNI02WL1VVaDtot1iMr6j3x7vSZg\nN8fqM+A97d5GsYK8A5C8aVxJ3je7y+VPAYiWWHFgA6SVCz48U9MQxOXn5c6z\nqzVI7yVYZZPsYpqtXW9VQL0CXNfXOa8ZDkq2tr8GJHR7wUHgpBpXlBy90Zhg\nFoXwEDLH8YTaq3HWtdcV9UZk8Tkc/NiAUEQLiyj23TCU+HPK+qifs1zrO65P\nC8Ykrn79oh1LK0TXXfzSdz8STDdMP7MdbZdeExHb6woDSvvtZgPC/vTax6SQ\nBQFEONSPjINYMdDyVNFinGnGlW1he03pOlnw/H5EowmJYs+I/3MiJvoD/1ZS\nij5r\r\n=91zp\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQdkQrr9besSOMB7SOx4cswdisbID8muIJWzBg/erfMwIgS9vu09t0kaGMJ6f1RJ8hAstvAKEb6Q+g11pEIBUR4nk="}]},"maintainers":[{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.0.3_1597129308449_0.5391294103228377"},"_hasShrinkwrap":false},"2.0.4":{"name":"@appsocially/schedulerly-client","version":"2.0.4","main":"src/main.js","repository":{"type":"git","url":"git@github.com:appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec \"jest\"","test:watch":"firebase emulators:exec \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs","publish":"npm publish"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","_id":"@appsocially/schedulerly-client@2.0.4","dist":{"shasum":"9054dd6b046fe3edcb38ec32643e526be39c8b99","integrity":"sha512-9WKCXxqU6OfbTqdeAyFBys5sKJghjbWdK+huyY4yGEYT9IiFtAYfSF8oFCgQWsLWssLyZYyy1BSQSTO4ea6/kA==","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.0.4.tgz","fileCount":47,"unpackedSize":114345,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMkKICRA9TVsSAnZWagAAqdkQAJA8sm4BNQaVeT4s80sX\nGcpcJ+IZ2/wpBKUY2KAiRYNtrdSa9YELCtcGWeCrXgJ+E2kiJiqjCRwx96Vn\nBDGoQs8UaKNCdUwFkjXyoOYx8htYu1oL2CSbdEOmDevWPWaboNpxKBp/I3mq\nmOyKZ0pUj8U7WZ2oUgoCkJYj03Y8N9eRI7GjvEbRim+IudnfsC/RtkX27HiQ\nSC23d9ne30RtVuDFo8c4txL214p4ouzc4x9i/PntVDoerGRbGIOQ0XdXj1ZL\nWNk8Ys9Oh7GZwdkG1kmJUDgo6NHl7JA+iy7yUpZ3ggwYh8HpHhKrbigAI4Z1\nqruo9nFY2GsxiaNp1P1SNLkudlGqxzG1pYlSMasNCKt8zlAfeluHUp0WlB+5\nYCBn3k8thWz9H/PxevRlLASXFpa7dz9f9PPPEMZOvsGu+O3jmWgxgExEU4aY\nO/y54RqxYqLut+9POph+BNwKGG6UoxGOoHHkPxBGnAqVtz8HQPDrJXgjuHHy\nKbxI3Zg9HrgIu+g3+Lk9e6uweTkTM06twgYxuf0VF/2mCsnPBkPDO2Cj6J1D\nywGfCLyHp6lJminJyQS2RoFIMDHYBy8HX/GbZljQaZXTnY4AXLT4h/FhYPHF\nsjdiUpGqOw74yfO5XYk5+vZ+bF2HqFKdNw7jjURV/LjjxZNG2ehKr7wJNTv1\nnkm8\r\n=g2w+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCPqARsoWpDp/MVJcBnPk2eBW1kth4Ar1Ok6XCU1I5qGAIhAKRKosXxVjtVaAbseABnemvbcFjzWEzr0h8Rl6+6Yon5"}]},"maintainers":[{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.0.4_1597129352120_0.7893820552812352"},"_hasShrinkwrap":false},"2.1.1":{"name":"@appsocially/schedulerly-client","version":"2.1.1","main":"src/main.js","repository":{"type":"git","url":"git@github.com:appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec \"jest\"","test:watch":"firebase emulators:exec \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs","publish":"npm publish"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","_id":"@appsocially/schedulerly-client@2.1.1","dist":{"shasum":"cd6e8ddabbc1d94f8aa083cddc21be85d57fdac0","integrity":"sha512-lJW50QD90qQNd58xtVyaQBGLfzrhMu3Zn4HxQDEtuTm8YPqA2E+eAqVESkLHj9FL2OwYcokbFI1FuElGFT052Q==","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.1.1.tgz","fileCount":51,"unpackedSize":129073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVeBJCRA9TVsSAnZWagAAaVAP/1rFSCdde6IVEW5NLD59\nGOCNkSTjm4/gBmE0O4reViUpQ4m0BZyvzuHvROBQY9hzk1lFIg6lq/Kg6cWZ\nKYKyBHnYOLdqUSZwwBzc4efKPnaxCPjGxZA+7/OOIE6rNijsNAkfPr0Y9j04\npLM3RdmGeN6FasGVmeZIp1j5HM8BsFvlP2wHUh98PDv2yLVbeLTL+qlJgQOE\nC3Hbvu9i7NZNam8Hm5G0/ppQx9tg97MH0P/gTHlDEdV0k+eY/YO6N1hy5hOB\n8pg0D5QcILPnD5wulwutsBhigzDCwfSJfReMCH2lIAWD8dvzeNLWr2F3VpRc\nsyIhNrpuT9U5l6AU5Y3GfaJSRBgrRhvyTyJFlT16BTD/FLJBq+EH68Wxppcm\nl93ksTAYUTPCbp0Oj+/7hvMLUgAQ86AkVtWo0e8E9NzAkrTqVSfv0MUnS6Bp\nHvTiRR6zc95MVsFNSM1YHZMQA43HDLtQ9ad1lljt4btlKVAIHOKlEfuVxiPE\npeNllmqaXsKlJJeLSa38cEX6sMIo09jXNKYPqibQVZInu09F0MpSavGueMcX\noqAnLYJM92KexDKSVtR/8HWwt0F6MCj66itgJ+H6bO9pRQmEOjfEv9vd87s1\nd7KdT/42hPwKkh3S+EoOLO+NSnf2JRwGAfUyz8e7LJ2E5IreQxwPypGgy+7O\nY9fY\r\n=3o00\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCQnIqda7lv6OxGBqoAe2gziGAg9G7+1HzvIkONLEAejwIgDp5fbhyvAW3YXqrleqQ2AZmJSV+k5U7+9V2PKf6SOE8="}]},"maintainers":[{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.1.1_1599463497536_0.21248254334862393"},"_hasShrinkwrap":false},"2.2.0":{"name":"@appsocially/schedulerly-client","version":"2.2.0","main":"src/main.js","repository":{"type":"git","url":"git@github.com:appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec \"jest\"","test:watch":"firebase emulators:exec \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs","publish":"npm publish"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","_id":"@appsocially/schedulerly-client@2.2.0","dist":{"shasum":"f6e3ce67e3d881fefa42f7fd4e3a629219e7b9a3","integrity":"sha512-CvVHktgBhnCzGG18efs8I20WwknQ6MXs3DqRkdKhcBcaacrnIL2jZNXyhZXJErPuWMBNSeyyIHTc04ola2M5Kw==","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.2.0.tgz","fileCount":51,"unpackedSize":129073,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfVeCBCRA9TVsSAnZWagAAFjcP/1+ijKeQHuTZGku5/KyH\n92DY3qaqY18e8o97y1J6674kZh56V7iFqYgGL3ZQg+QYkQbLTfEm/He7WchT\nnSJYR0icOvVaASZ3b5uftt2AqGZG9H+uRUuogIR3/d88RJCjzx8J6Q6tGXYn\nXvYccsxDt7KGkTkjeRKq35VOSSxGPSwVKSNIX6EgsaSPErMg1v5QivBzB+EQ\nUfV/FyAv2Hkv0NGs7kdlIxmrQwxamPxBlmNNwi3Z5X4asqqU+w9uty9iw9Tf\nLeg93yPWfg3dvg4KB3rG9/+9NXZDMm5HEGK462BOOgWzk6U800JQdUI6zZkh\nenXpqyOZ1mquxFvfXE2lZqYVfflJrGO35FU4NwpBqVc0k9f5Eqi8L0IguqzM\nOyr9PUCFre6CfnJhk2WUHGbhT1iMf5Qr9db83WG7ZbeP9t96SaD8qYAkWNG0\n3TWqDPT8Jffrj1uHnsb+J2QZ5ETk7PQ+bc5NZ32eQ+oDE4z/Sn7KIcHenOoC\nkaDr0Q7IjnXbA/t3WCr2Xz9drc5bCcCoFHBSRXZxMH7JxA3P3VeGVolj+r25\nFvE0Go7IslNpnnZj+49nfYNFnAJsNP0cnS0m9/r/pCJoc6OaOjujdGXDQZ8q\nnBqBeJ99zD555T5101lP8scy5OdK/tedNUlnfdGDIQIsaBA144duyPf72jza\nPmDm\r\n=XBRP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICkySt2JuwoVirKl2FQOFbw9wEMn8ZP4Wwp/FXA1eY4hAiEAoIY62lDldjdzy7xidoOh4o/xDzdfHtlpoKRcMic1ltw="}]},"maintainers":[{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.2.0_1599463552844_0.9947189163098578"},"_hasShrinkwrap":false},"2.2.1":{"name":"@appsocially/schedulerly-client","version":"2.2.1","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec \"jest\"","test:watch":"firebase emulators:exec \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs","publish":"npm publish"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"To install the latest version of `schedulerly-client`\r ```\r yarn add @appsocially/schedulerly-client\r ```","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.2.1","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-3WxhDUV+Pyf6R2Lwc6M/ptiG+UGUtKw6g+dzCeSPGzVfl6uttqRTyMya2I9UhPQ+M9CcgDxS7z5ZJ1Hx53R5ZA==","shasum":"4ff3e908e0c43df5652e8d435d1cdde998d727a1","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.2.1.tgz","fileCount":43,"unpackedSize":142211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWKQkCRA9TVsSAnZWagAAl8kP/i6kTFkfvnGppEa++yDt\n8hlCONbgGn5j/tgdYD78FDenb5BGyWmtdWshBBzQNZLTo+lfr5sujp3bJNRn\nHW9CUN8GJIdxWjWd6aU1q3pQ9nxspIl/OaOl1ZZ8ZahTm54n8NYwkkPZMFFB\n9N/OeGCcwtTRMAH5lHuSNh0vKTyJ8BL1t3NLAfcNbScgXF3G1sO69yImpUXz\nm+oPhkh2AmyecMVtoloBFLQ/MPxgeqdkPEepCeKLOgGnvd8EOYMxxLyNhlqF\nnFEh2p6CyEu9kpyi1OlJwexLHJ06ZudwyHh3SISfsFX3AZXhJspujis+iWCt\nxCUjQHoeOmW7mpdU6jxrj5XlW166XqFrWhtTh2moZBkR3n4tcTd5HWkHbHk+\n1d34XXbbfsZ/Ltme0cR3NeNkaFs+UyvmW/kdThSqAZeZdnRCByI/0b2qEZvf\nTBHmk5CG5ecqHYg8VlL+CiY1Yx0IMBcBSPTzpFcyHlAFksrpjrJ2r04P2c1s\nVkXxzkUXOvFUI4MSPyDwe9zcFB6HpeUXBNobeiwtM3puXMI+z7i/uFg+nwyG\nUH6vS/45p1vJT5xwFqlRglcvjaoVyuhaliWydb2wdGj6MnZbzRsDvkQAJmII\n+bEidRpObmNb/yw1vmYr/c9TyhBlDCWGqgBWcZcr5GyKBJSHDMTv6ErOd/Vy\nWO1z\r\n=r+6O\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBSnf4RrXCVPsqkhevJ2Fa4plDsJKDB420CANhTWvWfLAiBEmgIvLZtBq4ondvHG/Bgv9CXGP0FIdN16QJtF5qRssQ=="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.2.1_1599644708228_0.6809661474644586"},"_hasShrinkwrap":false},"2.2.2":{"name":"@appsocially/schedulerly-client","version":"2.2.2","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec \"jest\"","test:watch":"firebase emulators:exec \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs","publish":"npm publish"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"To install the latest version of `schedulerly-client`\r ```\r yarn add @appsocially/schedulerly-client\r ```","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.2.2","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-8fYuHYsyzlYlucRn53rWa+08pBYPfGRBOm1HPSKJsNiSyE8M9NVU1OlKgQJT2E0zkoxboUWHowItTg2bGw4j6A==","shasum":"ba00aa83cb7cec1b9521ceabe2ed8a908598d812","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.2.2.tgz","fileCount":43,"unpackedSize":142211,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWKQ7CRA9TVsSAnZWagAARsMP/0H0vpGstRF41NID5jhD\nVpNGBaFlJq3fii2pvVz6A2kqFe+ZufBt5AuFpLzid5vWTQoMCfbwY3+4YC/C\no0KhRfZFfGceBuucph2AENZBuJ/EpBAo9K+v6mP1TuMSCfDM2kGL9eOKAOa9\n0m7Lmu+LOg3NMRPPtoYMiucwY1LTRGADv/1VMhkcUrVNse4ruQpngK52m2nT\njV77PmQ4jKxQXmU+mPM6TlCv9RNRan7axm3e5t6Wj6DpOBoT+2hfVsZUJudh\n6s76XpT/dqVQYLYxFJnHM+tbSkYRcYjJo3T21aml5+69Zt1hmG0udbL/C1kZ\nZlYdbjAFJln20g0XJf2lTti1FSdtgQ+XHQneV2F665FcVrCn1uU4sfVuGSXh\noJeHwtBHYNuT5Mui5jDX/CFgZTEZPkRMmA6ekXUTtq+Kltzg1CI+2Bv9j8LR\n3bPLdmK8YKubyt30XORAzN6dM68KvweVLD4exFx7kvPwGXSe17vt1Q5FIvip\nQCz6AVEXMeKkl2SbBLNzhktRYTkM9J+QnltqIZst1x8K0JW/a1PKKZAsrUZ1\nIUkq7gvyOo+Zhl7b7RVRWcu3OJMt+Pvsj6Sk9MfXoyjHJWkLrZETlRjRUIam\n1qq+Q9YKVq2fJrW/dM06Khbk+Na9+TnjyaLpPROtiDn50JGtvBqttLGhK9Mo\n/p3y\r\n=6ShL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4IPIIXBj06AyP+8tTBaMxRjge4T7wSbuPBePh1miCGgIhANfKfXfW8SCPcJmev9g6/jHjYephQv8OHZJkIpq7STTx"}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.2.2_1599644730881_0.22691236316689722"},"_hasShrinkwrap":false},"2.2.3":{"name":"@appsocially/schedulerly-client","version":"2.2.3","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec \"jest\"","test:watch":"firebase emulators:exec \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs","publish":"npm publish"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"To install the latest version of `schedulerly-client`\r ```\r yarn add @appsocially/schedulerly-client\r ```","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.2.3","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-rpic3XVQsbUHvv+PurmuAmrQK4fRdAIq4PNO+SfZDhTLOpYkTMUb40w/ev/FMijcEvF1w2CEt5FN63WKjEDiOw==","shasum":"781c0092b62d4b76cc655906695b6b58d5df3a9f","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.2.3.tgz","fileCount":43,"unpackedSize":142213,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWKalCRA9TVsSAnZWagAAdF8QAI9Yj+xsVOBoGByMrmYB\naCwCWSQfgstGX494W13l+YA7UZWIJ4cVobZxS2JyQyGuQZoBTQJVMF5d0XMd\nI1328CU7ArrNqWi/weGFGiEbVjI0wrUSO63k0ojWPM0iISRuYiz0xb8fxsIG\nqkgxK2boUmifDv3Ha0NoJ5W9ypxS7fPqJgNwGp1LzVlJ0G4STaL2BNAhyctZ\ndVEIUO18UmqMzERyVxsWvz6BvJiZMslX9BkWNStyJN2SwqqZ1TwNiA1y4F9T\naXbUbE62nXHrgy3KyFmONER+svkNwmFBk+N/BZOTrPdu4FWm4FJuTog6F+k3\nGntpdMQGR+wYtYWQ9r87fSAwhEOTWz/aX9lfKG0A/7HpzQA87HE65hYfGjHe\nCmbDuLBUg3czjsODyQqPmpAXH+g118V6snvFCW1ef06sDObGXZmlxa34SeGN\nGa8oDhx+cBD0EysGSQ6wm5x7fwS7IRPKkoZG3sfy/Und2PIr3OMpahuJD4yZ\ne/HBTXe0TVPRyyUwIW+wXqTdMgxLZCZBLHP3wWsT5xDrZnSp8rONeuyruPra\nrqCU2/DDtlPnTjD26VHWf683Q8EsFlpuHPUnXxuqegLXaoprnScTMHos6wkQ\n2iHl1Npkc3kcooroMj2mY+PLznE1lVr7ElfmG+nUzI9eXSIiQoYV6iJNV3uQ\nZjr6\r\n=iqZt\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCCMiSf3Y0/f/XATTqVyQfFUMPrJHHb5qcx73PVv768agIgZHHtmKkH0VWYnPreoymeXEsXF+W8eCoY5I7ZW/SHSm0="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.2.3_1599645349513_0.718343687423765"},"_hasShrinkwrap":false},"2.2.4":{"name":"@appsocially/schedulerly-client","version":"2.2.4","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.2.4","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-jwlaljxqQ0MY8L6TqgPwBzHFkozUErkMaxN7/LsP/4kieeqx3SL3s+e0GRT5S6GBshG6OQvv5Xlx1lKvmUcFrg==","shasum":"48226d6797cba986fd3010bfce2d102a156597f8","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.2.4.tgz","fileCount":45,"unpackedSize":254159,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWKzeCRA9TVsSAnZWagAARoYP/irXXuM+kNlwvS5C1XJb\npPXk+jnFM3VYC4M8rov61p1r23k2B6O/kADdpvyz1UbzExf3g/6LZLQLDM2y\nd4Cs/QqAr9vdE3qi9uhb6e5vhuune/ivi5PVm60iuYxM8Soxfrk775NZMubq\nh09hBknY43m5dfAbC95nxeodLdeMK66TEzarguHv1Q5wHSNwmzGNpYS/V/k3\nsg+CdzFKKzhi8Pif8EZQB4OJSi0xmuHgQnHAZDFcS53i4p8y+6NyoP4Ywu39\nUPnkp8pHsrMaXxvJFQ3+pW0Xlz3jT30EnpYTtZOKklHxl1cPeaN0F8SttfoI\nQvnYV6fcH2QwL9d/qGrvHM8WdvrjPsXl68Bk/z3b0vdKD7gYLv8cCKaMbV5z\nOQd8hMSW2i0w79vCamGSJ6RJuYe3OjwDJFqsBw4R2DaNMQMH/9qPCnUxLACv\nJC6Of1qxDsfmTv+tPRkEg/oY608O+f4CgYUvqO8j1EZj53nVUqKH0dSDit99\nCUIsjiQYLeUy0Ndg5IXCU0QfHaeaDbeovFRAAVPwCZPO5PiB9yLrLFwB3xAe\ny5USCtayZuqvOX44CuEjSmBEvkqa2FdZgVOhbW5u3OpPNp32i0TJa7JFxZtf\ncO4pAkDFIs3KVlHAlJGQZQJLfUZpVWMkREN/gZgHD4/Rzl/A7nSSCRIx80AC\neKQh\r\n=x+Cj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBvZAgjAbmhyY9v4g/L+SEAnOW18ZLiCAcR9WypmAHS9AiEAm49zLJqZSDOPkmhO3NDPpTrs7AtKEVm4nB2hJ0ha+iw="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.2.4_1599646942510_0.041985162094065"},"_hasShrinkwrap":false},"2.3.0-beta.0":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.0","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```js\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```js\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```js\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```js\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.0","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-SAu534ZKEmo1rFG2Y43yKSeBX9CKvBKALJMu7rtO5/J3xvuUGsNzYSfKz0gV359lXps6nGShM4JagLiJzx5AUQ==","shasum":"1c9ebd800b259241ecac9001b2c9e2d4c6685673","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.0.tgz","fileCount":45,"unpackedSize":254173,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWYbbCRA9TVsSAnZWagAA2JMP/i4D5zC0+rTvhQL6rmZd\nb1Mtid1QAT7MKUTheWBN3+oSSjgIeg/Vyv6d6YuVgTF3S/8QE3PVfH5adw2m\nkWP/zatr6XTFrbhVKpknEkUvP8ZSi6FoYXFBUPQiwS3BeQmFZwfwfJLMQyT9\nq6L5niGEvMbX7Lrg4Y4RGEiLkeJw5H9PwlTfqlsr9czjmo+fvGtuDkEajphB\ni8QRsNXM0kQr45QkeUMtd48gdBbxSQbkI/NJOkBAn/RzWXdF63O9x1Khjq76\nHf8L6swykbLjbin9LB6/WWQB85FODepZjkEOHKDzfHiqGVO/OH0Lf6UeLrC+\nbE34xjGptu+50VKD3mcUeJSlEE+LogwrKHl3vcCCtBOkVS/3CyeFgCHatQN0\n/qACoJqSrPhgqa2g+es5eXulIV57lACP/Kp+g4v7H/6tyYcHfv0Y38J1XYtY\nGvLl+GWzq3QS7SP50MNBKRhMeCqsfgoofb7WeDYmZbLtzxMZIaPDr1nUJjRr\nYXsS69jQK15xlYsXGkW/WHn5oH7TXmtR/DoT8X5fp2TMJ33oHU2DkLI+202h\nUNOgFbk0AMH9vxWGyMCA85bSDpl+KA/qVIVnjqilg8ga72H2A3OXGCpMgLbm\nM8LqXCGxIwE6NIZpDrVx06YbHY5TyT9R+2y7a6G3OKB8Hz6ZqVFaL1imxQrB\noO9X\r\n=8sly\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAI8fuKbfZnAaWsYtsFLPncGEuBiJCBFpeFUm6c+Fl93AiB0zrawhWvncsQfpdIWXUQwdKmVDgiXJT+Bo60noHYQPg=="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.0_1599702746734_0.45724472810339867"},"_hasShrinkwrap":false},"2.3.0-beta.1":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.1","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```js\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```js\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```js\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```js\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.1","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-iianjxdNEBnFJBVp6Oa9UT/A+CSvs8u23jOO/lzxPmjqiwweXyCH5lqhSCzJITUwh/ZJ3+u4A2ZDNV5k+fbFhw==","shasum":"14bfd747ec39bb6c54e900f2609f87a4b7182365","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.1.tgz","fileCount":46,"unpackedSize":254332,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWag6CRA9TVsSAnZWagAA2IMP/3I5lwVSOn0ojhKRqrOX\nixk3LuatETVliNTR83ZTC3IUuCDKvcz11FtYbmqaRr/wZwRv1jp0BATD6yuL\nUpjgaqi0kPygMb02BZ4GG9wd6cgrE8SAr79h7cVIo8eb8p/jcLNLioCC0CS+\n32Ol1kaQF/L3xOEzj9kObTgr3HaETDXTP70OSWWEcUV7SQo3CQp7TCv6tla9\nh8y5tHf446wJMr8VRbSapO5jfJ3MInQHLbaz3iCKWnxmJJVveo0CXDhWMTjB\nsd5ERBHMzH17r3Hv8nUC04BjtEUlSJHOvPXfM3/jyJVHE/Bsb6+VE3bqdqYZ\nUQHThzuiVSTfjH3k9pgoTEHjKGoLXPN0TgYEjCasRDf9ElxWFuZgXNYelOUo\ncYsy5VpqIT7WnmIlmB8frtQpnghMQlpe08psuUfgjSMx7jD+ubuTC68meb6y\nZmqS3fEAaByrw3Tqf3goMWAOr2p3O91JaqtbpprM9T5DUp4hprkCYKcIXY0F\nNEMPGdRZOLIQLmDSlFxlpGZUC6qh1XvzzB6M2O8zYpzKmrD6TA51ty370ki0\nM7Ki0kXN30F3rT04/PEHRisQiB343IksRchB2ycwOpKfIE/yuznOclMvLTlx\nYYgTdQq1/1NZybbKaF42k//qrDKY8uoEfwbq90TKE4gKsqKto3cWUN0sgHZe\nXtgI\r\n=+irB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCCGLB7qr1AhcMgLOSs7tc9Z4gdUj/pJczHWpVAnBjs3AIhALOQ8aA2ezwmwL5ZVS1mSh2mAXFQke2ctSifwdGpCi+2"}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.1_1599711290468_0.8431964732275514"},"_hasShrinkwrap":false},"2.3.0-beta.2":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.2","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```js\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```js\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```js\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```js\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.2","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-EQlmFtE+uHrRWXYgMEg+iHnwFSVu6WLZjEuuwdfaUjeNs5qRqDiTjO+bGW/Q5Kdf5cCKzMqorpFSdZ48/ejGcA==","shasum":"a06008bf9c328c1d2447fd60e239df3e71393d0a","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.2.tgz","fileCount":46,"unpackedSize":253881,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWarECRA9TVsSAnZWagAA2NMP/ReLOVdjXGny840Zz2vD\nGZX0A2JGJSZzK1KRTfU3Ggl1gJlaPeY3Z8/uHVkRYztiudqdKocHVf5yaRZR\nIhlmLpD+111PMoyPozTai8YtVVADEZq71uedp5qNqhwtJ8Ud1/bsAs4mVRqQ\nCGJU0Xq6REtlZ7JvedSWRiMe+IgFsOzQ1NxHq6+ZHPwJ+ddVQKt9FSTsmeiu\ndJtDGn9fA5ONuJ4e08AykFrJ5O1UYEjq9gusG87Uiv3uC7emo9pjfmQDvCrE\nhIGQg0gwHh2YMvD0Gylzbef/wH9hLhmCe6VcEyWbKdyPXoaqfjIuDuo9sAx8\nuZQN5QyztgI/xr+6Eki2dr+RzcFsj4kJabitfiu6esbYQDyaH+vknHwp99NA\niHjrnfQGJkfN5WJFO3IRoatUDHI8iOo9rLxuTtNOiV8q/E9VhP0zPXlkxpJ/\nz2Zh4t72RyHY0HubDODygRL3aNzWENqmZ2IWXJAxhnmkgCQjC7qKV3aPxvK+\nBERgPqF+2IgepAYPCvCMyKd/udf/61tgnDqjofHbhi1/sC55U5bwBnGm9r72\n6N0mJOVloI6A5yYLyPq3aB6vWtT37Q4Gfd1XRvoownoyQ4VUVouBz/SRb32o\nD5wrAqeKqIdCCiIXHRRRiJU/x0+/DRV8sDe0qZ5xY4AL68oiPxwTJGHNsOrc\nctXa\r\n=DzmP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDtE15Pi3lx58BjTTihJks1lBuQoPOrsNawhIOg1XOUrAiAeepr9fOil7k/oa/QqahEe+PbASZLS3YZQV0WgR/a8dQ=="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.2_1599711940400_0.06500097039452402"},"_hasShrinkwrap":false},"2.3.0-beta.3":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.3","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```js\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```js\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```js\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```js\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.3","_nodeVersion":"10.16.2","_npmVersion":"6.14.2","dist":{"integrity":"sha512-Jx2XL6mzyHd3sQ0GF2wLYiFDwHJE2nR7WdgFDHURxyr8v08AtJ1QdTh6L9ttNXF3Zr8poi3sfMRiqb86pi3MWQ==","shasum":"5c6b52849a5a941573356d401b860eaa02f6cf0c","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.3.tgz","fileCount":48,"unpackedSize":311719,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfWdE1CRA9TVsSAnZWagAA7rwP/3Z3DW7S3B1V6anf3wQY\n2XBOFwiu2bCfxPoB7rLq/tbIns/5oEksW7L/l2IN1zLs7FICC2F+c54LukYb\nnY/oIwyQXlKpHmWwm7Wf937TmvnOM7aPGitJojlDqCn0zIgU1eSnyT1wqIvj\nxx1mqGO60PYplx29IV5YSwgCD8Aaj75KEMREy+BlHuVaZWQ49BS7R6MAp9md\nTb4bZkCX9+yqUR8oerL/0mdEbviRUNp0AX2OINXARfGY1/FTKusBDYyVqWPR\nCfeN+ABQZU+qw3DczLV3zqZN7HqnZkRIUV/ih1ZqRZuh/YQ/m5IVq9sX1R04\n/LyeXn4rqK4/LggAQ4PayhjCeZ3juEGems8r18ar24SuaduhKwiRaqXXLvaT\nOg/Ra6zaqTfMHdqPPoDYbTqCiPM5/v6iRgzP54ClVaVYbtZ9U6UxaiEixmZo\nQgw0bC4pj61WigTlnqsA29U91ykiHwfHWvSFcPDi5xOanlnnbRQK33IzzXX/\nlZbd43MmJZBqP/qQEO4T4bzqB0Zd+7qdE2W6GqPgvOYkjHWgVMjmHDdUYZTL\nH6BHdAhuOp+GLKSQXPGjYEoLQpq3O9vmkJj/o0hugCz2OcocHVrB/JYvKaZq\nE143KQUcXjkSsfLsDyojLkFZ0wJXf+vIb/7Q2LNQV88nx8HzSn3+YDPii4n0\n3l1M\r\n=asRC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBZwSZuOndsegWdyqHLMErfJsGUIxZhSKo7b/VgMG+bPAiEA6rn60JwCLe6OW77f3gTG+MIWyRkuG+Pv9rDecDBXX5w="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.3_1599721780806_0.39451968999112785"},"_hasShrinkwrap":false},"2.3.0-beta.4":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.4","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.4","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-C0iyPiK4PxRa+00i1FenNjPsbh8tf0OVsCogxCOPiF0vfQyphU6YGTuv3kqvNfvmJQWs79Pyr/USG1krunIkSA==","shasum":"f32d741d9ab88b715a03953e62d099a1239ea979","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.4.tgz","fileCount":46,"unpackedSize":245072,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYZA6CRA9TVsSAnZWagAAzpcP/2H5K8A0PD6WquYUPgnr\nON+6zM5MvdkI+FkdtPc4LVJAigMv8c1flAHKMlJWb7jVhD0vEv6EPDiwjqa6\nHWSZ2GsWp9TrOXVNv2vD4eauML9jhhMUYqARg2+Qx9oO7GjmUsPxCRzy+GPV\n/E6WT6/P0O8a/l1qy3MGIwGaSfvmR3Y+SKB7zhBn+SRRPPZ3HO+FDOWUGmww\nQfPEDNm/T3e7KQZQUnZlEPzB2617+s24Zh2+1hDaKLLNSrh2rlpmDOlpR+k9\nX8nU52KvmQHp5MaydyM/oywfBFuaYuc0sBNjrPQE6CBJxyCdd4ZZtoSLv2Cw\nTZpV9aBedpn7PXXTtav8dQNrISariWqIjKR9lw48PByxVVTMOQOuhuUruHjg\npeI3OTOfURhqbI6uwIQdBvBtJHu1d9Bf533F3G+OluSs3KZNpBOmYCVYDpKB\nnDyaOi4rRMZdtb2/A8BMkaoxRb9Hzw1Iqsk/UdZJUFJwGKbRqFOmC7Ccfi0N\nNUiIFiPX+e88yZn02tIBpLrFxOK0bq3pLfAD5YwHgjjYdftFVgEZgmDj8lQG\nMjTRyB8oPJm5OPbiczFVPea/3veUtcyMtzBFdVjNJl/Kpd33yilXwFQ8fVbq\neHKh0clK3nJL8mSWPyK3QCOFVncIS9iljkMpZm0LErp4ukTmtlmJM6aRqmUE\nzaX2\r\n=GcSe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8hDf6BxZdYy/Rmp1NKJwVhaliDYc8tF2dMJRNu/ObKQIhAP+24BsI9iAqPltS3tL+YOlzbC2ZFTaQhJmXxOYe+mqH"}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.4_1600229434180_0.02405388053288582"},"_hasShrinkwrap":false},"2.3.0-beta.5":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.5","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.5","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-O1KuKM64hi7utCCNg6whX0c/XaUuBzXQKwA8HKmikoUrCp7LPDzaQnKAEjrJQ6HKR+OfU7upCRFXAfAUiAfrLg==","shasum":"dc7bdb6c219082187e3a19cdfe8fab691f129e82","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.5.tgz","fileCount":46,"unpackedSize":245243,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfYZa0CRA9TVsSAnZWagAATyMP/277k58dRM8HBtiiO/r/\nZkwEz8z1COcDLMHpVnEpBeLQvp8c+njf3mS+Jy6h99xHnEFnl+3wix6TReND\nXT4TRGGH2BqPedDEgm8pvG5UzDuRMluxjAp2n+jE2kPdXzMNFUuNWxAB7ESh\n9rqvUtgxBp9EQkwvvhJN+aafBBxahr0gPPu4NipnCkAXR7eOWEo6x6wyg2xl\ndGLbSWxAJYQeRutFwSewhsuFCyBcPiFDufj4Yt5P0O2wypinlIXufVFRx7k9\nYArgXOdrIdA42urBjvWDpbpHwcDvO/f9bHuTw4R85eCB8uxEDR08CqtE0cVK\nT7KvTJBABwgiFfsKGUb6XusBXRJmN7tcutI1jYt1Rm5lD1gaAqf8rH0mhiFl\ngMpGfywWrC1FolBQuAUhdvrm5q2IXFSSFPvq6xXr84ACBqdq7WBsKY0ZlEXo\n/o+OFRWNkOM5lEmMIbdUVDuv0OqaRQ3okWTZUBGsY1fHaJqJYhUkfl2MNZuc\nko89niin38gCJxkEOH50TV6cYxeJtIZjUPNQgxsuE0JmPjVLszddT5D7Z3Ap\nkHvxYYMAcweO3eMrINZZKLUazm8vRRt5ud5j7XW6Un9D6QtW4S31+UEswIOD\neg2qnbZ1rux3vs0JAAeDgpUkN4+bkJgAXOiizod/m3oA8NSUnPV5cmlhuk9k\n5Qvv\r\n=ma1C\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQChhZG1xvmtqwdYwTZZfvbYnlLyIA26c286/BiHRn6yQwIgH5LercyKu8ltRa+coDRF3AUzj+oJ2Fm6Q3C/14vzZHM="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.5_1600231091670_0.7427852658395089"},"_hasShrinkwrap":false},"2.3.0-beta.8":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.8","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.8","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-T8hmJ+xw+EAWvy8YYKTLg3Yas6DDxIlRLqe1dNWX/20ZjJbZFwwLilXQJY7g08qHHaw3LTShBJWsECFwTuoToA==","shasum":"dca125d4d0d78e72031ab58da2f8158df21d4022","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.8.tgz","fileCount":47,"unpackedSize":252291,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfawCeCRA9TVsSAnZWagAAywEP/375F6YXDN84f4BsNzfY\nRq98R9r+Q1j2vpSvT57wcTN2aT5UeAhIyYSU1WhzhV6liUKnsgu3Y7Yp9OTe\n2CdctQJOnS2oxRN/cv1uVKfYelie0DD/nbISSHBLaq6r6GaWxW9e2nGCe9eM\n7DItyoObQc4PeN35NHv5SSLAXQtBBoBRK2Tdwy4hkM9DxAll7YpTqRjrEEkA\nSjtkeuZ/PchEyqPyeip9jUNmxOBvqiUSYjBExXzTWeACAgZGIXxLoY7g62IC\n3ujCi2CQcDLAatpntQ5LJTRkuqwPX/8mTkmmmu64fl4qVhirf1v8u/jwbP3R\nAD/yrKjUxFrG95lJ2oFoYViUxA/a1RQy9XFZsOTA9pSsQ+erACJ5LePi3Ql2\nUokvGm1bkt/NjDztdGrv83Vkl3t2npcZygEp+KUWvOI6AJ45wd50S5OsDbzf\nSZvOEMS34Q8HdHHnOAFYH4R1yAkLzhw47PbGUMtm2ipxTkEZMMfD1mnOnzaX\niOFBAsqY4PcnUq4e0ZDGGKc/YctkcDHA9LOJzy0Z642J+/yUuZgy9Uze/0+J\nF/JZbDm4NWMXNwJiIxNDciaAoR/Vz2YU2LCbxtrwgltm6QqLOFUX5TO2o8Q1\nr44h0fOcubXIRx39ML7oOFX7hV3Hilpv5VYcqkI8HRwIsRRbzH6Iw4ryGYDj\nu9BM\r\n=Mw54\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD4LWzFAap//vanK9fa/M+9kqSUfD6i+c2IHj1e6mN+5QIhAKK6wyxdtDc/90Dq0LUMzvZVovmyC6tq9CQMBnbD+1J3"}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.8_1600848029904_0.30998781016180854"},"_hasShrinkwrap":false},"2.3.0-beta.9":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.9","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.9","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-jZyaNK+xcHmbdoSxtaC48M77iU3oLlYNMz8tqS38Q5gs7F/Ep4J104JM58rG/6MVTQ4+Xg0YKmE2D+9NysU3hA==","shasum":"0930f65ad9a502f93cd3958ccf797884ee9687fa","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.9.tgz","fileCount":47,"unpackedSize":252374,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa/afCRA9TVsSAnZWagAAqt4P/iKNHEG7nQQgHs5q+t7y\nxqFywWjd73TjnSey1trZ73eAF/Kd/jPvgiv26NYEwES/B4qnGbuIuFqXG/PC\n4cU5rbFEHUgKerqG5df8SojRtwzmSN3PWVLcaned0QqfyaROq+zGd8a6OadW\n2jndNnr/I76lT4uTCAvPr4uZbuVYxxCApdApruXs5sHOceTGG0fI4NvQG/+s\nw1/mJRPT2jL/nA5Wzx29pvGJZBYcLsh7vxDMpPfnNpty02QbrTeRhxcL2ERA\ny2YxcZNSQsjI7jSnnMbKzImXOhl6tljhILZNCZDI1EhHqR3fP4LueI5Mmy8o\nEFElz1Z9mzL64ayTwenp1JUlJ/vhnRlejkU9M8d1pYWBmksvT1RJJJAGype4\nO8iCw8EiO4k1nUy3uYQvVc5Gne7EP9N24HFycF+DmqNBcAf0vDoWTz+3x5tL\na7sXUqR00mqmJ1hIyflteMexh5k/WXf1AcCW/yr7z5vLuqRRjOW5l13tck0k\nvUySMrTTmO9wXO5Cebcscb28mtihJ3ksqubKrdB6At56Z0ydkEUJ51FTWY7f\nQe0J1HQGPJ+6sGctJGzdgHg0fHpQ3dhnNLV4V+jdMOHApP5SIzJiGIoG7ymn\nn5/TxFBMCjUhPKlNWgbg/tm+rWkl+SmR5UirxFmeCOT7DF7xXFmxf0JiWKp2\nkyCm\r\n=Rf8k\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCEhVwNE4hGhyXvWaIKs4kiFDktK5jNxVrxcEKFUSOlEAIgYpaLGFnRf5XkPEuFXJ3jqWFBFbMoqBFNh9PpPbkVIjc="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.9_1600911006524_0.7170731718019092"},"_hasShrinkwrap":false},"2.3.0-beta.10":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.10","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.10","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-39MIAeHxkxi6EQFvsG6e1PaACZ7ZPH55HYVjdft28H/+/m0Gv9WH01BzM8WZ2NAjgEK7VKIUhQ5gvQg+/ApR1w==","shasum":"ea2f18cf49d5522736bbb3c89773c88dd2501511","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.10.tgz","fileCount":47,"unpackedSize":252583,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfa/sECRA9TVsSAnZWagAA7iQP/RyOSyE7WVqL1kihMkQj\nzFsT8NtavRPGrn1qpGBK6h3vZ2OkPCaFiKjHhioaFeTI5VxvgyxVkJDkGpWO\nJQfozODWSQ/y+tUu4ayNuTM8RL5n7NQMf/m+/fUlrI56mghWL4qW+1AOeayw\n92FRU8iHRT3KaEKskjx7/vvB43gvrtcBdHnkQUDaGR/Z33twlX0/MIb2e2ua\nNlZs/I4ex0wLyotvqE8D++k8JWcjxQCzLJpo4/97x5tQDNVSBPpBqkXLQl06\nw5inEQ5zAUoIl/RlwkTIOp9kOeM4yNzP97M1EFz2JGO9A5DgKjOViPxZZJiW\nJxjZ4oaBgmalzEfhvQ+mvyt4SUUwcJ5DMA9AWbQJ+ruQzzzt5Jqf1dD5hsba\ngRZwTZvBHK9tE+MUqQxw+RX0CZPavClw0YzhePU5giyuNXAinB8Kf0IsEXQ4\n1DXFv4e4nL2rkTwJU8dqiwG8hCUdK35iI76Bf5qGCKpW23zma8R15XNwZ62L\nbO4NGiDa5W4NfGZmgIB/cQf7vuLH0yVSVLDVGLCmo29c4GFG3PqgejseQH1X\n212ixmJjrCNbZn8EY2w2KaP/bhxI+E0wwHRh3vUECVxrTdakxR1GLtX5Wpe0\nBRJ5pPpw/G2opv7RHem3WvduV3ZPfki0nVjQ8ZxOVykC/guNZWCmkuR43Kj8\n2+D2\r\n=+HRX\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHQpVQN7menOvXg2k5kdrUA3Ex6IMcs8Yf69FjAsUYCDAiAjrzTCyxfeDjpi5OtB0Lw2d7ae88SM3GMJfV2v0bRuyQ=="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.10_1600912131941_0.2525793589903076"},"_hasShrinkwrap":false},"2.3.0-beta.11":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.11","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.11","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-L6uyOOapHBvueT029XL6YlYBBJr5NRoe7nFAFlaphlLUf7KGMLMID0Q4PbcaKkiPQDfbtsXZq6OUOMDMNZnsKA==","shasum":"44df5b6e718dcbb5f5053dea7a0e19a89a059aa7","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.11.tgz","fileCount":47,"unpackedSize":252792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbWtYCRA9TVsSAnZWagAA6jsP/RZiIjp02ppX8u7PfVmG\nkTiVW7pxGVo6UYBFNDOkIodCeL2kCbAKVlewcjcZ9D49VRiXiqKrR+uBZ4oS\nUpQfK9XWIaGyORu+VEeTK5xTfhjF+AIgeaXSheBOX82feMNPfzqABqclbU6z\nbDCOJNNx6srakmPTFyvnIUB0AItCFvDBlVfWz1gPC3dXu02RM/eH6aUGfPRl\nhpMlpEgYAzLsIHaLbm2tFPc1kh+hvp4+x+XvCsjVo5TPEshA9iIm8Luh0Aed\n6E1lJJo09/LtpCSJMt6oHK/JN3u52xJqWBousbq+P6cPFkBw654evlwYzwXC\n2PmQQjWkbJ3E7xIdrifN7FD9+eu7diQLBHejdzfrP8s/uvVb3ibDrnLbT+Yb\nKqe4efRyRYu08Z3LZRqcHseKSEDrOEHTZmh/tzKmlrQHjL5NhZ7kFdbJYqmp\nktcOGrL8ebTqj8ElcLrts2Ju8NmRrjcGdirU4dYTNBW5++BTyYbGBObG5LGo\nEoMaXdTR4eUDuW4mzPcJ+/Ys9NaVkbC+lSBFLhM8O6wesEGGs1QccFHCTb2E\nRntZ7kDxVH2/Ha8e+0pSFn4UdPM/Y3BrfO1+jF+4sTOkbq08StwY6ADo+QsH\nP8D0i7GYmJGI9lA7QtWibU4E4XwGc8acif+pPM+yDlnQvql+H95rtrhRQQ4p\nnHxo\r\n=r2N+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrIQTIhHzkg/2qO8rcv5igARSzMw5HRXXG4gehrDG+lAIgPZYVqNGnwBqsjFode6qOY0HjhwS1R9pb48O5X/Jc1lw="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.11_1601006423804_0.6345620225953741"},"_hasShrinkwrap":false},"2.3.0-beta.13":{"name":"@appsocially/schedulerly-client","version":"2.3.0-beta.13","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0-beta.13","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-M2JYafqzbStBbW4XY74XZYe5H+LXnjTj3OZlqYiVVycqt3+nq/CCiFDC+StE+bHEiHrB6F+eVJ/pL/LQeye3lg==","shasum":"3d0c9aa27f200a12f8e9544d94d5edecb4c23137","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0-beta.13.tgz","fileCount":47,"unpackedSize":252931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffXu5CRA9TVsSAnZWagAAm6YQAIQ9FpkWKHvje2GX/rMP\nr+N7obBLAdz3iwwxvqaHcxQNz8c+H1B4lULSUCm7OKlwRCoh1jmg/hT/v3qV\nNV6OuYm7xTMVNnpke0nobb/XtzFd1/1sck6Z7KXML+OZNefSZCdLWv4RAvJN\nKWnAGyMPfhoOuzXiqaZ78YyFlopti2GiH9PRgCl16UYL2sGfPsHfprCtYT1W\nOAfT3/rYsbV8sAZZpn3zjpkWCBnedtrpP9aKQqXrkJNDZ+CXptcTiPcXXp8V\nTFSrY1hyT0FFRZvlWAzxqZcBeRTaqWNIkXPv833esgUHNJnrI+OXkpGQRrD7\nUPgubPYH67b8mdMqxHrQ4BQKvSOhsSi9ZZXAhCb7rjf1nIsIMlslW28KMUv5\nw7JQnHPHB/+H/Eyr08sJ312QhCyLO0hC80S8FtQrW0nKMktPeF2PT2VZ4kaK\nQR1SWm2+b5J7tp1u6MheAtxDX1pkK9CYk6EYjUQNFW7QoYv5F/IZ358ZeK6b\nuz+7NeUw9yZXqdCNW9ucRmTjEy42ZiXZDpz9T+HEK+b6SQV+hZMRlVMXdDnm\nxzXNMW4MCGg1Tqu+h4rV8MmXrlbIOsNlw29IJERrD9oTwQP1tjWIulTvpmSc\nsxLotSbsQrULYAdCMbH/Ml1ac6gtWKMbYibX48SgVYA4IPyyKx3uNd48xMad\nb5RY\r\n=mczM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEUwAP94gACODtQet4Kmx39vuc1xucmlq7tfBdxXg2LQIgBrtJhQrT/Nu2Hi1KLie3CleKqZ9kHap7t91oGFs71i4="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0-beta.13_1602059193131_0.14173476133113927"},"_hasShrinkwrap":false},"2.3.1-beta.0":{"name":"@appsocially/schedulerly-client","version":"2.3.1-beta.0","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.1-beta.0","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-DIZRvPjWoz5RxLxeYiTk5ptyjkXhJWCgbyZxKjrpSmF5zPbuNy+fqSm8uzDfdw9yvh4gTy5skgHfQOinvg1/sw==","shasum":"67fd0c153015f8751fe09eef611ee691fc9de38c","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.1-beta.0.tgz","fileCount":51,"unpackedSize":265235,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjkoKCRA9TVsSAnZWagAAJSgP/1V9qoh+AbQDsSdCHWbx\nhu+HkSa7c0+kgseUllr8PDiEallFGzsElYXzgcbVGUS+w+raljNnbKYUSPoS\ndZxP6wftoaQFcQHCqcOv16s/RcSeG8VL0gtVbgTJ2dsgCzLZhqXefPcGGkXj\nNqRRDzOAu3peZEoy3gq6xzQy2Dg/7aOYDxNbpgsxnQaU2F4vAJTqyTjnPXYs\n3V7ISHJ0H+qKuz5wCoQ45ackOzMJ0Ad4EnHHg/E/PDAMo9nyz7DE/1OwJjYn\n6IpTIgEHRfTOlvswz5rux91UsOZ7XfezjL95TBD03K6vIRjHoIXZgU8U7fYU\nuCRyFomjbGEqQVq5luD+e2+/yk1l7EPG8BjTqPCuNlHhHlpQl2kzUgD0nYG4\nxaudpztaYsP+uTt2/okt3cPlzqYJxzCJX5CGllX2zdBBtgxDxeEd5Hnlv9F3\n3jCIvP9uvC89tfMbNgW3IESXPmh2qpoEMdeNykwoEbVa3xB/hzjMMFVfJ3s+\n6vs4ME3VXeRs9kkVLKwhBn83HlfA3BwKP2y44TgKajtXkWhbR2Bv7iaCuluj\nVuuKlp80+TFVbB4qrTYI+YpDbdt9+f2B4442oj42fdNR7gl3VnN3sBHDMW4Z\nrD6hwl2rgge9L1zxUIVki+EQ8ivkxR46LVaBd3anVJTN8hfrr90edwxkWf4A\nz6im\r\n=Pubx\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7MGhef0Ow9P4wg/ctAsNO1pivtAcMPkTC5lRoTdu4ywIgQJw241Oe7r8gznMJz7U3aIksxfiwVUvx2nQb9mUVug4="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.1-beta.0_1603160585837_0.48993328745725195"},"_hasShrinkwrap":false},"2.3.0":{"name":"@appsocially/schedulerly-client","version":"2.3.0","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.0","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-TLSwLBenC7s5tAabdGgdWCESGpG+apfsSRT+Jdj06xQpAeI+7Ei5o0ztIoalIoYbpyR6xWLYI1KnPALN7AmEqw==","shasum":"5fe6e211235c9a5a84a54e7dafa8e0ae4eca9484","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.0.tgz","fileCount":50,"unpackedSize":261763,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfjkr+CRA9TVsSAnZWagAAq+oP/RDrJ7u3QinUMcdW+/ab\nIIfBLNydbdEuqj0KallDLTapyuZ3kV7uAW4uT3xxXXlaa7Lt6rm/afG8NoMm\nn3z5ofdAdF6rTwM/ynKczdiQcDXePvqsfd+Jmr1bne1CIbvHLJ9gn/rhNI9J\nk608AP6/H29YWv/zVvw5r+mTOCF1Fw+H5k3vuhH840C45dtXCSYChAS+R1ED\nqeC/4rwfqmYapqMVjRHWyqubESzwy7V9zxR9CCvEWtidmNI8pbejqPzTmgLZ\nYnv1V3cvGd5aiU3HybtQEonughVIaRul3ndEaQeICMN4geNL5frndxtPdPbu\nzl+N6W3B4UO1aLrBXHTzNoKFdPqVX53nfmM3o99Q5zYgywsoFwjeM9r02kc1\nIHv/6Xuy2FYN1JVMd/E0+V1UaGMeTq7gtu/B8LaFJi0DTt2/cBHz8Hf/s3S1\nOmdVFUSW9jDty0BUOpvYCf/6CtmGcBBreQ/mKbCU0etsbYDIQkK2U1uHfizr\nhGXh7NLalGNlSR8L3goOguWNL562STuCHSqRC/Tk9K1IUaWT2hFAQk1Q+xPV\nCRpwygrvloihMd9nvCjavTcqkLEW6hL+BPe9TMIAwQ1J3556i+nhKvbUgcsS\nV3vK+z8PiTU8CtkfF8QBZrWbS3Vqoy0trAcLxVCvpbV1sdEXP15/5CWcyi49\nsU0f\r\n=Zx74\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHaFQr6+n1jI6LeGZH3dU/49zAF6qZSXL6LCjwTEPe6cAiEA6d+OzGkbXExstJONt3DeqnU5cW38O+hccvAVa7ezuZw="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.0_1603160830066_0.6754993427208387"},"_hasShrinkwrap":false},"2.3.1-beta.1":{"name":"@appsocially/schedulerly-client","version":"2.3.1-beta.1","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```js\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```js\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```js\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```js\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.1-beta.1","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-bMs+UJa8oG2vivkRrfUUG+lqRe/IlY8tCi9LH6hOnjHL/hDZE+B8bEzXYQG3TEsg2iOuKCOVPyVoBayyvow28Q==","shasum":"4e9ad53cd04d926069943bc9a1439862981de105","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.1-beta.1.tgz","fileCount":51,"unpackedSize":265450,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj+TvCRA9TVsSAnZWagAAScsP/1ZCPc6M13QYQZqcBcLk\nLGHgE16T1xRkEn9U/dRxIxLMgrwIFlXTbp/ilrNlRttDF26hpvXO+0uaphzZ\n/XZYsHuFbX2wkKSdPvgs6/UqlL9tiw7Tr0B4mYO9p3nzJAQCsQ9XZ60gI5lO\nwskGiHUpEXZoM18aw4CYxEzPIVYsRWlbjPJHkoY9qejvp8k6BviIjz4bPHDE\nh6F1NvLUptGtsUI+KjPVeWRXAs2Oy8PDJHU2jqTgiIiTVoQb6Ot/1LNSK3As\n+inh7f5f38yPdkaCzwrUdl45fiee0+kN5yAm752jhJXZQsUwBTCVYuqXlXOO\ngujc+CFGWnzYxe3NETVB9oIjfVUDXTW7qyJis5FnlRh3+oo/pPxwMRR/lSaF\n+AjpNr7f7GpLklL75OJnSLjbEeOtTa2PB4jJtgXY9r8plFiMU8WVScPI8CWj\nqcsB/2hn3b7ACQcGtXmS47IOkPEvMuRKyK9ns8T+eqK/aeyfe+tZOUcM5dJG\nOlBpRWtcFDmPiZ21yq2ai/pT3eS8dyqupkypLxYMJTeI7H4IrVq37ZdRZ9tD\nK99Ks2t1C/pEy5HrK6Cct1K9N+QmrnVd5ESCbvHj+8dfJaJfwub78Lpma7pH\nUU5AOYZ2ZeOOltxE+qKNoNVY2PHrhB/kjL4977DPkGQbpbynVUw3rCHOkZ4v\nMgc8\r\n=Luc+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDE51K1efFwROp5ajurTFyl2aYYp4FAu/ntHzV6qwE+fAiB+pARqh2WH4dGbFSxWLbJbsYP8x3/RbivN+WsDhqAYcw=="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.1-beta.1_1603265774483_0.10842347137029984"},"_hasShrinkwrap":false},"2.3.1-beta.2":{"name":"@appsocially/schedulerly-client","version":"2.3.1-beta.2","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```js\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```js\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```js\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```js\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.1-beta.2","_nodeVersion":"10.22.0","_npmVersion":"6.14.6","dist":{"integrity":"sha512-BAyi4o1RSZm6yHTPOOxhbAYFOiS4m6s6+wlI3I1cE69elj00/to2rIDO6lX0UXtwvEPliv5lfL6UPkwuq/0D8A==","shasum":"2dfb8bf78c8569ac2af87852762789384e1ef8d1","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.1-beta.2.tgz","fileCount":51,"unpackedSize":265669,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfj+WRCRA9TVsSAnZWagAAB9gP+wblb44CsV8AE7Dfq7t7\nDOb6HBuL8Lec2jgtBjo8s6J2uspcchMXH/gNxaGcTf6M3PoUtXxzzdl1ULb0\n6GGgrKLnne2o2L94MUOMkWAlGI15BhYwacihPDc3Lav7+M8zOc6qov/J/PK7\nQLzQWy8MyOwBkrY234AtYgTur9PVfIL7jn/PZqJBVoOI3m04z0vvPGq097HU\nPyN7dcJuTTn0DJP3xbM0AhqRIomNvesBusmCWS68X11Dpz11XXxKFTikaZ0c\nwZkH/KU2ubIugDVq7/YK6ZDQXp6+Jzv+lzgJefSqErITblZ62zzcxKbr+30e\nAFkKZvTM/v75EEZcownElZ6L5dEuRw+3jM4Q2wk5X4lxZxjny50rFS5RqUZB\nGqUFtCjlKyUjym5efM12wAwHrhFZQtm4oTdD9IkUYz3l7VA0AMZpzHGp/U1z\nS+mH8RgsmgdjSbM7X/hHIq1/my8CtfmXw8crPLsCeoIbcbaMOVJ5Rz/mkfB6\no7JSK1Et1E98sIfA+kyzsK5AhkiVelBjplOoeQGpG6MTdNYycft5NJT6xPo+\nnR5pk/IMHGuJ8hzoAdPZwe2igN8vYLn26NDs3cMuPb3JIcNsBdKG95UZ9J7E\np4ipt4bwJPUcBkjGzrlde4L1YYHvB3FrqIABHqWPTetChY6864cgSDVRzDqb\nO63h\r\n=0qic\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCvS5u2s+ZGYj/j/OzkiMONJePdv+lY28KC+wYQ1VGC0AIgM4udUq/3sK83VIwHRrq2O7O25/GQfXAt1ZrXBLlm+Mk="}]},"maintainers":[{"name":"trungtrontria","email":"nquangtrung@gmail.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"wallslide","email":"jeremy@nagoos.com"}],"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.1-beta.2_1603265936586_0.9084383161976404"},"_hasShrinkwrap":false},"2.3.1-beta.3":{"name":"@appsocially/schedulerly-client","version":"2.3.1-beta.3","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```js\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```js\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```js\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```js\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.1-beta.3","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-kdFOw2FInqyAMYKAlUjHnKPNfk309E59YdekSJTFujuOT3+5aCHiEjBRUrnNA5kR7NOvvU4rNkP2Exdh3hF8Xw==","shasum":"01e63a16abd370f83e967e99f0bb10c0c72d77ac","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.1-beta.3.tgz","fileCount":51,"unpackedSize":265701,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf5VYMCRA9TVsSAnZWagAAkMsP/RHYi50C9L3EZ4qPjolb\nrmO2fxxlrayW/hMOOVghHvpqm5x0QcVCA5+dzv+ufA7V1h+hRJ6B5oQV9aea\nz6GVu9bzDAtgdneEaMiy8jfzpMTHnlO1GpUUza3jQUAF8LmrbsrlTOG2eqwu\nk65zOkzfuLEh/lVqFUvfbQKcJrhi8kIV5RUgUqDykHroBEe7e5qrpzJhz5Qk\nFhf1+0P7tB7xTzoudBa5WingbModvre1DTh+js/k6CyT4tRsxw1foEMueHEE\njzmq1cAVavCc/6ruvMRhv7nBWFQf4jn8AWNrwadJlws2EvKBLntJeSAtBEGo\n8v13FwGPbbRiT/EvQkSvjnCI8kOos0E9Sss2LdaAXdybQEq1BPypyRp62cZZ\nrJ/QzD7Nt4fW0v4W+M5Y9I2qpWwEJGr0ZZJgyMIiKezaPEh7y0D16hjAn7lf\n7uvUplqRiIPlwA9miyIPcPfZ3CzQgSHZOD/e+BGxdFz7KH/OfM2aa0GyOxyc\ns0W+s32u3csF5P2yUFNyhCk7qbpPBQIze7jF2KY0RkjK6mX/hLeYCZNSJJA3\nreSIr+yid3NeO2NbBty3LXUgtVafeqfDxc3pUhkaOWnoHBL73ep9K/woshp1\ng7WtwW3p50BAFVA3b0R2STwPeQKWKAE//OgxAneg/FW4NlCZI+RrOQXwDHEg\nL0WJ\r\n=KIyC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAOwhMqPfCYZpkTUPO65oepHmVnKFF1imgFw4kbBkSZ5AiAdLRGZj6l2fS8+E0cG6HBWUKT915NJgiFqbLdZUKzpIQ=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.1-beta.3_1608865292248_0.4288767613962823"},"_hasShrinkwrap":false},"2.3.1-beta.4":{"name":"@appsocially/schedulerly-client","version":"2.3.1-beta.4","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```js\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```js\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```js\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```js\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```js\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.3.1-beta.4","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tnAqRBZ18a0eZc1rLNQOGV0JcyFoW2pIAjvkLEkRzmuy9uF70PWnGS7ThhDwHjQWZGnW6YcmRpZt+Gm+MBpmhA==","shasum":"0570d42b6d7ee0fa48aba88b5362ca9540faf63b","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.3.1-beta.4.tgz","fileCount":51,"unpackedSize":265764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf5Yt0CRA9TVsSAnZWagAA77sP/A5r3fXN71m/wj4Vga81\nWvUUogXZLkZIUTHrt97dLWlPjkkCWI1UCJhZuZ80Mniraj2HGn9zZzsjj0Op\nwKXVfUNtNDmmtC9PUgTIZ9Apvo7u/ngXHOI9s2wTMHpi0vvxYmSMmwuofAl3\nprC5zV+PG+AfCx4yrTgQkTCKTpraVZWh9weYcJ/NhMVZtFk4KZ6KAA8+3hAp\nICHWbd39ZVcoUIEslCvoWsVMdUsCaOI3/O0cc2NiRVs1NNRxOi2h/e+N6ZVp\noNg3VBxPBVhUO7NvdnklIvbzfxSNo8Lsk49pM72A3ihQ0eUum9Amk6jEOGID\npLJlXTMtdAXkZ8Ar//Btk8XVNWgGIuoujAnp7zIgGOX8wqCf24mIVPMgVFpJ\nAHuQPirIdeMwAazLo0GiSVxbsPn8IRhEhM8lLrq0H5Nua1wawNjL+CBi2O3v\nAv/sC5QpgLazDitgEnwzt9Vr4lyHUaVFpuMV9QLNuPTzbul/AN7qoB4tLBEq\ndwJzipVCdRksGfzDJ2v3xfaiRflcCdqsL4g7mUv9Fe+bpeMzZLbxHKg3lvGE\nk5dL/E9quJx508hVNlNsjEL+k16suf6kCHjU2y86QOtM277UjWjOrdNU6+uO\ni9/rH9PsNU6nHBme1Z8QvCh9+ldMesScPPHcRKoRAzZdVc3fBPsxLUEvG/la\nAS5u\r\n=5xUD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAy66DmsaR5ZdaJSdEUdM7oBvbcV3PoPXa+uNn7l8stVAiEA3iv2Cm2C4kiFTPqoHhODCX63eIrZ9+1Wi6hgV72xnvU="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.3.1-beta.4_1608878964483_0.6202224257417877"},"_hasShrinkwrap":false},"2.4.0-beta.0":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.0","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.0","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Gxax3ooxDdlk4rdYpxjG/yAD4In3ncixSwGOcklLltnxImTq0VAcaNyPouhPy8vrCCuTIDT9Ql++Tg9ruPxS1w==","shasum":"8be6bc5387b7db7f2158b50af0549d07822098d1","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.0.tgz","fileCount":86,"unpackedSize":1480744,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD5M0CRA9TVsSAnZWagAAOawP/ixn9ToDfPmpSDe0DfBK\nwmnFM2yDaoGVkAXUzNEibWWhat/CGvmShJJYyD3VXPG45VJRk/TSx5inXk3t\nZ+V7BdjhfcfM84qcpclWKPkuDeU7e/zJr1QdmZ5I/x/+ao2d8v6YFK9Qf/OG\n7C5pkqwtMg3/xPsAueskwOZSYbxgwBCteA40QpWSKVnjuP9k9PXwTiCpZGYO\nnW7ZzFen+Yesqnkc/YCOVaIg/BM3d44HxaIQ3ZzWge48g/+TUK+rh0+KvP8u\nbdGYWRrUjCA+cF8GiRQF8wkEKpOnXqEgfp7MOZb0GNs2h3Uim2WSasHjctge\nBlWiisP9v1CjQUAkJC3ouA0FWaRRhuLHlPoGb+pGrhIVvVv3QzLaOEgGq+Mp\nIwEQ2bYCxd3owSV5DH7e2puxmvww8oUfPC3JsPyxy/JH35lo1NYsOKjt8EdW\nIVlKC58tX73VYQ1ptTJRLrHKtSaRnNn3c1rZqN0f1yZV7i5+RnWyqjS6q/ZZ\nHztU8ht9a3mhoxZgAQijOeSqpt7yEF6GrlfZZmW0Oi6YWPxY4tk5lBBAIh5z\nwfzcdrnEWILs24mX7i55/LC4wJJsaLrAer+RRm1FFXRgIrXXSy+GiiyL2HIu\nGq09cyg5L0FrWAq6pAVIqu1dWEik4SiclX8Si6tDyIo9yXFlUTFwtevehitl\nwxZR\r\n=6Vtv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwlxpiqBOHXEkwzaTW985kvpCFSOe6i7NKhGpPJ7Q7pgIgdRTnYhlL39GHLVrYaiKMH5+upQSHZ1EQyWm6lGNEFl0="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.0_1611633459862_0.665609906731925"},"_hasShrinkwrap":false},"2.4.0-beta.1":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.1","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.1","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UWIGDdXHHxjdVA+hwzuCXg4fIKrDqc3WGyPgwGLNNTT1RUTrMbInNyUahgAB83tr3GB0zJ2prRNr4p8M8v3QEQ==","shasum":"b92a5cc9df82fc3c64a8c72d6106992a43735c47","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.1.tgz","fileCount":86,"unpackedSize":1481727,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD5UpCRA9TVsSAnZWagAA5BoQAJa0i7ifLE37BpWk4NtP\n+/uUtbFXw5VRDn2MaBYj/0jIwJszsvoUILRzkNwww+dU+RcqHKia7F2P6eBf\nLXEitSOt8VRd/Zumix+PmQxR/UOQrXDl5jOqln/aeyMLcDQLtLB7JUnpF3Fw\nDGidYsTsdgj7cOydVykB8kSfALyNUbGsl2ogZ+JieO5Wut2VOoLPyrY48n9v\nXt0UfG5My4weirrSIB4JcNlKHU5KBTTYu5kiJgXLMYB5HfJgLV/g6ufM8DKH\niUOA1L2q1oXvsw07655KeT8HCBUkNNFiasW2ko65UiGN9MjhI3jTYiP/gxwG\nBpBSUnoa1HTo2qDNgWjmuCL5lhINFB4LCUcy2FVEp29HEYNSDS/G+qIoUhIG\nqmObc5GIB7W7wyzRffVcIzyk3cJsFlLSsGRNYoTSyyJm9Ekv3unEu2AFrmhA\nOq1m6l31eTyiQ61CsmTMDzZPP/TdRxNe1beAt9xLJEVhI+xe58IFEU4TI2/U\nhZXRlfdmebW5bZKGw33ou5fC0qsqEh9T1zaS3ap8ZadYjnVLlf9hoqlC4UKT\n5Mjd2Xzr1s/IOrLhS+CNDih603AagMpRNIUMKAoPoDz4jsMOvWiv5IppxTNa\ns4NiwJpAX1ROYqcxoy5G+t9nVLpHp43iWO+Rn9aUtToMYZEB3CMDtxv4pQfw\nNjtg\r\n=am2S\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA4x5W6llGXXkLFQ+3qtezlPQFnLfCf1DKR+XINnS5dtAiEArIPsTLoduuaz29eF6TF9MbPyUotpg10okJa3on/fOPY="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.1_1611633960756_0.35306452717240666"},"_hasShrinkwrap":false},"2.4.0-beta.2":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.2","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.2","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-h3+l6WMUR7V8nBFk71uQRm1FOPiAjOMCF/tvkVUQrHJ0wqm1EgZpYW6s/jsKH18YbzvSGw7RRs4gRTlcjWqg2A==","shasum":"fc192e0f91d943d497be3d5f13e97732296d15d8","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.2.tgz","fileCount":86,"unpackedSize":1481729,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD5eZCRA9TVsSAnZWagAAL1kP/25Idcp281jIJD8iAWhR\nbO+PwHbyE83DNz3DPqa8PFo4b+xUFkpZ84AWBxkDKI0XsNvzjj8NPCRNSb9Y\nUGRsT9oOYKTeYTVLCKcPiwpSeetxY231fBG8gL2g9aoB/iXlWwffI7Ia2rDM\nZO20+1ForfmfetqOctSNvBlydyuhgNaa5X0NX0VRNfRbXxXM7h7QlZ8OXfF5\nx3Do2KU1hvHfCyO/DsXAcf2VT/QID7IE3UE1DtSYQ30Xl6F4PE7+3Ej29tAx\n5XtXdWA0eVu+d1hWKw9OmdMtJx7/IaQKpTyV8MkSwIfzeRzPYdoajcOUNjjz\nQRmWFKnLVtdOO3R/vzl/1MttKe5CQt1VJRX00mHd+DAWHq3td5o9Slep7yCx\n04ZbRTcfQnt8iD2cf3PUtkqkIbzQxwBSzuh9g1j6DsTabWGlpv5gk1t18DQ+\n9J96PkkDI8SLxo+PJqJyMte6P3VEQH306ZwRmBIOrugSzO7WhCWWnl94O8ER\n5GBuZwjVmRSF3uXJCGnck7C7wRwHgq+nbToTriJGEm7vCep7FOqlOzoD5X/Y\n/o/oM2+1HRKCjXJyZjsjZ9Yl7+rQoUXBCslUx5wB8nxls24ksuKj76M9IHoi\nAZ+g3d8XwD2Alh1vll0tX4Tb+n6TD8/4WdNp+E7nb6cwrIwi6cMeef9ePGO8\nmouv\r\n=Jw63\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC7x1XPWQ21/OwWpIO4k1/IHKqYuz6fUscg20dDjyHgEAIgIGESWH9N4YeAymhtjL5tQ6j0EDEIHBy9GLiTsdgx2Z0="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.2_1611634585264_0.04765446651732508"},"_hasShrinkwrap":false},"2.4.0-beta.3":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.3","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.3","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-QxV/K8rMkDOcIgt67+wSx/1q0kjjoyswYmaETLYdGWB7NANFnGCIQqidmju4ltgciKnnEfXBnrfgkLRqq+4wkg==","shasum":"05fbfc2a4bc0e0065eb8ae8c2ebb647860fd9cad","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.3.tgz","fileCount":86,"unpackedSize":1481751,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD5qVCRA9TVsSAnZWagAAGLUP/1rqpS5Ax5zxUzyiBbzf\nS4Xzeyk9cQP7T46MzvwxnvuQzjVl1owH0d+KiQIfLy1PV+DPiDoF8OV5XFT6\nupy3bmfcMBgXE1TE+nnZ/D5q7u7G2pHgM2WYVIkC/veny9XqxSNswT2ITmpC\n1IsGDv2HE7wLIPpf1xXHrK+SRi0nj85Yu7iU/XsymT260a1Tv9mngHsm6Nuf\ngkpNb2RQFq8qZ3sbJ1GkpFaUczQpgT9DmgQJUpoZZNyFJvDqBrSsiAoA59CK\n5ZTr133BA4ALNQnNI51ThZVOBEvMS11Fqqj6ueMey3W4WcGHHSaEg9IoLaRA\nigDl7g0bruaR1BIwUw0aQk3RlFthjJGfolIH0nJsEQDCsEYaDFhhRVfcZpJS\n0USQd/3msff5i6mGTShT123seabLyH9ardrUVnfjCzyD2Q8RDX3Now3echTc\n8WD/T06w4MAIOK0zFZvs7qVPq3qp6N88Jv1z+DAkWyuw1/wSD/8aRbzADXcw\ngOydZ/NmYn08Y6B6dpFwKom92t9bDQmhH8XsHw/IHDSj5bLjBsyMAkjwwIll\n2T3UhTAPepKtNBPXt0LjqMz0sr+BsHW9EqPQeApygdjl2+N187f9i+mpaOOM\nI1g6rW2SLhw3Tvej4x4KbiSAiFvMcBvcdqYCiGFXPYEmwh4u5eW5VxrqVKiB\nJu0J\r\n=GA3d\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICvfc69mCaJv7lS+e+zVD5yC/1MgZVxx9U1NA3L+ibdQAiBvJ2Fv07GZoUDGwmCSCCeot3NZ974MmrOPI7he3+9Jqg=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.3_1611635349265_0.8317280505986198"},"_hasShrinkwrap":false},"2.4.0-beta.4":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.4","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.4","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-do+zLMguayY7W/cLj7sKu+ScpAXKKdngirEeo2bH1bu1G/qGRFoUOOaoaB6O2H/hp4eKJVdiF9goQbpfR5Bt0Q==","shasum":"4154adaa94d50ff46680e752ff4a7b0481fd5cbc","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.4.tgz","fileCount":86,"unpackedSize":1481857,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgD8OECRA9TVsSAnZWagAAoaAQAJuXhAEvjenPFwJXpB69\noLIRDouJzxjD+0OHgWKTyxkeW13I8PTryOILEcri6ZZbWANqEM/wL+/lcTyH\ni8XfaF66TrT+9pbG6qYNbZ1z60Ea6zquoX17R8qy0r9Z/Nm0mCpcB4pcgHkU\nMDRqxnEpv1sTFHKe1E45XWAUPT2Ah/nAYM66gpFpCmJTzVCDtD6VRu8Nf1id\nJ1O/f8okFq5RtgVWJKTc8f+j28Im+PBXfLZyR5c/UTVruQyNe96DsKYOAaZT\nH37kIv+Jwe7ZMmcmkn9l8JeV0fkcDi8iP36jXAaggLEtu8Pdj/1AK9TZ2DJN\nls1DUxTvMjU95GGvbb3byM7qjHhzYvDQjHP4Sig7835crr4pBNWLIm68TopD\nSgbLn9qOzYhRItDR0eyrtkAJjVMDz7wwSP8JtXH1F1ozfVZkCNQdMSxVhAIs\nYdVhw4XQgKz5OVpiHBQVo3kkD1/ZaEZylY2oxMlakIj1c49AxZP9sXSxdHJp\nZML/gHhWlevjAbKiWRq+ptWfPyUFIJDnmpNpLsWsfIOGma05BlBBSLy7R/zS\nZfS16qHHnEaf/yeOQ/iyiACDLe/O2DH+fs+dEPSjNq+uvUxHjknsUChGQds/\nvACgbXA9KIMGi1F6aRteCcPGy3gq/gS+ix5gX+IJJW6sszE0EN/ybE1rans5\nj1N0\r\n=zgio\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEdtNC4pYRySPCl3OlOFCNf4UA8PTUXuGJXC3euxkT4kAiBIyXu0qybIlv2AeY5xn6B2JcTNLAK1K008395StrEYkg=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.4_1611645827868_0.6481791228837381"},"_hasShrinkwrap":false},"2.4.0-beta.5":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.5","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.5","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-GRoW0xEQE/7pxafHgmbv4aRWl1N79CyhvMu6d9vbb6onr2RVUVKYzqat0a1TvQSOoHkRQ/Tgw9EnhViHGvb5Og==","shasum":"dd4393d6a692bf522fca68ee5bbee74e669742bc","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.5.tgz","fileCount":86,"unpackedSize":1481885,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgESWJCRA9TVsSAnZWagAAvCIP/0TY9hSV7vpwi/yskLtq\nWGxGhC9frjn7Qig5TXlXKmNFBjJAMc9zrFojrYVWMx48u6no1970vibhG3EV\nMClOkhD/ZqmPm2jKe7Nq9ygm31E70O7uae1x1bEPIu6VZY9D8W05y+YLDvUc\nrMt6kOqQzdblOSiEOA5vokOjwYIN7MMH4bHETL7V3huCU+pxkisbBhNundbr\n+GZ+RmMPq0rzGdgEdgIrpPZOzYjqzigPpPjVXEGN0FVKsir8R8XBqb3+d+YO\n7cgaHqVIiRcYg0h64KiLH/1VkU+wQSVUue8eG8+riHQ6SDVdU2iuuEidASwY\n6lQmwfB6CEl0zXVHbSQCH2NBfToVrcZoL6GbRJGPq73P6pkVJ2/U8erOb+dO\nFwdCQx3Rw4BAvMAeR6LgGtT6J0HzVhFfd9wA9BxN8p+ugVs7ZlGuhACTGjpJ\nTpFZRnv0EOgIgM5pgE4zUmSf1Wnz0RpqGzWfApBu8Pkhn2whuWJ5RKaJWv+P\nofT/b1WeXXxk9aD0fktXpjxw5EpKfBRRw9ClEVdSmM+bIUxxf4ssgYyaOnyO\np9Az2ocw+wm9tuUNRf8AHzweSuf9rCL8ljYOfvlJufviHbLCpEnB5wBWIS04\nYBD8UB4lxz7gq0tHMoQaZ6B6mLcE/+3c36g4rSrphl9t9uZwnrKwHQh9ho//\nYksM\r\n=XEpj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFrlBYrH+ICGARX0AaFLUY4owXNKb6IlIm1jq4GB8I8GAiBVPXlQ3Mljq1toCQlOOL4+24frriuMmyJEPN3NPM5KVg=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.5_1611736456762_0.032349324013572156"},"_hasShrinkwrap":false},"2.4.0-beta.6":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.6","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.6","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-xRtxLlXo0lHrPmnjcgWy+KASfvFaMBaOYsQ/Gr+Pp1lceMmKwBy+tsCZrkJaR7//I8FDHlZ2wR4brRvVCQhyIQ==","shasum":"6c8c2b33a1f665345faae1e4e924854c32fdb635","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.6.tgz","fileCount":86,"unpackedSize":1481762,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgEm+xCRA9TVsSAnZWagAAcnoP/2XfouEEbi/sg4XM6FjX\n70zDj5Zo/2fLb780TLnmFoGaZfedtyaF4DP7Swned0ysTJV1TSsF9UbRO8fz\nuGsgLR+gbNbTpYSlonevdCcHIpxqo7ML2XuJRjxibVDuL7gXFlN4lwI8tzdS\nt51Bydz7GNfpct05wcU9HesmVf22GZNZSflyc3/X/GIy8ZIT4/FC+Deykzb6\nx/AHqAjCroXrsC9FbZMXAKe+T/mschU0c6RlhdfXcqLw98BVayVYTw84E4qS\nXRQP+P98+iGmrABVJjto47t5ZjGRwREnQcSNOUDTMmntGdnhvCkkAQrx83NJ\nwPn26fnQ9vQNGH/w9IrxDi0idTs5FBBcgnSqf4Zi0x52GT4t5kY21cA6e5mW\nKy2FRB1LFnDwZsAmFpfTTTw9z9IhDNJphLKrM3HLgGiuIa9V4FLIbxqLVNZY\ntXz4NLM3d4k2u0PsOVjFGfo8tJPdogfh06DegR15plEwb7WOt4arm/kgmmoX\n//ISjqv1fDHzC2Q7tLGN/I4BvU+GGzDXZmaNjRvGHByCMNwrjePqJdZnhn/A\nW6WwfSMaDA2OUOKOyRg4cLTmUREGgLvnMCE1SrQG1Tmnlx85GUIFfq95J9bk\nxvRK44BZA3qN0lu1g9hHNMptiExcIU/PDuTc22K9cRgp1qr9YUdI67sN9qNi\nynEK\r\n=P941\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFo61vFV4bqF6gNjgoqiUp4sfyljbuoliOBtkkklgZ09AiBMRkSMqO6w5W6KMuYrYKKhukwPWQucAO41C5Ak7SPZsA=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.6_1611820977341_0.6306632240333419"},"_hasShrinkwrap":false},"2.4.0-beta.7":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.7","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.7","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-Y+vOzbTk4zSmG42uDeQ+jiSKidBovQlVtRmAHdR3M0wOPqtZqYRE7b7Ji6JKaFLO8Y97OQ75xSqe0MFBSvxxfg==","shasum":"c7188f158d70abe20912e25f230aae9017ee6980","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.7.tgz","fileCount":53,"unpackedSize":265036,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgE31lCRA9TVsSAnZWagAAc2MP+wQ8QGb/sps4SC1s0Zbn\n1rGr6VjB4OHVeqi1XijusQbzd9ZfUMtb5Nc1JprDzV8FxGL+xR5IzzF5ry/b\nIT+uHc2dfbiu+ipsAqVwLy1Zt1RXX6jFRUe+Ys8xZKqGcfbBtwYjy5mRrwcx\nUpN5pwju4DQ0As7/ys6jPUAOOD5Dx3cpE0N4S4Yw38zpxW2KoqgvOIHV4oS/\nnfS7517G8Rf4Av3s5hFqkDbTcW1D95O3VDlqC7fNFJFvV66Ts8WIymxmBO64\n3gQNLBS6CPbUbyFam2cOb1GREw6BwIOKkwydtkYSGMd44tH9UGP/ulfiH/ZM\nB6K7EDJLUF8+A95UMqgbYOHB8aNpoJjR+CTtUX43OA7a8ufMn5sRiI8YrXoy\nJ/kjqgj+djey7OnImju0NoYK3pj30I6ORFasDmt5Sg2+iPeVMjUjGvJ3EXum\nepFF1ssf+LFraC22VQdP3ozWqYq4jdArR9ZHXKW1x8mY6/jo7J2CcX1lvwwP\ntgYK7+NlvNvX+bHPIYXxFU+jJB+KzvfEZJQ/YvbIDzgGWjY6aG0ggvac4MH8\nL44+8HU1NQZ/Z5uQgeAjq7Md1md98AUNA2PEx34CnWarUDlXxyaF0IPdo0l6\nJ7tZZhPgPLXwdjIwMK3/M5cQbLVRIovZRximB0lm70n3Bbuizze4c9JRCIY5\nKMiK\r\n=M+hH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCdAA44rTYsCow0HA3m5dWETG3J12l1BtCmPGwv/uC/owIhAPmpmpGX/nR/hDBH7qDyoBv0hYzNLrkK9h5WtQOjhK9r"}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.7_1611890021387_0.16194869642104925"},"_hasShrinkwrap":false},"2.4.0-beta.8":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.8","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.8","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-SP4BkVuQ3kvRH//KAitBS7EAoMp16jRxEi43iJQ8jKqxhhA52A0BcML+TfSgThd+Ip/nICg1EycQf7JZOpA1AQ==","shasum":"b5c5688d22885b70e15483ef3811afcca326402c","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.8.tgz","fileCount":53,"unpackedSize":266597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgE4p/CRA9TVsSAnZWagAAHLEP/2nEeNfPuQd9d/1C0tD5\nE1dYDNuci14Mt6eX6hchFhUOy9HxwRThDzk4FRHzjHIBgGnwIzhW3fhmppus\nbbaixSEdz5riZxARWjgIFl3mF60ZCTFwioXsq+AN2oPzgqd3u8cKcG/FcZSB\nhxts13VBRH1TvxucLNAGiY9MAoz2ANqxwCDUMTRl1bqtk74ZlK33tx8CUkJJ\nvwcY48mdEzkXUbgnj0GL9Jldck7AYRr3oReWWHxtHdeHRUXufphOzZCEVVOh\naav2qkZP2zcxg/SrBdSFpH2R/6ALSWFnhyV6Jnz+zkXrQtANXOHtAaXHTZUy\n4lD6IkSgDz4F/aeFXpJX4esOBfDAn6Dj4gh2Yp3lXx+TAuhl3aubG9MiVzW8\nvRduDlRFFC1C70LM0PK2JTrPNVWWYcIeBpHuits1ralOXbrltd/1MJcLEcOy\n7kFWS/+GnAemB2IEgb8fmsh7NwqQKAPoe2/xxZpso0J69Lr1YsRuZFMZ3s//\nM4SwFUIzLLxVJA/lm2FQOTCKAfi0/uK4PLyf+MywInJ5H4LpR/g2mEX44Pwt\niF5fDYBZZoFsMvY0zia9CTys1v0HWDvuZ7F4iFnI/wgUIDSr3lZEDcNps0CQ\nA5jehZdcsoWVikwyO7oYMoOvXkloZdOknYHA7UzS8vCVjdTmmr3KQIdaj9aP\nPD9a\r\n=YLwR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC8AEhAVaPsydSXsuD4x45SxVUcpoWZQthkfUHJsDqL3AIgQOyoiy+uREjp6Xw4XkeaBr/hNKNIJEbg/fLDA5phsdg="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.8_1611893374878_0.27911454712820505"},"_hasShrinkwrap":false},"2.4.0-beta.9":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.9","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.9","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-WXYY9pRV0TweJ3T0j7F+q9ZakxZk/YjJOYcUfPSloCNejpMOxuF4Bh8z5XDiaz+5k+vsuL0CYVeexeboJ/xm/Q==","shasum":"98c79d317952c2958cbcbef6dde3eb71d420e76e","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.9.tgz","fileCount":53,"unpackedSize":266807,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF2s9CRA9TVsSAnZWagAAMMoQAIcX2ecxvhFuqiDLpsXd\nfH3BzkNkydg8/dRDYUeda+uTiGJiVCKFwJmq2kfqLA76tNlKQT+JyjsLnGi8\naK3Wnerv4bJoL0Du1eQyVsXJahgrWHCyM5O4J7MLpgvNrnJD2Pl7+teftkOm\ndB4n+3serPb6xB11puiNYgZw4gY4H7GLTW3X1RcUrxg8La0oxsmXfveekKPg\nklXPner1hzCvA4a0mdG7mxC16cVaQkEzOnm0Q85dUJoKLYu6xZEgxt23ZvYS\nNOuAESf3T5oZUC0zryXzoohycySLTDPazIjvmM+xKChAhwNvqSUmkL2DFhEH\nfCBp2hr9vLE1iGUlovD5Mx3bZzjwq7PB7LhUEN/JcZ50DJz1j68oFOEWaycJ\n1eNYeXRwkGOUDk/aDZzWfAo4GFMfaKcqPm76T3RVdovb00kIPQgfDNWY1Agn\nMEUkx4N7winzSiMWivrWx5M25ePUW0Woh4V9++vU9Wi4zDBx1YdVtF6iCFuh\nk7WwvGkq15KWoY+kKEiqFpIaBf5bzI1QSdSiBVMq7f5t7qNT+19kZ/jMh08X\nxPiJkEqNbIeBYiiFcQsFhfVrftt4JYrgoJcDlyGvS938xlALNostqRsMNWpb\nOH5fWqMMIp6ViPDkRiXKgj+k7MGB67KiuzakCMhZREBBjs1dBn6BENIM2uni\nsMFR\r\n=sT35\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE1hzavB9xz4jvH7bkaovnukbJy3PuhhI7UYDmPc5b17AiEAkWxYhL+VkcqhoyRBVhP84Ep05v5HtLLQsAb08r9Q5l8="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.9_1612147516266_0.24911989500718046"},"_hasShrinkwrap":false},"2.4.0-beta.10":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.10","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.10","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-E8OpWT2TZ+hRbN+CNBZEusTWk+zulXn3NtLJes0Pgavu1uW+wMuhakashQ6GXaJ+AypUovDCuqPNIfSQgjBs6Q==","shasum":"35db7cbf50a8702f45dad529f07d84ef8b6dcc69","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.10.tgz","fileCount":53,"unpackedSize":266817,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF2u9CRA9TVsSAnZWagAAuMIQAJ5v9TuOXk5UNhZvyzmx\n1UZq504FZi3k+A4XW3HIwMQNIhT8VDbDd/v5ctl7i/9Cn+w0gmVcuPKD0yEI\n9J3aimQWfgxTYCwqp+npWGOCLBBqrDVaUVOH++gylFsPJ0xsYY0eXFyzEEW9\nUahLg1GE8Qi2F6qb4iUV5T+b+id4amhRVa018QQSufBEH917o1FcMLAIabH6\ni7Y4MN1YB/6on6skuWm+nX7DKGpwD2Rz1tabOVn+sYYLBQYeonEy2hz6OYao\nXa0xm5DEume+F4STVb7QSj5Z/JBMRHO+SlyrWUX6Vk6pdxpUuzDPuBjKj4sx\npf9KiaRSc0HKA3lBe/0U3en5lXUrjSFgR3enNGr/eQoJ4sh+e4nto+d3KW5S\nWvHTgjqfull/ZICyUQgnuZpWLaxDBbrGfl+ONAASF2eTgW8a4Z21UMA41cj3\nFnZ/zI3bboAPL9v+XPTaKm6V1To/mS+bAm5otaOGKDCh94Eb99o8+r1XQ0Qy\neaXyRTifKVQDC9XKygUcRRaUbxuLblMY/FeW2Ut98F/vUvyQdTq5fouWJi43\nllYa4rfkHL6eny5aUYVrLhvHRBWx/Ra4IEBdqvCCqwLHgQ5FYdTFXbdLaBDo\nW3YP6kqz28Ldo7zV9st+uS8c6vpsyfxTANIx3k/0Nd5nCzxVjCoScNeAUTmV\n7J/G\r\n=dqrV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDStBd+gmN82aFbEGIWThIcmc6zmkORYZW1SNKbS54ctAIhAIqw0fYPXg4qWyslVyT8srFzT9csQz/igyTYWjJA295i"}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.10_1612147644680_0.02114088567420591"},"_hasShrinkwrap":false},"2.4.0-beta.11":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.11","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.11","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-QqVi1yLsDt0NoW7yO1M8EBq+tx3NNs+XflJGBBY9oMtjgyHG7GnIEtFmbnQ2ZQgJPnVXCSP9/OnwcPr/jR22/Q==","shasum":"2de08ad0e17dce65e5415a6f33faa8c20d41db5d","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.11.tgz","fileCount":53,"unpackedSize":266789,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF22PCRA9TVsSAnZWagAAI0sQAJKNPS5WOF46OYZPPmxe\nUND0cEu/pm+GgqexhEo35DQAfZ4wp1dsZS0WwIGn1mqWXS4NoeQOJpLpcFQH\n3Tx3MnNUvtZb7DhcIxftsJm62GodytPNIWwpWOQGfUkMXPBB57hAnu7UGZkx\n8SXsbAN3tcGA2DhuN5mdc14e6KvFa8NMqAbad8D8ic+AQz6fH62dtDUF5MuW\n7S9aBcsGRFqK3tva9LHBQ/olN7EIWfZV+QeUYvM/iSNa4wSLqOOXpQKOuTIh\n6Xtv1dyklEStlCY9PLw0kZuCRRGu+PK9uUs4tTfENZlEdREAPEIUB2hybmn2\n9ZR4DEPm3zfPcMOy5zvvDozIQbhIv+Y+Y+yeNc6h7ULNsHAo6MqRCKOO2xtM\nWnzg2X6dq7RK7o4nCKHLvEEyP3PC9qqU0PYIGWx97U0CcYXM/xCDs0+Hqccl\njPkO3lOmGijnioUCoNtqj84Z7vKs8KBLTs3A/0u57YFnZbBm32hiHs3tEZSC\nUvSq73GfCglMRkSqhREhd/MUJG9MTnBKG6m6hSYM2363FEoMAtkjgBPKph77\nDP6CoHeQvCqvgNT2OEs/cVpeiG7FTXsVdvD5g5I3YmaDkXMqOM/m+fRLSSjW\n+O2dUv2S4M2UaMLG07ob5XUngTGyzt1OcwXatjqI+ZqGw7BJpxi7xh3LuyQX\n6sQ4\r\n=ZfGI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEIQC3lhPLh9lg0UKvE6PTO0dtNuQGeq+BGgHBKKSsa4AiEAx1+Zr/S1ZzGG5XVHmUN336jUxWxPMJJy0i9jye6DGTM="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.11_1612148109887_0.24378587301792942"},"_hasShrinkwrap":false},"2.4.0-beta.12":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.12","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.12","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-lr55x0G82ak89QHgYbfW+8fk1Fvda2auJIuawCpwcohGWaAd5X30y1+G8/QD6S7H97a7AZBhBQpV6v/nI7biNg==","shasum":"827a0b93e26827a0d164fd645c5073bf602010f8","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.12.tgz","fileCount":53,"unpackedSize":267517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF2+/CRA9TVsSAnZWagAAt2QP/2Zjoht6lJN2z/IjeZNX\nfAZb9K8N56jVL2zJdpdgIwPS8dJ9vOzXd+X8AE2Y330X71j07TM/bTTwd9HM\n9G9ZJEuxtkFaiU+kO0omINfQl7qgTYF8vZwm7cetY6c6UIStux1mPbuC5UOd\nV6i10Ze57FlQM4HKrqQY+H0NLvKO1Z+qzqlsA+qLYgeI6mPbcvRoAvt+GGBW\nxRgnP8R+aOyA2QWbx5DadsDdGeI8sToo9t/klAP81FNh2kPC7NUErGEG6oR5\nIM5mCuEm8yVDr6SoGh/3BiZXUFvxklGaY64GFtOAFDk5oJ0iBKzqA5H2zm92\nIDNkGUJ+fqy091CCcL2pE0FNTSPa/E72LN1lW00Tu1t+TtX6UkigH05h9DdX\nJpew2ULH4VvPz25jWKKwMd/zC2jgg4yKSebMw6cIBjCEysPktOd2F9KurFSR\nn6jHfhvWxgRDE+OMy8/QD7vMMpfs9p3owm85Y/5SJMyXGXcZKglbBTrur2Qu\nPlgp9t4vYYSokb80xKWgmh1KO9FnkCrFYCSi7cM/gJf/Cz/TivDaYI9tAuM3\n6zAPVmmBpIqV75Z8VynyuSn/3vnK9B1jWZFwYjZeGCP4VyYkduMthoEFEbKy\nrGslhA+YC7ACoV3ThiLQ0BkRP8cD5C4YfCwRkDQov1oCOEuSBL0XJP+o4s2P\nNvad\r\n=priT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAbYnV5ewmsz+IU/UgmNCvHV8jtk8j7KO+ujVLc1Zh+ZAiEAsswyBOJJ4tkX/EaGp0B3g3cm4e6bA//v7pksq4Twir4="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.12_1612148670710_0.7351161683172673"},"_hasShrinkwrap":false},"2.4.0-beta.13":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.13","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.13","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-3mjHLoPmz6t0IOjD6ZXPH82ivBKvvNMybxzWp6fsUm2D5OLsaaejJ1XtGSevqokSWe/GUcHAyR825FYyTzxhUw==","shasum":"6eff5fd878a0f6f79327c6614325e97b3ec5331c","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.13.tgz","fileCount":86,"unpackedSize":1502712,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgF6+aCRA9TVsSAnZWagAA5nsP/jYg5c1DTntDIMMnRao+\n452XUawYU5/xq/h/jOqjEPaf3VNEQTuc5C2rO56uEupLd2FhPxuxxAjUh5YI\nD6dBKbTAQGIl6eSn5IJ0fCXsJ56IFD1S9g34goLTc34XOEqUAAR6q4YYGMgW\n2hrvZtNCt/eWhBKAB9O4HZoil5lZbMB3IoSHoIOAbwDR9sWUzgAgf1zhl0vc\nVi/LNd8cK75DjL9ppTYlblbcHY1eeoi6jnItcSJOjGCIIG6hyfsr59EcyCUl\nXvRwMowjuBf7BKsBQSoOIK+K8sFl7Lw4i52gzxINgQopxLOb9cHZ061Tbbw3\ng4/ILjmfQHNlIq77lPC0PqL0IT3ExU5DDxVXBROYHQv660ejGF1Uhbpnsqdg\n/okbNkznJ3MBYupOYbVvPD62qLy5ApB6XQ/t3emUAAaChu+il8hIR6WBaJo3\nxPpcFL8gmdqcPKMjncxsu/RjXsaQuF6mYnYcx41StLMpxH85oJuhak4xWp1N\n4xz400BARgCVi13xsU5/LPG/nHvYe9Uq9LEpRq/Ph2pz/Hu6ZbdImzo8FiKb\nL+eGfUUbLOytdx7h1jTYreAUT7KCQNSR2Ra9njKDXCBIl5MvMqupdwTmi/cG\nWR4mFoith+mB+xjTROz8NNn3drCb7an6llqaGpxM65quoLLsQKa/dGcb89cO\nYWlN\r\n=z+Uf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCoyd+BEppr/CiVko+IF4tUr7fVY4YygBuksIdF70YecAIgYVcH8v/9QaJsIUUUkIrwOsT1QGaDqIm+CV8U6JLAIpc="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.13_1612165018359_0.885746108993559"},"_hasShrinkwrap":false},"2.4.0-beta.14":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.14","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.14","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-c6SgcGQQUlIieGeuxNDbB8eWqFTlFSaok6GkSh1YXsE0TTXXUml0fXOFt0M3I5PhdnOzUZTmwp3IqM4/7g9MKQ==","shasum":"fefb2a166ed67532296263e1a1a55486daa741de","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.14.tgz","fileCount":86,"unpackedSize":1502766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGQUdCRA9TVsSAnZWagAAOtgP/A8S/0HjKHa00ia2vRio\nAszqu/3bdFHHehxOBKPkqToHkT4pgtqu68kE/vL4LJqOXYZhLAd93HLi7dGK\n3zJIWl1iteZVADdEKk1LbIF5I5ge89LKzHav77AbLn1CVZ28hsgBczgJ080C\nYgTjN8VR7Oy2sLxxxvqf/PjArnYPRr1WsYpepO4EM+z8hbQprqcG2LGkQthd\nc558ocVOA6sY3dR254mfSKEmpDxa5W1eO6gv6x3LlZN4g6ypas2TzKVVs5G9\n3NpKQkboGjWseOlKKBOsWimDCk2KzTyazvLI8lcWq5CypS/7j1M12MAiYJ8L\ncl8j/w23ksfMAg93L1Vtbk6ArQLfeRYKXHtRUd/1SJ4H/+IlwYxu3m9KeTWC\nSgjjlRz+FHt4k+yVbPOkenQ3KOw6LrdzjueZBX70upDACJgni3rukeKTQXMy\nIA9bGKnk2Gc2n8e9+hAzgOPtQYAKMavsO4MNbpkd+6V6s1fNhz2kiC41Cslc\noPvBGk0sJi1zAXcIXxWdVSbAPFGpG8dVkLWrCNhSo0PKX+BvcKfKsTgEXR9n\n9lS1la+Ff0gPM7zt8lbUVsjUDYnfW5xJ9fcSeYq730ZEaK3ogmBqmyBq6wMX\ntJj2IuIG+jAQkmzAsHbBLUt6QlzNIWFHz5TTLe2sAZTCJMV50lvaXWVlKMq3\nv0j4\r\n=Wmn3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDEHOeL3+WRQxRsLN+XcsCBLx0nrW5p3gGAHVk9NW2GfgIgUPu3/0ak5Vg9Idhduc2kFD5W7UhduitafpyKlGzjuvk="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.14_1612252444783_0.540660673760744"},"_hasShrinkwrap":false},"2.4.0-beta.15":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.15","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.15","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hpA85Z04hib5oYwzIQO2c0SCsGIlJW00dCqqiYaZsw5DFIWNnhIWhWGWRd3GKZVMCm7NChSL7xxRS0N2tlyYMg==","shasum":"48d380bfd9788ef6db1ae1768f88f81a161f0f10","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.15.tgz","fileCount":86,"unpackedSize":1502582,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGlQZCRA9TVsSAnZWagAA0VkP+wS3Er3kl6JeWIzHvcRU\nzrFJ5DlZT4MZ1ih8OnKjMHMd8W3lZNMqujnKChGgy6o+HqLFRr9uhPyhIxGS\neuGkM0jdLBdruJl+J0akcbHM54M4DdH8RrKKX+moeCBOZnlpmarp/pCKLI1u\nNj4pT9K70SMaHuLeAX2FNEZuzJSPhnobRTKXU7jIntL47kG3GE1BkAgJ0htT\nIy+WjGe0W7xEGhrdgm4pQQ3e7QxVOCNeHiRex3F2yzxO/GpqRemm+bkaQAK6\n9dkvi/kThTzvx7Suir93GcKxUBantkUtiOLoSGIE0OmU9BhtpJ3qCvusjaYJ\ng9T3Nzg9HfP2wZPfyXGNh6jU27+hQqg2/XKm8wpOexoAUOkD3P0GtM9o5Ufh\nCiTX9FkilN2Dgu981zbQOd7l9e1IvJ5d8wi+Rj9Z6VuBzetJbI/Cok+UW8Ev\nl8e/KaOLcZl/emnpmXb128R/8Ilces4YnxKVGIv0608yLSZMla5ICC9WaGO/\nFLsCMeRko7I/dg9CzwDfD/VV8k98EGVHj+N55MhIz8FyM7E4XtqKDUaXK1gO\nJV9OmAhSbAw0Tk0X9idjcCDFn7OVI/A5JfjLf08f+PCk2vfuh67qH8CUdbbb\nBoFVuEvBU+gMT+tLRs+BxhrKphkSt0UkCsu0SUq6PsmfoXNgozdrsUuPQgye\nqLTf\r\n=UVjG\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAoej1xa1q5MpRKTcituLLrp18ydGGkvQI75U/KsnqL3AiEArzI0etYrL2wzzVnbGaUnlfiJATaf7A0UQQ4TKGaijDw="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.15_1612338200228_0.9724948331053169"},"_hasShrinkwrap":false},"2.4.0-beta.16":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.16","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.16","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-iG9F5dSauZL1SXf5rzRHFCdg2EVuhMdvNrgNq6k7wIkIBasyYXJ2Vtx3UbiO6m0Gi7sAIkmTdUmIwmrZoCqcLQ==","shasum":"7ffdca613ba5007ab2f4ff37709a1de4305eb11b","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.16.tgz","fileCount":86,"unpackedSize":1504650,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgGmfnCRA9TVsSAnZWagAAPDoP/i/oUJ+D5ybralHIKlCG\nUBzdMBqmDrkPio23VHZHlLdboexWP7t8n8ZyHB/2VHb1nZVg8aZBPacBFsuA\nC9EO7xDkaiyxZrdm7Ho1LxegyF2yQoPo5HXu+Z+gzGuml6+jkn54Bjt807qR\nKnmFyrdEkLRJkyJ9FF5g7f47qzaj9iSsfE4vGAuE27bV8NcG0TxI9tRJ9KRw\nE0MHWs8fPyyBAvJ1EYCOg2u1p1DUR8RCehY+uCkx1ECtlrkGM9X3dLIO7mM4\nOIsTirguQ7+w83xRkpFqcdYgpTeZ8snvrODv+hLNBycHE9CjMAr4zm5Yl8PL\nNVHzU7BsG7cGKpTabx55gnLltD3ovQy0bm4RiIpQtk6nFvdbet6sc+1Pz75b\ngnWAUwBewKzpx5/sv9Ta6orJN1UDl8QgbUCXSXcN1PpHLUsOYZIk3t6DZnR1\nlobNaRMDuecVyNiqh/nqnzLK3vxBS+QEolcf6phk37ac5f+RPU3usmt1C7Os\nu1Eb+PozCtaK7uK+ilYVU0+vGbu1obard5z6Om7z6Xxkwfw37lj3Q/Gyh0+l\n0xpKu3Uk4O15HlU48JjTqc6/2v1Dy0qJKNvFhf4g4o1xqWfWUw9Ycqk6KOlh\nsVg1+mds2+eVp/IhFa3nlbzNzbBCz+zZGTjQSqmsZdm+QaxjUo7jUIFIhK7d\nsrUG\r\n=hHm0\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDrZO/sHM/RdpqcFzQ6LVh/4iqSb7HnAGbNbHXTVVw9XQIgeYKoSyiByWJ1iF0/f+hjGoyl9Pc5RjSS+lh2Py4na+E="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.16_1612343270585_0.0016848855269566698"},"_hasShrinkwrap":false},"2.4.0-beta.17":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.17","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.17","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-nHXyEUmuo8X7KSOG7c2DTzDTHjonm/qWnEWxF8H2KrwozSPsoFqP7AeeWf0vFCEluKjEbtBl4XE+XXDOszb6kQ==","shasum":"def5aa9a395ff3487cb685824207af3b9ff04c50","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.17.tgz","fileCount":86,"unpackedSize":1514448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgG6UWCRA9TVsSAnZWagAAL6AQAJj5aUh6xysguR0KbzpS\n8q+0Oaod93mzf4gbeS+gpg2CrgxMbWdItNOAJ2+2aWJr0EIJGcd+rgZ17E7V\nsY/gNmKq5Z8iNGhkVr7OaYgyJICP0F/pwKh0no1Dh90S8YsHsonDIvNTUimQ\nXZWTS4Gz3cbhDnnYKzTngfEb045De3OkLkVQvPE4f6M31vGPFHlhRU/4ajp2\nYsjnZ4sb4qptqE43krU5bKPJmIE5G/a3qQycpRkQ6SKPs7ZMuSHFX2Zqq2sU\nkKtHdcJz3ZLqcEqUbYprVPC+Nv3NHDwbz4zQSsgotp6ddkveljWXdXIiB1Xl\nilC46zwHcRhJP2dglUnXFzDa1+LvhopdmM1tzj0myhyn+oAvfpoik0tHCQ6O\ng4UAOclDtV1RfBTMxEkEzNOLlNzXFgby+BXzvVsupoT/l9uqhBw3S9wU4i2L\nFlIs+/PqJgBhoJ4C2u/d11Ys4/Vnz2n+3dJ42QKvXrMgZoxm7sorNYBQgXPS\nLlhtDi42YjBLE5boW0RBjs03wJjfNlurTCHCC7r5SWwL5uWyN+GfoMUtvYBh\noAtN9Yeh7FdlecBwWFAyqk8ADjcbgYBoQPptWXpMIjuCg/adIVG9wkJTQ2Z1\nfkcWnqn99AfSuy8RUIVD069FNYSyXGLi5vI9scmFRD3gLUdq/ZFzvuwEVLyd\n8NBN\r\n=i+R7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDumDLgvG1WYxA8k8UbEhcBVTtnpFxe98NnE97ecsAM4gIgFzo0xnDrCFfFtD9zxr3Ke4pF/hAZvm35wGOHihyQ+mg="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.17_1612424469797_0.6993591647849395"},"_hasShrinkwrap":false},"2.4.0-beta.18":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.18","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.18","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-tNJnCRAhI8JcF2Pzy4XzrpMMnRNkY4GE6ao5IN6cIOVi6pwvP/ubf7vXOdlxn+zclwzTg38pJ3BiBhPr8eKEiA==","shasum":"cf0096f719e729f07f7f73a7a617fb521e82919b","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.18.tgz","fileCount":87,"unpackedSize":1515977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgHO8NCRA9TVsSAnZWagAAhKYP/iH69p5S+WLAKvMvCSmL\n2PyAwWwrNNgillVyQOTOszB3Aay0s3q8IhrfjBFcTqOAVFxGaF38t8nQXaIn\nSkIdICEU9HIB54ebVxBzuLHazhpKBxEhFbuQif8veUScpFGct8v+yWspx5j3\n2lo3DyH0O5yOghoruJj+SjDEfKavKved/R+R8H8kkc0dwF6yclELGgb1GCcZ\n/SWAnkl9PGKobOxSZv3hnl5X4//4KSiGgjwABeaUNflllLKnROMJiSQQwaAX\n8EYYDKVJTwxAgvmjdcZsQJx63+vTG1HrxT9u+UBImBkOmW2M1YLNKxnNzF3N\nghTa5SW7fBLAthMMN7eXes9HcCwB+zsf2B2vDu37AKf5UFYE4yFp3M36wYNc\nx/yediMq+2cAnZi+XREG7oS/kFvVWUI2NZ/PSyZzpFdDz3QRCqFYLwPFPcAT\nzpuXX4sKiEZftLdUguoaa3nKyeSCzJesNMBLZqwSqseTUikZXdsoUkV7pgXO\nQ0lVoZaAVMnRRcuhqtaUDzs6gWal23XBfNBHegD1thr1j8y7oiFtFmOpZxLb\nj+lIMl66Nuq5+WpRWMIkPwVsGfjN7eokEuEtTuUg0N115nbHf2SYRdG0ihoL\nrPHLZwqTUZjkhVp+YK6v2kHtvuTbRLWRl0RwwIn/3NwBzJyG/D1VKGZZbfuY\n5F2Q\r\n=Njp6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDe+B7W+S+61t6sKtVDD62MoWmNh+EAFvWwCG1JddPvdAiAO0JkLWkpb3E9kBeJ5tNtFQErs75fFh27uGj1WM4FEsA=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.18_1612508940873_0.7624011638532662"},"_hasShrinkwrap":false},"2.4.0-beta.19":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.19","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.19","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-d1/97acYWvonBO1fbGOcKU1OtUVipdGsegkk7/zvlLwq6PaVKoYAxxZzYHmjlr25wwycRfeJlzR7249GZk0p6g==","shasum":"2df7c5ce39644b025d3eaca3ebcd1483829c0674","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.19.tgz","fileCount":87,"unpackedSize":1522488,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKfM3CRA9TVsSAnZWagAAVmYP/jVnVSERbTooKHrkZFGE\nRyhnhvjuycCW2hjfrug+dy5Fqj4C1Xbg/y7YSrzOSuY2vbYkYpKdYFfi4WN4\nXC93e21soLZ6cXEuPIGwYqXYuxCy8z8u64+7YjA4qvQQjirEPF6LgMHBA1uQ\nvKo9DH/cPrK9c/xE6cgfGw9/RMcGOjcR2ZKmn4kE28Rv1AhJ/nvywW2z26nR\nmWhIfwCd4JkUn8DR5mMdZIlOq0tJ/83CXKSdWqmg6AjS2ISTwQDHpM2s3mnQ\nlnfeIIWjDyEk72pyJcAdKYh+tOG6c8W9zmYsFOcNx1VybR7hlF35YEZpc6/D\nUHGDTyuUAXTIKmGCpQOn4d6CYCqqeHHyJacQuf7WsjnLVOSSkQ5Dxf5Q3api\n9ClzeLTndBuCa9na62goWjH9tGX02ixUDqdicb8OSoJksZb3ZueslJychl69\n3y0qZ6V8AMaHJHF+PUgFYNkOtvcIKKiqgQgY+IhvR2lyBznpxrToVDkrpZg+\nz3KUe2vik10w68KutE2j6gY/SEpEPFmIJ1XfK+ux3QH+klH8Jw6AlyNqJoZQ\nYFrEP42NJFwpHzo8kQYfjspNp8OzzgcCttknchPR1H9hiwP+2yOAGSFCz6wQ\nvx9HPtsqJUYHb4YfRpCK5qkreZZWD/x4p7m76v6/QlKC4l7lG5eHdQzuPzPE\nGOdx\r\n=OrOJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCY03P0ziQvR42KRmk6Hs5xNE9HKSRtxo9T1T2qBUnscAIgLisGug81FakTAjhuYDRVAFlRDt5uqOBgPJ+jniLZFe4="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.19_1613361975250_0.8979918522336829"},"_hasShrinkwrap":false},"2.4.0-beta.20":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.20","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.20","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-eg8sfbr54/sZBNuahOgsLAglZjt0ZonoAitSkzVCfEpVkQgZw6tX50Opu8jR8H3F2l0FpYp0+jITpRzFrabrwA==","shasum":"e4cdbbba370662515fac965a4447136cffa77305","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.20.tgz","fileCount":87,"unpackedSize":1523511,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgKzY6CRA9TVsSAnZWagAAdKQP/jHslbd8zWFH9AcrdVKU\n3Vrhw8r8uK9TMnTDUaW6DWvtBEm0gtdQs/BodmHC/iqvkku6KHrF3Xj2YI2N\nvQ451J4+4yMxvdXcZFI7rwC3e4zrRxf5eYzCMD0/3w3e+PgKIRI65im6AVUy\ndF+J6D9KbsCaE+53AGsdOrpk0dPXn5oit6JtxIif8MdY0Z3SHt6G5Li0sW4q\n3TIIM1w4OmVeDZAbZVSyglxMDaNB85js/DimX9Za0wA8u4JT52H89j0KXWdy\nFZg+3EOYBaeW4WA+uQAWEWVIlYckebIG0EFtsmn7lQts6/zzuGEgK/iJgJZl\n/Hwi17atTcUJba75HCeBjTwUJMslRYpYtnV/fysNTv6oEOpCRuC/ePZaZt+1\njHn0GA+6gmGsM8vZRCVvkcmM8k0azNmJJSurGZ35Jku2auZKL5MI7NiO1eqb\nOpg9RFSxCdJWgjPQMFXkKYcx7SMuPaEtZnv4OYKw7oNzpcg0PTLpmxVys0Y4\ng9DC+4rGwbCG0sMcQZWG0TkRbIy2spMPBm5FaxworEPqTxL8Mip3NBpgWnvA\n22rT7MOf44DxMygvbQxZBhdAETWh23OtGyZom4MQYsAArwSLEdQSFCwRFyTv\ns3GKULGcyvOjgsHA7XLARnoo313vj3Q+LjDMDDZja3Lk8wztLexTEBW0mxKo\ncQJk\r\n=SU8r\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHQefrERChlhWh+G7HtThgqO6cDfGkz+ri9iuNK1wzw/AiEAtlwEYXvzJhTygQpB4kr3pr04MtEpHvih9hHVNEAIJb4="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.20_1613444665614_0.7141789293361627"},"_hasShrinkwrap":false},"2.4.0-beta.21":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.21","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.21","_nodeVersion":"10.23.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-pb/HI0tS6FbYH2iEnPfF0jgBrgKE6067kncrLomrgT5Fi0o+fGsiSrs8x+VK/vzfKXqrcg2s7uULPzSjqxcTtg==","shasum":"b351aeb4111534133ae39625315ad3c67b321e95","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.21.tgz","fileCount":88,"unpackedSize":1533187,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLMtLCRA9TVsSAnZWagAAFpsQAIr8EZl8uefbcueT3W2r\nwrA9E9iOVYmu1AkG4Y+Q/TibPAyNTOKWcl1B3vAJLQlAP7RQTOx8Qcu3KXbH\nXepnHRMJzkR4SU52Oq6Q6UokO7N0JP4YfUmocQ4SBIpLg3/HLQD5d2lFczI/\nxbOW/PpSRf2/2bYHc4LKriYy6MYUIkH3BoDF5ciHIWpbQVWcii/leflVjhaV\nfKJsSbgcnyxkErbq3JblYAu+/swlUFgg564CrlwVU7+UtBnSj/mM3RzF591y\nhADvzlkaSCBFAQVr8Yj+CyFWjlqxPtk+JDHI9Q8j0HQ9u/cQd2/eNyi6sIKW\nMuV2DA6bIhg7GyE+sFn4alTHCB3rsobqRZCx+PbnlLRuYMuFUHGCQcDexDxt\nfnDRM24PL7mebiXIxsxhCiVGAaFt86Av2kUvanjf3Ftgcr3tT1JU34VFLYhL\nAK4XLgLcm+sYEk3uX9Olz+hcORLVpTlqC+/0kUzcQ8AFQmMJbZVU/hbPwOZ9\ndfrLDCmLO8E/MwgnGim6OoVel2aZ1yeFc6S19nI7NqX+V5mW/GTWQdJIb/pb\nkdSRuaSZWA10Wmi2LdRHSyTuyZ+WKrpKeYyILzhIsGVlnfRts6cpHEzE0raf\nRnpEttAYowNMf1GDGDjAAX0EMowZ9L6Z1lsIxoIPqjasiLwI7VoEisQMCAFd\nhYsh\r\n=akNf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAI+VJeSPamlbKy7uSsZtE0loSW9yuJF9HZiSl+Hogm5AiBuFx3tgVzw9jBIJrcaKWLWfZw9VcApc/M45YbmHLuihQ=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.21_1613548363279_0.20449663056354006"},"_hasShrinkwrap":false},"2.4.0-beta.22":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.22","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.22","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-NCk/UHdTnsDEGEuI1Ji+S9AqFDH+ebekosmE7P+EEShnRmKlqE8/pv+zCNaZ33CNbhCxM65l140pWFEdsgi4yg==","shasum":"df219369360f1db3711dc5264aaf4218daf3d663","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.22.tgz","fileCount":88,"unpackedSize":1537713,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLiBYCRA9TVsSAnZWagAAE6wP/iIy0h/AdTvgC0Oo3Y7a\nY2YNPPVA7ISHFiUhEw6NTy/toIKvBexIQVcYXAHt72oK8wL99n0gPXG9DAAX\n+sQcCnlM6xKCH8zf+1L3fY01rN8YGKW0HBBKeXShMVrqP8Lwu5SPJoyeVgdy\nzy/uVBjpGzvcQXgVlZlxkQRwA1K8qQG5m/Wdq6pX8ivB3mUKjN+C9NY/e3cX\nFqXRnX04lYR+FifsnOJEe1eYw8IMYYVnKyDn3onMvaZsfsYeVPrLdh0P+0by\nkXOtXHew6vYhkNXpSrbStmEHiglH2mMVvUnwNMIEvvCt7A17FMXyeiHdbz06\nVWdJ5PtrkWFr6r3+qC/nkODQq1zhMPxbFLlSQ5QofJtX1mhohJvWXvOKk6pN\n6W9ADqGFW1qOrSfRZEsvdbpnlVsrtYn+RBJz7i3Mi9m/5nIa37bEVDclG1eX\nOGbEcw5tVtg6TeqVCgpj+iFVTLypXCz4vF7v7ZkuPLpzeR9IMBosih3QNJ8+\nc5bkZlww91riAYohAH/8AuAURlv8OvQ5ViLl2E84m7iylOHvRNj64FYHhQlF\n6yCD8IGc2AItCoGR1RO+Wz1w+daUjjnSHdqB/IwjZibx5yekmuTIEXUga6OI\nChAS/SF7Kpd/kykuEZ/iKTJJ/k9rAFkXXiI1VOQKnT4lH77G8PeidH/D0ACa\n4UQP\r\n=Vwvw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDUaDZU9b8Vt8lEBlOUgQyOdF6s/juUOCmn5+HNcwjr/AiAvJY3kxqSfgf4WkivDZnswq57+liJq/r8m5JiMoSGu7g=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.22_1613635671950_0.7748002990031164"},"_hasShrinkwrap":false},"2.4.0-beta.24":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.24","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.24","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-n/L+u8b8hIYZMkYjts5rde7NlJB81PbRsXsxhknHy9aW+1y3ID5U7PflOqeugq1G/U8Gs3WYsEEGqb5ScrGVgg==","shasum":"7aeb1e34a1dd60607b06d7114f2defad9aa85228","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.24.tgz","fileCount":88,"unpackedSize":1543277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgL3ejCRA9TVsSAnZWagAApEAQAJoGJQZFxgmFhPhanej2\na8tigrROyUXIJBiMp0l1tdrgYSX3WYbKteFOxBbaZArG1UcOrjnfYYadUawH\n6eoT3Q7mfP2eE7v2Y+fcuah9M3FjdK9nTiLTF3rUHZyG/y4abNIMCK8MmvJd\nl8tQTFWIk3tdAbZT4mYZn2l9+XRnDIQXat3TlNfObsncs3BUpu3DREeIZf4O\nchakNsjqQ46uYEtgfQiAfxKHhCNnC/kjRuioX+scRIfII1qmEkXVQ+YoM17p\nhadI6+ntdd10Q+87w5Kiq0cvm0GBpddYFpXQM7hYTe8p5KT+SPKtIoXKgKEp\nytJNg3TsQu0rNoqL3b1QUBYlQWaE4Emf5vJf05LnH4c8TnvAi8UKmGRSg+gG\nqE2muyb0Yz7nd17Efk8o71vib6O0o3AOf9/NjSZBlmyDKvPsu/kzvwu+4vWI\negHSWEh4xxZMantfbN2Eb5+m3z/jSzdLWaBAaU/CrZyHzIPBwb6MgOLCemAd\npyOr+kDxAsLRTeh11+hLEf+Cjmamwjk7vTxM5vzLpNaPIxnorbPha7O8tz9c\nkWbJ6h0M3UuMzR383vgVJvb8IqaJdVN9ULB5XcEFOG4e4IOroId5z24/dje3\nvxH/LNGn1FMaxR7BcF3Eq/h8gGf+9N6/+IeE1xxb8LF1x16JQItoel4C9z6o\nPYhK\r\n=apF/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIClPdCWaHyfP1IZJIyu2TbTOLLPwaAT75QU00WcMfvvkAiBte5EW/RNC83hQw3lTivZX1wllgCoUvZCaeJlkyStJsw=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.24_1613723554769_0.042937183081871"},"_hasShrinkwrap":false},"2.4.0-beta.25":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.25","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.25","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-fntorLF+3KaQDdD5+S40L0ajiEVbWjyX9br15InXTKvs115l0MFdd9y2UBsFsuP2mDaxWQkZWVb2JaWXg6uMww==","shasum":"7d022a8f4e93a07c67e6c07ed79bbb47446fef6a","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.25.tgz","fileCount":88,"unpackedSize":1547189,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQdsqCRA9TVsSAnZWagAAIg8P/0zYdenoRkHsV1xXzwuq\nlXRMNJ1FWgzjkxG1aqpx/0WzX6PDN0aPNusQc9AzUORDx04+SnX7iHnO9f76\nGmQRXb/zb1eR58+VV6EkaMSwdalEJEfr7QWEHJkopxufiiTBqFTO7qKZVsYl\nJYg0iuPS8JDzFECjXNRPtfR55v6tOJWFEnAPH8Kps71Y5I5HqyQbXoHo2O8Q\nLpzXJhKA9GQSj3/WhONXMZjW6KBF7rd3dJlXP0JUsUnDu/TcsDvUsUAEaMGY\n+44RtvzjkvtYO6yH9eDmG4mPuHabiehWTFypXX0QPetukJJR8FROCD+CLipW\noxb2kSybAZcVj8OMktfNNo2W6xDE/wYhdQD/3tkhpiErkrQM1Itp9XNvrNSL\nCeTZuiooRXWgS4IYHFHRFqc1NmYoTOmJHc6ylzbPkxwL7W7tBE4b5XjNdSdo\nWTxwwtErmm45dyWEtmjY9JR2CJ6fdUaQuBr1BSend02BPCMj4FVjAUucO2Wk\n/VSg/wX6GTTxn2WEwTzq6qlDnxUCI+VOWN9AtpYj2HaMx3NqCf+0Pc0vMJMh\nA/QWIP8eQ/bQ2QIb3xr7t1saDzcYVy9ZOlCkiycX5phe9hr0tIY6qkoPmcaa\nic1aj8Nzxc+lyexpVJK+ZLapuk1DNiApGxZuXBlI0I6PTmZp4kl5Y00OExkL\nvZW1\r\n=Ywph\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIEIMH80I0+eg6tTh4axHHKmfXVEyrTyLU1muOxCcoWhkAiEAwrNy6JWwBnHm8fr75COhtf5pQjKgnE9irnd0lF4/i7A="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.25_1614928681931_0.6146042331422026"},"_hasShrinkwrap":false},"2.4.0-beta.26":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.26","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/appsocially/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/appsocially/schedulerly-client/issues"},"homepage":"https://github.com/appsocially/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.26","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-ZKA5Z0UhPaeFgEA97rQtsAw4lRoUpodY1STf4ZmnwUgCkMLBJW9m38hujxRAk7twDTNeNtV/w81KC4YHgkvUyQ==","shasum":"d76d1a3845ee9f4f74be9b4c90b6185c0596467f","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.26.tgz","fileCount":88,"unpackedSize":1552892,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgTwdBCRA9TVsSAnZWagAAjUoP/3TFaey14AXb0vshIQ0D\nmixjLEnYlK9NJMfjBctUduWC3en9/la/Iu2vTMorhSzqxRK/LaSlSc23q1hS\nvjQRdHfQrNHMeRhJFWFvwjuee6YLgCGSVSv61bjkXcjrTyiQGoF2TIRml8g8\n0px5MWUq1O1P5i1uXkGgEFz2Fcos7cjbkRSj+xX15yReYtP/Bfo0RLYaPU0f\nVmE7EvO+9jxtfLFYKUJK9tVJF49FTR7lc0es8eKKTCI91fQUUgx/2jXkvWrI\nyiBjTzo8Vv/JNeJoVhcnAqpLOyHaiyEC7roKz9sBQ3E6LQOplnOkryRnp+qj\nbP5nFHLT9VS689lxV8Etyoad73CanZtQmQNt3rec7rg5YQjGaPD9/TP7uWub\nY/3iPeMSZFUQM9un9xgd8DRGZ/WsiNQmH5fSEEVq5PhMzArNgA6W0N2mWkwL\n/3WZxm62MVTs15hmFQrPvNS7s/u5T41ov2rxsNmjbGzhcND1LOvzy+sSso7A\nBj644Z5GL1jvKH/c+Rcs/S/i55gOfM6XOyBNvMgPqmOZdCHvvAB8oISw8vag\ntZnWhYVv3rhPuIveyX3GDrAKT64cZEORd0Ik1SooSz7FwZVNAoRRjjmeHfXO\nf582L6Pym19BAmYJN3N3k3rrKR5rChdbY34Xd24OrESHq+RSOfD1DuvD8a1B\nAEJU\r\n=4LbO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjmzEPoeKDlYPYXudDj2keZQeopW6JBeiP0LWE2UZWewIgJ6rciGgcN+DRkREasxHK8IyAJaklIwhAQ3x+2FnQJ18="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.26_1615791936846_0.23155733861706507"},"_hasShrinkwrap":false},"2.4.0-beta.27":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.27","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.27","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-ZoJpzAPFjCFmG5CJ8d5D0ovOuieOl0qSBYnY1cYiejRT6A74bAaGbrraGGAf7KJHXpgt27gTzVRNBZ4bQ8z0mQ==","shasum":"b9a4ac8a0d2f2c7813312524ad51d690d87a95e9","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.27.tgz","fileCount":88,"unpackedSize":1552894,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUZw7CRA9TVsSAnZWagAAgN8P/2vywraY1vxO3NKyedyx\nUEvJZ2AbzeSxhoyAJ+hM0uakacvl5+LbVafYbSRN5vsrbR1Ztm/RG1rysQxX\nJU0HJ/Nu5kcwJ1dhE0SGR1bh0knXjhk+QSu0Ic/NAaqXrbrNFx3YQCslCjtB\nA/zVLRD5RNIcIFHPsh8Qgp+ef8NKHQRyIWURHKDGu8EptmyollM0pM17hYY5\nYvU5bj47CfJ8Qh4bQdY28U+BtfCi/5Qk0x6bV+LXFdzONfEu+UIeSVmBSduq\nXTDy8UnRhhWbV1FfTSNlXL1XoKBomB7/walCKqHYsqe/uxUBzarchWyaoPsf\nG7q4dB+jUGvQpgnrPex6Gn70vYwYJ8m1GOc0yN9UtusKfQ3pNSBEOGJwldDi\nUv73WmlIWbjyPgkXqbpX8X9TMMrJB8PTa9DlsUlUeqTW8u3JRjs9HAgefThm\n3rPwPkMCpdoM4ycE3EEWw1yGFFvQKmG/u3mE9+4m6bs7kcVM1vvkzv/VQGzb\ncEsfNsLGvBldUmpGhlNhU0fsL2NK4eEaJ2t7pjg25zqhEln6iUJQJudFm/8X\nHJDDz+mReWUNe0r/ZnwPccrPmoVkYezfliQt4lX643ipuiOH/O++BGN6atpb\nPcx7gH59HpcDkoDRXBJAcrnClL6C0WlTbOZ9AeMlyvRzAZzv7FpuNCcayG/u\n3pXj\r\n=RU8N\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCB5MBUhBBhV/zvtHjR0kE9e1UjpkXkVSl+mG32kkkt6wIgIgwAS5g2dnQdnJlTfIL01+LhgfUpigrXjsQZtsuXX+8="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.27_1615961146995_0.019832965025543103"},"_hasShrinkwrap":false},"2.4.0-beta.28":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.28","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.28","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-8P/l3QYW4Ot1wePKDyxcfIbr4fy47V+gNoshA8Z+UjQRJpxnTtz8F3+C6gqf5zXlzUDl468qpygrGkAIzArTGg==","shasum":"b3c33d63b7f0e245a9d2162600fe67da8cecdadb","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.28.tgz","fileCount":88,"unpackedSize":1557338,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgUaIrCRA9TVsSAnZWagAApa4QAKL9C+Gu2/nMu2VFBorB\nuLh0abQo9fXC0KAvKizuRfszLXXHgc2flzOLtZOaOsCw7CnJs3ckCGfmPC2L\nMA4+HzJmkRnfMprZvurXUI71XQt/t4n7B7Fr/TTxugw0Mid9zLXvfKfLID86\nb+3LNV1QJuyDKiMxHxuLHQ/9fPtOnwl1cMrdxUyTdMIvrztAXFkcnNOu5XTf\nlGjSpENwWWBniWgCjmXl1bJg3dsTz+96UTps2cbgn34QYwjn6XT+kSmRUQzQ\n++d2v47emInBPpef0f8xxfVb+Ya73+3HL+v7/e0POYVDOUueXbHJUTTG+1TA\nUuZtdrVPU7hFofY52Jz5tPKImoFAeevx2xiL7cTs4S44w/FbeB+GBQcgf/h7\na0wiMtkYZA+d2h0VTMx38Rvym2AQbSRfNKQqKFiqMsraOgr2/v0KmbwZzP+l\n86b6LSHxSbmg6McdqXJUzAbH8NyEXCzySN12YT9G8KafMy5HSuiJjOa/Gc8W\n6SbiGOBgjMl1f4CyOEjtjyOusOCDxUX4VakTJu0Uorvq5sXYJLqKy2BLrtik\n3uZocj4OIyzMa0a50WD7/vMlDkTTWc4druHWZmiuogXd1ksKTvxAQblBwFjb\nXLVd5fhwOao5I5KjYd/LVsJY4DcXPT1jgjIU7ISgavt0sm6Y0H9YR3+YwX1/\nrBzI\r\n=I6l5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICBK5ftuxvA4b+tCuYIF5CdLrmNPulOZP9ZyBwiiAUxJAiEAigWO2c0CV+px2Gz2LnCnHsVTwoXtmRrU9WfkE3bMjIw="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.28_1615962666591_0.20585287870355407"},"_hasShrinkwrap":false},"2.4.0-beta.29":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.29","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.29","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-km5vsqMcEEJyu9VIiLtV1nvEvwBmepf4gTTpZl0ObfZm+1T7sTTvedAMQCzSESxF++fOINVOZYQsPf1W+Vj06w==","shasum":"4ca928b361d6581dd6baa7496fb7914b10da21a7","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.29.tgz","fileCount":88,"unpackedSize":1559609,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW+wnCRA9TVsSAnZWagAAqYYP/366H/NLIW6yESO+UBou\nDm7W0TsmkTGhupAxHTQ/lA0dmt3wCGX3i7TlmzHPyU8LaFRPUlpnSa6wwnH+\nzFJ72nY+E6ZTa9UE7w3Y/SC/60xVpOAGuDEpMhcRsVB8cgdHir4tIDWt20bs\n/OASygKmuoqkKCinR6v4VisLcA8JOtUbC6rNL1npYyrkk+K11SPDQJSXmv1P\nXNINFQf3cmmC02qLi7vsOfvKdnnG3jMHB+l+89lGHN1B0fXz2Fc/EVTPJe/P\naRu6ZvJfFTyQ3hIpil00lC0iEvFNQt8495I0fR2a/62gVj9DbBDfe7w154du\njyXRPgoyEZtuu61FdEZZa+vWFui/ZczrT6ypkaBcJEPS6jnr3Z9sZAMsklLS\nIlTzp2ex+RiWL+p1O/4eH+tHnXtia/MbYvW3ugB/66UVDZKH7Qsnek+oopnY\ns/S7T8VMnaPqNB9XiOA/ZMOKkFJNFo73GzGt4AsTJrm09NzGzQohIvQdCA9I\naZENUElHudvJ3o88B0RIDMcDEg1mhp4xDJaFU8625SIug3M9h+C7G5Dr0bkF\nG7dNF+lYLeiv345AyCjTpFLRPoAL6cui8WtYrOkhZ0YUKs965AB1GgElEFwC\nc8aTQ91DGWYEpNPNsP5xSARygehNwk7ejk50BJ9fKYBpRjV5GqImJLyDPyRC\n1rmS\r\n=u5Tc\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFw7J/1fdJ/bfRyG2LlkOcZ4w/NFOJLiO5EqtlGBF8NYAiBksPsqnnqIufPLm2iB3u/UuUdT5YSE45a2ym7A/JTgjA=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.29_1616636967170_0.7600647168157602"},"_hasShrinkwrap":false},"2.4.0-beta.30":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.30","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.30","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-znwVpcdWTUDFzcyGbyM98JvPmYOLTxXdY+RTB7Jy0T5BKsb3NLRwmfR/q8jki5GIKHlvpJ2X9Bj+YX5RC3pkEg==","shasum":"cb499d6f61a14e790b317a405e53de2dcad55432","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.30.tgz","fileCount":88,"unpackedSize":1559643,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW+2VCRA9TVsSAnZWagAAzAUQAJM9Y/N4I5bJe0yRCfid\nd2PppK0aWxDqvXRh+j9yslKLdPZdKONORsKaIT7Np36PyWcli+KbF4rOBr/J\nErc+KIoXmlHt8QeKPijGhGsDMQWD8IY1CmPr59uGtvCOxvBE6SiAxGhJ9wA4\n+GSwiIJtpPauADCn0khRtNdCoBELUrMmgQYhmTou3qjo+vGar8DfmQLWhFf3\ndudUgwsD2IvUv15bCyYp5SNTz5Jnu4sybXXz4W8X1uozSHdGwQyFiqQbeDJy\nHG1Nngh/XtmJGJYB3lxZ6AXCJV6RlDSYVmXLJz8381ZIDpbQXF/fcZK5qlaL\nftCsvnO3RBqRmTLbhByEBaYKlfWZ/EZzrYPnaCiyAVmLfJojE9HJNSlPH7gc\n7FsXVF6d4PaqEYrmXHl0NNLTxWZcDdM72EoJwFE1mASQR+7X0iWbICdfagVS\n2DwkgIjNQBGTL1Z+j0bW/CcJtsn6Tnrex7nmaVtBtEiZYWc2f61cQPhMeIuu\nuX6qoo2tf57u8UFnpvGwj4SGFQV6wr6oNt//htv2EmFsZseHUno2KPg5cHjJ\nFh3ipUwiKSgQiFi83Gw+RB4t+XZfdX9HNOdKM52SCLqxmd94zx59F73AHNpv\ngJ8PhOEjTri/Z470yoHLPWtUXHQg/sQR29a5Cq6MEk3sY+EVq4IXUnWBP2oc\nyimo\r\n=hGeD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH3XPw5lHSNoyPV4iM1/M5aQb5fQHkuzIvHz8/tMOPfuAiA66vgkPqBqILiBOTu+sowoojyxpTkXQAgtpwpCICPWgw=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.30_1616637333398_0.7531348358699983"},"_hasShrinkwrap":false},"2.4.0-beta.31":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.31","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.31","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-qmQBtZi6DtsJ4T7mNVxhDRQi/uyalRHMJGEnCSeLPANVPbVbRVJx+HJZFfgIQZj6yC/9KVX4I7QrO9ukSIM+4Q==","shasum":"f6dc3e59333bebcd3c0fa4d3ef44db25cf57d4fe","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.31.tgz","fileCount":88,"unpackedSize":1561353,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXAWWCRA9TVsSAnZWagAATvYQAI7hjt+FynvVNpG1OCb4\nOrkHB/7AycDL9w9H03YAHhoB/x2dXFHlWriIxfHSmrXcbPg+VvcFb9yF8k/0\nNEMIGP5uCWdGh3UsmuvXEvGfxxi6wXq56p2ADULrNz1CjC4C8TmWIcvNC8/Q\nEVqNklhp2ryi7Gn7pcQy7dITYxCObQ751l+CLo9QmVpUE40UMc9UocSmi8Pr\n+LkGKV1o5og8pqy0LcnZqpHvXl/1hlMuvchQYj+G2CgSSn/ErcgaCKGBeL8T\nDYGgC9L7uK7g4gbUcVdCODEBA1etap5dOpyUOKYaoBB3vXVaOwidwaKJWE6u\nBr+Qh3nzAW8YbCYyGQDvQqLdOwBY7WHXb6h6wdx3AcemMCAuwN9rGs6ldHP/\nNPK3QxTYKqQQdhLXt/7OBgxPpCiPT6opTrFm2/xX4n1Ow1j5eeMtaHjs3Jfk\n75dIerSLTgrK3jl2SsTQQhRFpfvef7xVJyyyfU/NjlMCuTg0kmtRoLHoMnlW\nZr8SyGjc7xijEAj784OYXTkdgltHQGyj1P5oI1jqBML9xo7dNxyhveiAA7J0\nB9TbVCeyaI8tBn9SEluz7X4O7eNoSrGW+YLL4502QMqpFt3y5Li3mYUqAeVW\nCd4tWzivN/61GQUbLNcKjBdfzLSm53cLnoHSLMA101iDv5q+WGcRUeq4Dl8x\n3xvb\r\n=J1lg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBk3Kh4YbuiUIjyQz/bsiEAXITFU20jKWF/kn2qXDcXTAiBF/bOoofRoAKRUhzF/VBoShWIfuSPq05XHPERZvQapog=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.31_1616643477715_0.28978512533491685"},"_hasShrinkwrap":false},"2.4.0-beta.32":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.32","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.32","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-orhfhj3oHXMLFLXdWiiW9o1k7988hDK44sVDY0B9zSZ9CNDYaNOeKRpPyAnT81hjC+7WqbDPtT4TSi7juRnf/w==","shasum":"af748b74947226dbeaac33cef15e23527ab443fb","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.32.tgz","fileCount":88,"unpackedSize":1561828,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXEfpCRA9TVsSAnZWagAA0OcP/1y1VbGj6r6igu43lFCy\n24WroQqsh8qZgpMQc9Utbx1yfDTJYPnCpbGtKYKx+ApXT23Z5NEkPa/rzCTh\na20EoLCIMHFPMEhVAbP/MZTmMoNj3hgFXOf3jZze2XZaRLJpfytAjFbo+QzG\nDf/FOXalcFrP/aO3Ojoqexe0tE5Yn4frIN3z0ElocIdz2aYmkPawxodnFmG0\nWHEexRCS1s5ci1hIZkPZL9mOqF7gXgH15RzZx8LBYWbLVDNvc8Xjo0AwuvPJ\n5WDKEknSPqPM8lF2xxNnFsZ1NrIWzTgqBqQ3R2YH6LxS72rzccxGp27Rnixi\n5VcbmeSPPLso/7aQ8qKbEoCpSkOF3ksQ+ncL9CMyD/K7H6qyuykJtn+zs9Np\nwac7oRHow6GvSQt4O92zyI2DAdHpWJ5cL6KtKuerUFYd59WZaBL3tTqxrgQZ\njj+gCXQtkqTLQFWR/tHzYv+efUvH4oUi/JrAuThtnsJG50/llHm6UAum0AqV\nwUJPNJKd0W9RnwivX3s69sgAa1BgI72H8WydKEKLMcwzE9ZgH3m/ck5+qFlz\nsvRekGDEvLTnmDyipvp9vycqou1l8ALnlnoUW1QjT8kXnlrQNENu3gUhZymY\nX21tWubSIooA8BJkU03O0yiPZpyL1bxIcbylOLwdX1ZL9Qv6fhZl6AGiYTME\npaCF\r\n=tf4y\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDDweDvYjhCFyo/repojTBD/nf37GBfZdoFLuTBxIUyAAIhAJc3xNCSoeHOZpTS9w/8n6MBsouMCRNh8k7mn50jGvlu"}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.32_1616660457398_0.5662003228607573"},"_hasShrinkwrap":false},"2.4.0-beta.33":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.33","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.33","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-rDZJ1pSmVIeM5G9Qzvwas6aItcRS1L4kmWXpGtBLSkTLQJrmjbyvyjRlr1Ienbsy8FU7mPz6HqtaNdVBnc3zXQ==","shasum":"f41007f3bd4186aab633540248d1134488481d3d","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.33.tgz","fileCount":88,"unpackedSize":1562129,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgXYFfCRA9TVsSAnZWagAAuAIP/RslekQloUtUIpJFRVvw\n3uwMIpIW4qJKog3fG8eDHPWOzjY6tKTv+0jxn2jbjxApolYjFTg+YI2a0ZvN\nMN1QBMcQOhcWgaxHFJwPWbToFl9QFNJC/VKgBJAEh/EPXqQK6vAKZSa5dBHk\nX4GN2z4NGxv9TVUgi6s75ZfAvtPW/OiWULS4JLzHsIczAZlwxxOkoMi+o7FL\noCyP7Pcw/ZgucRjMaxKqBa7zk/Agt3UJYqADIf0u7W7jo80bTpATGtDxJ4YY\ntEeOsT/1YB17LTHEE1RbpDt/JXN0xp7SGpsUDCcXjGYfsLEvEAfAg2P7gDJF\n+sNwLPxIth9UGVbFzhAN5rfxM4wbrplNMNgrrppqtPHYnjwizcW78BYxO0us\n0M8a6RltZHyQ+nMNxBp6GkM8K3LSMiIBfokviDivTZU7v6iz5nGA1q2BE6ys\nq9MP9u6gKidN2ga5jDVsouv/QP5YufiuAJArAtoRpU2C4OVdt8obHt8/g1pY\n5Q3YgV3SKovEIQ2Ud9TQLdtRcO5LiAXVltkA+dFp3OYwOg33JGRdO5ZKyXjC\nVSkG9X1F3e+UylQ7ai1I3UglEBCrMjPX1osGyRTilLR78vU0dTsYpFc/LjSK\nEOJO211NGL/kkbSW0lqS/yi99GtgSJNMQuOicqX0k0Tz99zckxP8syH7YHoN\nQ/30\r\n=TC24\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDJGsXDDTWXEWC2G76ntOLX5aHQ22+TIQqIA+pudUOK+QIgeP1HaCzQmaA0Zr+br8LOBun5AE0a36sON0MmXGeipKs="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.33_1616740702438_0.2638696344618736"},"_hasShrinkwrap":false},"2.4.0-beta.34":{"name":"@appsocially/schedulerly-client","version":"2.4.0-beta.34","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0-beta.34","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-6CrmIYWhKDzZWVsMrlLeqLNs4AQ7i2OiuwklwxADP7kFvMevHTxRZdNF0kkK3QSJYWsxhTfdflq3zW6t9sDqRQ==","shasum":"022ced144650165bf8647f2151a076735e409be9","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0-beta.34.tgz","fileCount":88,"unpackedSize":1576357,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgZs6WCRA9TVsSAnZWagAAp44P/jIAx4dvR1lzBhhoUS5c\nviZ/5zjCEFoOHDT1loaLUEZHRyWljVtSw3/IVDENlPd0Caib72YbxMsi2JiB\njhAADqNLferQsCsZeKahX5J9+ljS9YZ14kt19zwx1f+xzwuZSwNjrId/ks+t\n0nWcY4OWd9I0nG1lMvbn4M0KtoW8pF8D8LWkhwl4R1+iLWwpSmxHjrdhuLcW\nfSEyEXbEdeTvETOdRv+jnsSgW7pRiE2A7LMSXwmfvgtSaOYcplqJqW7V1if9\nkC01ztqLjgraOZYUIVguiVVOUIPKQTz5Mw72VTCDnQsaGWi3e0V2mU5nxuS+\nzcsAiHrHnN2lBcqQC5WhsDMgkeoBm8rZIcCNyxO63MoBwvowwG91c+ZGL195\nPgULTWQU8ilxVItWit1lEF9zdvUP6nCYeTdNShDcu1DN0Fdyxi+iPW1lMzgp\nrL+9y4qW3gdLv95t3LEWGmzU8upGnpLcpCkvPv4vzvQrON7bI4IDv7yMGFc3\nt8WebKVbsc/GSsnh71bA5QuQY3CNCnwkT7xVRSkYWbVVAQdzvYBCupTvpBx1\nDbPvxGTdsb1ruZkKEfiYEznp42Tkz8bfIu8YOhVPYGCdao10YEr6Jn6lXnnW\n9wIaE/a3j4LYzkLCnGKihIVOraKUDNw+BhxbhoeA3ssFouEgeXwmkWeaU/E2\nU3nA\r\n=kcGO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIA1yew5Oblpk1c5IRCaeEyvvFgYIIjNrAUNnLYq1gg+hAiAD3XJ6gPWFoDAFHFXaggu2F9Jf+ouMyWBWwqS3GgETSw=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0-beta.34_1617350293442_0.863963261475204"},"_hasShrinkwrap":false},"2.4.1-beta.0":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.0","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.0","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-trKq+lOoLEABm8e+Xul463qrjZXBMecnvNk2GIGJiZlWN2kN2WAXik1a4UBZtPfTXSJRa7elJBby6Z9CbqZ5Lg==","shasum":"ed7810731bcba97a08feccf2a8114b9f5103593e","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.0.tgz","fileCount":88,"unpackedSize":1587930,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdU7YCRA9TVsSAnZWagAAPrwP/02Rk0bMTT4o0pHZ9/Lg\nxmNF9LlC36dCXO1L+jWjJ6LocICcLTp0V/Wzj0pcnO9aZxwi4ijcJmV5Yscy\nZ2mwMHmmK9NtGFtsyEj8ncf0egfd432d1gkyFSFkX05+do9mxkSXr4J9KHrj\njvuc49OwF+5PLsu05ZPp3+/YoepHAoZZXwl7iv6T7WCH0a0PnI4TDxjpsOsD\n62t1rRHQgJSszgJuGeLuZUDhpydNJtqCiN+tGOjfb6+m+x5T9uELR/T2zl4f\n7K8X0O3hcpllGDp+EdA7+3XNTbLttYEmcHyOpS1H82i2NSgChDXsYEG/totl\nFKuTVD6vUjlPN7onNVDjBq97ZB19VsL/HQXFa7Gpo49iNbfAzlayJybR2CTs\nIsjxYXTUR8f1/nm7AcTqG0lXqS+KF9Jxr1I8VM4Orm3CXDjSWxi17pyXksvY\nnh41e3TWjBpY840vaQ6L3U8tRPBOfHhiS6gucPPMPlQD8o9J+bVP0ObDXXIp\nq5hm2I9DGuTV0gkwmhXCFUZ8fsHm2zoiH1QFsBx1I3XUe5ukcKBkjG27q/Ku\nzhYN7H2fuz/iQlKpgCetOLzr3eaONnPA2dqABjZiDGsSYRJ1vaMQ7BjglLUK\n3uig9OWWMBOx4Rgvbi7JsXr4Y8i3w/2F4WVgz/9NLqm3bKakH91Y3n7uBQs9\neJHB\r\n=Vcuz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDNaOE087RQ5p4bLadK9XkcCEGU3PKS8akaeaIxq2skxwIhAMKa37YfqMv3p976rFqoAtG3qBKqf4E6DMrh0xKXcBJs"}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.0_1618300631941_0.4892037948062651"},"_hasShrinkwrap":false},"2.4.0":{"name":"@appsocially/schedulerly-client","version":"2.4.0","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.0","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-0mmyfyB+MRwjOzBN7WBkFXSTStBlkIZq5kx9ZWfNfYHKEmuofk6BrssQeucU6LJ41zQ3pl8SbVkRmaenDaMoRw==","shasum":"de2b4531b2bebd0fd500cf3179cb6bd7f1f86e4c","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.0.tgz","fileCount":88,"unpackedSize":1588792,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgdpSOCRA9TVsSAnZWagAASpYP/3snmN8HsZiR/ph+NyqQ\nHWgZyfSvQOov9bb2fpUgq55a3HnN96QuTNjjsSVFQsYIJXEeybB+6Y6F2tfG\nTRGXJLv/ADTUsenxqMi/Hqbk0765kD/BkApCn2fYMN29vPgs7jkwyNw/fQ56\njSyZWapEw54sGZdffYfvUX+EZNJ8AgJzkfs5fPmFnAV8MtRCVfOfhz8c64Xa\nzScQDeSX2mL5My8/qodBheJSwaxg3Kj/48yorEwbDoOvlW1JFD7HAvzf8xZd\nMl7b2pjxLF3PG8kZcDn3jrNMSTFQ+baqOFLUXu7FuZ7NNun+T90R1Mk9ubs+\n9AFgTtZ3OBT5t9PwzkKsGsePFZZf0S7Ivc22b/yZ6NhDMmayCtTHqA+xZsJX\nGTaZGqcO8WbJl3ry8eKAQmnUH8Tl2lNgsr2ApFHQ6w4fyRhlJkhPyaaGSQdU\nTN15wHeMhuR7JTLE9kvnQDaLtW0f3UjhJVwOt2Yaq/YiFg6L56dJ/s+TBT77\n/UVn2wfKNcjokH0BdbVF7tePkujT0RtGOH4wIA5vnMSX7vGLXX0yi3RE27yq\n+0a1QFFhz5pnJBNgcjouF2oov0FuuiKY+ySWdjRTkzEVv7Soew2201veKCf3\npSAG71P0KHCGKCK3nLafybgizQL+dPpixSbLilPJiJd9+NYvRy/KKHy33OWf\na6Rk\r\n=4JVW\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCLK0/B681Z05q4qbMVmaEYIxaq7KqgS5o9shu3OY2SRwIhAMcR+lRj3xNWg8hPxjVQODxcOMnPF0YqXiLEmDtk6cKF"}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.0_1618384013463_0.6446346696065388"},"_hasShrinkwrap":false},"2.4.1-beta.1":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.1","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.1","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-FcjNcgl+J3gQVG8d3g1gzNfU+PNO9SAQctpG/4SPfZHSkfuY4cmOXPBmppeeT5qh0uuWu8H2u/H94YuEcMPidw==","shasum":"f9d24679df2c5eb6ae7626e8749af868490b830a","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.1.tgz","fileCount":88,"unpackedSize":1591757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiMldCRA9TVsSAnZWagAAhJcP/RT6//cV2EcZZKtnmapD\nrgvm2QYIKysBMdwXS3x5h6uPMTe4rLMtUYnOgHKeUpWdj261gsw9EWlCuBRO\nQ0V2G01NDuXRLtdTNOA0Ff8kJFpbY15yp0xL+QXj98rCkjlpGHphEv3+Q5OD\n5v5fziTws9hmR6BZ4ks3lrwWaYNGuAYurZXGT8fHzSsbl5oaTg1MB/8Z4IT2\nksLY2WOFB1AMpqQhmyl/gvhqQzkffcYzLJI1n3AwFtN9TJwi327t49O1n0k3\nBOK+Ppya14mhWFKQ7mkXGqUvOLdZWfTBCNSQ1PwC8afDftLDcWiCACLp/D+F\n2aMO0j74EYUGJDpNhB/0t8opf1tKS3kLfoB9J+IXThh5jhCGlIe5AakKWOi5\nWC4q5dUsAJgT897ifPgJlXjoX/VMKYIiNOc0wO7CYHbhdEI7uGfAkx4NjwNJ\nStnkfbPrbYFzoOvZkjeAa49I5C0sIBFjoehHWaGm1aT/xjRCMqob/eSCFzcV\nReYxGUY0QQbz5ock6pYtmv3c7EyEAUZyCM5v6N92hPeUP/Ag84E3EVjAwwiJ\nGOpwm3BPB9LV8y+LVSODISSL1BcgWZqlhpWqCgFozF8TA48NzAp8kCkAGSxl\n845IQI3PQ/UWvOT+1VJebHOS+8ri6Lt2krQZ2vGvVqbQFTQetR757jndoZYB\nfWm5\r\n=t6tI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDaAr2gY3X2h20cwNO4fxsUBeTgJHlzj5jQD1iSEffxNQIhAMqrKDJI5iFJQhgiglkbBAKH33U2fLJ0LJhe9DBwr15C"}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.1_1619577181066_0.8055053706995381"},"_hasShrinkwrap":false},"2.4.1-beta.3":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.3","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.3","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-jt3I/JAl8z73pu44wJQinnFqEwGds1yMiSSMXk/FB/JNycEDEDLs+dgJYmJ0YxlIKtQNeZMB6CDHi6NIHVfZEw==","shasum":"45bd2a0df7cf531ef50f9f8880f66f6d0facd5fa","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.3.tgz","fileCount":90,"unpackedSize":1599768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgi7fICRA9TVsSAnZWagAA1LUP/A2H4/YNn9/t7yQmDSRS\noa2va4HxI6VPy8U7t7lg8ReigMm6kufQY730uJDnSOBk1jm/vSt1OOrOEUHq\n79HsUDXSe1j/zlEhW1L99swHDTC2vxmI206N9UwlV2fbzq+UbXv7L8ZV0Lto\n4kbHvFETJ+WKmsXkbwnv/0iVY5RpZO0cGlQFm5o8GrRIqsEDVc2UM9DAgp7d\nfxxp2kMhmpo+pIU1Lzu6zF8L/FAEEOpa/sSWfTjQ0j3KiYFwTGmFN7+jQ/Fg\nnkz4z56SdC+wm7apWqyBvuB4it8Gbumxr1lSskg3EU4PmIERPTe7+Lgd1Dtt\nN33e/fUMtOlR2a4Wy7hPiHI4SPZFdGZ5YaJ28ClYBRxTSBeaIL9YHRpNKkAX\ncQIconxc/CedNCImznw7JXSlAbXuHrJN8bQMji7BQEiZmHvsC0CBhMQwxr75\ne8SHntSQkPZ1au1VgolxQSOAr70VVsYQeSF2aZ2gmBOOAXV2wXII1T6nMAgd\n/qg8aw1OtslpHQxbl9zaXTHMSwWvcCckOHJymwmGuRLViY4EHBl/VEFpTy+T\nell0HVEGzE1oaOiQlSDcJJucGsK7dsESyvDR9zauC38y94N6g1Are+slOzI6\nkr41jueSwfWQbJX6WRSDSgXqP5AGEKLTlInwEaOn9/C3GW4E/Rsz8LIKRumA\nZ048\r\n=Gc0L\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHy1JAYOqBj/fyMZ8WcZU/FftVQcqnt63Te16kLMuIohAiEAmTYA64m6dxsFWPa0Ko61yjcQkoOp8rz4XSz5Y2YPEcA="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.3_1619769287891_0.9692799912575556"},"_hasShrinkwrap":false},"2.4.1-beta.5":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.5","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.5","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-HgGe9mu/R/2uOqdiV5Ie3GbcdU4pA8z7XbpJHuc7im6j2NBapHUxyUSXo7JAQdNVC+BO8/U6VaTuLl/pKi1/UA==","shasum":"62ec6310f37f857edfc9d7c0cd5377536b3aa899","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.5.tgz","fileCount":90,"unpackedSize":1600667,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJglL7wCRA9TVsSAnZWagAA94YP/2kfnKi3s5cJ8ufxqf8v\nANuqUBy8MRL8hE/Bbm0FYXGaax5uOO4jslgGV7WUCMGYio5K3CniJ6cB2XFZ\nE9+SQqc3rkMU/ZTg9erLAotnT5mTr99A/ebjOkBW6E+NK8JABDzUFwFhWtst\neJfyClXcSUp28n0ByZqc14bk7LdgCC/NFhTNatoCfmpnii7mg7mfpxxX9Kou\nTswgCb+QuuQM2dBHn6YecIiwwmb8YYNQoUGunop/zi0rVJFwyFVoWt9750ic\nXRKLrObA0I/tbWrnhhX1uBHbGGIRzDgSFBny/MTqC2W05sOb97CoWXaKV6bn\nb78jp7x4qaoiad3grtFRc6z9Jccbv7/y8J3dZgH3p6AOfEnKCgeqS/QPl+AE\nzuKoYodARhD+Q9Yeo1cSo5j1i/lLQP40bnpFE9sFP1cd/aeYtmP0igwiX99q\ni9Ridij8c33Rl0oyY72BfYggagnRUD/z9jCUesb8UKvt2Alh93uN3+nP2+/h\nIcDqILKyzpzU6Nd/foqbThP6AisrV1b32Bp1sm8kxhcTl6luVwWCxE2n6zj/\nQt7GX9/e7nrhBXueoTE0b6msXd/nQTVjLRJ4uWn1Xac92FRAvyjZsquzRC3d\nKGbqjGfe0Q03R0k4PtKDsprSZMV0SxTEewtvIPBVw33OvVDXZlIG0sdvGRdV\nnoU2\r\n=m9L6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDv+KboV+lHKqQiSkFgqu2gS6YGFW6LvM3tPCMbNQqYTAiACV8rKEgjoxfNtKfLSa6Wt4AWWw3oPjcZ9glUYBAFjOw=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.5_1620360943767_0.5792001946886149"},"_hasShrinkwrap":false},"2.4.1-beta.6":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.6","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.6","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-klacbPBmx9+/bwLB6WLikX8NB2iPUSzLRGjK/JAS1+6NKHwVWnWkgNbnRT5Q++/V9XMBSlKluaIsnOxojoG9fQ==","shasum":"78f7f6347fa00737ae00808914570a24ab5836a2","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.6.tgz","fileCount":90,"unpackedSize":1600682,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmI/aCRA9TVsSAnZWagAAdAAP/iJBYQr2pmJ+BFS3b8xT\nEzWwg15zKylWyq3mMvH2b82co6ZYBpMwHlxXd3FdwTtd+ww3ES7mtnW9+1EF\nZr8ufEFIztjQ876D+7j5nLh59A4g8UqRZnLTjN4VrHCmRfHjNH1bQd0TFz7B\n43q4uzD4HQoSk8jQRD/dQq+n9SWDqDTqxuRz2brcVqh/mi5vvnFaBw/vMbEv\nF+O3DTGglbsSmXK6rAnc/yO6O8S+1nC/ZRgaV3oDm6JmFCFRySv65OcUBvH+\nLMqSoZaYRRx8KwGlt+P1vjoxFCjL1mMSzDP4+HhY+LT9whKhyV5zqqflMdPx\nQF7mnSn3ko4DhybIymD5dDgbHTbXA2uKf2+MARk4Ru43Vemu2atsHGKCiRLM\n57AypBmPTuRO4pNX6LomC1UT471OWGt7SQc4gatsapBaRrj2zL5lKw4+3/yT\n3L4AeiJkpHeaDQnf7vqHga7quoIURfXh+oNu24IUntD3lfIEBqiyMkTXJrl9\nQp3Fb7oHLRuEPRQgRPr8FTj50jlzEMhHL2h/u+XB9Gx5j0A+4b0ejCa25t0I\nKsJdr/b8wFfL4sHrLaJlq3m6w/ck4eh6pWMDuUSeCT06p6jHVSQNlP9PT620\nduot9Soy1+UIJ2uJl0lja71YBsXsYxWcbaiKyr2XduEYwC6MrKciU4OoyfR0\nRNh9\r\n=m8UP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDsVhiyRt8dBLQZoAv0fjrDj2bGj/+HHSusCvSeruYFSQIgIWZVc4XQsCaXtN32/hu8G46lSMMLFjvGw/bvnFYPaGg="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.6_1620611034418_0.7618666722213308"},"_hasShrinkwrap":false},"2.4.1-beta.7":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.7","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^7.15.5","firebase-auth":"^0.1.2","firestore":"^1.1.6","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.7","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-/9OlY1R3g13RmzZGGgG5vx93gsmxbwZT/dvai8MODbRayVllo3BbIhzAxx5SL5bcOj3wzO8AgTIOtyy+zXMQNA==","shasum":"d1d4e1e28e93248e45a91dadd78fa9960f5bedfa","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.7.tgz","fileCount":90,"unpackedSize":1600805,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmJnqCRA9TVsSAnZWagAAVH4P/jvZdnVC3Y4zMKgEx3aJ\nWUTKYaYMcif3UCmNPjsshklXTrIL9tFLcq9UQjUKI6T0tX1TYsouxrPKhl/G\nR4RPr7z81XvB2y2iVzpqXrIPKYrsDVBlD4WocMlQbf0mYRoOHCujUfLKEguh\nahM1kN6nLjMMHYtzrK7j5KrdxzUk3bhmA/irK5C/mwHi7jEenj+7spqbg6UX\nU0tO243FLlqGalcQCKp14bnpWqvEccdHjNespu8kWs90iI30CgXP/6WoKzH+\nsVoHR3+QPzJdjveiL4cKD2Kn+Kf0pXg4m6BxSLf5PKAzXfLVQGQxoHZs5DHW\nnKibQQzjhPyUOPY5SfLxp5zGbuStQRJOAxkt6Ybk/XG/QfiizxJcmHGsKyER\nwWxyEaFm+qBS/tEkriPxBauXPfpsaGEyIAgtxLxNVl8D6jcfE34sYHNzHXXb\n4jLnD5UWVDYFJgFDjntdWab+L4WhjbNKPcQ80as6pnxHV3JX8Iy7s070qyOa\n9vsf+PQLnK4afCCNSiuPRVOApaksli2gkdaHNYnELry7n8bh2Of+zBjKuwDO\ntX/VS2IUZAxyTeYYjhaQvyxlsyS9VKA1JMCnDB86mjwzXHAVwV8LflGs/3NY\nS76q52D1tCayPhw+/gZgUuyu4s9knBRJkTQ/JnSmmmDkepWUxNcHTSaX+2ef\n8dwe\r\n=fE4P\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBwTiwVwfzyYDy4olf4eFhxyd/AbBe0btCUqhuEMadEhAiEAhXf5xPp5Lq+145hyOuzb07WN09c//Rbgeu2ZQ5dmnCc="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.7_1620613609962_0.9904196869909496"},"_hasShrinkwrap":false},"2.4.1-beta.8":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.8","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.8","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-hLjqZpiCH4wD1awKkhaEt69Hdg8khUAJtDu1rGY7fKtrUgXTRs3ud/3O2L36BTYdTrO0aWF6h0d0CAG+DEo6ng==","shasum":"3e646192b7c826963dbaf25bc392a4f40ce73f54","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.8.tgz","fileCount":90,"unpackedSize":1601257,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmfTNCRA9TVsSAnZWagAAp7AP/0Iae0jWrxKUXk/Rc4aN\nD5V+ASXqDd0Z+FkyLDxbBlcmXjcstG6RBCltGu9j2vsmmB/gI/3OhEILw4cO\nwFdDefN2dEV1tQbjTYJdL3qlLnmQ+SmxzX6A+GtGT6Oypsv4Pln9lcJpUmpW\nIL4rJVCur3U4WJJAuVswb90cCvwU8SCRtPBTww6kvH0ZekC5YmsugqCB73XF\n0Tz06BGe/PBxqmQ5flq2KY26L95FL+gYoJ0uYSYVsCY/H3TXdO+259HGV3RH\n4mu4VzMYmHzBi+fgSSBE1RO8orXTh0ytD3mtJXhDBLvhBjK9QcB8Boux2RBI\nB4yrRb8ovRzlCHu6ynMp9eoilaSF6uQXXa/Bq8xvGdi/EzHS9hg3QUWSJGI0\nMbQYvr3hCGeepoOhLwZG0tWPJoplYsVmDvXKEL4akz011QMJIY8ijLVCAfhe\nw9V0o/6KzyrKNxsye30toGfDxBQQX3Bex5/VDGS35SViuSYTAJmlztByljkC\nPmooAGktFvIvsQ2mKt3pBRxRTugCAfGIQ25x/YNK06hhLobSaMPbNWSjjsdU\nRr+CppNvial23ylYnQzC8cySlg0pio87h112+XqHF1QqoSPxwGRn0EZvbSp6\ndJKm3dkszUd4Np68mvsTUSOoUi/hCWpU7ZXoPeJg6VuyqoGFo/CToMV5zDK2\n2/6g\r\n=3ikQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC4wVNpRQkVLQNHxMiutcHvse4p5LfDRdkGknHRo7b7fAiEA8NlPbNJw0VaO4hBeWZCuCf8eTPaQAIj2xz2Q8x3wsXc="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.8_1620702413056_0.13348127858572245"},"_hasShrinkwrap":false},"2.4.1-beta.9":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.9","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.9","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-wm4cMUll2Z5GjojBbx8DKBy5+BfgUfetffW2ENhYl3+3kHAQul7jK06SIoKUd240i0xYDuA+lCgf5P9LRIzDRQ==","shasum":"51c9279d3708cb235c254efba06c494f3cb735de","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.9.tgz","fileCount":90,"unpackedSize":1601118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmfzDCRA9TVsSAnZWagAAwm4P/0zQZNY7LHpR4dPHBFhx\n8e/k+JJL1mu9J3OKXLngJlKGlE1oreETqizW+fMbifbxxSQ6HH8uBrO0IHkd\nVj8Uz0KN0lnWp6taWWVhVZIBtlxGylxQnh+D/yYuI10mmAzNXZ/vm9X09jzQ\nUyNRVR3TnMa59KJlllOc4IqJvzT75pyPb/8kVsMta19XLwQy0+YUt0PPoOxr\nmSYYl6CTK/s7Y5CN4hwpA29WfqsEpRjMpo9YhJ094Z+tZ26eVrFmWK5LWmQJ\n+emWweBraN7Xk9codULxsxS8mKcb4Jx/aZcK0OdAbl6IZddTJHO+4aLWTGP+\nSAAAIP1rV+vvTd6ZsQjdLF5bJroZhCFaQdDfEb6Nu6LKbINA1VZi4de19yT/\n7y0n/R8rGwdWXzV+MRSXMz3yYmeTUTfCDIbC4XMz/h+g9u4CvFkWaZBC7bcb\n7IZWFyoX1tsKP57IvHYHCS6Tyt5OVhcgr+pw7FhNBQ7TOodL31rnAi3B3rNI\nAQDT6DIR5o3ZHryEtOCOs0M4b/0XrSdOXVGG5hhmgTLpe3R5xZ3missRMaZp\nhMPXaYgMiy9dYJAzljFFN9CiB0FcNKHWMUtxhkSU0+kIi6lR1tb8xjH4UwRm\nq+QL2kIaDH8MXywozgCJddxEPfAkOU7vsjr3TTo/iOxdqsBvwCI0zsW3z1m0\njgS/\r\n=yRdN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQClcZY8nKxwX6+p/RqbP5voVXZYty+fvkv2ea+WrGipYAIgRGnnz6z1TiQ7lIi80G7rAz7ttFtV37ugul2Rzzu8UBM="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.9_1620704450966_0.878920681234086"},"_hasShrinkwrap":false},"2.4.1-beta.10":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.10","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.10","_nodeVersion":"10.23.0","_npmVersion":"7.5.4","dist":{"integrity":"sha512-sU3wJuj89VuuVnfByACmEg/FdxUpxxUJbnzfiVfICXL4q7IwCEbhcUSEPp7zSQs9iYyIxNSWcwcvPef5UsXA2g==","shasum":"1979daff20ed80723b3cc5e773da8365fe79d40b","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.10.tgz","fileCount":90,"unpackedSize":1601192,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmgSgCRA9TVsSAnZWagAA+Z4P/2yv2tci93kY2BirOZmx\niEqNbzj14Pxh4QTSUTrwOqZfE1d+slXAOkStTNgPmm6Cv3oAeOxksoF+9PR+\nR5IpxMbjL6Jn+MOtxw6UE2ERar6gYVsxSbuerqfJMPw3Csfn0J+uV9iEN5dL\n7bLKgnvqMfSCYxodNucpSapH1+7vFo2GRNoD301ebqrwAWDy7ddeOZuFw0Kx\n13NvqoOooydWxctNICLjWZG49yjfowhkw35c+f2ftLIeD2FBTT4cCS0ZAt2K\nbhdcxK7x/U3jrsWXK73CAGKlCFxKsjk6qkWwrvURCPLq8oS8NzkXebPJoI42\n3S+3g+SH7TWdogZ95Og157bTlDDMDXdI9bdmNH8+oim3dt+nhQNUG4iKYz05\nzzNLkmVaZjtYOFbkAPFDgonINAe3Gl+ggGXbv5CJhlSczqmovjKuQqpxZaCI\nF6TfdHkVv7HkQ1qEDPLIn1WcsA8ilr2j/DALgUK6usi0GOpY3wU8YihmGIQ7\nOmOVlVDQuejtkHgnxI7rrY5zk+qcRSF/Ocr4tmAzqrq0vYT7JulhwMqNevNq\nufb5KLf0gPfkPQt+D+NafS4CpFTBgn6zpDUlCZaPryvlxvicY08cDXicVR8z\nSK2FjeosyR3bADT16NSi/5nh2PSPduwmlZEKePh5Cgq6W7lMGHlRuQOMMF7/\nIOam\r\n=krKV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAvFCHByMPc/o8ygyua39mgHaDtjA27Q+echYFEVg8SdAiEAnTVYJx8fPotUPqYHgNACsr7ee6NtYzw7bvIdQEdi6lU="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.10_1620706463646_0.7802166737152625"},"_hasShrinkwrap":false},"2.4.1-beta.11":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.11","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.11","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-IPJQJh/0rAo5wW0djnpmRXHLXylIkPW/+jHiCrWcjn2crNuqDhKiVkVsiaEKW9zh2N/I6iyjwd+5aUXhcyD/jQ==","shasum":"d0035c4c12c4e38ccfbb71292c43a09e5adddba4","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.11.tgz","fileCount":90,"unpackedSize":1601305,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgne90CRA9TVsSAnZWagAA5fwP/j7FDduA1hrmozUs6FKb\n1lX9wADJNgiXMIIvr8MMbz5EobmLAcjUhlOJrlkxY72t8FrCHIEE5gfrT5eZ\nBvA1ANUmT7CuYrW7c+kJRHVGhtNMoy/6SYhquTatcgbhuRodh6sPG6HfeWU1\nIeFlxMmnOTFH7f0O8WWsYpbijajajEroAUnuFfi3g8C8et5+3lwzGLnA32w5\nNaAoZVss0zlS0ko6rHdyT+6VwVF5gbc6wQBJjnwpsqC00tpwxmA9XFmw8rIz\nCVCkKc9dYY2nm/oaD1JnUR4BN5VkxukEhiDYRxdxyXpDFGUObN+AT+vYtCvU\nTKKA/jBmg7bUj53kTbwT7YV3EBPY9JlZvYIiNIYNURrp0IwgXf5gf2Oah5ew\nvWYL3F8IgR520wqI1PhP+hThidGXqiRxgJSXKGApnzjbsRubQ3Fr9o1Z25wv\nT0zaFcggG+NsZqayHxmnx3p1iqHghHJpVcAho8ZVMwpuSa3kTZ08wEYj4fWq\nSITS7v6g9+a/3rjv1/0RnBEww6aB0MEiyx5RqCmWJbV3UM7dMhbLwCsXuf5Q\nB+RjwCIZPp4mpydJYG6RjTlWY7TeIf95ZUx8MM3wl6dAoLPjhUZjo9Vib+cL\ngSRA1yENPppmrkzgUvsfnD4kQiTWmGlXQIMLL/ZQQy48eaVbdPOMZTRe3rcK\nc40x\r\n=Yg0V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDx46JbiJ0c+RTpt2YECXqwwjkrOkal6Ya0s2fR0ocYpAiBGy4q6kyNIl52EHem4lwQOLua7hsAYlm2SBTP/Kw0YYg=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.11_1620963188035_0.036591880714340164"},"_hasShrinkwrap":false},"2.4.1-beta.12":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.12","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.12","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-HEi6ljs/nIfJr5B0/ouWRjeEjBf3Iy9AKsCE1vMj/oR4i/7WY/1tqVUtiZasGUetATEip9ZfOFA7LvDr3ACILA==","shasum":"57747d023991a5f37f07c635e87bfc108881dfe2","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.12.tgz","fileCount":90,"unpackedSize":1603207,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgnjowCRA9TVsSAnZWagAA1pkP/A21YJT1QGsXgxw5pBGs\ntfpANFcZE1ASBn/Ue+w7R3bEeQFXx2Z1v6Ya/hr/ryuklRF/p36L3PID6oDF\nweSyaVoWttDQ4wkOnIP/9YbMi/MknPJFJEd5Gqm4e9sBejFf/4H5kQvJ+4Eo\nJwWwNWU/vUlEN98UWb6vOJsxA/LEHjweFwvbaaFo633ymnsQV1DiljVDQI5t\nBn7zyqsgYRnY+08ixFGXIAUaZ7BHHpxtF9AI7gOuvkQW2QWpCdqbuNMOcqJT\n8KZX40VJf/E0yS9xIXw1LdEewqF+ANnjK861xKYpXr07F4g1qRCtqtutrVqK\nxr2t18+HJ6UDlMWpy7jQd+7dQEtuFmh7Hvl2+plHOOzJRoP8p5cArXf7On09\ntOIUsSHflTWHGilOGpMEqZ4PmZKamAn43XLL7wUYGnmEU6r101A+XvCgp6sc\nIhafRY8zKvLSxrnWt8pBG5s2MWAWVYLVUqav3gHoRae2vFjHnc0m5rUB+EmW\nQNy+Uk1UjEvkVT2jF+Scrxw16JUQiCa17xpKjmpz2NsPxVj/Pi5x094zKBTd\nM6JQHRbboTDf+NI5ivnFkrQvBzRn1eHnLp3ERumjgpr3Gn440i+/jUCjaCwv\nIr2nYnxMKMSebQIHGGKj0cmyauUtlJtiB7AV06jXsR7PDv99/wYDSJ+0pXc4\n6gU7\r\n=iyyU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAhNBMJXACmEzUbq8jSYGhbOZHPgRfV8c7x99tRgYFvRAiEAjawtzG+leeYPp2sbVibWo3U1Zmx/RcdQiFy7ukIxHKU="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.12_1620982319946_0.5084754932647293"},"_hasShrinkwrap":false},"2.4.1-beta.14":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.14","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.14","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-b/vXhQ6mmFGefMhcx+N/nWgURmPwojn6S+omUyD3d0OGrRstjuQpSp4/KR9xAeLf/De4EWqtbrVtdHVoSnpx5w==","shasum":"49ec02833ad5b173bd4387909171adbdcf66d3b4","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.14.tgz","fileCount":90,"unpackedSize":1603303,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgoy2+CRA9TVsSAnZWagAAK0kP/jHVSbt0v7r0Xa5YN8jd\nWBbC6rxkelt0wKrzYQXm0xbiV4u0jBpLqy8sFISnNb7UdTxfRje2i3llYPVI\ntwI10789GNUWxX/cD6fkBZBXF7R+1xJvVnh0LMKLOkwgyHqjbB3khAqIGLDN\n673eG7Z3GC2La40mQZv5UW6ZRvB8vLfAAp+79XyZQdEHI3sETVH4XYdXLf5k\ncque8d40zlonqgpdMhQ3PQ65kk/4uohQB9VYE+5pMmxkaRnDdoYYlzusxPxh\nuLDFwtEGiydlFrmYlbmHpX3tKSFwVF4JSN8mSoHVpmOz4epdrUw2qYnM/J9W\nWu6YPfNDtnj+TdqW2jQRKOFqK9qf9hYifujJISKng+EvA553TNy8Wt9ar32H\nZPRxvtYBt1AJ+qinIMnQmucxNjGm5Nwm9sLq7PJeYfnXt4KivTtIZii/gA+/\nXIf5XAlUWbYwhCPqjRpUlVXxB4dpI8pqBrtxknAmu403VtY3uvF5MjGFfifY\nI7KZpo+MTNvyA7aaLaaqR0KbrtfFafBKhEcgZu/7ZnUYu/ZTKKNQ5Gi1JvU/\n4j5v7TNxJS7Ye+430s4xfrWHeAugmrUHCAskxmci9ClUPAHQZakl8o3UJms3\n6lSckUbzKiba/X9GU3cGzn5rxI6Vk7tyIK+7mcAF4hcwFWYt6SQPaHfzU+xT\nRC0F\r\n=8f5f\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFhgmb28rlQWsEkjMRs+DDfFL6djrl1wYJf5gUBaeKIpAiEA464xilzHBZatqesKqcVweA4A5tPtBki/tesFjA+WPgY="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.14_1621306814056_0.1461734121074847"},"_hasShrinkwrap":false},"2.4.1-beta.15":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.15","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.15","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-hbbqcyTIreCYwWfs1JDC73HgXTNBYK2EFl5qVvfacx3i2utu5YLl/wBglk6n5pYOZiBRzvjJ4N5iAj55D7jaSQ==","shasum":"d3345f36433265b18d29db065de5a0e0884c9998","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.15.tgz","fileCount":90,"unpackedSize":1603371,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgo2kJCRA9TVsSAnZWagAAxIMP/25ZZhSMknixDC+iaN7o\nZ3U9BQlIbBvgM5m7nO5L+36/8qNoCQF7AIZF5HK94M/w8OvfdoaP3Nl3a1D1\nVcJXNGfhBZ9meINZ3VpvjpA0uMoLJ1HsSN10QGMwnRctyRBKxH6iH3M9rO8P\nbEOyar05XKEUx7pePCjebS4TiZOQ5HAb2eQjtGY1t69jU1Bry6DeXEx7UZv0\n0G88f6ZmlWWkQpcQtzLtVeUgM39YYvvy01k5dUd8dPzXiWrgFv4FDU5b4gc1\n/0bTfBHjqwJbAsAyaDgKrWwNRlHAaAK86RTVFPeSRRxx6dhXK2ue5fXlr7xk\nv9eaq0JufNcim4xf9LP4jrNVEArguAtqFk6YpRmiWM7u1Tmd4FcsUyuRNfCz\nMrN6JQe/42+5rZrUT7KPXvJ65k3esU2DEcXW2XvTdov5WaoNfX3xTFRUDjmy\nyyYEuuaulPRpg2q+C1hf/3+5Iuk/k23RKok0A9+38t2W+8orl8w5eOWxJQaI\naiynPAWazu7kGi+e48cV6XLQ0NYV/1EhUpmVPwjDN/4Gp3NCGHLsw9Gh/hO9\nAnvAQqXubkB7/WPyxuSTMEWl47aa5VN3nlrw5aoRZdgC80elN5QUf8Sapg2+\nJ++T/vU5TUeAztAKavxcpbBai6TyBuEWV+qB3YOCQA8TQGCLLtWJnXXtFPoh\nJ3Nr\r\n=OVW7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHc7PKP4FHgLXMKvLF1wMrkyb9W5IgZn+c97ZLygb/5JAiAeNhCilZCSY+f2fHAtOjqC/RtPC0bH3fmhi8ehhH0Q2g=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.15_1621321992556_0.30832677743274495"},"_hasShrinkwrap":false},"2.4.1-beta.16":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.16","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.16","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-KwvnROFAoc+VBmmDFecZNtUTjdsHo+u+D7FDEU0kLhUahaLbbg6feJmqfpkdgzvhCI/P7V4jLKmlG+/L+9H7pA==","shasum":"44ce0a2da6dbfc96a7ef8afbd0968dddc08f6a2a","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.16.tgz","fileCount":90,"unpackedSize":1603614,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrKlGCRA9TVsSAnZWagAABkkP/jL+1ieGGve+InquSItn\nMGPu1ulWjlKCW4CBtMZREanghUF4rTihFaX60/pYQCo7eTMdwaGtjsupCZEQ\nMonHt6cx4Dz0MdQv4s+1ynJfVpVORhMHEA/O8jhHbfR8Djw5jZxRPnMoFDGb\ndmd/aiSd7wbp8fBrBqCjPl/Wd9sbXSwCfloThHTdgO/0XC/tZjt8uSN8JtmR\n5T99MLTIwSgTgKem8mkoZEztN1kZs8nLn0eXWElnmPrdtxe2KXho4e8cBFYI\nxSVy+97BS5tLvdpxr35oYTzZRMuOTIwLOSXUq60TyMJBOjXOfju0NTzlBJHZ\nbuYzWPQFhJ/TXwg5lZOlzTwBzSuwkSS29n4m8XqjQLFklbm8suVzwrjBE5zW\n45Vb9oZo/8TLEy0DibS+4/xKYkTYEDzl6KesDD9UfgdtMh0cwmqPP3+ABc/2\nZCslb8+3HFlJta32LvfKlgDcRifrUgRDZFmVpcHPHVBMhEXOFNpLvaSxeFgs\nItF8iPS+W9HZ7ZEfwzMZ5MPFPf6HEyzsnCOMQY6dwCCuNB5eU1ZpfIuDkd9z\nYov5cIGJwb8RRYG6e0lt6mpNkJVzORJf6ZAxcx8zHRLdQAY9uPA2+pKTDMdC\nrQjsdREk+V3pvMZqmyzvnAX2GswLKt5ecn4zAdCqz3UaViB5C6mRBd5dL6k3\nU1JO\r\n=cJoN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCkWYjakbeRCTrlknI4x3zxoU465QgRQ0UgaNWvP8ki+AIgN4IC4RX9jlHXMectbNzY3x8TjCelrhR6drOqydpQpyI="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.16_1621928262048_0.9614970347744964"},"_hasShrinkwrap":false},"2.4.1-beta.17":{"name":"@appsocially/schedulerly-client","version":"2.4.1-beta.17","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1-beta.17","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-UBdvdYvqtNYHm0jmh6OXOSlK1vj4ePw76+H4Z2aftLdWeU2o0uTUsQPEIuEnoVm2Kr7CGk9Sl4L9C4GuN1GX5g==","shasum":"64628cc2b13c7a090a89fe663df41904f60ecf62","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1-beta.17.tgz","fileCount":90,"unpackedSize":1604508,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgrZkgCRA9TVsSAnZWagAATlEP/0hO9sR+IrRnXeoBT0kt\nYEPThpuXNTZNowL4Qe5eegs7Znv6VWmOVdJBip9WY6dGidyLk7KsTRlHbo6+\nC+sOwvG7et0aOS8b37QfvZ3++bJMGBlVcdvqxHpBzZzV2aP+EQLIUlBqZKn1\nUvzlZRP9JUj+klBxeU+yjRTeN5qJ7ePQ6MQhOhu5x0bFufjgNzc/ZjBQz59l\nJzXvf03KfEMXd0QP7vjzC/b8ba+TmiFPJUS7yQ0NDambuUvxJguXJdyP2Hzk\nc7/uRYWQweEVKp6JpVKcqblA2SI4JoBlxsU/huYLw1n+As8J4cpbhtuLcIqZ\nLCPj0rpJT+LNuPjJ6VD22u3SF4T52hlsUrWS7V8tGp3XuBJewv18tQJ1C7TW\nyunOLVeO/NKfdPCuNRWEdniAXuoz5u79kfSZYXH58UUD3iu8Ez9+OvIc3sO6\nRBfFM8CZOeu/dmMurov3GouC+fVpcC9cyZjg0/A2PWPrfNRpkkpVckHsptK8\nkUfecPkQ/PsXOBnNvvvEG6IhNN6FKrSJYxhVlifxaW0CNs/5+IVBGCVumls8\nTs1ietKWBRIBqJ+kXV/08lpxP0htaUscklHg9i5XW8bYPPxeU5CuJhEWhv85\nZ0/77skEJnnHQNhyU2MFvn0MDzGajHN+8SAHyA76+gxESvxJEsGm6MPL0p2A\nwNFl\r\n=ZSsY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIE+/phU+BqIunX0V/2yXlhgou6gFaf9XiZu1JBHusollAiEA86cVE5KByhve/ltHLtAlunJMfUGHtoR7FF0zmFsFo1w="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1-beta.17_1621989663591_0.7800522332768667"},"_hasShrinkwrap":false},"2.4.1":{"name":"@appsocially/schedulerly-client","version":"2.4.1","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.4.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-TyNEqsJcsDjCPq2pXZMDXzzPGWOce728nlv9v4ZHleptZRqbZARC94HAtnasWzSnbuWo3AcTbG0mrYFOh2DkTA==","shasum":"6cb105557dbb69a1e859c5cdf265fbbead402d87","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.4.1.tgz","fileCount":90,"unpackedSize":1604499,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJguI+CCRA9TVsSAnZWagAAKSUQAI2iC2FMK4Ath7zoxduV\nLtga2PJedVPMYYwLdY5NbAlwXv0srFeRJyzNHHEdzqqtDDVV7VK9/hpYRGJB\nreYCHbHHHTneifLGZk4eoMfDQl7ZmXN5mU2zW9Wwsjep6oBUr3MWHciO7fBW\nF+mvQlz+wvtcmrv8RbYPbcAmSlpxArPo3inoO+XGAo1Nk6zed3lf53/uIwN9\nZZhVLoMPHAjxwritPu1322Qaz9Ww30yxYkJJpAQ/pKEGmkUf8HRunriBH3WY\nveGlsTL8xb2iFM480kC9XGrqfV8n0WXKirLlSrksU03DiPPDxSPxyrN3Ca1y\ne8K/FlQ0lYypU3q1oAunx0HvrfKT6fj912/EOo0FRATiELRcKVbqLkGDmGzm\n0pW9nwXRlDdhInsMR7TR4rt5GkTFp/4Myu/58Ixnwgp4dvdhQjAkUxKkOjN3\nCYaVpRZSWFndGe8eTwTKBaTq4XeQDO/rBGe7PUi7GbhSOnzGnHRZr+UvAxwJ\nmg40S7SjnzKx1UMY6Nhj8wgxjTGT6hUdotPca48z/ke8y4c3ktnhS0rEfk8g\nKqwjrjA2qS1BEz4eNqaJ3hac189q5i3zmZQSgJakqtVjj6C9D/dt4aqII57J\nWc81vSlenjC29ELBFqc54PlD4M3AR1CL3rqrjjkY/p8ab+YSp3+NWk0n8T2/\nsHWg\r\n=aw75\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCh8UaclYMqh5OsgvrBP1sVqFt7w4pyGBzlhJJmCdxwLQIhAL6UUfzzRE667VzPQpq9HyYxqySXPQRFdTEvp+WPa+ps"}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.4.1_1622708098404_0.5521790274842933"},"_hasShrinkwrap":false},"2.5.0-beta.0":{"name":"@appsocially/schedulerly-client","version":"2.5.0-beta.0","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.5.0-beta.0","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-pKNMYO+YfnqFtEiQfFOkmF4x7yWafyPaSwmNGI51sp2Ubk2a7ipeiebWolEZssuH0oie0n7pwMjbX7yID0Jjzg==","shasum":"edce04b38169e3fa118ab18c80883d8401af24a3","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.5.0-beta.0.tgz","fileCount":90,"unpackedSize":1604804,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgvyt8CRA9TVsSAnZWagAAQsAP/2nVbLno57xivDxT5s3L\nBljDJlOjxklRWxIH0BOUo+rZ5KMKlqLPmaDslHlJzWnq1u0pN9U6k9YTHjnV\nUG1Q+w9wxIuL5AJSuXdIYiRfUw9n+VRsIOuq2vvqeD9INkWKDYqHAtb5OLR6\navIk+3mxsFEYB0ScSjUD6Ta2OqtElTE+FMQyXS1Z2267bo81kj1dw6PB2ulV\nfhJXSaiH55+ZAGI7VJ34rMBhI1eytTsYL44fWSSG3IlQ7yX1C+pSjp6jkDHD\n9yWOhKLifd96KkZUUNGNkxETs8iFPV88eo6TKkTPU+7VNvKnoinjWXFlxfXG\nuuEnFfuqRRGfcSN4ebSEhaeRo+SS9D0mixn2hYudYJG+IE7B3RceJ8+e2uVM\na5jHq9ve58n3+caefwSbaQ7Phg06hTHMB6OrUUIb3nzcT15p0i/snSf18GuS\nyCwyD8pojTRmb+a1FAsa12WvV9N9oxadC+aISVIcwpsgYv6/F1CLcTBv+FFq\n28doFrgryMfvfIhnRuuq7ieoQ2MswDCzH6bVbscPeaf1LWR72XcODf6bmb0f\nmXNixmDBSRocneOBBWbkQAXcNlWKMa+Q9OJi253u3u7zVZ6tJTlWzSfU/7qD\nGlepUup+ZZOfiqUQCRrMpoWMIzRYq0zNK1EQ9H1UJAwEQyq+aYWxDf73NwSm\n/hxI\r\n=QQ1i\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUl6KCoIsWcWCjKTPMd6wtFXpMcvUAsVpvGy3lFxd+pQIgISl3oWEtjODRYX0COzwHxh+EnWa7pK4aPoVKOb67n5Q="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.5.0-beta.0_1623141244108_0.35361534091688784"},"_hasShrinkwrap":false},"2.5.0-beta.1":{"name":"@appsocially/schedulerly-client","version":"2.5.0-beta.1","main":"src/main.js","repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","scripts":{"emulate":"firebase emulators:start","emulators:exec":"firebase emulators:exec","test":"jest","test:all":"firebase emulators:exec --only firestore \"jest\"","test:watch":"firebase emulators:exec --only firestore \"jest -o --watch --runInBand\"","docs:build":"yarn jsdoc src/*","docs:deploy":"gh-pages -d out -e docs"},"dependencies":{"@azure/msal-browser":"^2.3.0","date-fns":"^2.14.0","fast-safe-stringify":"^2.0.7","firebase":"^8.5.0","googleapis":"39","isomorphic-fetch":"^2.2.1","jest":"^26.1.0","jest-environment-node":"^26.1.0","vue-head":"^2.2.0"},"devDependencies":{"@firebase/testing":"^0.20.5","eslint":"^7.4.0","gh-pages":"^3.1.0","jsdoc":"^3.6.5"},"jest":{"testEnvironment":"./__test-utils__/custom-jest-environment.js","testMatch":["**/__tests__/**/*.(spec|test).[jt]s?(x)"]},"readme":"# Schedulerly Client Quick Start guide\n\n## Installation\n\nTo install the latest version of `schedulerly-client`\n```\nyarn add @appsocially/schedulerly-client\n```\n\n## Clients and authentication\n\nThis package includes 2 clients for `admin` and `user` access. Both will have almost the same API for managing slots. The differences are:\n- `admin` will have full permission access to any user/calendar within the app, and requires a secret `admin` api key to be able to access the REST API. This client will also have special API to allow single user access by provide a custom login token for user. While this can be much more powerful with full access permission, it can be slow in some operation (latency of seconds).\n- `user` will requires a custom token generated by the `admin` client (once), and will have limited access. They can only `write` to their own slots and calendar, and will have limited `read` permission on other's slots and calendars. While have less permission, this client can be faster than using just `admin` client (latency of hundreds milliseconds).\n\nFor better security and performance reason, a flavor of mixing both these 2 clients often is the recommended way to implement.\n\n## Quick-start\n\nMost application will requires at least the custom token end-point for `user` client access, this will describe the minimal setup to be able to do just that. \n\n### `Admin` Client\nThis sample is using firebase functions as endpoint.\n1. Step 1: __Initialization__\nThe admin client needs to be initialized just once, and can be used any where.\n- `appToken`: **(Required)** Secret app token for admin access.\n- `endPoint`: **(Required)** Select which stage the client should connect to. There're 3 endpoints:\n  * _development_: `https://asia-northeast1-schedulerly-dev.cloudfunctions.net/api`\n  * _stage_: `https://asia-northeast1-schedulerly-stage.cloudfunctions.net/api`\n  * _production_: `https://asia-northeast1-schedulerly-prod.cloudfunctions.net/api`\n\n```\nconst schedulerly = require('@appsocially/schedulerly-client')\nconst functions = require('firebase-functions')\nconst endPoint = functions.config().schedulerly.baseurl\nconst appToken = functions.config().schedulerly.app_token\n\nmodule.exports.schedulerlyService = schedulerly.admin.client({\n  appToken,\n  endPoint\n})\n```\n2. Step 2: Create user\nLet says once an user registerd, a record of user data is added to `/USERS/{ownerId}` firestore path. We can use firestore trigger to also create an user on schedulerly.\n```\nconst userPath = '/USERS/{ownerId}'\nmodule.exports.onUserCreate = functions\n  .firestore\n  .document(userPath)\n  .onCreate(async (snap, context) => {\n    let result = await schedulerlyService.createUser({})\n    console.log('Created user', result)\n    const { userId } = result\n    // Save the userId for token generator\n    saveSchedulerlyUserId(context.params.ownerId, userId)\n  })\n\n```\n\n3. Step 3: __Custom token generator__\nThis step will provide us with an endpoint so that the `user` client can retrieve a token for client-side operations. \n```\n// We have initialized this service in step 1\nconst { schedulerlyService } = require('../utils/schedulerly')\nconst functions = require('firebase-functions')\n\nexports.generateSchedulerlyToken = functions\n  .region(ourRegion)\n  .https\n  .onCall((_, { auth }) => {\n    // We would expect that the current user has already logged in into the \n    // application, so that we know their identity already. We then can \n    // figure out this user's schedulerly ID\n    const schedulerlyUserId = getSchedulerlyUserId(auth.uid)\n    return schedulerlyService.generateToken({ userId: `${schedulerlyUserId}` })\n  })\n```\n### `User` Client\n\nThese examples are written with vuejs.\n\n1. Step 4: __Initialization__ \n```\nimport { SchedulerlyClient } from '@appsocially/schedulerly-client'\n\nexport const schedulerlyClient = new SchedulerlyClient({\n  // The stage parameter would be for choosing which stage the client is using. \n  // The `admin` and `user` clients must be using the same stage.\n  stage: process.env.VUE_APP_STAGE\n})\n```\n\nIf the user has already logged in into the application. This user can be authenticated with a custom token and will have permission to `write` into their own calendar and slots. For example: hiring-bot's employers who want to pick which days is available so that applicant can pick the date for an interview. Continue to step 5.1.  \nOtherwise, if the user is not logged in, and simply need to view the available slots to apply, like the applicant in the example above, continue to step 5.2.\n\n2. Step 5.1: __Authentication__  \n\nThe function `schedulerlyClient.authenticate` will return a promise, it must be called and finish before any other API is called. The function will check if the user has already been authenticated, if no `onTokenRequired` will be called and please call the endpoint created in step 3 and pass the result like below. If the user has already been authenticated, `onTokenRequired` will not be called and the functions will end immediately. After login, there's no expiration time for the user's session, so don't forget to signout when the user signout of the appplication.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    mounted: () => {\n      schedulerlyClient.authenticate({\n        onTokenRequired: () => {\n          // Call the endpoint created on step 2\n          return generateSchedulerlyToken()\n            .then(({ data }) => data.token)\n        }\n      }).then(() => {\n        // Do other stuffs with schedulerlyClient\n      })\n    }\n  }\n}\n```\n\n2. Step 5.2: __Skip authentication__  \n\nThere's a limited number of operation that an anonymous user can access, which are viewing the slots and calendars of an employer or trainer. This part is specifcally used for applicant side, which can only pick which slots for the meeting. Any operation that required `write` permission, must be implemented with `admin`  client on server.\n\n```\n// Exported schedulerlyClient from step 3\nimport { schedulerlyClient } from '@/helpers/schedulerly'\n\nexport default {\n  methods: {\n    skipAuthenticateSchedulerlyClient ({ ownerId }) {\n      schedulerlyClient.skipAuth({\n        userId: await getSchedulerlyUserId(ownerId)\n      })\n    },\n\n    mounted: () => {\n      this.skipAuthenticateSchedulerlyClient({ ownerId: __id of calendar owner__ })\n    }\n  }\n}\n```\n\n3. Step 5: __Signout__  \n\nWhen the user signout of the application, we must signout of schedulerly also.\n```\nschedulerlyClient.signOut()\n```\n\n## APIs","readmeFilename":"README.md","description":"## Installation","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"},"homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","_id":"@appsocially/schedulerly-client@2.5.0-beta.1","_nodeVersion":"12.20.0","_npmVersion":"6.14.8","dist":{"integrity":"sha512-VEuYeffnSCrNeb9nGiOpl0+klpwgEywnbL0Q3MsafRM7XlmQvm5A2jshozIuy15IKa7JUkYvC4ZpCnr8Vy6FaA==","shasum":"fadec6d4552a6e5dd93bf9fd6e86cfd83c24bc7f","tarball":"https://registry.npmjs.org/@appsocially/schedulerly-client/-/schedulerly-client-2.5.0-beta.1.tgz","fileCount":90,"unpackedSize":1607552,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgxw9rCRA9TVsSAnZWagAAizsP/j6aDk7suGmvsDklKdBr\nRgdX6Ej1Qxxkh2z697lPjtBWzCj/5xd14H8El2zrAvgAKUsavCqTkyeghJR1\n07WiYE2HGJV10UDg8nWLh1cus1FglVDABWfM3I+wpqWDgHyTLYwnwWIucbJZ\nqnbv4hWnvOqR893itJypl9+Ckreg06NlkaHkhWmi6a7rAvj4oB9tk+pkqj6p\nRHC65cOeblTudXSRNexzsQXw1xUVXsVC85S8j4X7dvhj+PdWYJhjTOZxDvhE\ngFFq3BDppgxtSpjvoF1KKNRcO3B0ohtchvKbxyZzb0Y07ZsZFEWZSTCbBnI7\ndYRojemAC1AsT460GaaLlQ8MNY0//8ckdNhWr9q7oH1fy98zqbeZynAgE48h\nTROPDCQLewfQpH1lR5Y/O6Nej5Y9caO3+dZgZKOkAIcqZp9WpQBDy1xsjrmx\nw9nUjCEPBXZhp23N7YVIKCxjoxii1H53VOO6mk3zcDo5n6n+uKqN9a6YedQ7\njsn8a4a162/+Cj6YVTMSOxdMr8tr5xqXlW4CvcqjvlUPFACw2sTF3c8/MBCa\n0x+nj4tmK2vASAZeZHyhnbG7vMdpmOGdeV55416aHfkv18CxgCmLxuLRlXM5\nYsZpLwPFmZMTp1lVuM+KPsp4xgP1Pn86AiA9pACpGAqk88kJa9HPZiZe7dw9\nhSjk\r\n=OdfB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIB5QIuVXVRwp7f6HAkz26HWpH4Y3to/x7Bh812Tfali0AiADtX+aHHaj8p/uUlWFCCvV62Yeg6nTSd2Rlcxm3bEFtw=="}]},"_npmUser":{"name":"trungtrontria","email":"nquangtrung@gmail.com"},"directories":{},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/schedulerly-client_2.5.0-beta.1_1623658347484_0.3126500705801354"},"_hasShrinkwrap":false}},"time":{"created":"2020-08-05T07:11:39.515Z","2.0.2":"2020-08-05T07:11:39.863Z","modified":"2022-04-04T15:05:23.489Z","2.0.3":"2020-08-11T07:01:48.623Z","2.0.4":"2020-08-11T07:02:32.207Z","2.1.1":"2020-09-07T07:24:57.689Z","2.2.0":"2020-09-07T07:25:52.989Z","2.2.1":"2020-09-09T09:45:08.323Z","2.2.2":"2020-09-09T09:45:30.999Z","2.2.3":"2020-09-09T09:55:49.615Z","2.2.4":"2020-09-09T10:22:22.637Z","2.3.0-beta.0":"2020-09-10T01:52:26.903Z","2.3.0-beta.1":"2020-09-10T04:14:50.632Z","2.3.0-beta.2":"2020-09-10T04:25:40.549Z","2.3.0-beta.3":"2020-09-10T07:09:40.966Z","2.3.0-beta.4":"2020-09-16T04:10:34.336Z","2.3.0-beta.5":"2020-09-16T04:38:11.826Z","2.3.0-beta.8":"2020-09-23T08:00:30.050Z","2.3.0-beta.9":"2020-09-24T01:30:06.954Z","2.3.0-beta.10":"2020-09-24T01:48:52.104Z","2.3.0-beta.11":"2020-09-25T04:00:24.004Z","2.3.0-beta.13":"2020-10-07T08:26:33.440Z","2.3.1-beta.0":"2020-10-20T02:23:06.021Z","2.3.0":"2020-10-20T02:27:10.263Z","2.3.1-beta.1":"2020-10-21T07:36:14.702Z","2.3.1-beta.2":"2020-10-21T07:38:56.779Z","2.3.1-beta.3":"2020-12-25T03:01:32.510Z","2.3.1-beta.4":"2020-12-25T06:49:24.591Z","2.4.0-beta.0":"2021-01-26T03:57:40.102Z","2.4.0-beta.1":"2021-01-26T04:06:01.036Z","2.4.0-beta.2":"2021-01-26T04:16:25.439Z","2.4.0-beta.3":"2021-01-26T04:29:09.514Z","2.4.0-beta.4":"2021-01-26T07:23:48.099Z","2.4.0-beta.5":"2021-01-27T08:34:17.023Z","2.4.0-beta.6":"2021-01-28T08:02:57.522Z","2.4.0-beta.7":"2021-01-29T03:13:41.558Z","2.4.0-beta.8":"2021-01-29T04:09:35.016Z","2.4.0-beta.9":"2021-02-01T02:45:16.416Z","2.4.0-beta.10":"2021-02-01T02:47:24.820Z","2.4.0-beta.11":"2021-02-01T02:55:10.037Z","2.4.0-beta.12":"2021-02-01T03:04:30.822Z","2.4.0-beta.13":"2021-02-01T07:36:58.513Z","2.4.0-beta.14":"2021-02-02T07:54:05.043Z","2.4.0-beta.15":"2021-02-03T07:43:20.761Z","2.4.0-beta.16":"2021-02-03T09:07:50.719Z","2.4.0-beta.17":"2021-02-04T07:41:09.980Z","2.4.0-beta.18":"2021-02-05T07:09:01.075Z","2.4.0-beta.19":"2021-02-15T04:06:15.467Z","2.4.0-beta.20":"2021-02-16T03:04:25.885Z","2.4.0-beta.21":"2021-02-17T07:52:43.433Z","2.4.0-beta.22":"2021-02-18T08:07:52.311Z","2.4.0-beta.24":"2021-02-19T08:32:34.951Z","2.4.0-beta.25":"2021-03-05T07:18:02.130Z","2.4.0-beta.26":"2021-03-15T07:05:37.372Z","2.4.0-beta.27":"2021-03-17T06:05:47.314Z","2.4.0-beta.28":"2021-03-17T06:31:06.812Z","2.4.0-beta.29":"2021-03-25T01:49:27.440Z","2.4.0-beta.30":"2021-03-25T01:55:33.629Z","2.4.0-beta.31":"2021-03-25T03:37:57.932Z","2.4.0-beta.32":"2021-03-25T08:20:57.625Z","2.4.0-beta.33":"2021-03-26T06:38:22.654Z","2.4.0-beta.34":"2021-04-02T07:58:13.648Z","2.4.1-beta.0":"2021-04-13T07:57:12.112Z","2.4.0":"2021-04-14T07:06:53.612Z","2.4.1-beta.1":"2021-04-28T02:33:01.269Z","2.4.1-beta.2":"2021-04-30T07:53:04.896Z","2.4.1-beta.3":"2021-04-30T07:54:48.069Z","2.4.1-beta.4":"2021-05-07T04:14:14.705Z","2.4.1-beta.5":"2021-05-07T04:15:43.965Z","2.4.1-beta.6":"2021-05-10T01:43:54.564Z","2.4.1-beta.7":"2021-05-10T02:26:50.138Z","2.4.1-beta.8":"2021-05-11T03:06:53.232Z","2.4.1-beta.9":"2021-05-11T03:40:51.109Z","2.4.1-beta.10":"2021-05-11T04:14:23.850Z","2.4.1-beta.11":"2021-05-14T03:33:08.223Z","2.4.1-beta.12":"2021-05-14T08:52:00.172Z","2.4.1-beta.13":"2021-05-18T02:58:59.290Z","2.4.1-beta.14":"2021-05-18T03:00:14.316Z","2.4.1-beta.15":"2021-05-18T07:13:12.777Z","2.4.1-beta.16":"2021-05-25T07:37:42.250Z","2.4.1-beta.17":"2021-05-26T00:41:04.139Z","2.4.1":"2021-06-03T08:14:58.639Z","2.5.0-beta.0":"2021-06-08T08:34:04.408Z","2.5.0-beta.1":"2021-06-14T08:12:27.733Z"},"maintainers":[{"name":"wallslide","email":"jeremy@nagoos.com"},{"name":"kaoruhosokawa","email":"kaoru.hosokawa@chatcenter.io"},{"name":"trungtrontria","email":"nquangtrung@gmail.com"}],"repository":{"type":"git","url":"git+ssh://git@github.com/TruffleTechKK/schedulerly-client.git"},"author":{"name":"trungnq","email":"tn@truffletechnologies.co.jp"},"license":"MIT","readme":"","readmeFilename":"","description":"## Installation","homepage":"https://github.com/TruffleTechKK/schedulerly-client#readme","bugs":{"url":"https://github.com/TruffleTechKK/schedulerly-client/issues"}}