{"_id":"@ashnazg/atst","_rev":"13-0b309087cbeb8bd7f4ded0fd08722e47","name":"@ashnazg/atst","dist-tags":{"latest":"0.4.0"},"versions":{"0.1.0":{"name":"@ashnazg/atst","version":"0.1.0","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"ashnazg.com:/atst.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"koa":"^2.7.0","koa-body":"^4.1.0","koa-router":"^7.4.0","moment":"^2.24.0","nodemon":"^1.18.10","q":"^1.5.1","swagger2":"^1.0.4","swagger2-koa":"^1.0.3"},"_id":"@ashnazg/atst@0.1.0","dist":{"shasum":"2a6412e96bf99025d4c4e3964bd1a6df6140f1cb","integrity":"sha512-0tVWy73Ii/oOSYZhujW5LmiTk8jdKrStmkvQ+/2/+F+0x4PaVMbQuQio9DjsW24D4pHKQ9IHwf/F/Z/U8etr3Q==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.1.0.tgz","fileCount":3,"unpackedSize":10900,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcmwtRCRA9TVsSAnZWagAA1FcP/1a8jRZoFfPg/M+qN3mD\nCJhMhuBmMh38p2oAMJllps4nIfAPAEYlfBFZyY4dT5oZ1aqBhFDk0EZQD87+\nnV6/GZZi7Ab4jYfh7QqVLmmHLp8xRq0CgeJ9ezAfcdIDQRRB5qwOG7qu5z/H\nPshWV8PsSRPRAyIcaX6f9rIeMsq06nYvcbadXNtx+gHCn9/S6BQ2rXV1W5+S\nkN3aXEHkXeEW4ybqh2vaP7ZIGpjLVZjjcdzSc8odPnhojpPefwPF0jQsbQDB\nOoyf1tT8pnObphZJR1gG6UEl4m9VW9j9b1GdkOFIhJA0ms8s4XKs+HQCaXNw\n5IhFom2EmHokdQSvDef8jsNO+WB7DqLUMS9SHuPtIcf31nJO7fG6seh2StQE\nQKMn1fPFeSvaJyhjtjREjmfLqUtM86mDS0LPncAhIGtONiwZf1y3xSj7la4J\nfIoTsFoORBV+dyDXYwnO/Q6Weac68nVpZZfSqAFUJjbcOZnJcsU4y/dMevu4\nWS/AMnr/VKlPH7fnZ+Oe74Nl9kzb5wcx+mH9MzfG8gbTO5edh+2KoggaBXuy\nGqtSKo8xtv1SVxqW/WKKNvYoIY3whecBhwmyrmeB14bp/qLPfdZN03x0Tqpx\nM7uhfzAMbwTqdxNkRSIrs4mZluaCexWMnfp+cjAuDGI76CQzqovB6H2Rpo46\nVWUm\r\n=FL1v\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDLnr4q1bs3+hMjmPoV2SksPs1Eiqp5au6eFHwsfxb4CgIgQ9HlkoujOxQurCfAUp8rNdH8RSJayHfLxbglTvnU9QI="}]},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.1.0_1553664849342_0.7429764960403955"},"_hasShrinkwrap":false},"0.1.1":{"name":"@ashnazg/atst","version":"0.1.1","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"ashnazg.com:/atst.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"koa":"^2.7.0","koa-body":"^4.1.0","koa-router":"^7.4.0","moment":"^2.24.0","nodemon":"^1.18.10","q":"^1.5.1","swagger2":"^1.0.4","swagger2-koa":"^1.0.3"},"_id":"@ashnazg/atst@0.1.1","dist":{"shasum":"bfa2f4131ab664e3e9bc20b3379f0a2d5144f2b1","integrity":"sha512-Pb4o979Y/dW7aGj0ebGcJCr6nbGwbbN7cGQSYxbYZ2uTiqnGMW1nbGNdAil3KjCHBiRslDx5RPYWuxX+6LSPtg==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.1.1.tgz","fileCount":3,"unpackedSize":12108,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcnnJOCRA9TVsSAnZWagAAGSEP/j1D00Ihk28BHqE5z6il\nm4HVx8Zp7OBsZGUwg1CQMsDRh1+PN68HeISlcmKB/dzovgsmUXb5dTh6TBf/\nHoV518M34wjeiX6y3HaFTu/pRvXak0DGthX2zbpK1NcAoSW8mpeEVA1BjQmw\nN4Swag1BXpnyxCa1vHBg/mcPCzCyjwvDHvGd2u4QJZVZeXTDbDgmSeA2fyg0\n8Itnohz8BOPTnJjRBnhSTswrBsbYmrR627eDRtLs38BU3wG9oRoF+Hy6BEyu\nQhLv8xjEXnTqLJHrD3DG47fLOph0+PAQGNSikNs/AdwZrXGf9fUIf0ljqy1S\n0lr4fw7ISjGdN2T3UrqcSbYRG80pq95Wf8be6M5AXJ2rX/YWdU95seSMtJAE\nzadeCq/QGZzs9c3PZmYnBMh6+BvJMeHo5nJMAlycad3eCk+vpadXZej9BilZ\ndZ/DtiLJ5uIkIfYlT/FP3LYU4ij2m/brpgoXU1RDy4xH3lg1AYs2cRvNzQb3\nXTh03TdNtfo2KLK65lx5Ub1EnKgPk+lsAPEnLL7Cwq+8gvxn18YXbn4sDRLq\njGNoNKFKMNPUlGwDMRu8fF05lhbW0S2Ym6Ahgx6SgsMciexmLvYByAYPx7jF\ntbQ2r3i9XitgnHOzeKSwZY6mDT8A+X1iglPn7vFXLGwDWsffu+yLkbAhU1MZ\nLUh3\r\n=YFj3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDVe3JQVx3gGfWwJPuE0e+hW/HKTsWqayyRx86TS4srnAiEAjwPf1l3mokCw1CkEyDFb3rMfgp36APUWLnSL634DK5c="}]},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.1.1_1553887821646_0.6195062559126743"},"_hasShrinkwrap":false},"0.1.2":{"name":"@ashnazg/atst","version":"0.1.2","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"ashnazg.com:/atst.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"koa":"^2.7.0","koa-body":"^4.1.0","koa-router":"^7.4.0","moment":"^2.24.0","nodemon":"^1.18.10","q":"^1.5.1","swagger2":"^1.0.4","swagger2-koa":"^1.0.3"},"_id":"@ashnazg/atst@0.1.2","dist":{"shasum":"4e71a356230431da99cf2e3ea45469a6430b03cd","integrity":"sha512-341Wd+rgE6moMcHnK8BpmDDvaI1Tz5E7gCMXP+kUiegqP+2yZYv+nEGSF9z6zPQNhCDH7+OMhGl4QeCOMBJhzQ==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.1.2.tgz","fileCount":3,"unpackedSize":12171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcopLdCRA9TVsSAnZWagAAi0YQAIhG7A4TPtKTjABIepBQ\nQIRHRX0mIRiCo7EnwPYS7Aropu6gX1od1I2PtsIORM34IAMf1UZilTNjXWIM\nTCtx9dMEQSb+JCHRt1//t6AdnmyJYR+wlfjMLo6CwTfRND49C7OkX/otI/I8\nGK6nD3hBvfd8OeLiEgPTnIxfIuCvJ7nUo+3NkUfUIeArQZLVPvrVKCmirYVr\n7aP1bQpdQRTDB97JVGayJ/p9vbyQ0jqoxl0l6nvXg+JwWhAfE/5OEZe16wED\ncky3r4QJaXG6DdsuG9sQcPqLVSA5CCySVbXbLj1j5ym8sk8nxq+52p+l7uZw\n55j28x6m+W2A+1M0ggDjwyaNIcTx9tMcLBPqQpZ5XfU31UOnY2kzASY0Uxre\nyTWiOReYjD3kv83W1gxHaUfq21YatMija7oIp1fBuPeKhbx8DTxM6MyLjFFO\nNSKvs5f6Gaon611SjHB/GdQhZQIwj33T23nCFxZHBxZOVvHHdGLEi4uXGm8f\ncjov2Ecac9a9kg/72gWTkeTswDGdQoHS5xwqppqWNtzrU8e91HRlWIBd0lr3\njSTFbSzbxrNeN9/+diA7YyG6PDRznUVmPAUGiLOy/zJFrsMR/yARtluMMnBB\nT1XWvX2n5Jy4iWSXZ39JJici695pTfJmrTDuvuG4oOspZEx+cMtL+19hHbbo\n2/ck\r\n=iuUV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCxPvdAtRxtYqCiTG72sa7ikcOShbsbuV9bq8l0cUxGhAIgWQGNhBgkuHlmgM71EjMnHtH6ap1pXp0lBNbM9dXxJ+0="}]},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.1.2_1554158300995_0.5906882933410291"},"_hasShrinkwrap":false},"0.1.3":{"name":"@ashnazg/atst","version":"0.1.3","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"ashnazg.com:/atst.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"koa":"^2.7.0","koa-body":"^4.1.0","koa-router":"^7.4.0","moment":"^2.24.0","nodemon":"^1.18.10","q":"^1.5.1","swagger2":"^1.0.4","swagger2-koa":"^1.0.3"},"gitHead":"2b23c2cad1005d3daad22c417c339711bc257174","_id":"@ashnazg/atst@0.1.3","_nodeVersion":"12.16.1","_npmVersion":"6.13.4","dist":{"integrity":"sha512-/Y7uodA7cOfZ/RUBXtleGVosA466Lr4jWnM3J/gcozfOeKd5j2lxd7cnRk651wgqrVpNpifFYMYtcmV2YOBFTQ==","shasum":"2481dc36203921d6431f31566844c4090e5349ed","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.1.3.tgz","fileCount":2,"unpackedSize":12320,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeYh5bCRA9TVsSAnZWagAAPikQAJl7QYcvhPbnGQnd24nI\n4QS8P36CbJg5eU1xDFhg1TqY3DS8OHaxxzAJxc5jXnZZqIMmYU+wmQizyXwY\n/UHxCKHaax67LATtByCmZUAV1sG/glzNIE2XMnGE44Q3eHC3HrApWuME9u3f\nFOYzwrPoEwOn3S007MzPfhs5zeuAAyy2zCZSB/NFjmsG5tNyWUaJmGtIuAjX\nhcM1/YO+p1qCnhBC8WVi/149GlW60IeBeZshYbW/H3DBLtG1Z19hLT/0N2DH\nVHtWSlfsq3NCha0Rfbk5koVJsrwLhGZOi5fODsIIy4KDxZSOclxFuhj5g8u4\nGZxSLvyDKd4t+MCg2S9Cx1pSnO0mAZhD+MzfQAHOGAIuo8Jy6qZ7+j6t1A4L\nKdAoUgUU+UtRuNMGzbfg304xSe7RnbIIGZ3MfUAtkx9Wdgi4LLm96+VVqYzv\nJN40jApQpvOMozu2Mi2m7X1v/eAxYzFFPt5BnogU8nZEKwWrYncPlCPf+Nux\n/8RW8RHhV2TA/fNSIvtJJ9IOGORudoyP91JpAcbc/INcnL0dT6/ZpT+LBjvB\nNvWGdawAYvm9LuaDsnI6/socR4hRaUOSOqJ+ZxR22bpgC32V1l2mrW9fLOFV\nbFp2f34R0LBPuRNTba4afzjBrmSDvBtyJ1yor9d7hY6y2W1NzGZkR883FHY3\ng2BY\r\n=cBUH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCp/BAtgAnvpeuWaYkhdpeFU2SXsmpyVCeB1/9xVudkCwIgOjGUMCwcTOu5X07d21Rsvel7JhVMruV7GcWnMXEo6cI="}]},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.1.3_1583488602821_0.754926188777554"},"_hasShrinkwrap":false},"0.1.4":{"name":"@ashnazg/atst","version":"0.1.4","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"ashnazg.com:/atst.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"koa":"^2.13.0","koa-body":"^4.2.0","koa-router":"^10.0.0","moment":"^2.29.1","nodemon":"^2.0.6","q":"^1.5.1"},"_id":"@ashnazg/atst@0.1.4","dist":{"shasum":"ca23015da1b1e3aa8d92b197b0a4e6cbb75704ea","integrity":"sha512-8rPS4L3M1I6P/cqszC2POe38SxOiKEthVIXpBS2RZ3uUMir2oJsTqhMOvdTIqTQOLXH1mC3OJD1TtxXmd2Ce0Q==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.1.4.tgz","fileCount":3,"unpackedSize":12298,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzd8uCRA9TVsSAnZWagAAMJQP/33+aewyjdjXUmXBfX3u\nhiYTbHM1VWEcQqbkSvIqWJ9bg2jp+c/tZWv9eTGu8DXjc8Ln1IhuEG3DPcCt\nH635/V94Kw8724O2EzeYylbKJuPkt1wxqTUEuA6tCFQ9gxiEKbI9B25Ji41T\nO3GilLl0HVWjS6JWB/uvSA8PqB1P0cePXzQvc0pibFn/x+9CaCDIHgVGdBxO\n7CUsRupnvlNFK4UlWsAjcG/S76lhBr+vYMCfjTksg1Sr114GrqBtEXnEqMRp\nwcBRWdbGv6PnMZe31mS2qNdTr+nLr7L+ZJVYq7zgQVOBOXO+d/gS+cPBEazf\nzkT2XHI00nd4/CV4RPYoJMdvjLLSB0+n5fCOMV/e1QDu1GA1Nzfz+jvyOrLS\nmAIdDbKXCBmUdZoKVdL9bV/SXS03PaKI4SCAcs3IHwCpbVtxVQdl9dh0kEuQ\nrVd/hBi9I8TrWCGEEQewoyKj7TC+Ho/Lbw2XjrL6AwcZQrkPK8lllSFJl6hF\nu3YjpMv36D3t73HNTFkVchj2lS5dst4TiQt7VDgeJl7k68qLK3PnSUWhgTG7\nkIoZ3dYwS+rqq1oKOhDp8BwXYOE6ytG25V+xnwBjGUsADUrZ0VGEzzTjybNL\ntsMHoOgG/owPKwgZWK6IRpLiXAPtnSIVos1NjyDpGYq3+7RfeDgLI7CY2Ef+\niHhP\r\n=98H9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICegyYevsQuuru3aWgy18Sj7HhqD/rHynV5gVZeh3Mn2AiAUpMX8/YPIU5xOjnHx2dHSQ46BwBxGliI4/RnvqDTqfQ=="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.1.4_1607327533602_0.3280948633052907"},"_hasShrinkwrap":false},"0.1.5":{"name":"@ashnazg/atst","version":"0.1.5","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"ashnazg.com:/atst.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"koa":"^2.13.0","koa-body":"^4.2.0","koa-router":"^10.0.0","moment":"^2.29.1","nodemon":"^2.0.6","q":"^1.5.1"},"_id":"@ashnazg/atst@0.1.5","dist":{"shasum":"0dea447135fa28c0b9193ed4a1c5097dfe2f0e49","integrity":"sha512-MnrpzIPyx/LYYKqghLlT7UPwmJMM0iBpiTM9N8P10NVuVfoCAEujDWu8I6YiQ6JRE3GOJ2hvcAPcb4JSEL/2aw==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.1.5.tgz","fileCount":3,"unpackedSize":12666,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfzeNWCRA9TVsSAnZWagAA5OcP/jYUnONDKe9BFX24gKpG\nVAbkHctG3iAz42b6lBkO1PxKtGdyAHjQt8vvhjsoNfM+LhnTeUE5plMMXp6Z\npHzsGCmhs8i6ijj4BymrZ8Befon5BvEA/3MSeFGVc7J8hu814quBy2CT9z0b\nNoxU7mlDbOQs39G0qClVKiCLdxpaUEmCyA6moG6XXckXEpJT1nxDAI5ObKbl\nGqm2emqRKHZJcAq92Y78b774RGD3iLHcxbWBdn1e6GXmScL8SfPkqjzP79K7\neCvZkGIUJObYJrx2WZcwrO6W0rwYteRKddQNf0im8eZnn2aA4gRaJGPi79ka\njtcg8UBMQnt9NBLLu+xgcgV4IBip/vvYyqYocu2mKDlhkvHsOBCbl8SMqV6F\nj8xkZxnZVW755D4FEbwMHhsBppOSoMzid6i2Q2Ar8AmjPqcns4isrJ/1ZBy3\nRr1xNYLRfPrO3EVSFohP/gMdulxNRHkyzvArHAsfA45XNrePXuh1CSSfnjS9\nvfv/tdRlS3W2JYA/nwXv81hu6npkQVFKFIZRWCBVZgvJJEIbM3431OmMzlFk\nmfEODYv1GRJn5sTdFC9CsKbWf0DVmXKdJdXKbOUZhKmZ2cou8cE4wEIEx8LN\nYD1kGWoopScCDQciwr8vKlg69GD9x7MJhGjSo2mRpf9MxL1p9q+Qav+O6+/Q\ngvrA\r\n=OEsd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICfsE6BzsDmsf24vSc1ZMi3t+WFpykROuPGbdSRU1VtAAiAR6fzzE4IKhwE2BxpEiSm/aS0cmJIW4K9OXm3Cfv9dRw=="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.1.5_1607328598248_0.341834614788574"},"_hasShrinkwrap":false},"0.3.0":{"name":"@ashnazg/atst","version":"0.3.0","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"q:/git/me/projects.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"@ashnazg/utils":"^0.1.5","@koa/router":"^10.0.0","koa":"^2.13.1","koa-body":"^4.2.0","koa-passport":"^4.1.4","koa-session":"^6.2.0","nodemon":"^2.0.7","passport-local":"^1.0.0","set-cookie-parser":"^2.4.8","stream-wormhole":"^1.1.0"},"devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0","node-fetch":"^2.6.1"},"_id":"@ashnazg/atst@0.3.0","dist":{"shasum":"eb03e071abbdbdac06567b0d667426edbc50be27","integrity":"sha512-FM60N+CsIGb61yxFePvEkIaKt00jMY7U8Wh40CWB3RjAGE9C21AI+p2/Tt6g7sqvmVbg/Pac5zsKgkyoILgDCQ==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.3.0.tgz","fileCount":18,"unpackedSize":71392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhLPyOCRA9TVsSAnZWagAAi8AP/265vnXU7rsaW81e3T5J\nKLmri8tuQcyihq6N+fmEw5BBzfwUzDaqdY8q7h1pITLE0iBrW3WWkjQLWmkl\nLaVU64jhl/fsDgXYXm6vOFvOQx/DQFQsXQ6ZAjP4pP5Ks9NcH8QJXw0fJFhs\nJNJcmR76wbnjD4EkDcvL0pA0R+GFB2aIinG9fCsjxDSI7X/lqEbTlztjTtNy\nmDA/+JFyLQDowsCY7SeFD+nAxyk8pDV5QUzcZu4xvQSk/Dj84fy1vYPH7ogG\nnX0Hv8pDrHaf8igYk8BPe9dmttifd1RSAdMJqNgHCJM5zzncgOAQtf5VXFHw\n9Mt0xpmqg62OXQ7CJMGCd+kAfcXdi4k2e7L/+efBfyaFvPhuwSpVq8PnBjWH\nmGnQZaDXtKAoR+h89tYP3ZP48C/+JE5kX9hoGaX50ywFRftFWNm5CHnqmSfm\nDnuIbmP4U/jI2Us/ZCWvDM+Sa89s+DiEZ105ndqdBKP18eDCZnMzsbpP2cgA\nF0eTqhQi/rtIggE/IiW0kwRFJU0z85neJfAenWBzkOPZA6fUooj2wlUpj2PU\nx3Wkm5FyJaqFbo8zAbyGJzwlDHa80vosXzSesp4z7KtyXJ0hNAEGy7xHnpuJ\n6u/1z95R6pGNJsjugD0jE4G7tARjHWDzLEzfimI3rO2ZNsEBdOHQw63xJYQ7\nBfG3\r\n=kQTN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDTMuFvHGxj5ClqHWsNClamF+z8lDvnR+V1K/Q09VhYpAIhAIoXUCXOunxGZsJLQLcsQey84K8BjCTv15IO0tOit54W"}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.3.0_1630338189890_0.5359203925811977"},"_hasShrinkwrap":false},"0.3.1":{"name":"@ashnazg/atst","version":"0.3.1","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"q:/git/me/projects.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"@ashnazg/utils":"^0.2.5","@koa/router":"^10.0.0","koa":"^2.13.1","koa-body":"^4.2.0","koa-passport":"^4.1.4","koa-session":"^6.2.0","nodemon":"^2.0.7","passport-local":"^1.0.0","set-cookie-parser":"^2.4.8","stream-wormhole":"^1.1.0"},"devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0","node-fetch":"^2.6.1"},"_id":"@ashnazg/atst@0.3.1","dist":{"shasum":"e2fe185369d75199e7785158a2a87f16eda8e7dc","integrity":"sha512-Up/59pYkCunCGhHCuwfqWJqxKQ375/XY3HqkqJ347S8BiyD5KBS6T13cMOIieP1EnjVod4Wc+bIUSsc/HNnlTg==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.3.1.tgz","fileCount":17,"unpackedSize":70931,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMZpnCRA9TVsSAnZWagAAzvAP/3JWzzq9hU3PkMreR3nk\ng5KYXu86m1N/3U+6tklQXUrfJD8D2stWZOPrKs8HoRHvQKXRr8nMx6rBW8uo\nztMRtILxIURrPIuN0r10xuyg1SoBzM9mqmwaCm02t/lqMw0wKdHxT2uyz53x\nTolX6O74JK4pn2u0HmRfnknnwh1EYUjRMpnf08DwiwycX+ENIInpUE6PBKix\npZegc6YSzWBjBCVJAWxI36JoSTeCfvvC4nJwm0xkM0o1t7KWmmO+8xDWEkLA\n+h/6H2MoYJM6369WhNoc+lMb4NOW4qFNaXY7edgjm3WcUM2M+hUTaTf/lAEM\nSSEJJgKw/9rNqqMocKkl7BE/2ig12Df5tvRa9zbDhdNz4elmMW2LKrx3TNfI\n3CVWAQVmk+gxKMzJwA1DxbJQxm/qXL+FRJ/+pPYv+OYDxwDOVMa+SO6r8/3m\nIW4U/y12bJcvKkBPy2z1ftCFJw4/h55+y6GpTYIoKbaZtGNLyagGquS18LLD\nyux6wFgZplW6tNfX0H1Bc3olVhJ2QxgKDpRBgbwsxtkFEgt8TiomujwoJW3B\nNDWniG6LysUT1b0pXTZ8hBD0R1WWQtv9/Y+jCf5vNfntewoYU60uNInJfdke\ngSqHExJ5NMVVcyjinPgV+YeVm0aFcb2DgntU3UYwvXc2m49lANcqorqihIk/\nNAt8\r\n=9myL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG3w8rQfXba35Mwn4AFSdJrDy/jDs4BFd0lHsuZpFXbtAiEA/rUMN8VjknbeQCoNi/9TUIM/euLGajt2Y2NK8d4KLJs="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.3.1_1630640743375_0.5620543419810518"},"_hasShrinkwrap":false},"0.3.2":{"name":"@ashnazg/atst","version":"0.3.2","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"q:/git/me/projects.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"@ashnazg/utils":"^0.2.5","@koa/router":"^10.0.0","koa":"^2.13.1","koa-body":"^4.2.0","koa-passport":"^4.1.4","koa-session":"^6.2.0","nodemon":"^2.0.7","passport-local":"^1.0.0","set-cookie-parser":"^2.4.8","stream-wormhole":"^1.1.0"},"devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0","node-fetch":"^2.6.1"},"_id":"@ashnazg/atst@0.3.2","dist":{"shasum":"a0904fd80252daaf788454b3704c58c9e69d0ef5","integrity":"sha512-oU3nBklkJJMFi2XYy3tZxYWHW9aa01/e5rWNMV60WSBIXScbUMOJvRteyHOL9ulRhhWJB5HOynDrvbm9aF50pw==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.3.2.tgz","fileCount":17,"unpackedSize":71640,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhMak4CRA9TVsSAnZWagAACSsP/jHZDp8g3QSPnjaRa0B+\nyq8fcaFestrC3+UF5fAM9QHGLaK5EbmGBnU8tpLMBIjT67wFjBB5uXeDsy8p\nKqvuq54SwLux5gRDEAAmrvGsNBU1+Y/SLo25C+8NRkUt2UqCaimigEt+4bpy\nUNfWrSqLyQg5F/42rC9HFjN9kEXZalO5kf0udp8aqTjn2Q/VU8kLtq6IKE7T\nSMnanJ+zEmDma/Tp/GmdBDDmVWTpZLMWsf4qxkIcTIC9Q/3jr/joICq6wX3l\nmacINVZ5uqK2Zq9HqItefpbnLRR0jObu0CPamJKI0lFGPsAg453xL3bfA3iq\nhQ7P960xNuJfb4DQto9I3qSLiyn9yyBUujAX5j7L0ejLFolWPQ3Y6lqyvkG6\n9K42m8pHfzdwt3Vap1C9Q5ejBQuUelOtfZFoxAp3Sv6K3nec1+6LRvoRFc7m\nh0fb4E99c5MOY2CFM6DNwxmBkPY+XAtp6ivIvF7FS5Odz7FD+/jQN+qX8FYo\nksmRZ6K9yE5JumEgt4Gb8IT3fIubKrUm/qafqU8G+7Eu+rLOzGxK848EJLq4\nxAVSLijb/xyMe7peu2FMDQGFIf0teUuo3BthcI74k+tHldqESVUqCD2ACav+\nLVd1l0USHRRdUrp95bS7dAOZey68E25zR9vTZ/VThyEhUZd8RS2M+Mw2MtMp\nUG+U\r\n=gFON\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICJSFsswH/3RgmYL79yUkPVNxAYa6f24bL0wFEjOqYFOAiAryITBSV3juHQglSzHfhJqReEPjTdVIzLnw+BZunAb5Q=="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.3.2_1630644536238_0.41068993868125103"},"_hasShrinkwrap":false},"0.3.3":{"name":"@ashnazg/atst","version":"0.3.3","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"q:/git/me/projects.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"@ashnazg/utils":"^0.2.5","@koa/router":"^10.0.0","koa":"^2.13.1","koa-body":"^4.2.0","koa-passport":"^4.1.4","koa-session":"^6.2.0","nodemon":"^2.0.7","passport-local":"^1.0.0","set-cookie-parser":"^2.4.8","stream-wormhole":"^1.1.0"},"devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0","node-fetch":"^2.6.1"},"_id":"@ashnazg/atst@0.3.3","dist":{"shasum":"01342e94d3236a0560beaad2e99224907185c796","integrity":"sha512-q/rocfa0hWnH0SlcVfvU7kF3zC4+/ZUjreVUkJjfMbPVbTksETwysvtEETk76fwunVZ/07yYudFa3XsvMt1z5g==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.3.3.tgz","fileCount":18,"unpackedSize":72434,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh119cCRA9TVsSAnZWagAA4ckP/j8Wce7veQ1640ABKpBc\n+vPGmlBYTAiIK+pvYyLRBppzDU7/1ex2Y92hc2Ed34I6Fydfmqj8QHpTk2Lo\nw3O34UnEWg3jcU+pyKteay09F+j8+gORJFXVNfN6EzaRjhIdlE9FvKyQ9eam\nR8Zd0sAKPFZFUvQrQBranRcwpoXsfCLBTtllXa9MlORK0E5FadQRn+1SouN4\nc4v1e1hFvvNjELlJiD3ag19+gXHUwMIMDK6G756cr+dXfdsE5fei224yC1VP\nV2jG9FI7ktuSP2NQD4wrMqr6xHSGlDiPmKa4sPJ2a6TFtfUx/MNZh/Rj5lgo\nlzEoGhQo5nxtYS6Vm3iA06lSHk1TCQymfV826W+r+RDR6SEIpaJlFaPw4iU+\nNedaeKjg9NfTEjEuAV5hZUNp4IKG0kyMWnovkZ+UIbBsi1b1eJ5m33WPhLFi\nAK/jZhYVb9vCzfhmmmMalYDG+KZiCdyTNVhdMpXO9Ylo359U5D+DdiGhBDlI\nVcr7kTfI7PPAt0nOM0u+FZn+YFBk2Ab5PcsSCDk95yGUR3chzREx+kDIsmB/\nv0fxeIWo8rbfzlMDXKiIovHprEroHhkuAtqIyjJJb0LQu2n4AbJKsNSsbL3I\ncJfXw1wGyklwM/ybfrkAv3xbTq6C88i/7b6zTkEOaD6iVDtgm/pRZxCk0Y+x\nyCQ7\r\n=7dR8\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH4ElxFBqL5Sb0QvDL3ckgYGYb/6OZhFDx+fm0za3zruAiAMVYH/ju/UXnoqhcRqNsKKBIxCAIFKdk+gLHxHUzUIgQ=="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.3.3_1632205337527_0.23287604539984486"},"_hasShrinkwrap":false},"0.3.4":{"name":"@ashnazg/atst","version":"0.3.4","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"q:/git/me/projects.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"@ashnazg/utils":"^0.2.5","@koa/router":"^10.0.0","koa":"^2.13.1","koa-body":"^4.2.0","koa-passport":"^4.1.4","koa-session":"^6.2.0","nodemon":"^2.0.7","passport-local":"^1.0.0","stream-wormhole":"^1.1.0"},"devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0","node-fetch":"^2.6.1","set-cookie-parser":"^2.4.8"},"_id":"@ashnazg/atst@0.3.4","dist":{"shasum":"82ef9048ba0d526932240fc6aea112514a4c79bb","integrity":"sha512-BaSalAda9F1buBqxfdQP2UFeXkBNOzb0VIW605+bAIrXF4Y4ai9ddjSc4GNzgfEvixTH6Ge5X+EKNUf6KKgYLA==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.3.4.tgz","fileCount":17,"unpackedSize":71932,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFYhBpI/5KUXKcWCx5dAWgZ3m8YW7kjy6ISvA6HHhgZwAiArVN5gLBACsSAB5Som4nGBccoKBTJSQISjGMImZovH7A=="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjk7zLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqsgA//eu0ESQQKHnVgNzIBIFQ9K6p1Wx8NdwZGC02uhozQqUaJGE+6\r\nHyVIBNSj0laWn5K4sqo/XYTVMKshn2UUOqNudEzBtn8nERmIwZbVQaY7ZCp+\r\nnDOri9BmGsZVvB2q4wO1lqzEr6pWfnyU0qHmTD8Vjorx9EAyNFGp59LpFIR3\r\nal3c+oDPld49ZLffRoGaK3PEqyPr+mIlfjR/u9ZQl1EHJiEp4IOUjFE2h9+1\r\nM5c4o1YAGU2u7XCN+vO76cnAh/9/1JplKJrmGPh9E4AUv/bHA3w3vPN+D0+3\r\n2lwIroxSwr0Y+h6irWO5c3xUvWeIfICgA6ngjXkg3NKDsN3J+/ZqwqhOQfG8\r\nRy8Wiql+pk4Z3fKP+zyu5qyL+KCdQXy1rcGhC2oANcjBzRpt8TcqNCXhqbY6\r\n8CUDpeIs6GGqpfpAEjao+N9LQOoEO1ul1ZusZNpkx/WpPSxbsXboe2W6dIYW\r\nVBN3dA8DI30SkPWQf6gAv/eM4vC4A8F0Hw+qBIPhdO6b61Ftb+dZX9WcoQGp\r\nrj2gvtoDZcmLLxVapm8k0Tq63iLHPfrsTyEep9IePaLRIxxU572Rx4qEq7R4\r\nJCuW1cU1llQojfOtj2dyfDBl2RvF2PwtKXSiWqBuUc4TqPWyu5LQmJw+BZGI\r\ngndM6FCYOCHPGnENec3OKpKdbxQWpzXOB9U=\r\n=klDX\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.3.4_1670626507720_0.2176975742855214"},"_hasShrinkwrap":false},"0.4.0":{"name":"@ashnazg/atst","version":"0.4.0","description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","main":"atst.js","repository":{"type":"git","url":"q:/git/me/projects.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","dependencies":{"@ashnazg/utils":"^0.5.0","@koa/router":"^10.0.0","google-auth-library":"^9.0.0","json5":"^2.2.3","koa":"^2.13.1","koa-body":"^4.2.0","koa-passport":"^4.1.4","koa-session":"^6.2.0","passport-local":"^1.0.0","statuses":"^2.0.1","stream-wormhole":"^1.1.0","ws":"^8.13.0"},"devDependencies":{"chai":"^4.3.4","mocha":"^8.4.0","node-fetch":"^2.6.1","set-cookie-parser":"^2.4.8"},"optionalDependencies":{"bufferutil":"^4.0.7"},"_id":"@ashnazg/atst@0.4.0","dist":{"shasum":"96279790d1578919f2eeae8ae600fa5d578503b3","integrity":"sha512-G/VFb+j4KQeLjcJF+zfLmHomm5N8otIHEI3IwRAZ582TQJMh/4Y3xiSm3ZBTA1mCIUiKm59hoJqXPYFhln191A==","tarball":"https://registry.npmjs.org/@ashnazg/atst/-/atst-0.4.0.tgz","fileCount":22,"unpackedSize":96840,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIClBkSBHmFZMDs2GF1Otr2jZ7NAhptPmlo4EaS8eDEEnAiBjgo4b1apjQHlFgWZQmc2Rg8xgC5fgpN0adeOhY4OVRw=="}]},"_npmUser":{"name":"xander","email":"xander@ashnazg.com"},"directories":{},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/atst_0.4.0_1701291364748_0.9795259660968139"},"_hasShrinkwrap":false}},"time":{"created":"2019-03-27T05:34:09.203Z","0.1.0":"2019-03-27T05:34:09.453Z","modified":"2023-11-29T20:56:05.147Z","0.1.1":"2019-03-29T19:30:21.777Z","0.1.2":"2019-04-01T22:38:21.113Z","0.1.3":"2020-03-06T09:56:42.930Z","0.1.4":"2020-12-07T07:52:13.724Z","0.1.5":"2020-12-07T08:09:58.387Z","0.3.0":"2021-08-30T15:43:10.032Z","0.3.1":"2021-09-03T03:45:43.494Z","0.3.2":"2021-09-03T04:48:56.390Z","0.3.3":"2021-09-21T06:22:17.662Z","0.3.4":"2022-12-09T22:55:07.949Z","0.4.0":"2023-11-29T20:56:04.947Z"},"maintainers":[{"name":"xander","email":"xander@ashnazg.com"}],"description":"Ashnazg Tiny Server Template -- a koa2-based toolkit for RAD of versioned APIs","repository":{"type":"git","url":"q:/git/me/projects.git"},"author":{"name":"Xander","email":"xander@ashnazg.com"},"license":"MIT","readme":"---\ntitle: @ashnazg/ATST (Ashnazg Tiny Server Template)\nsidebar_label: ATST\n---\n\n<!--\nTODO: try other plugins someday:\nhttps://github.com/koajs/generic-session\nhttps://www.npmjs.com/package/koa-session-minimal\n-->\n\nThis is a koa wrapper I use to...\n1. make the conventions I use to build RESTful APIs more terse and\n2. add add utilities and middleware that I find useful in all API design\n\n## port\nYou can set port programmatically or through $PORT\n```\nconst atst = require('@ashnazg/atst'); // ~/projects/ashnazg-npm/atst/atst.js\n\nconst service = atst({port: 1234});\n```\n\n## basic public routes\nThe public instance of @koa/router is exposed at service.public, but for syntactic sugar, that router's get/post/delete/put methods are also available on service itself:\n```\nservice.get('/status', async ctx => {\n\treturn {status: 'running'};\n});\n```\n\n## Promisy responses instead of ctx.body\nYou still can just set ctx.body, or you can just return a jsonable object. (See '/status' above.)\n\n## standardized error/warning handling\nThe koa context is extended with ctx.fail and ctx.warn, which take errors in either of these formats:\n1. ctx.fail(404, 'definitely not there', {optional: \"extra json field map\"});\n1. ctx.fail({code: 404, msg: 'definitely', misc: 'fields'});\n\nYou can also throw and that'll be converted to ctx.fail().\n\nWith or without a ctx.body, the response to client will always include `{errors: [], warnings: []}`. 4xx events are shown to the user; 5xx events are logged and only a unique event ID is in the response.\n\nWhile warnings don't affect the HTTP main code/message, errors do; if there's only 4xx type errors, the highest code will also be used for the HTTP response.\n* meaning if one part of your code fails it as a 404, and another also fails it with 500, both are included in `errors:[]` but the response is a 500.\n\n### throwing\nThese three are translated to ctx.fail():\n1. throw {code: 432, msg: 'no likey'} (note that code:500 is the default)\n2. throw 407 (koa will set the msg to 'Proxy Authentication Required')\n3. throw \"frisbee\" (will default the code to 400.)\n\n## Controlling logging\nBy default, it logs to stdout/err. You can divert access logs to a file:\n\n```\nconst service = atst({\n\taccess_log_dest: '/var/log/myservice.log',\n\terror_log_dest: '/var/log/myservice.errs'\n});\n```\n\nOr to your own handler:\nconst service = atst({\n\taccess_log_dest(evt) {\n\t\t// process access event\n\t},\n\terror_log_dest(evt) {\n\t\t// process errors that are code >= 500\n\t}\n});\n\n\nFor short-lived servers in a TDD context, you can also set it to just accumulate logs in memory:\n```\nconst hits = [];\nconst errors = [];\nconst service = atst({\n\taccess_log_dest: hits\n\terror_log_dest: errors\n});\nassert.deepEqual(await curlAtDevServer('/status'), {stuff});\nassert(hits.length === 1, 'access event should have been recorded');\nassert(errors.length === 0, 'there should be no errors');\n```\n\n## User/Pass Authentication\nTo turn on local passport plugins and the protected route support,\npass in a function that takes user/pass and returns a promise to a user record. If the user record includes uid:number, that'll be reflected in access logs.\n\nlocal() can throw or return undefined to signal a rejection.\n```\nconst service = atst({\n\tauth: {\n\t\tkeys: [process.env.SECRET1, process.env.SECRET2],\n\t\tsession_length_days: 7,\n\t\tasync local(user, pass) {\n\t\t\treturn {uid: 1, roles: ['admin']};\n\t\t}\n\t}\n});\n\natst.authed.get('/secret', async ctx => {\n\treturn {secret: 'data'};\n});\n```\n\n## Session Expiry\nset `session_length_days` in auth{} or it'll default to 7.\n\n(For testing convenience, you can instead set `session_length_ms`.)\n\n## External DB for Session Storage\nBy default, atst uses a per-instance in-memory session cache.\n\nAdd three hooks to auth to redirect session management:\n```\nconst sessions = {};\n\nconst service = atst({\n\tauth: {\n\t\tkeys: [process.env.SECRET1, process.env.SECRET2],\n\t\tsession_length_days: 7\n\t\tasync local(user, pass) {\n\t\t\treturn {uid: 1, roles: ['admin']};\n\t\t},\n\n\t\tasync setSession(key, profile) {\n\t\t\tsessions[key] = profile;\n\t\t},\n\n\t\tasync getSession(key) {\n\t\t\treturn sessions[key];\n\t\t},\n\n\t\tasync deleteSession(key) {\n\t\t\tdelete sessions[key];\n\t\t}\n\t}\n});\n```\n\n## Roles like Admin\nBy default, atst only sets up public/authed routes.\n\nYou can create routing blocks with special permission rules by first defining the test functions at setup, and they can check user profile fields at request time:\n\n```\nconst service = atst({\n\tprefix: '/allendpoints',\n\tauth: {\n\t\tkeys: [process.env.SECRET1, process.env.SECRET2],\n\t\tasync local(user, pass) {\n\t\t\treturn {uid: 1, roles: ['admin']};\n\t\t},\n\n\t\troles: {\n\t\t\tadmin(profile) {\n\t\t\t\treturn profile.roles.indexOf('admin') !== -1;\n\t\t\t}\n\t\t}\n\t}\n});\n\natst.admin.get('/sensitive-stuff', async ctx => {\n\treturn {secret: 'data'};\n});\n\n# curl server/allendpoints/admin/sensitive-stuff\n```\n\n## Websockets\n","readmeFilename":"README.md"}