{"_id":"multivocal","_rev":"35-931e86598c4215776bf2205527307552","name":"multivocal","dist-tags":{"latest":"0.18.0"},"versions":{"0.6.0":{"name":"multivocal","version":"0.6.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"actions-on-google":"^1.8.0","firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","object-assign-deep":"^0.3.1"},"gitHead":"abc0d807df31709da9bf2adeb2fecc39b0d8108c","_id":"multivocal@0.6.0","_shasum":"8748e96449cc2fa880ebe9ac6b7028ddbacddc47","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.5","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"8748e96449cc2fa880ebe9ac6b7028ddbacddc47","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.6.0.tgz","fileCount":35,"unpackedSize":128566,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa3KrnCRA9TVsSAnZWagAAMdkP/2intqKNNl0lp3vNKiTF\nWARbtGQCNr10Y7OELidS3AGm6qghbaUokGKMCVpyhkcbhxLAi9Q8tAohoBM6\n/I7GnIOIQbpTZTSHLRka1BxifRTTwZeN4mBo8812NntQh4vontuMshXfiCKA\n332uYM7k7CO8wzGUlKYdU7Z2Xv8q1b3Tt3+NB+NC1MBfH5HvApP8gGfbe3Wo\n9EFYtPHGojcioJ4GMEtDdqoZEtwcFKGKXDyKSr4r2OOGWnV8uppcRUl0cGe9\nwySqxw8Pzgt7ybRPhkTco8p07+3PQNaQ0SOFW96xpF3/uTOHymZ9foYPGocA\nZXwtzATEisntR5y9zOc7CYdvuchk2Ef34HkvKGYVwN1L8MxW/X/RTTaL/VEl\nlb4b58FianDKF/jUE16J5l6tkNyTbruBV3JhWCZ/fA1hedEn/P7usRcOnIOl\nD7QDnt/jWr3wdOj49lsSunq0f0g91rPEDzCRu4av0QR9BXLePGsqEypdjyhR\nwNY9XPXadRLTQw+4cQyyI/vWlpYMSNQWS6sL3D1Lkdd252eMmPYg9cUV5hJC\nlvgcz35fv4M1ZEO3iV29q3CxHIpITg6awA4ITbOE9ernyt87DoGoIvkLgADe\nN5Gr7X5ShhyL93yXzYKuk6FkfHM295VAMQqSPWPV7Frfmi7bKa3TvBZ6n/bu\nctRq\r\n=pjpB\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-UNQk8H+a6rmcUpmAeOcspd2gJJo7Xr/ai/3T2BrPdF3AGK2/FEOgBHIIqAfjDl/Hyk9OI7//NV/5eyfx/vZdvQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBw7OimSE7XOroJ4ZsNH0Il5smCTSCbWcLA77cqP9VSDAiEA7Q9bao0+Pg4nJCBP0oXsZYivdPLLXKEMxSLL+AOkRzo="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.6.0_1524411109080_0.9291415547622544"},"_hasShrinkwrap":false},"0.6.1":{"name":"multivocal","version":"0.6.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"actions-on-google":"^1.8.0","firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","object-assign-deep":"^0.3.1"},"gitHead":"762366c84d9518063a339ee367aad946db641143","_id":"multivocal@0.6.1","_shasum":"5eecf3974e930ad0c31fd45aff668225560705d2","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.11.5","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"5eecf3974e930ad0c31fd45aff668225560705d2","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.6.1.tgz","fileCount":35,"unpackedSize":128219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa6mGyCRA9TVsSAnZWagAAreQQAI4SWq9lG5tdXuxM3gxd\nk1qUtktsiPmv4yjcOvR1/wd4olshzNHxraIE1sDiT9zrsKQtWhaGrbbL9ERL\nfzPHiwrm2hNfmBQO2/IJp6p8RJ56rWXusD3Hv3M1IprER/sPmlIsGzO3wjU4\njk/M+h8YyHlxbLaAnVbWcg2HOTZ8W2B6eIMsNgy7/Xkw0c6AxAM/KsgJtP2o\nhRfLzE/ykeSDUEqcjJ8RrOM+hsFuLjk7wUMSVedhF3XBlCBDLkjh5ayN5p/b\njMZWaOpRT2fn1jXLfG0ujye02wfTBC8o/RFk2VwRiCat52+4qXYvNLB5UR1+\nUqUT+rbKl4cscL0REEMA7FqVUQJXK/t9Z6dvUKG3/QTqHDrohacgMh7tbRwk\nRzrlOBXCsD1N7JyetL4tCT2cSNrIXWLapMV76VAL3HGvngc9Z/gdi+yHyPvI\nftGNwBSUqlgY2PasGAQnyKmaErbz/SMrSgezySLT4eFWdDTJyi0uYZWSJOCR\nc79Lc7E4E5Wtk6Q1PJRGg+/qhz2gEF8FQMx5vLkCKTAEjRowyzCBawXBhoe5\nvoysyS4QaKXYH9FiQlBCGGMExx0u93P3W19ZsyMxq1V8gJGKW7nwznLftWCt\ntnG8epJ89IJYwW1zHE6g90uhxf58Mw73aEG92VXE5wHbZYYO6hK4nEGbui17\n5iiD\r\n=BWqe\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-uK28A3kdMohwNo/AM5WDAcY+p6sGDhoeCwzJ0VcOHixWpE5IUTTiL2kGlOoOmABGdmeoghlC9VInI+cAg8/yvw==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQChQPGcNKhPn/cNyLXEgNLPvXSzXqrHDxwO3ncCWxbkjwIhAJ07JumvMGYlu3Yjw0udJ/tuiTHavA+XNU+QDV+YxRVS"}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.6.1_1525309871560_0.15901962874246123"},"_hasShrinkwrap":false},"0.6.3":{"name":"multivocal","version":"0.6.3","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"actions-on-google":"^1.8.0","firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","object-assign-deep":"^0.3.1"},"gitHead":"a48c791f5f61d7749869776451610093e27245f0","_id":"multivocal@0.6.3","_shasum":"396bcc9adaa0da146574948e56540c615e19c2cf","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"396bcc9adaa0da146574948e56540c615e19c2cf","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.6.3.tgz","fileCount":35,"unpackedSize":128219,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa75KGCRA9TVsSAnZWagAAkzoQAJ3ed25ygmSVWQuat4eK\ncsNcfJTJ4g72x4oeoLjDuxFm+aaxGslOvGNV6C7hptt+YlbWGGuw2fc8Ob36\n1/KnIhGkeKZxfTlvMGRQzvC/YWRAoVb/H57h1ZuFxWalgYnq+WSZyn7+8jAA\nJtyjUpg+qcFdjDYvNmIpF4h/NjgCWl4sQHHiyeO6IpKNb5Ir09icgPRW5EBJ\nj72N5DHECE4YJr3MDr+MUa39tGhX7eSLjzL5g5s5i2QGGResuXG+BinJPfHl\n49RVucJbPkF+zfsMx/euh3rPiA2hKuZcmWqNdnFXWmy1pPX0sfogOEAR3AWA\npaT4OyiJeW/HKcbnE4Q2hzJ945/OrdxSJcXkeSbpCcAzZe+O7Zc+iDUnj1N5\nKxb7IQxF2B7sodsZL64AirzO6SDi+BvJG93b/JlRPGdrv7WRjhYSM6gzeRWw\naqgBTwaIy1M5dHRXfYKsAlMtPdd/D4CMLZb658z6nnqoBH7DQs9pufhWsKLl\njSL7PI3r/fj6rUz52xVBUMyEMiiOq4WNAyrwKSWC5fzC397VVCmGkdGfqK6k\nfJaGnKgy4QYSWW8AyRPs/MRlMS+56QNHCxWbMFdn5GWfbd9OKMW3WJZv6aXx\nomZT0sjdOd8cZgov7toPaflmJ4H+ng8FvUJqixx5o0ooBGp7OWhVBC+6/eBx\nD70j\r\n=8Jxc\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-R8ZrLZEOmEaiWUs4Oc/QPk+WeBmI1Pk0WDTgrXucaqg+lqW5LdMdZYBRRJLTYOu/L46Qb3/trCvLxhWqclgwzg==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDc5TYlASDpQc/t2muHCopa6qTGhT7bA8C7iVx2aFox1QIhAJrxaEcxnQA29WKxVcJgKl3ABdO/jkOnSYCCETLI02o0"}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.6.3_1525650051276_0.0730378730964647"},"_hasShrinkwrap":false},"0.6.4":{"name":"multivocal","version":"0.6.4","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"actions-on-google":"^1.8.0","firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","object-assign-deep":"^0.3.1"},"gitHead":"fb15c098e5767c9a2b634a97cf04c9f4299eb50e","_id":"multivocal@0.6.4","_shasum":"505219b32805c48869e4e6751dcf4b0bb2dc6810","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"505219b32805c48869e4e6751dcf4b0bb2dc6810","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.6.4.tgz","fileCount":35,"unpackedSize":128203,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJa76Q6CRA9TVsSAnZWagAAyPIP/jv3lgfjzf+pXp4rGsuB\n2WbbG+8TgI7NH+oAKHTYz8gzD1eKw5/NnjJ5sYLBHuSD3L0D5TY9T9Fd/Ir5\nRV3W9N0ADsIBU/mDIuEuUT58DLda8ttnM3cMx3gB4nVXJZFOdryaba8avdKD\nt3PSQ4FedZnMxAzzuxdTZXv5bocF+FA/2B4CVcgKG76DZHjP4cgHzja38lQn\nnex+eyIvNH6oZ9fBMjkw+o43gPJEcZ32yJFckGZPJ0vqmeEqxnVcDkGWm5/f\nqdlAghfZSN7kmrNH8ERraxITvLA6u1kXkYO7HU5NJym79jmOM/A8dfKGfypc\nTG3Z+kqAlIisRzM9rrZmRE+gtZx5cKdO8dp1gUDY+ZsvWfOivUWj1XNISJCw\nLyfwPf/cr+E+/vlU7mqGMQVHqQXA7PqtZcHAnOcyD/IiMdaFaywrP04keWS6\nvyYCF1STQn1eSh+4QlDjFZNMV3UXssRg7INNLfX+OdOEWa0OKeEWeDF2h/c4\nk4isaJXCPTV777Tk1nST1j0Ur1fwu4biTizwSJYeZm+wCETMAesB9Wag6Wye\nGtGZMFuNzav5CXUJd6U94WlQuKq8ayrM1ej8w4vLPSQg3GKY2P8Krq+tk3GJ\nq0iFhR7rS53pak/PVd0SafND/dOqrDNXDEUUVkEKmkA0/Z2vhrFTETTBzPrn\niVqk\r\n=3SVs\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-yjBXuaP15k1kH4DecM/0UyLzkfYTCcPGN+1WgAWxhsIzPYIieJvI7VxZKKlaxCUOjqiwdBfWUmIJ319loHXJ2g==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDdUDFxBiO7Diy6wEaoRYLtZGD9ftCRUROSLB9Hj9f7QQIhAIxv0nq4Xu3LIsVMBKKs49LWuznN1axrM3F7AJvuvZfp"}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.6.4_1525654585063_0.5053418223588693"},"_hasShrinkwrap":false},"0.7.0":{"name":"multivocal","version":"0.7.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","object-assign-deep":"^0.3.1"},"gitHead":"a3c206880ff7fe8d56027fc8124b403756579507","_id":"multivocal@0.7.0","_shasum":"c646cb1aa469043929f80fe70eb955d6e7815adf","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"c646cb1aa469043929f80fe70eb955d6e7815adf","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.7.0.tgz","fileCount":35,"unpackedSize":129136,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbBMKGCRA9TVsSAnZWagAAN94P/AuaZWmWkWNKU8KW2TxB\nSoksvq2qBIWjYo0m+SJHCfOusIGmMctpkyaCk4ZbEOGOYwddipkmJQsVMagL\nzrUt2C8RSYywZlTaeE0PmCSIQbxPRvHyNE90vMMRWG3/GrLVcVbAMe/RT5wy\nN2g0NV5B8fSxGWCZymXvbt27x+l07UcPRV2psuAlLIzc4SnG2o6+RY8C2q9P\njdKzgkvq2M0o+ASFspBnnAnZy38RE1edJRFrPoH/RsK6oBGKgnANO7i0+q5/\nnBB9wd2dYGJRYLNKWpdHy6yHxP+n+j/E11ER+Y20cwNb06bgxQ80FkkUl9h7\nBO7ehyaSGF0d0AkiUOqlS+VdiH6FJyC2jHR6u21tDBegrcgVa6O/iyr5RBPz\nc4A2npAackZqHybLWhQkVwcpQNBmA64j1tThur6NIr34hCHMqLQx5GRRNLs4\nfja38VjRAAWs0Fj07/tj3Ts18QdJnbYtVB1XahlkMtYG5OWkE7uLlH66kINN\ngS32E9W2V4TSuW1RvFqRJ8l7pLIBPad55OEpdaFF2FseCB0BKfhkNAb6Bq/n\nSYjac5VdFCTRneUXGLfLud9Jv8lQ+y/MKSc/JNZdJQHwJAbHCq9u2NL+L3IT\nOx+pbMxfKeDodRHlD0FHiLQDlOPFGYPytwGKnXsnz9+cuxIo8v1RsDspjv2y\n6RL1\r\n=kzZ5\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-5wo3MQ/r8xgRt6p4EI/Uvs4mkZ8cr/GfC7GCtOaqTFTRQiEKqtAlo0MzDVJVZP76orbgjyh+Ho9t0tJxaJqUeQ==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCcbyzagTtomXQnV6zhVVUnUq8FgThgzMx1YuKdAyLAwwIgbceK5y9h9OjfhlIejm0QIZViVHApRdWikpAXwOlBDNY="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.7.0_1527038596640_0.18949900146211762"},"_hasShrinkwrap":false},"0.8.0":{"name":"multivocal","version":"0.8.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"3fcdb8d8e24ef00d699eeff7aaa33bfc465ac753","_id":"multivocal@0.8.0","_shasum":"1a4d251d5d8a8aec8e6585bcc631cdffbf48e140","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"1a4d251d5d8a8aec8e6585bcc631cdffbf48e140","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.8.0.tgz","fileCount":36,"unpackedSize":139955,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbHeZBCRA9TVsSAnZWagAA9XoP/jrArw/YN7OurUDWt+NX\nexGcAFgtZOAGpmvMxrzOYG8AiBxuXgvvPu79qTQvpYM8GonXGNkwMDRdTFq+\ne/EP834QQYzx49aZn5zvEJpnFtu3+xXOqdKa2FlzMwwq912s0jzZs92sLLMN\nXD/MrrWSk3PPRovGpG43pKV1/fDgSNmngfRqQsVQPy+rGM5PL1DGUIqXuCLV\nJoZSXTbVzaTbjhHI5CbKKMkj8/KJ34WIpoEevgkxLnJJlCEn6HDU+H0P/zvx\nBNxrMkTGHfI4TU9zqD9xe9qMJaW2agRQuohEySyW51I96i/3E+VVqrQtqJqV\nubo6foERdpTx6X1oNzXtJkmcyBsWSnwvO8rZSbm81qXd8EWlL2MzjWfuu5hb\naA7nCtpmrArctZLifUXLlkdJofI6KupSN0z6ZJxygz2dyO1dhUH4+S+59vmf\n0+F8vswmS6HgGwAPdJ/Jos4afj27RDPOF70KCtkr3KluYmpHebaevuJWUW0h\nCLZaaGQtYVugnspUKNQBYqII8mJST0FA2MZdEvG5qmJAqdy+aZirBsDo3xoJ\n7OHYW/cFH/QcZr93kS4JriNv7IOV6/bx85UFvLNXR+YLbpYQUDhhG/IHhcYo\nXbJ/MH5UKM3mKQ43NiIObOBS3xN8hi12hFdKHU5ch+yC5p8pgugBbJyz8Gn+\nfr+C\r\n=+2y3\r\n-----END PGP SIGNATURE-----\r\n","integrity":"sha512-RxiIsuAbMrqk92PKyXzNLdOB2WMjT3G4wpUo9UB6X3J4+aDa82B7/RhlfsTGF9e+C34T9JiDQCo3lCBEPhtmrA==","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCIPkxX5+/1N3eOK0oN9qZgilLWl1uQ85uRKw4qXJPMbwIgOY+JQncJ2vn5hsfXegfexS7e65+7qKflcpXFvPXJW+U="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.8.0_1528686144187_0.8839225089012541"},"_hasShrinkwrap":false},"0.8.1":{"name":"multivocal","version":"0.8.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"f8aaef31b85f9578f5a1ce106447dee3612a3dec","_id":"multivocal@0.8.1","_shasum":"5df761d365173b105fc2443209c76ea7a8938c85","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"5df761d365173b105fc2443209c76ea7a8938c85","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.8.1.tgz","integrity":"sha512-agsAc5gix9SG78wf6VSyPSTnEJsPlurhD/oxh1sVtAePSD5ORueObrmPkG1kPsFc/Qze3uEYDLYUcoXUtJS0lA==","fileCount":36,"unpackedSize":142815,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbam6VCRA9TVsSAnZWagAAAq0P/0E7Ja4lGxDKxzxslCH4\nIZ5Ym0IUIXFW2x62dzbeAtnsGeS+D6ce8BHfSkiWx9k3zeXlKT/WWwIj31eH\nxxUaZjftu4FNY53G5/AWZKbCWD/JgtZwe+JadeAZBN2AVibNdAsyt9Yiem7m\nPI0dUSl5JyGsHKkhPXwNQlkAOCC1XyE4Cnhkgl9SzhcEaQcxa31tB76FfqUz\n1R+7i7VOXqFPiw3RndQ2ww2QKGQT1w07V319KFcUcyiIOPtzJ1HGenj+SOxR\nZnKEhOcnLaF/ACT4Yq/WJyYDIYqWxJs0VYduu5pI5F3Q52bopRkdwby2DsT5\nQFhCIt6DkNzHFDiq33+so9SBWju0LqF2l/8gD6crTjAHCvEgOaWEsj5Qhyf2\nM1g53gg9Ynb6wBPs0nvrsw9BBT2ZTVISQ/RXf9jw8lOUKcFXd1mKzubF3Ja9\nDiVPQZKor8og0nNUX0mo7AOEEJyHRJ9KRfG5yQISN5vupZyny3O3jQdP7y1S\nqBlDpAU60RNPSsvnSBP09CrWDiAfcjQqxgqP6RKW+9uZ+CfVlC1ziHy1WylK\nEPDtjzrV2OKAXuAxOsWlwA5c0GopG2gu3I1sGitsB3B3HvAMXjYpwGtHPr3Z\nthA0rl3kG4fjJ3e8fSBiYBmC0Q+/OVCBai35jccX6hAQjNedUfsjkbQZkwo3\nI/mx\r\n=nnoJ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDHrXG1SLdmOT3eDAzX4qgqArqHWChPujRStO7pd7X/IgIgbA83+Fbaz3rDATa3Wpl7FUcQ15CvEacVKLqVbPMyFxo="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.8.1_1533701781415_0.46137315448023664"},"_hasShrinkwrap":false},"0.9.0":{"name":"multivocal","version":"0.9.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"2d1569b4add5b14d2ae24379e47efa0f40dc5cb2","_id":"multivocal@0.9.0","_shasum":"bde129ec07c4a9f4492b138a509496beceecab4e","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"bde129ec07c4a9f4492b138a509496beceecab4e","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.9.0.tgz","integrity":"sha512-OAj9js6/RMsbADbzcqgcTWA0psUPRTBR5rtZiEO+3Ud2BUG0Q1xbcnyqf/xQHXkfJlComHT0rhMAB+BRNUjB2A==","fileCount":36,"unpackedSize":145064,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbkd7qCRA9TVsSAnZWagAAF6YP/Az6UWAlvdEfXQ1V5Ofp\nxDqNJP8+fw6KX9ZxPLLPzRTJ+a6KHSjgBx1xTwtTyzt5XosdnL7w2Z3FCxVI\no5SOZn17KyQ8+2DwYJmuCXY65uP9XhU+dLL2XBGKw91URsENQm1cDl7LEa+8\nBNNIVi8Vp4dtUcGOPWBhOjOr6fyBqo/9GcnMZbNDIGCtcoehnm5qId7QWWpc\nT5gMxM/ZPkEvkqe9iC3XFaHDCOu1GssZuW8WEN8z4COiuGal1Ae6IGBScMno\nuV6rLfDQzky7fES31fKrjlbjho7WDMffvQo0fuS9kze4JNnhHRiRkHiIpP0X\nmFBCuuCViynS09kbp4xIHrk8vsqMVyhbFT38+X6qmk3LWUAPSzMrPh89g/CV\n4Lf3uvh4+OzA3nXDej30yqvIZjdDIJblFjJpNkC0T+pScvFlq0fDmfRlcZVO\nkRgiz9hrIBhUubWDzPnYYyvc8eW+go7Tb4DErcy6lGxR5eBQTdMCufr3Ftqi\nRzaXfTEJvsKd66v0Ew+CRG84BTqfau27r66YpVjmzMQ/5Opz+KBCfawGtsHg\noyoxB+6A2JYRx7gr/SqS3vQQj33S/DUcIj+5LqBdY9/kIYYlGF9f/PUze6kg\nTn/6si+dQjRwUzNg9WqIT7DBWV61wxIAyIbxCwZ66OHsWaxn3cnmuUO6qIzk\nJmwr\r\n=9VVg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG7+CtcrG2SvHAtNcTSNaUzLDFzK1woGjqraRzsG/pfmAiBHVS3dTapLbQrxpoaFQuLoRjknVD+Nj+Ue/Tk7tHBJpA=="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.9.0_1536286441879_0.3806340606411023"},"_hasShrinkwrap":false},"0.9.1":{"name":"multivocal","version":"0.9.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"0fce5c63d974df71adc7e20975dc1adcbc8701f3","_id":"multivocal@0.9.1","_shasum":"4d39536b815d91a2d893a98cb71c242bffd645e6","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"4d39536b815d91a2d893a98cb71c242bffd645e6","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.9.1.tgz","integrity":"sha512-69HZ/y3/ZytIZgG0Ezup/uxc/DLNgGgudgD2TZlCdVJVyEKDzKVdAkLzKUzr6G21XuhcCVP+ao/p/5X1EhtYSQ==","fileCount":36,"unpackedSize":145142,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbke89CRA9TVsSAnZWagAAK4IP/i5sCir1g/nHmmYfQemA\nhc60ip0HmjFohcjaPIT0zPbuGBLGLyCSpdS8Ev6iYMo6imdCt23Ora7Tiaiq\nyrYBq1XfsV8ScNiIRpV0R8nxgwuLvP3UFAujzzwL7eHH951fXjAyav7BHDjT\n45m6Cd0dOnhVMZYA7AesGN9I4PzpmU7YP7+/+BxqM03mGOrLEPHcQty5C+3M\nqOTqfquNweXRxrcOFxdlGfGeUXiFkJSIxX8VRmbMSdFWNUgEIgqobz+ADUZZ\n8huL1vmciZXM/iKma35PAbaY+JjUhosBI/og1zPVbVW5a7pAvBlqlb5+E1mj\nDd9ukl3LF9fUkKEPhJka+2BJEG/Vt2B9ix0BBsPGwgHX3k+VcPjICHHeYdcP\nXCbAbB27jHhPaPNWAl5/CVsWOEqTR/9XYUEwMTR5M+4Gx4xjk2puOuhV4Yx/\n9WxBjrpA8WfPIyvcQNeZlXq30+lMXr+YslcqeeD6elx0GPzMBBfoebhFGuTQ\nLtgraN5bBUonJLM3LomsasqwPHF/WHY3tTQsN+qHJ67d3+U7Gd33S0rtHeZj\nrpaOSy+UB8P8h9glbwniuVeLGOYaHYjhcVFMZAhfR0X2ovCI99TWxopzr1i4\nIojdJNEre3nND1ATUSo2jlVbfM+CmucgDxDWQQsOXT6TW+iOGB2tqB/OwP8w\n8E/K\r\n=eUoT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNfh9vFzJKVziIb4xnaYhmLFwv5SaKq3g7rNgWR7BcggIhAJjZqKe/0E52ffUiIsbCChZN6be79rxrrTStWIw9IfDm"}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.9.1_1536290620871_0.03925481144460252"},"_hasShrinkwrap":false},"0.9.2":{"name":"multivocal","version":"0.9.2","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"2d0763de844dce1d4b82dbe0613a0f02664d4719","_id":"multivocal@0.9.2","_shasum":"67e21317e0e46d83ddef3531b5c5c00a2bd74ab9","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"67e21317e0e46d83ddef3531b5c5c00a2bd74ab9","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.9.2.tgz","integrity":"sha512-T83fg85y/uf/pyn5hPlfobt/vwapLbMaMROZpTlwvwOiTiUJN1Y+E0NqQ18pLs/LpjXPcrNQU0tGV/hgjtsWWQ==","fileCount":38,"unpackedSize":185151,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJca1n/CRA9TVsSAnZWagAAU0kP/19P+2p7m8h2nqpLQvzm\n/pXGA/V/3F+2b6xUBsK4PotS17vx9aFNAhgRuUenmRpxvjPRmPjbMVtfE5q1\n2JRXH9qAKOZ+RAtjC2HqtWgMqFrNRzPV/ZDFP9h9emsbGX2H8ktLa/3ZckyT\nuwSg4YNCsolKka+yzVO4A1P+KDX8fJLmCeq6S1rxat+AbOGu2VEHKKXlRvp0\nZwxITDaFEg1K728s70VDS0rRp/04gXYqet0KW8VtxzzkGCHeScUnUwj29NRK\nuVf/uDw1iW50id8JdXbGbPLDtnms/6M4xmWMIZ9KNfx7buQtHXWP2v96V37H\nPCmojrM3WsQRk0+8CXll8TOcfT4JzzkA3xwSOrp5N1IVWTZSoQfWgNOnU5/8\n+rk3c4z4lzdUbC3paoudh64brM2FbxadbdESYjErT8u54WlhIx0pRpRPqDRw\n3D3vpMNYh44NEtWeMZRdWio97+YOmUtDiTY5Z4hi9GyZbfj2JZ5JLCixryye\nZrvey0IMGJJFwQxqM+KoFv2nFzY9Q1EpWIlM+9RaUMVqQThuwZFp+qWNoO36\nZgULpzyDdIvLsMioM9FVQpvKvuPp0iTymU3K1hCchSTsDcJ9O+Vn/r0bjktP\neR+6ZIaEFS/rlzJHgSsZ9JmwxYJNPQ2KNoEiVj5b2TrRzw91JFrjcrWWEmM6\nWftT\r\n=tEEy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD8CWUrmL8s1gZNgC/UCzM5ON2a+Deoepy1MfOegQgd8gIhAO/geLgRb4c2rCJueijCU9rQYgLawNtX81jiBLgVd7XM"}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.9.2_1550539262214_0.5808368319821151"},"_hasShrinkwrap":false},"0.9.3":{"name":"multivocal","version":"0.9.3","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^5.11.0","firebase-functions":"^0.9.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"f92232cddf4b6e4a596fb92496ef5e920406fe3d","_id":"multivocal@0.9.3","_shasum":"40b53c8ace0175fca092c595be795ffc4402c912","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"40b53c8ace0175fca092c595be795ffc4402c912","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.9.3.tgz","integrity":"sha512-USI1rVJoIyai8apBQgVwnYuw6q7vipaM4HLYDqeFTB4yUg7o/ksb7Dpblfbz6ADoqRpuc04PDNhPAkOgUtis0g==","fileCount":38,"unpackedSize":185106,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJch2aGCRA9TVsSAnZWagAAp2UP/1Kubd869y9mUwgTVOKa\nyyG9J1WbcyLUucSw+sdIQLuuclmzU98E5cP+cwlurTlezifpBprQoZh/hKSF\nGCaa5TCONM3DvHSm2CKvXMTmf35lUIxGA5SfzTPTWzviknSHK7ZoQS6/zxFi\nyTMsiioPSlFpXqFntAy6Esud3DiCAURdC9BHB4ZkTzUBUT1XYKm0DBFYTXnr\n3D8kReBoKDdnZy+vdTM/afFJi0yvLpCi1yhbY9NZ232nsFRRP2lsduIOfxZA\nINNcAIPn9f8sDILO+8riN2ziNUNCpZRjKI+Emw+Cb6QTcXaVnT4CuQ9CDX0f\nEk5pT0HvwPBSQ+z1xlu17rsKd5WSlo2rJdnzZl2ZzdPNOMefqVaxMKutfFS1\nmv0bVX7K033Jwl+Gs6X6L27SLi5F5eUKyxbMWfdIGhNgM3JtBg0xvpzjNccs\nTAd3dMiXKA55Fc45aNZ6rHhHOBy3++Ha7Osuvw54mYQxMZQgYYdMYtjQx7Oy\ncPpB4viLLetRqi1gittJcMfmH0Gx7PCJ9rVJxXVIaSrA9OAZZPam0h94nKtb\naRTtN1z1UeBIwhntb4FQVaaL1d2Zzv0GftV8WYKpK5eCrDQXv4ZVkivkR7gL\nCnT5OUdEkKxN13sFKKNDndvrh2mPsHbiwDhB9oN7P9uWUFudwqPxxOlxbC5K\n6k28\r\n=BPTz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDc4mYHhiC3vsxQasge8DNcGsoP1agZmzITc1sg7DPWAiEAub3rUbDzcDWg2WOAuUsBSPFPe4/cHEG64aw8Knl71zY="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.9.3_1552377477676_0.8758122342217471"},"_hasShrinkwrap":false},"0.9.4":{"name":"multivocal","version":"0.9.4","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"f2dc84ceaae2d7b449918c0de907b2b4a76e175f","_id":"multivocal@0.9.4","_shasum":"039ff4886c854656dacc2961c25a87685d12589b","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"039ff4886c854656dacc2961c25a87685d12589b","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.9.4.tgz","integrity":"sha512-b0vkwffXiLdnJPvRQ1wXY8GmtN/DU5OHCy4RiinAQz6wzrjGOQdnhWNjO72ZknmmMjaI/Lni1OMvc1FnGdZz4Q==","fileCount":38,"unpackedSize":185105,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJciZUMCRA9TVsSAnZWagAAf+wP/REt0UNAhHbdCIfg50dQ\ndAaW8a+JHU0iN6525vIv0LnRbFPDd9uRgVQgwlN9YySap7bvt5wvyI9avYQ9\n/rM1FwqL4B2l4IJG/wPw1G8kBWNPH3XTiUed/y5qi8PAG7vKqD3ADgIBjygR\n9e+0nvfnVkwboPrVjxlsDnsy29CqP3bbpabHaCeK5MFyuD8NiUJapH08B805\nG7PQlZyHI+mJCNPHHkayXU/3bPjOFD277mo99BBgcP3ec9zScRB3Qu7QeYss\nw/5QDngEeAPGmwESRmj956V1ODMYrL7JYkHE1W2LoEZenZi3kEw4axoHd3Pm\nyYs6WG1A4SWVszuX5KfXqT2xylQNjiqPjS3yp5EMocpczpVHZHHC19OliEP9\nBtQM0E9oUTns18eF66em7HaJmPURadW03y4R3KOdlaRpfmbhzMb0Ys+Nv+U3\nQDkjP70ADPmks1K0LtNSGSUZghoiS6ccpE62+yrsNGwlsratmiQQMaYtHzmx\nQleNPl/2KJ+2ZRDUhWLs9aWRYAZ42ZASy/e5PCe9gR06Eog1s7dT7CSCC2ja\nnuz14GCBftO8LI8cuFhXlSSCXtJOlZWLirgQxGSKKD2KVp6siGqt2aSlBuOx\n1j5LJV25+fOuY1lu+iSu5XNJyZb7iElQ5BwuCLrDvmXj8L+z1rxlG+GWFoFl\nXe/P\r\n=9Jkz\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDywLcIBiJvCd0B0j/J3pSqQAjF+QZVO+duEEW/itjTvgIgPmMHQKuq04gZxwEGikWOLWb0BZPeCXdXHGCgEYx642I="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.9.4_1552520459372_0.3101395134880722"},"_hasShrinkwrap":false},"0.10.0":{"name":"multivocal","version":"0.10.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"0767c2aee3f4baa840b15efd3b405f44b6dafc78","_id":"multivocal@0.10.0","_shasum":"9eada19c605e902d1c65b79afba508e2bd04df92","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"9eada19c605e902d1c65b79afba508e2bd04df92","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.10.0.tgz","integrity":"sha512-BL/N8krIkwHjLr2c4sOYhwmp4L0yxRHpnTbenTcv607AZgVDO/+suzsPfBpzFQgDwQankoDCyoTfhsce3qb7Nw==","fileCount":38,"unpackedSize":191409,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnBaSCRA9TVsSAnZWagAA30QP/23sVc4CmiV6Nmwyih1h\nIac6ueBLknPlX00nBq+ksF3GqPnsucsKRhE4HVtuW/oO8xiYRrIbc92Yh5+/\nG2OMEijWY0XwPLjy1bUgPwCx42xNcqyTZMTS3F3XcG35EZYsdSwGCiZRqzIA\n0duyq0lO6oXGVCKaB6aWK/+UXA03Nrv/Wb5W071DDG7cD/KcSre7yeTnq8L4\n+DTso4eLmDhze8GdErLipEh/awosYTTN5VvXdEy4SE1I5/nXbgr2aP4qF8zW\nlOZij4Y49NFuRI3Wjh10wSi5qlBO86RPNsaj4IMSSAVQRvi+iJ/gSH49Hokm\nSIZ2Kys0M/T/FgMDYgQ/bPaqbDf9Dzu+DHjt+2DHS8SiRyJ1E1L+lBKUVZDH\n/tXOvq4rP4fr0bdBBi8IQK4s0iSsPtUA4KR9rS5ItgYcpGtTWhSEXf1QZ4Wf\nNGwYbwh1g35DR5dWB3TOx7I4b5xrtCYXdsLWNfGxKixm3AH4aGspAl4RAC+O\nXs34kyGJVcExU2C1mwvwlGJ1LRprrFh1eapon4/6oBP69FAOkhz2DtS5mlLe\n5CMUx158TWa0fDRNjmuJU+8zqRwR98Th2V7fdu7Vt75wMBEwn5hbr8qrSVbk\nXvgp/mBfkLrpzv0koZnehfvArP2v6z/MBrKmx24/Rx4i6+0E+D1TwkKzdG07\nzcOw\r\n=kf+/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAkiFVIAh5o1WJVGRhdYIA0RX1YhYmwx5ANFPmeojAdyAiEAzGivZFxY4Lo1brZCbC9PtdoenLc523+2Xq5XecbhKfg="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.10.0_1553733265338_0.2890264589926872"},"_hasShrinkwrap":false},"0.10.1":{"name":"multivocal","version":"0.10.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"67f326241a4f9d41d5eef641acd381650888261d","_id":"multivocal@0.10.1","_npmVersion":"6.4.1","_nodeVersion":"10.15.1","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"integrity":"sha512-6zIK01qY0NHsVxF0KqNfJATQu953C/3fLvZJO6hP7ke4ugrOpELR2mA8YFzdmQA0e/0HQuNP5XM87GySiqWWPA==","shasum":"1c0b3617ad057a790aa79becbe1f515c8872b46e","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.10.1.tgz","fileCount":37,"unpackedSize":193183,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcqq3/CRA9TVsSAnZWagAAZ4MP/0I06H0C+w1CzA8eX6pX\nl1wpD+Qo+G78HkTKHOYOkRvrENM1eFh4fUNIfxytnJI2yOo2yTVPlsCmhlbi\nhvdBRIQ20c3nGIqq2teEfSyOA28lHHEAmwVhl9xOZxh7dxMfSlNc+fgZnxdK\nH482hRXiEksZT5Cl+7wHdx5ihh+E7Z2NejFxQYveeNCHk9pH9xiOky6ctz6m\nAvy65JirMrofF4PJ/2vS8Fr+EGuq5eKP1Z3qR/O8KYg4T5HEopmZBwN4Oa/2\nwI8Cq6t3QunuKRgucYPZx9BmKNvI5uVbghd6RLXx9329QO8J0DW2u+mSBmiJ\nAYvyYsmjJ0QcWfrlq/KUC8PluQFRaSJvhLLeN+w0QpGH7ECTEaWZmRqB9y32\nmRKDt/Tzb/E5enfMizbvDsGVU5989o+QSn1CLceEbChUBljIGC2BbIV3d/nC\n0MB7uPEzDcGcEo4AkOuGPGMuk6HqB4XAZIt4OY7re2oPJx2Ohu093N4tfCUi\nonrz0HStobHb0eK5WbGL/DyihUelDOQnXnZRVNHR2R0KqQUqa6kkLrRw3Fmn\nJSh7DxAB3ObpnaERhbOjus9d1jQbMJih1B2i/ggJxK/0JXvG1AIhgqGxa08U\n+pKbvLGahWNqjv7Hae+ZjcKTWoIu8W0EztsFISdPaW5Cap+r6ACDv0GNpFyL\nWW6R\r\n=Dxbl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCpCjJh1LhaGk424/XQPNkCnIWQmSvzoPwEbVZdrRaC6gIgNhZMMf6+mJk+ATYpTo4hVgz2LcPPTeGgqTero760tqc="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.10.1_1554689533849_0.32507305836637657"},"_hasShrinkwrap":false},"0.11.0":{"name":"multivocal","version":"0.11.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"425800fee112e6d3a7638a01d5ff599cfc7d50ef","_id":"multivocal@0.11.0","_shasum":"cb7c40b94d4fc9134cee3987afcd821fd05bdb11","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"cb7c40b94d4fc9134cee3987afcd821fd05bdb11","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.11.0.tgz","integrity":"sha512-3vswh5UO9fuN4RFNaOrfF8zUZDdD53PexlZS5fVwRJLlozDzo49bvLdQjTcucMK2k82bbRbJYyVSwX327gdXew==","fileCount":38,"unpackedSize":196745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3LC/CRA9TVsSAnZWagAANGQP/0Xkby78nWKneC9DKtBX\nAxuen67GMukd7lgBz4teMJwmSxKdnla7h1RIQVcuXNnFI66Oqqn7iHX6MVBU\ntUFhTnTbyGtj4mB/aXr9nE8NEF8SHZwXxU50PPoiTe5Qe9BO0tRs4+S53ekg\n4r2+zqT1KuXXPxRiiBIeTPaNca8q/D411IClyRZG47gF4TThO+yTOT0uhOo1\nedtiE6na1h59Sk1mqmk+v013IbCu0FVvT9+0vUJgiJm7toxNoLXdDPlKDx6K\nsxHVSWhqNzZq+YIO+xeyoDNQ6lqSXfQ2O0DUJk8cKfef8OOxn7aZnnXBGU9p\niOAMvoMAzthKE7lvZsSQXsph/BDUjzmJ4sPIAdtMMFJ0SS57l1JBLXd5LR/E\n1Ld1lyMn/OsKl7w3qgPRrk1Qz9zc1WBYRHxutzeQ9AgXWOuERny82fK9TOgu\nDyPPls7QKzZdldLMfc+Q5ISUlhRGSY7mcxDWAxUhQEo5KSO5ty+tq8oatoun\nUpZV5N2omn+gY8QO2KB1O23LVDrfKC6YCR7j++WyZ6kMlDO5Jn+dxMN3WEA8\nxdcK0mON08E7xB6cyuykkXUg7Y8Qx7uxDkprLaCx8IHb7jeTSwig7wrgeq+Y\nhEnlsvzbQrAcKXR05COLk07HaCQnnw9qzgBBn5EaEAEqrVK7vY0tiSQ0ewDx\nZumg\r\n=+UGv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIE12g6bF/V9SguQwFsq/sYHhvPfKK6/5Svz8YezsR6rVAiAI4jKogsdmsN4+cTv9JPBziBlU3I/ooyXGqrW25WUvUQ=="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.11.0_1557967038910_0.35627976871584455"},"_hasShrinkwrap":false},"0.11.1":{"name":"multivocal","version":"0.11.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"9adc8e12a94a06564e8cf31b5c10af789f0382ce","_id":"multivocal@0.11.1","_shasum":"948e612722bfc301028951ae021e97e0ac930c18","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"948e612722bfc301028951ae021e97e0ac930c18","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.11.1.tgz","integrity":"sha512-2qPLBdRrAbfvlsrnyMYeD1kxDJsLHxWNU2tZjLWqq0Kj72GPj/rR6RKqm+AZBMfJCHeUs7Sm8ERh62x99b6EZA==","fileCount":38,"unpackedSize":196745,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc3LQyCRA9TVsSAnZWagAAPYUP/iLwVNggofSkXE5gZ1bW\nqFxYw2uadYUAKvYa5IU5eG5RlwWHl4ma1EJ4LWHp7yWHb1Ma/9q+fpPOYtB5\nnMOjfVNDTDODzb4vkGsN0T7I27GFJ+wCm0EzJ9bS5ULLseoIM3TiPU3neht2\nD5VngdgLB+yz6QdRbsvAjkiR3yGdKHW2blRAWI6Tv8mYlVuqPqfI/f6tdZDZ\n7LaIRzGwFo80NNLPqy/R15TYpO58GQBnIX6t+iAm4CvQ9afjGM4shoO14PJ0\nHAblyYdVlLSp0eM5+zzb78RVcPODE7PprQ1Sthied+xGGGc0eu4mSu1v66v0\nfUzcw8yvE7VHBfnrZDwj1nPMqjCWVvImekP1tdFL+EwBu7aDaANFtm2cAxkp\nh0XBu613cmHVePebuS0oV3zNmlW8YIH4Q95QuRohfCOL/vsS4JkOiGMqanKQ\n5pcop3k+WA41hLLkRpfEi9AzGKNxrGFRbLfaaFqtSDwSY5SdoxfY4drtNyP+\noorV8+yeydLJyBuuYTeuHlhg0hjUoLJI/QM6llUcNhjzutNaPc/6N2qzdGFU\nG1gkPZhx7bkbfq6bk4ejfPkHTPoW4LADU9D7LjbBYSsfCtZA87QYkhix1VwO\ny9oE4DeFNu8lz/Q5D2nBO8c+Jo4ueFrwlb4uD5cRGkYyI58M3erxuzPoK/wV\nhqj5\r\n=3oKK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC+Z9CBdHPAQlqInT08X4FQL1KYI2XE8VUKrTBYAkIBcQIgTDJ7iB6IrUOT/QGO7YQdArF+Fm79RCr/Yxxp4iX1UcU="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.11.1_1557967921298_0.1363367958301367"},"_hasShrinkwrap":false},"0.11.2":{"name":"multivocal","version":"0.11.2","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"1beb1b142a6f16c43a54e23b223ff2dbeeb4ac1d","_id":"multivocal@0.11.2","_shasum":"c3141a7d3fe26883c0a2ddfa3377242043801916","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"c3141a7d3fe26883c0a2ddfa3377242043801916","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.11.2.tgz","integrity":"sha512-OFkzFeJRRbw2A5BFgfy3KzqH4Hfpqiu+J3TnFtjHPgqTHdX0zsYMNibYEhze6RNSoyEHNptx22oZM+thnP7T+A==","fileCount":38,"unpackedSize":196755,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJc7xpcCRA9TVsSAnZWagAAcoIQAIs4FKwYxnsR/Ml3ebEb\nNNsIdXsnnDOA/zr9SE/LnK/4ohUzXM+cJROxc6R8gJcTk7Gyx40aCUJ4PqPk\n4qOYbnvXTK0WEBDPhLoK9mZKDRQKakVmsaUKbleVQf0PhM5iXBh+PnVSFOpD\nfYKXRPcpJbpTsJHGE27P11pcDcB3C/MDlQW7x/EY23gDE1GShBUJWQmJ3gCA\n7RiXbcYDD9ocxPm1hoV3Z0uuc2gm+mdN7OSRl6VXZiUBFhELNlIU4c589Zkv\n4ryu4iSfzKYqQieSdx+M+2pHjjCaa/ijGoLbKQhVM9e/Ej1j2Q2KbQIvamOg\n+u1Sl1DiGXeng71OpQLr9+slPgQfpdO/MinvDv6gXcAUea8dHxtSNu5R7v6/\nkUT6z8NcZlVNUH3VRsDIZGlQ8TZjqkDdGOrprBsgiZlNSqJ+MyGckvrBlvOk\nKgdeuBrIdT05Y+KR7ZwjArSlg7P3kIy1ZQfj5KzmDxaYsdwwdQ24iZVUzJy0\nMwCCbxDehsSyOU04uRuUf+Ijeo0ldrYnYtii6V+briTZhwEbxFJzbmG+087+\nRp/CMC7QOlRNGJVlrxTDGOYc48/h5cZtemqPybpEFyD/YMkBt6K7YLfq3i6N\nu0pLP3D9s0AoWuURaJHz47qzAJdan2LKQjEmLXag/O1A3t/HNPBT+PzSo0Pg\nyi0U\r\n=T9Q5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDuPK/BGtPTJ9spZ84bznSmGVYt1jfc1sox360ZQVqdwAiBqYadVb3T/Cv5U7CURn4hotGih5c1IoCL3NOolvhsUGw=="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.11.2_1559173723315_0.812788434420241"},"_hasShrinkwrap":false},"0.12.0":{"name":"multivocal","version":"0.12.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"debug":"^4.1.1","firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"de8240d813fd35037d75bbd3765186f0b1ebad1c","_id":"multivocal@0.12.0","_shasum":"2bc4bb106e83d9f848f92319d1213680817b808f","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"2bc4bb106e83d9f848f92319d1213680817b808f","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.12.0.tgz","integrity":"sha512-4Agd4Hrgl54JXqL4WW/1RRWjzkvzGGyOd00EWpO8QQNXM2qasre8hkpna6XlIbWCemQWqHM07qdgDhRqN3Yilg==","fileCount":40,"unpackedSize":366397,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdK+xPCRA9TVsSAnZWagAADJYP/01zMvCUjRqikCNkcObp\nfTzQK6GkQBlCEPzcjDQWOrFajx/LJFiTlq2Uxw6y+VxGZjdtu1zbUM4SmlnS\nn+9nAieD2+qH/EIuL6Njb0pF2jwG4DedYrnyU9yLxl+eziLpM2jOSdwYq3AA\nF5WzWOwpLGjCIZjXFCeMh/AY06erO5ZqnR7xN7fLAUUhrC/Yv76c+6dFz0cy\nwF79bI0Zlscpgv5MqdpZm9lEYs2O7X6oKWpVYOO5K2hbKVHWhrxqDLwXmAnH\nRyvMF0jfEflySd0kHY0afGJVvX4/pkCiF8mB0Ffqle1Dk23V5HI6AIfF32a0\nFreXKByuDf+wGXgjlKCvKU13nBDY/TeBjLSpsEjP4vVF8+AiDVCEwpGIwTsf\n+Db2M6GZj4VeLXNdud1voXoNBytyFBtBfdDv6C/uRhD1ltcxhLqZ9Eiz/R/2\nNcNxgh0t3kh8h71BsaFzHfcRzaXN36ppAMkMWD5SdYJ4H5+Rqvx7wixzgsJ7\np33zOs1MH0aJ9OmIIkQKne4cTcp35gRpsmIvCZAi2r9o/Rlj3gsa7+4Xypbb\ndc397TpYRbsvuB5TP7XpilxwYqOgXBTkGNfPjQfsl75K8czv9xpT0BUYq+V5\niKQRu0m7zKo8VZj2UklFfqQhmnu7W1Zn5ksPivWX7fWv8MA2U0f5TDwUeZTE\nkiSa\r\n=IR83\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCNhrHTvVkh4sTLb1g59DgzVJWQlr7v9CXRJnZyAcVsegIhAOz6jEFa2cepcSj2wglewQrIdFpsqty10Swp71uALYF/"}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.12.0_1563159630445_0.167788225267256"},"_hasShrinkwrap":false},"0.13.0":{"name":"multivocal","version":"0.13.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"debug":"^4.1.1","firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"552fd458dd3892b490d029ad7a1c8ef5161acf39","_id":"multivocal@0.13.0","_shasum":"3be03b91e3708edc28c41dc456d9f180eee54d17","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"3be03b91e3708edc28c41dc456d9f180eee54d17","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.13.0.tgz","integrity":"sha512-7msyzMAGhebN2kP2+X0Y/PGieX3t72lGMQn17px3tVRyR40Sega+LNoQm74hVes3qf5QqROzqiDrCDO9f8V52g==","fileCount":40,"unpackedSize":366778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ3LLCRA9TVsSAnZWagAAbzQP/3NjozIp9jsnVlX5sgDN\n/FPj6Bl4cmQXqDf+c7MHgV5o/pqmmI+gEZPW4iEbWYdKX3FFPT5Fptl9iBey\nTOAWdEGUPDeRKO15VL/aFWp/MP+Guc3KuJqn3O3J1fZs5U+w7TTtKhQUeYbz\n/YvFDYQtSoyDUoUgrTP73jMTuXLPRrysVUgpHtsgaqwU33CAYlRRRTR98UTe\n8bwmjPWlkMOW/lCqnrGGiZBmr7Gyg8bZRi2W1R9IoJzvadWfgFMRHVj8ug6S\n8yEthdo3vKEyMBn7IsFJLamEzKXswr92gpkwA8m7/xBXufk0gJNKW1hSiL3L\n9jtAwBNcNPFkppBJGyCehPSEdMfqzUsY5B0CW/hv+v12Ofjanbxy0wF7+PLM\nbrrbjFfmIvecEQR8aS5GJWQVT7emGPHoI11jNAta7WGIXe4D3Y9/b3JmQL4Y\nWlHp/21T30nrkWsL9Uo3eniOftPElkUHEXd4d88UgXqgVUEGIARHNvws4BKx\n0FNBaEcr4T66yiGTh5hWli8ixRj7ceGvbdPS7N5bBBQizg1TAbVHARzzBDaQ\nhHFKHeFVYrg69nyI/diFd2d5cifJRqTzAhp3aSLE2PYyY4m1DdetAdiX2n+8\nKcSPjHBeR7kdPK8g/SPxj8mPRt1aq/BkBaXpilL+Ddo6v6oeeZpAb34/T/+v\n5j0j\r\n=5hQ3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGZSPZu1GxVBGWy98CAwvY8W7yLjLkblYkP5BfG4/sNdAiASkrMnYS0Ra9Skv/Vq1Ek8VRocUXwYiOPFWyXFTfr7tA=="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.13.0_1564701386832_0.12505667665201115"},"_hasShrinkwrap":false},"0.13.1":{"name":"multivocal","version":"0.13.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"debug":"^4.1.1","firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"8bb378a71d2a856c9c562b30bd439903a90a8f08","_id":"multivocal@0.13.1","_npmVersion":"6.4.1","_nodeVersion":"8.16.0","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"integrity":"sha512-I/AGj203paNsqSI0ARx7qOfkI4qOCTEw67jmsiW2IpR2bjqPoIgInZrwYZSDhUzjbr8int4aHr1horEYIqIz6A==","shasum":"870e1f6991f857666ff5d0572611ea7be89d6d90","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.13.1.tgz","fileCount":38,"unpackedSize":205007,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdS4o7CRA9TVsSAnZWagAAbXIP/R7oVp1QXANw5mnjoGv5\nAbB+tnC8FaP5m1rd6svWfebL4xBuCDtOB0HBSJ1jVGbDcgbfvEu7EaRpqGlw\n8GHYsu5muxKI1B4aGrYV7CSqomhsMQjz11qNBbHNVdxTSTNyS13siFx0nW13\nwVGxVkPT0Cjv5Eoy+X5OFSpsPW6+l+pbSfkjEZBmjYWlug4ovTrD34cNKyFN\n17Dc6A25wpiXmRDWE3Tv9QxrN/qQGfUxtRW248DJZ4+0SJvAqHDV8G6KiM8z\nuxfnq39dM8aGT8Zxfd4JHlBno8uQTZNGL26zVAXA77y2f8k+vAbYI5XC0F7x\n8DV9wmOnhT8cCOqTU4nt4TUSQAIFkDbu7wi2cDxaBa1r6HayaOGcUVAqy3R8\nwEHLvoZI9bV+rHywLxfDr4pqACjwj2K0dryhCKey7jZ2AVk2OUIGwvEBnYpT\nSizshtXVcNGnuS94PQdKsd8RJf+bJcO4qAx61HNePQctP4HLmtiKTVBc1H1G\nxNz8nvbbH/x9YzHxPc1hMfI2YCvbCfAruCVWW83zI3kTUhYHNyQbW8b5iw0K\nuCAKNaCR+Cg3b0tYrF0lOT04pPJOaErYUus6QLQkixp8M3idQNpXm1cxkqnA\nSxEL7GLZB2n5U//tvE1GBDHyDWJY3rrSyz5F3DSu8W4sgz+AMkQvYMCECvwZ\nOpLf\r\n=2Vt9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDDMB7IOLr40umW+HFGOvk1XyXaIJxBIOJuA+4A+OITSAiEAh0eybDKyPv5bjREwmN1oy0D0HgPZCgjWQRH8WD/IZXs="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.13.1_1565231675009_0.9958745717128299"},"_hasShrinkwrap":false},"0.14.0":{"name":"multivocal","version":"0.14.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"debug":"^4.1.1","firebase-admin":"^7.0.0","firebase-functions":"^2.2.0","handlebars":"^4.0.11","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.2.1","jwk-to-pem":"^2.0.0","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.5"},"gitHead":"dd27b1da8cc110ff34be0b78fe4bee5bce04e128","_id":"multivocal@0.14.0","_npmVersion":"6.4.1","_nodeVersion":"8.16.0","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"integrity":"sha512-bgijFnjAwRKolmiCbpnirRvSoFCiOImpBWFC2qrpBvp59qU04yGvOZm1X9jmAujgbSdnbVYbJhxqBfx2nBu20Q==","shasum":"6a092b9f04a29d3405a103eba0e2cee0383aa208","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.14.0.tgz","fileCount":38,"unpackedSize":208140,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdbIBMCRA9TVsSAnZWagAAgSUP/1PLPA5cjTNUBej7fFAM\nl3O9uaIExTviZe+UNCTR6d1rrhFJJ2XufFAX5SMFspgJcXMsuNn71BZjkpJO\npJpmZ2RxSz1NTKCRwSvc+/VMKo7kbTI23z0l3k9k0nY48dPYby7d8vXhHlGG\nybdiWYFhbrANJqqZ4sOGJkEr5JfrNWkLUTkjkSXzORw7P+v2RF/DL6CHRqdB\nMs2IvKa36uI1BBA6YNO1332Z8kcwjb26NFN6UW3vy18ETRlLDV5uVdi8qJTs\nleBbdcMMbkX0sSqVau2gVmOGPJYMZjbD6BHaPumz+aIuYlLyPifEdoSzkREg\nqbxxf5BihF470iZVC+jvflxqE1Ky7T1Pe2CnKXy8toF4b2iXZMudrNGSm225\ntDiwZFSAY7oTlIC23E9hKOEBRVWSGiO9yE7LTDBuzZ15/M/qzd6XkBNZ/KeP\njnGCBx6BFjn8udJ3dnqp1ZgNJVT1MuBkJtD+vIHiBFsKjeguYroTHivsZ/TL\nwbQ+Gicy3Vhuu91X4ouowqHkvwkAIZbR+7rqMrbJk5NBXAQVbxQHgpgpQWeb\nBfVt0tWoO7HsMsjPKznedKiUxHt8lszRWuZauIXNd5vxNBiffqFLNEclEd63\nvoO0y7n8EWk9k/QNLaUT5c+He9BY5cPjRrsl3SFVsRd73KGvoGNEsAdQVyht\nYw89\r\n=ZqRg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGwPHCVkYPJCfx+Gao26IaigCFXxXV7Iy04/8jbbXCsTAiEA9DUcEUrwxoG3zGbaIjIFbQ3rai0/dzy9lNMOlK4X2aA="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.14.0_1567391819407_0.8112563046070891"},"_hasShrinkwrap":false},"0.15.0":{"name":"multivocal","version":"0.15.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"debug":"^4.1.1","firebase-admin":"^8.12.1","firebase-functions":"^3.6.1","handlebars":"^4.7.6","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.3","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.8"},"gitHead":"284761e01854c8fc1f8759d76b8388ccd6d698f6","_id":"multivocal@0.15.0","_shasum":"1e994530bc74dd81bbed9cf711294d65e62fe3d4","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.14.2","_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"dist":{"shasum":"1e994530bc74dd81bbed9cf711294d65e62fe3d4","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.15.0.tgz","integrity":"sha512-QbBgWw0MkNm4slq63Em3vsWgHSmlMtaNImzX1T7zch7POyccvxNdUG+3FvTBh7ozvbb15tM4GiTrVmkzs26zMQ==","fileCount":42,"unpackedSize":365931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe+7OaCRA9TVsSAnZWagAAkU8P/1k1wOzN4RLk5ZuCBIKN\ndaRoKwz5jR3uK8EEIyxI0tRZkWBcrokW/lcpISuUJv3mp41NkVs7GCsgv5cN\nlq8zyn7pK5AxZLwj/9ugOJRFEDRvDjeXmoc27cpfiiLYYM2zGExFsg770eIc\npAY9uxAKdJ/fx+g68eqBVPn9NpohpfhRf/GVY9hPj3UiOjEq3QH51c3R7W/t\nJcGAWSgMo7phGFJpyfFPSTMSVjb0IALqBYCgCbNpFXkjOzks3cThOUZxJXuw\nUfH5TSadmd6iwWFrbajYPz0qY2AXKRg+M4gV/mSiCfAlUXDeLUb4Nz1frEWN\nuwCOt492blTH2IPYtgziP6skLqA6UzGTXnpQYGTcnq7MfpShvjfrRNt8FE25\n+O6RBcLxlHc2m2TParDL0CvtfhGinBhDDqhwS+KAztJOyiOClh/OKE+Jfjoz\nc0shDBkw8aGxtP7hHw97yDQBz/KoSLySg01HTrk8ALWAam1tzQSTLyAt2Pj+\ndcR66jB0jGLoQYuNunx8b/kNGJAQTMFFmziCdCN4484OtMEdgLN2w0StO0xc\n66TjPEK+Ui2bNF01svEjkkXjxXLqxL7M9VtdKHgI7yWCw3oFlxi914zUQicL\nmZ+VZxT826bNGvzXO3ROB5WsrvVR0pXB/NkX7XqyPhet/aijmvdp375/hNXm\n8T2D\r\n=oB8n\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCUGvWdZ+Rz3/TLCDTOkFS9IO+CAX5Vxd3SzDuMKRj5jwIgUAKg27S/R9LcuUm4DXP9q6Yhf/i+kG6Oz6AhFb4UI8s="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.15.0_1593553818319_0.6422580535874256"},"_hasShrinkwrap":false},"0.15.1":{"name":"multivocal","version":"0.15.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"debug":"^4.1.1","firebase-admin":"^8.12.1","firebase-functions":"^3.6.1","handlebars":"^4.7.6","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.3","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.8"},"gitHead":"859a6be3b9924ec389f00e64d33738e1c8c93600","_id":"multivocal@0.15.1","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-do9a1U8KbO8AOhOLWsMf6B80kHMmvkXtJPsTLZdgFizfuuXSqTnmAclfwR7IUHjIVQR+I7ilYrL0zNBtzv+0kA==","shasum":"f0743a4cd07468769f07eeac8120dfd8ccd6ae64","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.15.1.tgz","fileCount":40,"unpackedSize":228002,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfMTYeCRA9TVsSAnZWagAA6OUP/3j7lM351xnBnXcFiEOr\nX6eMQhwWXjz4n/1vnDQgjPPwdqFvZfsT5fJZZk0l7RYLX2hikUyHVmX+P6BI\nuoLFwL5ZYeWP+cOn66gU5spQJAw4okzH40B/rbyOA8zhpUrLh3P1flWLPTdE\nTQHozrkzWtv46DWhqyn8UhR2oUvKfqrQBdrQ/C98IPjUuEn8yyMhQ6f+4Xzw\njgdtDDn/8vS9NaHAmOgH+NBC5dbCNN40zq51Hs8VRISUejtY6OcZjNS30Vw+\n6lAFMHA9MqXH59ZAxKZrvya9qCBUe9mjKiHq52HKJF6ox9J7Mrs6c9zZ2MMn\nAaBT4K5KdtdBaev8mIbJm/Ms+e+FY+DojEvzOJB85S5vSbM440GqfoIAouE2\nFgMoU1M30h3nvi+myB2mpCSxP6ZnrVTUkdVBHM84tGCYfMtFVxsjKA8Biett\nFQlHkL6vIzO0MSwk2gdDXMx1yl98Dm5rGtdIkj9sbOPYlFH3LEtvJFT6sHNh\nPy2dFPONv5ZdEJShM9TsrQmz19YeDtdqoqvqwg2RvLBDsp6bDDOJjufOAJ49\nlHUXtcMbrUe2enMIFMyYrH8VNhGRkABm9WYpmuIDT22fzpYxsnFmtvEphI8M\nfL/CGulg5E5cS4c73xX4dZD7e8iv1fUmn05dcx1yqC6+qihYco35Oa55ewFj\nSSXb\r\n=b7HE\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGHnli/NJssvgHwAmxvOpK9/iAp6MatgPmUd3ZTtgWtOAiEA6YFAGsdDKgVe2RR82sQ/RwIfa8goGSY/suh24F5S44U="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.15.1_1597060637251_0.7734066023040587"},"_hasShrinkwrap":false},"0.15.2":{"name":"multivocal","version":"0.15.2","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"debug":"^4.1.1","firebase-admin":"^8.12.1","firebase-functions":"^3.6.1","handlebars":"^4.7.6","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.3","object-assign-deep":"^0.3.1","request-promise-native":"^1.0.8"},"gitHead":"a97101a5ff0be665f37cc221ed0ba48bacce3d9e","_id":"multivocal@0.15.2","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-uNs107ZfdqdXPQ8zwAmQL9gf1A43R+eHCp9VMXHed04FycJJz41jE4ddBF77RhJ8tc7hm1f+CuQ4JuABo6vvAQ==","shasum":"98904ce54e1b0c0488cfaa22e1412f6a669c3f9e","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.15.2.tgz","fileCount":41,"unpackedSize":236984,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfUNZDCRA9TVsSAnZWagAA+a8P/1muyjcx8EDRFTYg3PRw\nTHN/KFG059xmCgXb/98WBrXkyY58n0AXrlHtQObVz8TKA7MinIKgeybqkPWF\nalcJ1sWp5iZogMee2oprZYza/dLcwd18PzLsPfoEyFVPzjSSD/QTgozus9Op\nfynXW1Ahkl9NKBNOyGWEC+XUij2CRN8kInWH2cyr7paFXYPMD5txrjwhVvbA\nRqpe+4nyDGYFtLjLzVLKhLXqS/wiTAXG8xBaxR7OAUKng9JsWBGxUidDtB/5\n8yydv4INpoWKbPMkG3xYFI3By9gXQiHxhgFjHYnJCJAebnoCjfH9TUzqoBWf\nZgcSG4diyGPpdsNsTlc86ratcf1oyoTlg+X1oEtm/n7i94okM2qW2VRUBFh3\nkgcG2zicKvo2kN2s1v/Qg5HURZp4gmUOzTD4AIbhWMmJ7UF4Z118FoONrpTj\nSL8J/4rPJ9E11NKvLZqitYLHzqo1pVa7tI927YsO8JYzbw2zNzWu5cJYNP11\nNGpd8+zEQPoAwiE6O9tP6qd+dMnB7CTWL68KRl2wUIqSmxqjR7AwAWTOKtQv\nyt+T2ezB8ziGHJzdAe3cbWRQv+6shsb8s78tXpptBn4J5HwpENqe6GvQISvs\n6nVNaKfAl+LEJZrhtZXWC3DXjHrFtsJovZrOQcXj4udq59LqOaOIZAAcxmVS\ny33G\r\n=iSkM\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBwKcThCQFTsyvbdEQnusWj9vcJ2N/RGmLriQny5w9dAAiATKz4tmMB77mfVqzYvH7SqPHErwhLnWvgAtsAn01ITPA=="}]},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.15.2_1599133250777_0.7454581719113207"},"_hasShrinkwrap":false},"0.16.0":{"name":"multivocal","version":"0.16.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"axios":"^0.21.1","debug":"^4.1.1","firebase-admin":"^9.4.2","firebase-functions":"^3.13.1","handlebars":"^4.7.6","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.3","object-assign-deep":"^0.3.1","speechmarkdown-js":"^1.8.0"},"gitHead":"0b167646bb4e8106d33132ff55a822de5602de12","_id":"multivocal@0.16.0","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-gI6xaSkT8mED6U42sjtT4aikWumodUsgxDXfrbaS2LqTf+OfqR8xlk1TK/SDP63/KZpZliqXJuydZUQ21lJKCA==","shasum":"703c30c122b2a4be209f4670d6413189643f0408","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.16.0.tgz","fileCount":46,"unpackedSize":268546,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgA4upCRA9TVsSAnZWagAAWDsP/3AvME0YpLUoFTnsgUD5\nGAxtQqTM6XrxflU/kJrKueAQrbrwNnfnoSEzETDjsTGfuous4pmPHShLJBQA\nVmFAPUt42TE/StJyU+4M2V1mZ4Zc/fCkoVyTr+QjB9iPTlwwafCO78Q1JeiB\n4sn8Kdr9Y4fw9r4ESMOeqmW1yLQK/5wpwjBaFXaKG1KnuL/6xpa6WfHmbPqy\nzbtFcwBY7r1U8zDYfGi401n3118EfUFP5QZTMfoU+IU3nUhZfslY6kB6+MZg\nhZ9RrT3gjALYK+SEuDirJMxOoWlxwWIuHgVacDx3L5UPP9sLXiR6PA4/pvWw\nQbDxCabv0mU1IwcFxO6VsEw3jPqgHSFntuDsMRdR3W/OU5y24AGtyWeR8g5L\n+YqBfMz2rgOQ0dcvVddGEnmZjiZe96UG3+eIxJ15AKCE9xwTuBxwMGs7dYzH\nvOlaocyyo1ymC3n2cNoVbXSEGB0/a/paLkPv7pQQrCTtQK9sgscWTB+k/HLY\ntAwG+0SY83indmejVbh6Ruuzseq35H2JQiajtD281U9DKWA5Iz61dK/clYie\nobqs871jqhQKdb5TawDfo0CXZ1h8cJgRD+a+rse4Z9WqUvp7mXqr9ZrFiaE5\n1Y3unhmDW58yQa098OeDRkLGA/OeKzRiKc+wGBjOzjCV0EfppifDgNrUfA03\nph5z\r\n=pcYS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAr+moQ/YqQVwr31iQmt5W9sV+Mp52IippdXb4kcRJcAIhAKEldhFsG2Bc8GXPCEk5+cyt13OZpTA3dPukHFiEsqo5"}]},"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.16.0_1610845097379_0.5133032063434735"},"_hasShrinkwrap":false},"0.16.1":{"name":"multivocal","version":"0.16.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"axios":"^0.21.1","debug":"^4.1.1","firebase-admin":"^9.4.2","firebase-functions":"^3.13.1","handlebars":"^4.7.6","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.3","object-assign-deep":"^0.3.1","speechmarkdown-js":"^1.8.0","uuid":"^8.3.2"},"gitHead":"903717c2a3f6c1b4fc80491039d59f1a51f9712e","_id":"multivocal@0.16.1","_nodeVersion":"10.18.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-RAV/fV5A9VdlfCIpmURG6OZA9V+BpKRGuzA2Z2mbkEhcqvb3rtP+7vcWgPA/QMl27MAlrscTf9r/335F8o2nhA==","shasum":"44ca861214690d5c4617c23487a785f2033bd5e6","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.16.1.tgz","fileCount":46,"unpackedSize":268570,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgBM72CRA9TVsSAnZWagAAPiYP/214FwbVkf9e15LI63Bj\ni6wDYXd1g+zRHwLKjj3ylBtQ6jgSgiVY+YpNK39wh4ddzdVB9RlE0GYOHnjv\nCa6FJ3APFKQE8OotugvuuDf0t4pmzBUe1/1SL5wLBwvxjyvglu4K8K6V/Bri\ns2y4QLu/Rmx3qNIbBWmuTzRl5s8/3LWXIVuJ1zpeoQ7ISg9lXgBn1muP8S2N\nsCMwAUrqw5KGaoAB94ap5ga0JGoUvk3b9rzRwiAPYcckaZziVWejYe8hipKZ\nc1hckUigYW8uSg5wk2sjbnKGlsNbOrElbckGIro7do1uu8yVpHl/1mBtTbM9\n0FMybcriMQrL894cQzXWH8d6E4a0F5N7+KOh0GYtLEWMuj6PP9PkfXUwlre9\ni3Nomo9EhpfMbpm8MJN26PqSgPNgkymBlt38Qg4oU9/w/0t9G1/wwtafkgpV\nlOgm1wK6mPWVURKeddM4sr2gKIyr/bcOMDGbkMUZFytvYmu2B2f82G5YirL+\n2juYYgGHyKXI+GfC6PVweRZvtp7VWlrfsooFQzsFgdFCI4VdFvq1YkDB5Tbs\nnoRJLKpYBSUPLbwR4DSkssZAr/xK/Y5s8NOXIn6ukv8USzK+l8I/Hsb6NfW5\n4h9KPNAbRJ3DXau34qbQziUTl6Sv9sHwv76o6BuCEXYRtMQ53a9TbG5TD12X\n1MMJ\r\n=Yxgw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIBk4SsnAIwOWfpodo8ceP8AtzkguoqcxBkwGoBohvsR4AiBej+HF9/iGMTA+01Neebj5Fg+9g0WOBH0SO3ermoEYxw=="}]},"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.16.1_1610927861784_0.9459320128784412"},"_hasShrinkwrap":false},"0.16.2":{"name":"multivocal","version":"0.16.2","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"axios":"^0.21.1","debug":"^4.1.1","firebase-admin":"^9.4.2","firebase-functions":"^3.13.1","handlebars":"^4.7.6","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.3","object-assign-deep":"^0.3.1","speechmarkdown-js":"^1.8.0","uuid":"^8.3.2"},"gitHead":"dd4b160e6bb874b9a1bf9df197690fc6f7862798","_id":"multivocal@0.16.2","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-YwbgZFs12czqMRqm46BAw0rLEnJp5QZ14Y/eGENprbVbUbXuwRAbST6etR8L0HuT1Ecqas9pOBw76XA17NPxRw==","shasum":"c13d226c4cdca65e4876b113ada7b1d30e55e916","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.16.2.tgz","fileCount":46,"unpackedSize":269646,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfEDJCRA9TVsSAnZWagAABewP/isqRyFXtngUVpdTxf35\n1JHlUHaxN3dpHhhEZvRok6vEeacQTiHl0GvcGSwJCxLkHUkRTAXdKWNc7p8c\nrrT6p+hFTIlMKZoP057AyT+2YOEyqU90pNJcZA4HUQkWHiroexM0Bus3QhHB\n9ARHhqX9iATjtvgKqfUvAbkOtlVF8ejrOAD7m2VBjp3nhkcGQryFCs5T9MyK\n+lokwnvh+7nyowz+OFQXPWB8d6jw4II7+EIWd+ilaa2wycqBOt7sB+zm1/bB\nUDVaUoBpFpmUuQHKDRLDjnT4nG+6LZ4ain+OG8FvEHwoyBGgumC+6UMH3he+\nUFfA9QqS865YwLXzxwskSsYUO9Wi+76MDHtnoainP3yvb1ZqQoKNRYduDEYL\nk4iWT0dnxznFBLLTbEUDio14yQuOLuP/UbUTY964mLrPAOLqUASEQzt/IDJ4\nUdJOwRkTtfzngU0Ga3noa7Xp+KDYiHdjhBvv2sjGAPP3y1fAXszuy8wzY/as\neR/DhuAoti7CSnTzsM66mu5In78OtcTF8WcKwGC4KV6KELbdjsRrcRIl0wf3\nyEWF4wzE09EVxNR9NTMI5VTenooszHyCFPrqjlxZ6bLktBlmOF4TEcWm/0aP\npsglSxi1/fIw1D3palvSz7kAJ3W7DTSneMSr0bhrOGqRU1EAoH9NCPitIJ6n\nBpZU\r\n=Opp6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIASZipZ8T5DQKvOEaqvT6xAtj4YOs5caW39311FywLpaAiBaSNxc2OE+DRTgmBFy1S8kl27G1m9hdzRMKWJkIdPHJA=="}]},"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.16.2_1618755784872_0.5813615941480483"},"_hasShrinkwrap":false},"0.16.3":{"name":"multivocal","version":"0.16.3","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"axios":"^0.21.1","debug":"^4.1.1","firebase-admin":"^9.11.0","firebase-functions":"^3.14.1","handlebars":"^4.7.7","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.5","object-assign-deep":"^0.3.1","speechmarkdown-js":"^1.8.0","uuid":"^8.3.2"},"gitHead":"8ad571018b0a827c1b9324650215474a186c59af","_id":"multivocal@0.16.3","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-g3wh5r/iyImrtvOlAzNEqKrSnW1eIBDVpw4q1YcPHnyWlkof8/7eVrr5FPKGGiBTyZZC3Jy3u7OO5Moi4/8NYA==","shasum":"b08513650e47b3dd776e7360408878c439e21f36","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.16.3.tgz","fileCount":46,"unpackedSize":270522,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAH6FCRA9TVsSAnZWagAAGAwP+wT4LWBpOzoWUQtl4XU1\nBG4o5GlMzk2JFq3PqAHu2k5uhT5r1TdAcWYYKsPVN/PQJtURAt9BAJlhF96x\nFtlpgDRdOYTN+aklf1IiC+thFwncquPgiOB/2vb/zDxGq2+kjAahOmrT/kTm\no3We5p1ZAoGaXMoiYSrBF1FQios7egAQTfTCmC1DDz6nI0prHZZETRL1hD8i\n6BgHJ5AssNMkd+M9sCLBRJWxdCsQ4dqTkaB6jKnyHwJhYTlJQYhu2DqIk3bg\npoe52aiFUIw7lI+NihS0Q45jhhQavBkLHKmwoInDvnQ2D2vkqL9L5dfx9F+g\n+Q0n+V6KGJUJaIqW/zutwo30d5PrDUYw9vnEDa0sn9hls2MYvJ0qk3OTyd1U\naPfQkZiQlFMjnRehBQGf1CUJ5DFBTu/QNcNPBbOu9coq4REbO9c2x2bOV0xm\nNx2cUvOxtPIs3GkoOgJfbHvLifIYb5rVnJnnRcFDM0EuvAy/rk6GY8MnV6DJ\nJgpCcgMwY8wGmYgijV6jUSfvDIwJzodKBTj5d8mFATj40Yi3Mf4hbnO+yZde\nd9fFwfgVO78oy9p8b6SMV/R5YWmochbrXnk+fK4IqAhyS86Zu26Zu0NHgJ0Q\nQeesT61eHvQ6gUlnGb0G6hZg0B5uDSKlNANijCQrPtuQGJlBoVlvzysLYqvA\n5Ac9\r\n=zfJ3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDYs2kZqGCkhorLSCrpa0X/UaBN4hMckJEWBTqkiFT/QQIhAPIxNPpoPIU9T7TahhhO3SpkSBYkv+3KhfrvhLq7o165"}]},"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.16.3_1627422341143_0.0965555478105069"},"_hasShrinkwrap":false},"0.16.4":{"name":"multivocal","version":"0.16.4","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"axios":"^0.21.1","debug":"^4.1.1","firebase-admin":"^9.11.0","firebase-functions":"^3.14.1","handlebars":"^4.7.7","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.5","object-assign-deep":"^0.3.1","speechmarkdown-js":"^1.8.0","uuid":"^8.3.2"},"gitHead":"8ad571018b0a827c1b9324650215474a186c59af","_id":"multivocal@0.16.4","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-DivWlqSntHXHA9Y0yJNiQQ6y9OEFlWbRSGL/kZ9HJPnrUhwp0nM5Q6h4lYmVp8dW3XEeK9lZO94TZ4yivQ0mTg==","shasum":"df023485de3611a843f0f3ecb6873eb2350a4eaa","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.16.4.tgz","fileCount":46,"unpackedSize":270519,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhAIxaCRA9TVsSAnZWagAAJ/kP/j63MjYRPTc0LaJK1TV4\nGnR6x6FlQ9Ok1nGlT2fxvf4Wqn3Z2UUJG2tgR8Snb3x54fm1gNFDsSac1xvU\n5lN2gqiAklwGjQ6Vz0E22/kXU7U+8zZI853s9IXqP6leOZcUs/VaoH3zTd3P\n+e7JnBnQAKEC3iYhFQ/VHmLQdXfzB83rzOFe2PaLdfMbCqsWHrgCjbil+FCV\naYgSwws8gvKAsD+fc57gxmTItqurYz0Jq+MuHynPTZu9IFnWOt2mhiUz+vUr\nBjNsVy+/jYGweIzvGXx4/3QnhEEOicoNVnMKTG0kba30fOiC7V2DV9yrmvPZ\n7fnWfsNjrdH/ayKOiaNBFVPgUCRYDp1qAoiByKGwfhm8YCqlbDtCGUdIJrpd\nDzyq3URd3Now/bHCS+X4Ihzs9ptRTfOJJJh4knEjsoHl8W8dbB6v3yBaRt76\nDTJVR7HkKib7/SGXulCFa1i4JZHPKL1AVrTtUH7OkTj8hrYYsi1nNn6vzBi0\ncEacAOQX/+vNP4/L1K2Nw6ndh/lmluJwLFfKrXgLlRKYqyfbBspGJX8sL6mU\nJ7LXroRmRPGF84ZuNVSNZgQalbkgs0TaExoPyDhc04BV2XdEPZDIXeY357E7\nN+4ODPegYh1bG62PyWhwTAiIUL0blmfAn9cYQQzFVZDpCoozheYRh9XvbOdk\nthlf\r\n=2JUI\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAZyOLm/JmQBA19tY8VOim6PXxRqbvbFRVUWMYmVCOdyAiAGKnJQzGUEdzKdq6M30paLHVv2iDIUZu49t6cVxDOehQ=="}]},"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.16.4_1627425881826_0.28452174269625874"},"_hasShrinkwrap":false},"0.17.0":{"name":"multivocal","version":"0.17.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"axios":"^0.21.1","debug":"^4.1.1","firebase-admin":"^9.11.0","firebase-functions":"^3.14.1","handlebars":"^4.7.7","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.5","object-assign-deep":"^0.3.1","speechmarkdown-js":"^1.8.0","uuid":"^8.3.2"},"gitHead":"577aedd72296bab97d29413bc7afd674ea97d678","_id":"multivocal@0.17.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-C5iRXo1Z+y5MyJAH7cSrmHKtWYDwC7v7NK5sb2vDhM3cB5n5vKp2WSpN+7SZijAkV0oUDxoglyJG/BGnfYiA7A==","shasum":"659a3f6f7869787b4a1acc73d9da8ce28fe89e64","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.17.0.tgz","fileCount":51,"unpackedSize":281597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLLbbCRA9TVsSAnZWagAAAh8P/3rTHlIAy4jcMjpvYUJ/\nym0/Nd9HePYa8Jk4c7fNHqPtt7TrdMguV1apSbCQjlW+pCJjHnc9/lKCTW22\njuEXDcRH2PTPm3tO36ngXjBS9927Aadc0acIuwy/8yAVNgeEDMOcqOt/KCss\nye34rCtfMfUUhW+oLri0YCYePmGDoHHEYV+GOGUmxf6DAq2oN6Q/Ofm/KX3L\nwABniEkZ2ube5RVWxGA3yGFQlgka5cThDifiwzpLmVWGHshA8ZCxkn48N/vk\nc03ooMylvCW4rDEhnjfSJz5gotlDNl7bSYlxBdyCkAay+QjGS+Qf74vgWG+L\nMcuAN0YsTtSdI/K/qeA7WT6YxPIIcCT9agz/F8GFkvr0aRI52vHt29CxgrFJ\ncaYcIaygACe5ZJg2kTV3hZBYt+z0onpixzjG9Y6T76WpqdCl0Nv2T2uT6av7\naBzbRZBjfezaTLUM7EdiJPO6GBA4g7EZ/N+cmMTtD7dySr3KFn3tj95WmWnt\nhZRpTfDPAHJCLqLpyJxrVuD4/E8U2vrGCNsaKlldMsyNBMVZ6y+Ul6jL25bj\n6vXgnAVHhZkAKCna/6keolTmjPGY/yABAatN9HfEEXksobjC1qKIxx9Ik2cb\n6nLXjQkxb3BoFNtgEEYtl8zuX+vR0GcP/Em3dXzCM/KF05a++Ip1NP0KrELK\nWslC\r\n=CelS\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGBI52k8ul8bJxSD+FJxpDcRadLs+6DV/I4ik8QSm8xPAiEAgSxO0ggzbjGrQst7p4fdPKeyQRPohuQa4QYCoXa9hi4="}]},"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.17.0_1630320347582_0.5898288588232383"},"_hasShrinkwrap":false},"0.17.1":{"name":"multivocal","version":"0.17.1","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"axios":"^0.21.1","debug":"^4.1.1","firebase-admin":"^9.11.0","firebase-functions":"^3.14.1","handlebars":"^4.7.7","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.5","object-assign-deep":"^0.3.1","speechmarkdown-js":"^1.8.0","uuid":"^8.3.2"},"gitHead":"0241bda6a0d6ca2a285e961aac5d8c3327e10f52","_id":"multivocal@0.17.1","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-I+p2ks7QiZ/Ikb4eoJRaF2nW4smb7srCvdYyvtm8IS0A6vBgD5Ec5h2r1+DZGyRiO6SQA/WHGRQ4BZzuPriCIQ==","shasum":"9134b002aa79fa67855c75af2774533e47eec04c","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.17.1.tgz","fileCount":47,"unpackedSize":232734,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLL95CRA9TVsSAnZWagAABFUP/jdYVgAhQ2QZt/hMbqjZ\n8G5fX/kfJJlWwVTZ/d2a3stfvJSTBov6pxzRltgu13KcFRibVUJvWnkfmKo6\nLlgip/MBoKiCONSJxYxjy3Iodqlm3hlKnHkAwaU/Z8ME59DbB80qtw/e73LP\nZFVDYHeF+t+Iumb5p3JF83NUn9Evb+k2AyyA6+ZFCS3sALK+bi5VkCNrW1zX\nFJQygjWFH49rW5sOywLf97R+IcUtOMuvD9uz1RqXEq1qHkmW0DvwaB0JoOXJ\nK+uOey64bAIVa+4yhAAqIvrYQ/qHmoDKmqFlwpoqbwlCFd76gD3QreA4P4Q+\nEUc0cdIoxRP+XABf1/965PsRRcwZqgMlNAqF4IaxMq8P8+EJ4LcYbsWmeXSC\nD+S4Xlo8Ki2s1JvzY8sWnoWgObktLqy3YBxBD2C1B1qkue3DMCu/HPYVktnh\nJGzyysPALnEe8ZoDr5bqLCXk+Q8Gms+LUVxl1Ixlz0sukTYG2jagfUss2FkF\n0DmWXCc8iWRAT1I/lvAHZ5GKh5AEKdpprwdCfkA/4SWw1L96Wy0oaQVXjurT\nBA9iX87doLg59LQFrgMe0glXAJZ4rX9Vr74IHWllTSx+ZkENhYBpKV4BUIa9\nV5MTVKdAEezuRzlyBCBVF3iwMR9OqXSmEYJz/uV+KKXkxSALa+s3/Mczv11G\nZb7h\r\n=I2sD\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIEdcYEkCFDKhxXcSlk2iYAX4t56Auk9TSrkpLNIFMGMLAiBqM93AE1B73ky17LCaZwPlcu2cN8phr20/lW31lJhrDQ=="}]},"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.17.1_1630322552932_0.5504236323062168"},"_hasShrinkwrap":false},"0.18.0":{"name":"multivocal","version":"0.18.0","description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","main":"lib/multivocal.js","directories":{"doc":"docs","test":"test"},"scripts":{"test":"echo \"Error: no test specified\" && exit 1","zipfile":"pushd dialogflow/standard && zip -r ../standard.zip * && popd"},"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"keywords":["aog","actions-on-google","dialogflow","voice"],"author":{"name":"Allen \"Prisoner\" Firstenberg"},"license":"Apache-2.0","bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"homepage":"https://github.com/afirstenberg/multivocal#readme","dependencies":{"axios":"^0.21.1","debug":"^4.1.1","firebase-admin":"^9.11.0","firebase-functions":"^3.14.1","handlebars":"^4.7.7","handlebars-helpers":"^0.10.0","jsonwebtoken":"^8.5.1","jwk-to-pem":"^2.0.5","object-assign-deep":"^0.3.1","speechmarkdown-js":"^2.0.0","uuid":"^8.3.2"},"gitHead":"527070365abe52782d4f1f51d6bea61ae667aee8","_id":"multivocal@0.18.0","_nodeVersion":"12.21.0","_npmVersion":"6.14.11","dist":{"integrity":"sha512-bhArByqMQmPx6PL518n/V4X2hvKReXy9nHg4Vr3aHsxDZ/SkvFWvZVHIhGFvb12pdB4Zl269HKEAjqvs37jzDQ==","shasum":"882ae5520cc50a10fa320c46c0b96b6d7ea56ca4","tarball":"https://registry.npmjs.org/multivocal/-/multivocal-0.18.0.tgz","fileCount":47,"unpackedSize":242654,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2z3DCRA9TVsSAnZWagAAsOMP/jthIiuX5fBifWBkg4G+\nkDBcczGQ6AQC3g1gHyeH3tkCiwAES6FXt4/9cVFozgPkiM6VMiOgHpYxY31n\nsth89Mw6lrp3DmL9vX0tvG54lqznMnQQk5oFyzXS0+QuTv/0CjqQzyQx5YZK\ngQdctZXL3YlTJAYnyDK0nuX50gtoMVmjYixY1ebZppkkTIhlDb9N2pgWbfWV\nHoanCt+48RpOhV6ZxtYjHU6BIPJtFsU7KfKFIkoBoJ4QFZmMVa+Xda7+hNBe\nPI+aNmWxD0LHhmOCpnoe+fkj67bL1Uv5+5EjJ8X9B+aUbnp8MwZCBqkTz1AW\nMnUg9Rw8a+MgGUzRB+k8wRyfA+7H1CzqYhJdE2d+ipmbFHrmF0MxWLmlhG5V\nKXooXRcfk/CUYwknUxo5qBuFtPkWkvAJFPoBYs4aBMgQilxzhrga+vibvIDq\nv6NEzfwM+2jNOX/iI6Ah9E9Ei0kwGx0q8TDD1+RN7b7JruPcKWArqzC6Se7i\nOxnrvUexvwERmzQrBrsCnZAzPtUEJzul7jAXFbBLvHeZsttSgQkxqXdqdS45\npuKRd31KBQyabNWwKf3Dp/eKsmRaDatch+vpF9kYrBMWV9uQoVzqE8iyJ/zk\nJbsg+mgtK+v1qCiR9CzVoZE/I8jrQO9Nb/d7vlX8QV1FmmmttJzjrG4RvKMV\ns4Cr\r\n=e+FO\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAYG/1fNoHJwPvFtZJLv1WY8uU5GxeLGhTvi9Cu+gPqxAiBWA7VdE6mnZRUf2bnhJT/7776+j98LI5yo8RfwWUzrGw=="}]},"_npmUser":{"name":"afirstenberg","email":"npm@addventure.com"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/multivocal_0.18.0_1636920268199_0.5454122810731583"},"_hasShrinkwrap":false}},"time":{"created":"2018-04-22T15:31:49.079Z","0.6.0":"2018-04-22T15:31:49.264Z","modified":"2022-06-20T14:04:43.844Z","0.6.1":"2018-05-03T01:11:12.662Z","0.6.3":"2018-05-06T23:40:51.372Z","0.6.4":"2018-05-07T00:56:25.263Z","0.7.0":"2018-05-23T01:23:16.853Z","0.8.0":"2018-06-11T03:02:24.445Z","0.8.1":"2018-08-08T04:16:21.516Z","0.9.0":"2018-09-07T02:14:02.025Z","0.9.1":"2018-09-07T03:23:41.122Z","0.9.2":"2019-02-19T01:21:02.515Z","0.9.3":"2019-03-12T07:57:57.888Z","0.9.4":"2019-03-13T23:40:59.548Z","0.10.0":"2019-03-28T00:34:25.531Z","0.10.1":"2019-04-08T02:12:14.170Z","0.11.0":"2019-05-16T00:37:19.093Z","0.11.1":"2019-05-16T00:52:01.473Z","0.11.2":"2019-05-29T23:48:43.512Z","0.12.0":"2019-07-15T03:00:30.629Z","0.13.0":"2019-08-01T23:16:27.051Z","0.13.1":"2019-08-08T02:34:35.143Z","0.14.0":"2019-09-02T02:36:59.549Z","0.15.0":"2020-06-30T21:50:18.527Z","0.15.1":"2020-08-10T11:57:17.376Z","0.15.2":"2020-09-03T11:40:50.867Z","0.16.0":"2021-01-17T00:58:17.493Z","0.16.1":"2021-01-17T23:57:41.916Z","0.16.2":"2021-04-18T14:23:05.015Z","0.16.3":"2021-07-27T21:45:41.270Z","0.16.4":"2021-07-27T22:44:42.030Z","0.17.0":"2021-08-30T10:45:47.813Z","0.17.1":"2021-08-30T11:22:33.162Z","0.18.0":"2021-11-14T20:04:28.386Z"},"maintainers":[{"name":"afirstenberg","email":"npm@addventure.com"}],"description":"A node.js library to assist with building best practice, configuration driven, Actions for the Google Assistant.","homepage":"https://github.com/afirstenberg/multivocal#readme","keywords":["aog","actions-on-google","dialogflow","voice"],"repository":{"type":"git","url":"git+https://github.com/afirstenberg/multivocal.git"},"author":{"name":"Allen \"Prisoner\" Firstenberg"},"bugs":{"url":"https://github.com/afirstenberg/multivocal/issues"},"license":"Apache-2.0","readme":"# multivocal\nA node.js library to assist with building best practice, configuration driven, \nActions for the Google Assistant and webhooks for Dialogflow.\n\n*(This README is a work in progress, although it documents much of\nthe platform, there are gaps. The intent is to have it completed\nby version 1.0.0.)*\n\n## What is multivocal?\n\nMultivocal is a library that tries to bring a new approach to helping\nyou write webhooks for the Google Assistant, Dialogflow ES,\nand Dialogflow CX. (With hopes to expand to other bot and voice\nplatforms in the future.)\n\n### Why multivocal?\n\nWe found that the traditional method of building a webhook suffered from\nseveral problems:\n\n* There was lots of boilerplate code required to get very simple things\n  to work.\n* Best practices for handling no input, repeated bad input, welcoming\n  users, prompting users, varying responses, and other conversational \n  components add even more code.\n* All this additional code is beyond the actual logic we want to implement.\n* The text for responses were often mixed in with the business logic,\n  making it difficult to add new language support or change the possible\n  responses.\n  \nAs we developed more and more Actions, we began to want a library that\nmet a few goals:\n\n1. Reduce boilerplate as much as possible.\n2. Use sane defaults and make it easy to override those defaults.\n3. Our code should be focused on the results - not how to transmit those\n   results.\n4. Responses to the user should be configuration driven, allowing us to\n   easily add and modify responses that incorporate the results from\n   our business logic.\n\nThat evolved into Multivocal.\n\n### When does it make sense to use multivocal?\n\nWe think it makes sense for any application you're writing for\nplatforms such as\n\n* Dialogflow ES (Dialogflow 2) with \n    * The Google Assistant (Actions on Google 2)\n    * Google Chat (formerly Hangouts Chat)\n* Dialogflow CX (Dialogflow 3)\n* The Actions Builder and Actions SDK for the Google Assistant (Actions on Google 3)\n\nWe hope to expand the library so it makes sense to use for \nother platforms that use Dialogflow, for the\nAmazon Alexa, and for Samsung's Bixby.\n\nRight now, it targets webhooks that run on the Firebase Cloud Functions\nplatform, but it should work on any platform that uses Express-like\nhandling or AWS Lambda.\n\nFor details and caveats about each platform, see the \n[docs](docs) directory for platform-specific notes.\n\n### Who is behind multivocal?\n\nMultivocal was started by Allen \"Prisoner\" Firstenberg, a Google\nDeveloper Expert and developer of several Actions for the Assistant.\n\nBut multivocal is open source - we would love to see your contributions!\n\n### Where can I get multivocal?\n\nSource for multivocal is available at https://github.com/afirstenberg/multivocal.\nYou can also find documentation there and at https://multivocal.info/\n\nThere are sample projects (ranging from fairly sparse projects we use\nto test things out to more full-featured examples) and additional \ndocumentation linked from https://multivocal.info/\n\nYou can report bugs and issues at the github project page.\n\n### How do I install and use multivocal?\n\nYou can install it using `npm install --save multivocal`.\n\nAs for using Multivocal... well... that takes up much of the rest\nof this document, as well as other documentation available from github\nor at https://multivocal.info/\n\n## Hello World\n\nUsing multivocal to implement a basic fulfillment webhook for an Actions Builder\nbased action built on Firebase Cloud Functions is straightforward with just\na little boilerplate.\n\n```javascript\nconst Multivocal = require('multivocal');\n\nnew Multivocal.Config.Simple({\n  Local: {\n    und: {\n      Response: {\n        \"Action.multivocal.welcome\": [\n          {\n            Template: {\n              Text: \"Hello world.\"\n            },\n            ShouldClose: true\n          }\n        ]\n      }\n    }\n  }\n});\n\nexports.webhook = Multivocal.processFirebaseWebhook;\n```\n\nWe can roughly break this into three parts:\n\n1.  Load the multivocal library.\n\n2.  Build our configuration.  \n   \n    We'll use a simple configuration object that takes the JSON for the configuration.\n   \n    We need to define the _Action.multivocal.welcome_ response, \n    and we'll define it for the _undefined_\n    locale. This response says that for any incoming request that is for\n    the Action with the name `multivocal.welcome`, format the Template with\n    this text to use as our message.\n    Furthermore, after we send this message, we should close the conversation.\n   \n    The `multivocal.welcome` Action is one that is provided by the standard\n    Intents, and is called when the conversation begins.\n    \n    Building the configuration automatically adds it to Multivocal's\n    configuration.\n   \n3.  Register the function to be called when a request comes in from Google\n    and have multivocal process it.\n    \n    In this case, we're using the Firebase webhook processor to process\n    from Firebase Cloud Functions, but there are also processors for \n    Google Cloud Functions (which are slightly different), an Express\n    function, or if you're using AWS Lambda. If you're using something\n    else, you can build the environment yourself, call the processing,\n    and send the JSON response.\n    \nA very similar configuration could be written for an Actions Builder project,\nand mostly be structured the same way. (The biggest difference is that \nhandler names aren't allowed to have a dot in them.)\n    \n## Features\n\n### Naming Convention\n\nAlthough there are some exceptions, multivocal reserves the following naming\nconventions as things that will be defined for the library. These names are\nfound in the configuration object, in properties in objects, and in Dialogflow\nconfiguration. In order to maintain forward compatibility, you shouldn't\nuse things named this way unless they've been documented:\n\n* Names starting with a Capital Letter \n  (Response, Action, etc)\n* Names starting with one or more underscore, followed by a _Capital _Letter\n  (_Builder, _Task, etc)\n* Names starting with \"multivocal\", in any case\n  (multivocal_session, Multivocal_counter)\n\n### Configuration\n\n#### Simple Object configuration\n\nSince most configuration is represented internally as JavaScript Object\nattributes, it makes sense to use a JavaScript Object as one form of\nconfiguration. You can add this configuration by creating a new\n`Multivocal.Config.Simple` object and passing in an Object with attributes.\n\n```\nvar config = {\n  Local: {\n    und: {\n      Response: {\n        \"Action.multivocal.welcome\": [\n          {\n            Template: {\n              Text: \"Hello world.\"\n            },\n            ShouldClose: true\n          }\n        ]\n      }\n    }\n  }\n};\nnew Multivocal.Config.Simple( config );\n```\n\n#### Key/Value configuration\n\nConfiguration can also be loaded in from a set of key/value pairs (such as a\nproperty file or the `process.env` value that contains the OS environment\nparameters). This is a little more complicated than the Simple Object\nconfiguration in two ways:\n\n1. Keys may have separator characters to represent some hierarchy.\n\n    You can specify a `pathSeparator` option and it will turn this into\n    an actual hierarchy in the configuration. By default, no path separator\n    is assumed.\n\n2. Values are expected to be strings, not objects.\n\n    To parse values as JSON values, where possible, you can set the `parseJson`\n    option. Things that aren't parsable as JSON are returned as-is as strings.\n    This defaults to `true`.\n\n3. They may be loaded at a different point in the configuration hierarchy.\n\n    Do this with the `root` option. By default, it is loaded directly under\n    the `Config` setting in the environment.\n    \nFor example, `process.env` is added to the configuration under\n`Config/Process/Env` using something like:\n\n```javascript\nnew Multivocal.Config.KeyValue( process.env, {root:'Process/Env'} );\n```\n\n#### Firebase realtime database configuration\n\nFirebase represents its entire realtime database as a JSON tree, with\nsome restrictions on the values of the keys. The `Multivocal.Config.Firebase`\nconfiguration can treat any path in a database as an object to be used\nfor configuration. You can specify the path in the configuration, or\nuse the default of `multivocal`. If you're using Firebase Cloud Functions,\nyou don't need to provide the firebase settings for initialization, otherwise\nyou will need to provide settings that include, at least, a URL and\ncredentials.\n\nThe upside to using Firebase to store responses is that it is very\neasy to update the database (either manually or by uploading JSON)\nand the changes will be live immediately.\n\nOne catch is that Firebase doesn't allow some characters in the key value, so\nyou need to replace them with other values in Firebase and the system will\nconvert them. Conversions done are:\n\n* underscore _ converted to period .\n* vertical bar | converted to forward slash /\n\nSo the URL https://example.com/ would be written as https:||example_com|\n\nFor many uses, this should be sufficient:\n```\nnew Multivocal.Config.Firebase();\n```\n\nIf you need to specify configuration, the name of the firebase app,\nand/or the path to use for configuration, you may need something more\nlike this:\n```\nvar firebase = {\n  config: {\n    ...\n  },\n  name: undefined,            // Uses default Firebase app\n  path: 'config/multivocal'   // Defaults to 'multivocal'\n};\nnew Multivocal.Config.Firebase( firebase );\n```\n\n#### Cloud Firestore configuration\n\nFirebase's Cloud Firestore database provides a way to store documents\nthat contain attributes and values. Since these values can be object-like,\na document maps very nicely to a JavaScript object. The `Multivocal.Config.Firestore`\nconfiguration treats a document (specified by a collection name and\ndocument name) as an object. It defaults to a collection name of `config`\nand a document name of `multivocal`. If you're using Firebase Cloud\nFunctions, you don't need to provide the firebase settings for initialization,\notherwise you will need to provide settings that include, at least, \nconnection information and credentials.\n\nThe upside to using Firestore to store responses and configuration is\nthat it is very easy to update the database (generally manually, or\nby using a program to upload JSON) and the changes will be live immediately.\n\nUnlike the Firebase Realtime Database, Firestore allows for attribute\nnames with periods.\n\nFor many uses, this should be sufficient:\n```\nnew Multivocal.Config.Firestore()\n```\n\nIf you need to specify configuration, the name of the firebase app,\nthe collection, and/or the document, you may need something more\nlike this:\n```\nvar firestore = {\n  config: {\n    ...\n  },\n  name: undefined,            // Uses default Firebase app\n  collection: 'stuff',        // Uses 'config' by default\n  document:   'mv'            // Uses 'multivocal' by default\n};\nnew Multivocal.Config.Firestore( firestore );\n```\n\n#### Merged configuration\n\nThere is also a configuration which takes a list of other configuration\nobjects and merges them, with latter configurations overriding earlier\nones. This is a deep merge, so it can be used to change specific fields.\n\nThis is primarily used internally to get the configuration available\nwhen Multivocal is called.\n\n#### Adding your own configuration source\n\nIf none of these suit your needs, you can create a class whose instances\ndo get the configuration from whatever source you need. The only requirement\nis that it have a method `get()` which returns a Promise that resolves\nto an object with attributes. This object should be an instance that\nis different than one returned by any other call to `get()`. (In the\nevent it is modified.)\n\nYou register the configuration instance by calling `Multivocal.addConfig()`. \nThe built-in configuration classes do this for you as part of creating\nthe instance, and you may wish to adopt this model as well.\n\n#### Default and Standard configurations\n\nMultivocal installs two configuration instances when it starts up.\n\nThe default configuration is available in the DefCon environment setting.\nIt contains \"last resort\" values and default settings. You **should not**\ntouch this environment setting - you can override everything in your own\nconfigurations.\n\nThe standard configuration is loaded as the first configuration and\ncontains some basic phrases and tools. You typically don't want to\neliminate it, but it is possible if needed.\n\n(TODO: Point to more complete documentation elsewhere)\n\n### Pre-Processing and Preconditions\n\nEnvironment settings built:\n\n* Preprocess\n\n    * Fail\n    \n        True if preprocessing fails and further processing should halt, possibly \n        returning something.\n    \n    * Msg\n\n(TODO: Work in progress)\n\n#### Dialogflow Ping\n\nIf the request matches a pattern determined by the \n`Config/Setting/Precondition/DialogflowPing` setting, set the `Preprocess/Fail`\nenvironment to true and send back a \"pong\" message.\n\n#### Actions on Google Ping\n\nIf the request matches an expected value in a parameter determined by the \n`Config/Setting/Precondition/GooglePing` setting, set the `Preprocess/Fail`\nenvironment to true and send back a \"Pong\" message.\n\n#### Actions on Google v3 JWT verification\n\nThis verifies the signed JWT sent by Google as part of each request against\nthe `JWTAuth/Google` setting to verify the request comes from Google.\n\nBy default, this uses the project's Google Cloud or Firebase project id read\nfrom the system environment. If this is incorrect, you can update \n`Config/Setting/JWTAuth/Google/aud` to include your project\nID (or a list of valid project IDs), since this is one of the fields that is\nverified.\n\nTo disable the check completely, you can set \n`Config/Setting/Precondition/Verify/Rules/AoG3/Criteria`\nto the string \"false\". But don't do that.\n\n#### Other verifications\n\nAt least one verification must resolve to true. In order to guarantee this, you\nmay want to institute other verification tests (for example, to check a header\nvalue against a constant). To do this, you can add a named rule under\n`Config/Setting/Precondition/Verify/Rules` that contains the following properties:\n\n* Criteria\n\n    A string or array of strings that will be evaluated and then ANDed together.\n    The results of these evaluations will be the results of the verification.\n\n* Processor\n\n    Set to the string \"SimpleProcessor\".\n\nFor example, this rule would always resolve to true, and thus ensure\nverification would succeed. (This is unwise for production code.)\n\n```javascript\n  \"true\": {\n    \"Criteria\": [\n      \"true\"\n    ],\n    \"Processor\": \"SimpleProcessor\"\n  }\n```\n\n### Processing, the Environment, and Paths\n\n#### Platform detection\n\n### Environment builders\n\nEnvironment settings built:\n\n* Platform\n\n* Hostname\n\n* Locale\n\n* Lang\n\n* Parameter\n\n* Context\n\n* User/State\n\n* Session/State\n\n* Session/Counter\n\n* Session/Consecutive\n\n* Session/StartTime\n\n* Option\n    See \"Lists, Options, and Cards\"\n\n* MediaStatus\n\n* MediaProgress\n\n* Session/Feature\n\n* User/Feature\n\n* Intent\n\n* IntentName\n\n* Action\n\n* ActionName\n\n* Default\n\n#### User authentication\n\nEnvironment settings built (if appropriate):\n\n* User/Id\n\n    An ID which is guaranteed to be unique between different platforms\n    but maintain a 1:1 mapping with the native ID or the multivocal\n    generated ID if appropriate.\n    \n    Actions on Google is deprecating their native ID, and plan to\n    remove it on 1 Jun 2019. Multivocal will use this ID for now, and\n    will switch to using a generated ID at some point before the cutoff\n    date. After the cutoff date, the old ID will continue to be used\n    for users that had initiated sessions before multivocal switches.\n    \n* User/State/Id\n\n    Contains the native or multivocal generated ID that was used to\n    generate `User/Id`.\n\n* User/IsAuthenticated\n\n    True if *either* of the following are true:\n    * User/AccessToken has been set\n    * User/IdentityToken has been set with a valid token\n\n* User/AccessToken\n\n    If the platform provides an access token, it is available here.\n    The access token is usually generated by your OAuth2 server and\n    you should verify it before use. Typically, you will want to use\n    it to get the user's profile, at a minimum. If you wish, you can\n    store this profile in the `User/Profile` environment setting\n    (see below).\n\n* User/IdentityToken\n\n    If the platform provides an identity token (a signed JWT providing\n    profile and other assertions), then this will be the raw and\n    unverified token.\n\n* User/Profile\n\n    If the platform provides an identity token, and multivocal is able\n    to validate the token, then this contains the profile information\n    contained in the token.\n    \n    If the platform does not provide an identity token, or you have\n    other means to get a more complete profile, you may wish to use\n    this environment path to store one. However, be aware that this\n    may overwrite the profile that is set by multivocal. If you're\n    concerned about this - use a different environment path.\n\n#### Adding your own builder\n\n### Intents, Actions, and Outents\n\nUser actions are represented by two things: The Intent name and the Action name. \nMultivocal prefixes these with \"Intent.\"\nand \"Action.\" respectively and stores them in the environment values below.\n\nIn general, for most platforms, you should be planning on the \"Action\".\n\n* ActionName\n    The action name provided from Dialogflow 1 or 2,\n    the fulfillment key provided for Dialogflow 3,\n    or the handler name provided from Actions Builder\n* Action\n    The action name prefixed with \"Action.\"\n* IntentName\n    The intent name provided from Dialogflow or Actions Builder\n* Intent\n    The Intent name prefixed with \"Intent.\"\n* NodeName\n    The scene name provided by the Actions Builder\n    or the page name provided by Dialogflow 3.\n* Node\n    The Node name prefixed with \"Node.\"\n\nMultivocal uses the Intent and Action to determine which\nhandler should be called to do any additional processing and what\nshould be sent in response. The Node value is not used to determine \nthe handler or response.\n\nAdditionally, Multivocal defines the concept of an \"Outent\". You can\nset this environment setting in a handler to provide additional\nchoices for responses which may be different than the default ones you\nprovide for the intent or action. You do not need to prefix it with\n\"Outent.\", although you're allowed to do so. You're not required to set\none at all, but if you do, it should be in the environment setting:\n\n* Outent\n\nHandlers and responses, and how Multivocal determines which ones to use,\nare described in their own sections below.\n\n#### Standard Dialogflow Intents/Actions\n\nA standard set of intents, handlers, and responses are included\nwith Multivocal which handle most of the boilerplate tasks that you\nneed to consider. There are two parts to these standard components, one\nis included when you initialize Multivocal, but the other requires you\nto import a standard set of Intents into Dialogflow:\n\n1. The standard handlers and responses (including a base library for\nyour own responses) are setup when Multivocal is first initialized. You\ncan override these behaviors with your own handlers and responses, but\nyou should keep in mind what they do by default.\n\n2. There is a zipfile in `dialogflow/standard.zip` which contains the\ncorresponding Dialogflow Intent configurations. All the action settings\nstart with \"multivocal.\". You should *IMPORT* this zip file into\nDialogflow. If you're starting a new project, you can then delete the\nolder welcome and fallback intents. You'll also need to make sure the\ntimezone, language, fulfillment URL, and other settings are correct\nfor your project.\n\n##### Action: welcome and multivocal.welcome\n\nIncrements the `User/State/NumVisits` environment value.\n\n##### Action: quit and multivocal.quit\n\nSets the `Response/ShouldQuit` environment setting to true\nafter doing response processing.\n\n##### Intent: input.none\n\n##### Intent: input.unknown\n\n##### Action: multivocal.unknown\n\n##### Action: repeat and multivocal.repeat\n\nSets the `Response/ShouldRepeat` environment setting to true\nafter doing response processing.\n\n##### Action: multivocal.about\n\nUses values from the `Config/Package` environment setting to respond\nto questions about the version. Typically you'll set `Config/Package`\nto the contents of your `package.json` file.\n\n### Handlers\n\n#### Built-in handlers\n\n##### Default handler\n\n#### Adding your own handler and setting an Outent\n\n### Response, Suffix, Localization, and Templates\n\nMultivocal has several steps to determine what should be sent as part of the\nResponse and Suffix:\n\n1. A list of items containing `Template` parameters (or just strings) is fetched \n   from the configuration based on various factors, including the Locale, \n   Intent, Action, Outent, and Levels.\n   \n2. Some processing is done on these templates, including loading some templates\n   from elsewhere in the configuration, evaluating template settings that will\n   apply for future templates in the list, and filtering out some possible\n   results based on criteria that are set.\n   \n   If the template just consists of a string, it is at this point that it is\n   converted into a `Template` object by creating an object with a `Markdown`\n   attribute set to the value of the string.\n   \n   The processing does **not** include applying values to the template at this point.\n   \n3. One of the templates is selected at random to be the `Response`.\n\n4. The Response-type object is evaluated as a template to apply other values \n   in the environment, and other transformations are also done (for example,\n   to handle Text or SSML attributes). \n   The results of doing this are mapped to the environment\n   based on other settings described below. \n   \n   For the `Response` configuration, the Template used will be in the\n   `Response` environment setting and, once evaluated, will be in the `Msg`\n   environment setting.\n   \n   For the `Suffix` configuration, the Template is saved in `SuffixResponse`\n   and evaluated into `Suffix`.\n\n#### Localization and the Path\n\nAll the Responses are contained under the `Config/Local` environment path, to\nemphasize that these are expected to be localized responses. You can store\nanything that you expect to be localized under this path as well (and there\nare some ways to automatically have these processed as well, as we'll see\nbelow).\n\nUnder this, there are a number of components to the path:\n\n* `Locale`, `Lang`, and then the undefined language \"und\"\n* The target (such as \"response\", but more details below)\n* The `Outent`, `Intent`, and `Action` values or \"Default\"\n* The `OutentLevel`, `InetntLevel`, and `ActionLevel` as appropriate\n\n#### Conditions\n\n#### Debug response\n\nResponse settings:\n\n* Debug\n\n  Typically an object (although just a string is allowed) that is evaluated\n  as a template. The results are generally saved in the environment setting\n  `Debug/*target*`, so if you're evaluating the `Response` configuration, the\n  target is `Msg` so any debug information would be in `Debug/Msg`.\n  \n  When `Debug` is present, `Debug/Index` is also set with the response number.\n  \nAlthough you can specify `Debug` for each response (and sometimes you want to),\nthere is a shortcut that if a response contains *only* a Debug attribute, then\nit will be used for all subsequent responses, similar to a `Base` response.\n\n#### Base responses\n\nResponse settings:\n\n* Base/Ref\n\n* Base/Set\n\n* Base/Condition\n\n#### Template and other transformations\n\nThe Response selected is transformed into a value after applying a series\nof functions, taking the results of one step and feeding it into the next:\n\n1. Each text string in the Template object is treated as a \n   [Handlebars](https://handlebarsjs.com/)\n   template string, with the entire environment passed in and available\n   to the templating engine. (See below about available template functions\n   and some special environment settings available.)\n   \n2. If the only attribute in the resultant value is named '_Value', then it's\n   value becomes the result value.\n   \n3. If there is a `Markdown` field, it is used to create a `Text` or `Ssml`\n   field if that field isn't present by passing it to the \n   [Speech Markdown](https://github.com/speechmarkdown/speechmarkdown-js)\n   library. If a field *is* present, then it won't be overridden by \n   `Markdown`.   \n\n4. If there is a `Text` or `Ssml` field, but not the other, then one is\n   converted into the other using some simple transformations (converting the\n   &, <, and > representations).\n   \n#### Template functions\n\nIn addition to functions available from \n[handlebars-helpers](https://github.com/helpers/handlebars-helpers),\nmultivocal provides several that are useful in your templates (and some that\nare really only useful for multivocal itself).\n\n##### Ssml\n\n##### Oxford\n\n##### Val\n\n##### FirstVal\n\n##### First\n\n##### Shuffled\n\n##### Pick\n\n##### PickVal\n\n##### Set\n\n##### EndsWith\n\n##### Setting\n\n#### Template special environment settings\n\n* _This\n\n* _Result\n\n#### FlexResponse configuration setting\n\nAlthough `Msg` and `Suffix` are generated in the environment based on the\nResponse and Suffix settings, the system can apply these concepts (and the\nsteps outlined above) to create any environment values you wish. \nThis is handled through a number of different configuration settings:\n\n* Setting/FlexResponse/Targets\n\n    The list of targets to evaluate. This initially defaults to \"Response\", but\n    you can add other targets to evaluate additional values. When doing so,\n    \"Response\" should probably be last on this list.\n\n* Setting/FlexResponse/Path\n\n    A series of paths that are evaluated both using the environment (to fill in\n    values) and against the environment (once the path is determined - to get the\n    value at that path). The first path that contains values will be used, even\n    if all the values are later filtered out.\n\n* _Target\n\n    While evaluating each target in `Setting/FlexResponse/Targets`, the specific\n    name being evaluated. This probably isn't very useful, but it is a crucial\n    component in the Path.\n    \n* Setting/{{_Target}}/RawParameterName\n\n    If you provide a string in the response instead of an object, multivocal\n    will create a Template object with a single attribute with this name and\n    a value of the string.\n    \n    By default, this is the value \"_This\", which means that the template\n    (when ultimately evaluated) will attempt to map the resulting value to\n    the target environment.\n    \n    The Response target, however, has this set to \"Text\", so an object\n    containing a Text attribute will be set to the Msg environment\n\n* Setting/{{_Target}}/EnvField\n\n    What environment setting will contain the Response.\n    \n    By default, this will be a name similar to *target*Response. For the\n    Response setting, however, this is mapped to \"Response\".\n\n* Setting/{{_Target}}/TemplateResponseMap\n\n    What parts of the Response object will be treated as a template, and what\n    environment setting will hold the results. This is a map from the template\n    name to the environment name. By default, this maps from \"Template\" to\n    the name of the target, however for the Response object, this maps from\n    \"Template\" to \"Msg\".\n\n### Sending\n\nNot all platforms support sending all types of responses - see the platform\nspecific documentation for details about what is supported or how some features\nmay be represented in a platform-specific way.\n\n#### Message\n\nEnvironment settings:\n\n* Msg/Markdown\n* Msg/Ssml\n* Msg/Text\n* Suffix/Markdown\n* Suffix/Ssml\n* Suffix/Text\n\n#### Suggestion chips\n\nEnvironment settings:\n\n* Msg/Suggestions\n\n    An array of strings. Each string becomes a suggestion chip text.\n    \n* Suffix/Suggestions\n\n    If `Msg/Suggestions` is not set, this array of strings will be used instead.\n\n#### Lists, Options, and Cards\n\nEnvironment settings to generate a list or a card:\n\n* Msg/Option/Type\n\n    Should be either \"list\" or \"carousel\". The value \"collection\" is equivalent\n    to \"carousel\" for AoG v3.\n    \n* Msg/Option/Title\n\n* Msg/Option/Items\n\n    There must be at least 2 items. (If not, this gets turned into a card.)\n\n    * Msg/Options/Items[]/Title\n\n    * Msg/Options/Items[]/Body\n\n    * Msg/Options/Items[]/ImageUrl\n\n    * Msg/Options/Items[]/ImageText\n    \n    * Msg/Options/Items[]/ImageBorder\n        (for Card only)\n        If set, should be one of: \"DEFAULT\", \"WHITE\", \"CROPPED\"\n    \n    * Msg/Option/Items[]/Footer\n        (for Browsing Carousel only)\n    \n    * Msg/Options/Items[]/Url\n        (for Browsing Carousel and Card only)\n\nWhen processing the option result:\n\n* Option\n    Set with the index of the result. \n\n##### AoG v3 implementation\n\nAoG v3 uses a Session Type to organize the possible responses. You must define the\nType in the Builder/SDK. By default, this type is `MultivocalOption`, but you\ncan change this in the settings in `Settings/Option/TypeName`.\n\nYou must have a Slot for your Scene of this Type, and the prompt for this\nslot should be what sends the list or collection. The slot should be named\n`multivocalOption`, unless you change the path in `Settings/Option/Path`.\n\n#### Table\n\nEnvironment settings:\n\n* Msg/Table/Title\n\n* Msg/Table/ImageUrl\n\n* Msg/Table/ImageText\n\n* Msg/Table/Headers\n\n    This is an array containing the column headers.\n\n* Msg/Table/Data\n\n    This must be an array containing the rows in the table. Each row\n    must be an array containing the cells (column by column) in that row.\n\n#### Link out\n\n(TODO: Link out suggestion - work in progress)\n\n(TODO: Link out/to Android app prompt - work in progress)\n\n#### Media\n\nEnvironment settings:\n\n* Msg/Audio/Url\n\n* Msg/Audio/Offset\n\n* Msg/Audio/Title\n\n* Msg/Audio/Body\n\n* Msg/Audio/IconUrl\n\n* Msg/Audio/ImageUrl\n\n* Setting/Media/Controls\n\n#### Full Page Display\n\nThis supports the Actions on Google \n\"[Interactive Canvas](https://developers.google.com/actions/interactivecanvas/)\"\nwhich allows Assistant devices with screens (such as Android and Smart\nDisplays) to display an HTML page that can receive updates as part of the\nresponses.\n\n* Setting/Page/Url\n\n    The URL that the full page is loaded from. There is no default.\n    \n* Setting/Page/IncludeEnvironment\n\n    An array of Environment paths that are copied into the Data sent as\n    part of the response. It defaults to\n    \n    * Intent\n    * Action\n    * Node\n    * Outent\n    * the Text and SSML included in the response\n\n* Msg/Page/Data\n\n    An object containing state information or updates for this response.\n    By default, it may be empty.\n    \n    The final object Data will include the attributes specified by\n    `Setting/Page/IncludeEnvironment` noted above.\n\n* Msg/SuppressMic\n\n    If true, the mic will be closed immediately, otherwise, left open as usual.\n\nThe Data will be sent if both of the following are true:\n\n* The `Setting/Page/Url` is set\n* The proper feature in `Session/Feature` is set by Actions on Google\n\n#### Transitions or end of conversation\n\nUsually these will be set as part of a response, and usually as part of\na Base response, although you can set them manually as well. \nThey should not be part of a Template.\n\n* ShouldClose\n   For Dialogflow with Actions on Google or Actions Builder, setting\n   this to true will close the Action after the response.\n\n* NextNode\n   For Actions Builder, if set, this is the name of the scene to transition to\n   or special values (indicated below) indicating recent nodes to transition\n   to.\n   \n##### Special transition values\n\nMultivocal stores recent `NodeName`s in the `Session/Stack/NodeName` stack\nand uses this to allow for \"relative\" names consisting of one or more periods\nto indicate how far back in the stack should be returned to (and removing those\nentries from the stack).\n\n* `.` would transition to the same node. While this seems identical to not\n    transitioning at all, Actions Builder would re-trigger the `onEntry`\n    event if transitioned to, and would not otherwise.\n* `..` would transition to the immediately previous node before calling this\n    node.\n* and so forth\n\n### Voices\n\nWhen replying using SSML (possibly via Markdown), it is often useful to reply\nwith multiple \"voices\" - either as part of the same response, different responses\nin the same session, or between sessions. These voices are defined with a name\nthat you assign, but which may map to different characteristics on different\nplatforms.\n\n#### Setting Available Voices\n\nMultivocal searches for the voice configuration map under the `Config/Local`\nenvironment setting. This is similar, but not identical, to how it searches\nfor a response. Under this path, it has a number of components:\n\n* `Locale`, `Lang`, and then the undefined language \"und\". (Same as for responses.)\n* The \"Voice\" target\n* The platform named used by SpeechMarkdown, stored in `Platform/Markdown` or \"Default\"\n\nEnvironment:\n\n* Voices - contains the voice configuration.\n\n#### Voice Configuration\n\nVoice configuration is a map from a name (that you choose) to an object that\ncontains attributes for that name. Most attributes that start with a capital letter\nare turned into SSML tags, while those that start with a lowercase letter are\nallowed for your use. This lets you set other attributes about each voice (which\nyou can use to define the persona attached to that voice, etc).\n\nAttributes being turned into SSML tags have a value which is the object\ncontaining attribute/value pairs for that tag.\n\nFor example\n\n```json\n{\n  \"Local\": {\n    \"und\": {\n      \"Voice\": {\n        \"Default\": {\n          \"Scott\": {\n            \"Prosody\": {\n              \"rate\": \"fast\",\n              \"volume\": \"loud\"\n            },\n            \"food\": \"chocolate\"\n          },\n          \"Eric\": {\n            \"Prosody\": {\n              \"rate\": \"slow\",\n              \"volume\": \"soft\"\n            },\n            \"food\": \"noodles\"\n          }\n        }\n      }\n    }\n  }\n}\n```\n\nDefines two voices. Each has SSML that will be used when they \"speak\", plus\nanother attribute defining their favorite food (which is, we assume, relevant\nto something else in the conversation).\n\n* Scott will have his SSML text wrapped in a `<prosody rate=\"fast\" volume=\"loud\">`\n  tag and really likes chocolate.\n* Eric will have his SSML text wrapped in a `<prosody rate=\"slow\" volume=\"soft\">`\n  tag and enjoys noodles.\n\n#### Selecting a voice to use\n\nFor a response, multivocal searches several locations in the environment for\nthe name of a voice to use:\n\n* The `VoiceRequested` environment setting, which lets you set it as part\n  of a response as part of your handler\n* Through the `Response` or `ResponseSuffix` objects that resolve when\n  determining and generating a response, and\n  thus the `Msg` and `Suffix` objects as well after the templates have been\n  resolved, the `VoiceRequested` field from those. So you would set one of\n  these in the `Response` or `Suffix` objects for your Intent, Action, or Outent:\n  * `VoiceRequested`\n  * `Template/VoiceRequested`\n* The `Session/State/Voice` path, which contains the name of the voice used\n  for the previous response, with the assumption that you usually want to\n  use the same voice each time during a conversation.\n* The value at `Config/Setting/Voice/Default` to set an initial voice to\n  use for the conversation.\n* If none of these are found, multivocal pics a voice at random from the\n  list of voices available at `Voices`. This will be set in the session state\n  so it is used in subsequent rounds of the conversation.\n\nTo use multiple voices in a response, you can set the base voice using one\nof the methods above, and then the SpeechMarkdown `[voice]` tag to indicate\nthe new voice. The same names you define for multivocal are available through\nSpeechMarkdown as well.\n\nEnvironment:\n\n* VoiceName - The name of the voice that has been selected.\n* Voice - The configuration of the voice.\n\n### Contexts\n\n### User and Session Storage\n\n### Requirements and Requests\n\nSometimes, responses need information that you will collect as part of your\nconversation with the user. You need to make sure you have the information\nin the environment before you give a result. \nMultivocal can help you out by letting you set a\n*requirement* in the configuration for a response and automatically calling\na *requester* function which will set things up to get you the values you\nneed - typically by asking the user for this information. Some of the built-in\nrequesters use a system provided helper to get this information.\n\nTo indicate when you need a particular requirement to be met, you'll specify\nthat in the `Requirements` section for a locale, which is setup similarly to\nthe `Response` section. The key will be the Action/Intent/Default name, while\nthe value will either be a string of the requirement, or an array of strings\nindicating all the required environment settings.\n\nSo to say that the \"user.email\" and \"user.name\" Intents require that the user\nbe authenticated, we might have this in our configuration:\n\n```\n  \"Local\": {\n    \"und\": {\n      \"Requirements\": {\n        \"Intent.user.email\": \"User/IsAuthenticated\",\n        \"Intent.user.name\":  \"User/IsAuthenticated\"\n      }\n    }\n  }\n```\n\n#### Default requester changes to the environment\n\nAdds two new settings:\n\n* Requirements/RequestName\n* Requirements/Request\n\nChanges three settings. These are updated and prefixed with `Request.` and\nthe request name followed by another dot.\n\n* Action\n* Intent\n* Default\n\nStores the following in the `multivocal_requirements` context so the\nenvironment will be based on these when the requested value has been\nset:\n\n* action\n* actionName\n* intent\n* intentName\n\n#### Requesting user name\n\nRequest name: `Permission`\n\nRequires: `User/Name`\n\n#### Requesting location\n\nRequest name: `Permission`\n\nRequires: `Session/Location`\n\n#### Requesting authorization\n\nRequest name: `SignIn`\n\nRequires: `User/IsAuthenticated`\n\n#### Request surface feature\n\n(TODO: work in progress)\n\n#### Requesting place by name\n\n(TODO: work in progress)\n\n#### Adding your own requirements or changing built-in ones\n\n`Mutlivocal.setRequirementsRequest( requirement, requesterFunction )`\n\nYour request function should call `Multivocal.requestDefault( env, name, additionalParameters)`\nat the end.\n\nIn most cases, you'll also want to create a Builder that will get the result\nand make sure the environment is populated with the requirement.\n\n### Counters, Stacks, and Intent/Action Levels\n\nMultivocal will keep track of both how many times some events have happened,\nand some information about recent events.\n\n* Session/Counter\n\n    How many times some events have happened during the session.\n\n* Session/Consecutive\n\n    How many times those same events tracked by `Session/Counter` have \n    happened in a row. When that event doesn't happen in the current round\n    of a session, it is removed from the `Session/Consecutive` list (and,\n    obviously, not incremented in the `Session/Counter`)\n\n* Session/Stack\n\n    For some events, the most recent non-consecutive values.\n\n#### Counters set by the system\n\nThe system will increment the following Counters as part of the Default\nhandler, shortly before the Response is computed:\n\n* the handler name, prefixed by 'Handler.'\n* the Node\n* the Action\n* the Intent\n* the Outent\n* NumVisits\n\nAdditionally, the `User/State/NumVisits` environment value is incremented\nas part of the `Action.welcome` handler by default\n\n#### Adding your own counter\n\nIn your handler, you can add a counter name to the array at the `Counter`\nenvironment path. The appropriate counters will be\nincremented as part of the Default handler just before the Response is\ncomputed.\n\nMultivocal generally does something like\n\n    Util.setObjPath( env, 'Counter[+]', counterName );\n    \nYou can't check the `Counter` path to see\nif the counter will be incremented since this may take place\nafter your Builder or Handler runs.\nIt is safe to add the name more than once - the counter will only be\nincremented once per request.\n\n#### Tracking recent information on the stack\n\nThe system keeps track of the N most recent changed values for the\nfollowing environment values set:\n\n* the NodeName\n\nThe stack is implemented as an array with the most recent (ie - current) value\nadded in the 0th position during the default handler. If the current value\nmatches the value on the top of the stack, it is not added. If the stack is\ngreater than the maximum stack size, items are removed from the bottom of the\nstack.\n\nThe stack is used by the system for handling relative transitions\nwith `NextNode`.\n\n#### Levels and Responses\n\nLevels are computed for the Action and Intent, and can be used to easily set\nthe responses for that Action/Intent and Level. For example, you can have one\nset of responses for the first time the user gives a response, a different\nset for the second time, and then a default set for subsequent responses. These\nlevels can be flexibly defined, so you can reply multiple times at one level,\ndepending how you define it.\n\nThe levels are defined in the environment at\n\n* IntentLevel\n* ActionLevel\n\nWhen looking for responses to use, multivocal will append a period and the level\nafter the Intent or Action and search for this in the Response section. If it\ndoesn't find one with the level suffix, it looks for one without the suffix,\nso these act as the default for any (or any undefined) level.\n\nFor example, if the level for the \"example\" action is 2, multivocal would \nlook for results named `Action.example.2` and then for `Action.example`.\n\nBy default, the level for an Action or Intent is the value of the\n`Session/Consecutive` counter for that Action or Intent. The standard\nconfiguration for `Action.multivocal.welcome` defines two levels:\n\n1. For the first visit for this user.\n2. For visits 2-4 (inclusive) for this user.\n\n#### Defining Levels for an Action/Intent\n\nConfig/Level\n\ncontains the rules for levels for an Action or Intent. Rules may either be\ndefined as a string, in which case it is evaluated as a template and the\nresult is assigned to the level, or as an array. Each element in the array\nis evaluated, in order, as a boolean. The position of the first element that \nevaluates to `true` determines the value of the level. In this case, the\nfirst rule, if matched, would be `1`, the second `2` and so forth. (This is\n**not** the index of the array. It is one more than the index of the array.)\n\nThe level `0`, or an empty string, or undefined evaluates to \"no level\".\n\nFor example, consider this in the configuration:\n\n```JSON\n  {\n    \"Level\": {\n      \"Action.multivocal.welcome\": [\n        \"{{eq User.State.NumVisits 1}}\",\n        \"{{lt User.State.NumVisits 5}}\"\n      ],\n      \"Action.example\": \"{{(User.State.NumVisits % 10) +  1}}\"\n    }\n  }\n```\n\nIf we're evaluating the \"multivocal.welcome\" Action, this says:\n\n* If the number of user visits is 1, then the level is 1.\n* Otherwise, if the number of user visits is less than 5, then the level\nwould be 2.\n* Otherwise, no level is defined.\n\nIf we're evaluating the \"example\" Action, then the template is evaluated and\nproduces a level from 1 through 10 (inclusive). You can use this to force\nrotate between responses each time. Note that we have to add 1, since 0\nis \"undefined\". Levels evaluated this way do not need to be numbers.\n\nYou can also explicitly set the `IntentLevel` and/or `ActionLevel` in a builder.\nIf already set, multivocal will not try to evaluate it as part of the default\nhandler.\n\n### Types\n\nDialogflow with Actions on Google and Actions Builder support \n[Session Entities](https://cloud.google.com/dialogflow/docs/entities-session)\nwhich allow you to change Entities to customize it for each user.\n\nEnvironment setting:\n\n* Types\n\n    Contains an object with the attribute names being the names of the Types\n    being defined and the value being an object containing the value names\n    as the attribute and a string or array of strings as possible aliases for\n    the value.\n    \nSo the Types object might look something like\n\n```json\n{\n  \"shape\": {\n    \"circle\": [\"oval\",\"sphere\"],\n    \"square\": \"rectangle\"\n  },\n  \"user-color\": {\n    \"red\": [],\n    \"purple\": \"lavender\"\n  }\n}\n```\n\n(TODO: Support this for Dialogflow without AoG)\n\n### Post-processing\n\n(TODO: Work in progress)\n\n#### Analytics\n\n(Future work)\n\n(TODO: Don't send Google's healthcheck ping for analytics)\n\n## Questions\n\n### Platforms\n\n#### Does multivocal work with Firebase Cloud Functions?\n\nYes. In your index.js file, you would have something like\n\n    exports.webhook = Multivocal.processFirebaseWebhook;\n    \nand your Dialogflow or Actions Builder webhook would be set to the URL that calls this.\n\n#### Does multivocal work on Google Cloud Platform?\n\nIt depends. If you're using Google Cloud Functions, then your index.js\nfile would have a line\n\n    exports.webhook = Multivocal.processGCFWebhook;\n    \nand your Dialogflow or Actions Builder webhook would be set to the URL that calls this.\n\nIf you're doing this some other way (using App Engine, Compute Engine,\nor a Docker or Kubernetes image - any of which can run node.js), \nthen it depends on what framework you're using to handle HTTPS requests.\nWe've tested with Express.js (see the next question).\n\n#### Does multivocal work with Express.js?\n\nYes. You'll want to have your Express app listen for POST requests at\na particular route, and then send that to Multivocal for processing.\n\nThere are lots of ways to structure your code, but the routing part\nof it might look something like this:\n\n    app.post( '/webhook', Multivocal.processExpressWebhook );\n    \nand you should set your Dialogflow or Actions Builder webhook to the URL that would match\nthis route.\n\n#### Does multivocal work with AWS Lambda?\n\nYes, you can use the `Multivocal.processLambdaWebhook` function and\nhave your Dialogflow or Actions Builder webhook fulfillment set to an AWS API Gateway.\n \n#### Does multivocal work with Alexa?\n\nNot currently, but this is on our long-term roadmap.\n\nIn theory, it shouldn't be **too** hard. In theory. The tasks involved\npretty much boil down to:\n\n* Identifying the paths to use to get values for the environment builder.\n* Creating a formatter to save things in the correct format.\n* Finding a reasonable way to map Alexa concepts into the concepts\n    we're using (such as figuring out how to handle contexts).\n    \nSome of these tasks are the same as what needs to be done for the\nActions SDK.\n\n(Are you interested in helping?)\n\n#### What version of Dialogflow does multivocal work with?\n\nDialogflow version 2 (Dialogflow ES) was the primary development platform for\nmultivocal for a while, so it is fairly well-supported.\n\nSupport for Dialogflow version 3 (Dialogflow CX), is still relatively new\nand there are some issues and gaps with it. \nSee the [platform notes](docs/notes-dialogflow3.md) for details.\n\nThere is support for version 1 (it reports the version in the \nenvironment setting `Platform.DialogflowVersion` and there is a\nJSON formatter that creates output for it), but this is no longer the\nprimary development target, so it may not be fully tested.\nBesides, this version has been deprecated (and possibly shut off) by Google.\n\n#### What integrations with Dialogflow are supported?\n\nDialogflow 2 integrations supported are\n* Google Assistant (Actions on Google version 2)\n* Hangouts Chat (also named Google Chat)\n\nSee the [platform notes](docs/notes-dialogflow3.md) for details about\nthe state of Dialogflow 3 integrations.\n\n#### Does multivocal work with the Actions SDK or the Actions Builder?\n\nYes, the Actions SDK/Builder (Actions on Google version 3) is supported\nstarting with Multivocal 0.15.\n\nThe prior versions of the Actions SDK are not supported. Version 2 of Actions\non Google is supported only with Dialogflow.\n\n### Use, Licensing, and Contributions\n\n#### What license is multivocal under?\n\nApache 2.0\n\n#### I've found a bug, how can I report it?\n\nOpen an issue at https://github.com/afirstenberg/multivocal/issues\n\n#### I've got a fix for a bug or an improvement. How can I submit it?\n\nMake sure you've opened an issue for it first (and maybe discussed it\nwith us), then submit the pull request at \nhttps://github.com/afirstenberg/multivocal/pulls.\n\nMake sure you're ok with the license we'll be distributing it under.\n","readmeFilename":"README.md"}