{"_id":"@fwd/server","_rev":"37-6d5da2ae4a715df709984e8988559660","name":"@fwd/server","dist-tags":{"latest":"2.0.2"},"versions":{"1.0.20":{"name":"@fwd/server","version":"1.0.20","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.0.20","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"0d2805cbb793facbe24946a625b6c0c6254610d0","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.0.20.tgz","fileCount":5,"integrity":"sha512-/imz44RvMme3EvtPnfuYEAIYU5tq645g5/wAjevHHeztUjzuHgKFrcDh53aKyKJfKsUVnHSa4IKpru1RQ4pSHA==","signatures":[{"sig":"MEYCIQD43+cDd6lGGNOCKYCXu3zFask/4zI4X9bWGHT1nU8JDQIhAO/ngTkb8sOPfJlw1QLzMUk7ifGdGCMNzVU5ucN9nvSZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":12427,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfOsvcCRA9TVsSAnZWagAArcYQAJmKjv6+yKos9l+rbVn9\nHKxcSp48EdKoKJ1anJ31fdGZ5XhkgmNHkqbUP05HLDsrbWRknoxWjGg0OcZ5\nnnA8pEAC2NHpocZ3vsdFtGQhVS4EauoiKRidq2Neun23OyBM/1hcZBUFzIM6\npqaESw5QoTJ+qYpo4kdUs1fTesURraOcY/aUiiJwdFRAAIMtqTM7gDhd0Sak\n+v5IkZAy9ohTBxwXWwtQehQJEYBe7jB7GOUWHInMsprB2BMZ6u2q+MumF5De\nwEpO6RkRCW+zN4s/77knmTeSFtSKKTsqFWx1TIriaK1OxPbOuApcJUSSL/tE\nrmcbXnZWyVOq9slKalRVrOK8k47YuJiwiiG71mkVAXCblEwE27Ahr3NSIZhB\ngPQ+RlCK+ZIpZXj/TGyfoOBRA9YtkEinaVsRIeo3kfT/gYxtB8DJn3PbyLYH\nTueEVfDOfc5zwsb0kt2KaRWdaw2zesGBQS/vtNv/QkVstNs2rcq+k+Q28unA\nZLLJJXvltpvQyJ+MRs7weiBcwGoYQcVX11HI0nUujJP+PCNuGOygWvPaV49L\nObInGA4WSxAk8X7Ba3/qegFuxqT0B8Id0p06V1WzoBkUkAtPSCyTuoXpbzQG\nn+Tzl3u64Xh11596FsejYPUHPEY81WcZa/uwdZahrmETF4jVdVtQZh98BhN0\nSxQK\r\n=wmzC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"0b2367e0d765b9d1fcc476676bd05868e8488d24","scripts":{},"_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A module for quick ExpressJS server deployment. ","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.0.20_1597688795859_0.4104768288638121","host":"s3://npm-registry-packages"}},"1.0.21":{"name":"@fwd/server","version":"1.0.21","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.0.21","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"6b6c42fb7c57e9709c86bfce9d3a11fdf414050b","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.0.21.tgz","fileCount":4,"integrity":"sha512-Y/fy9nKc1R/qqvnqRIuvFLXgkQyZ+cpgWKETNAFhllVZMtDFIPoMec2iwIDj5qnzwB4YFcMR9eOAnZbXMwRfag==","signatures":[{"sig":"MEUCIQDE2+UrELKqFmUoUMCSymymFMr9DPMPIGpolu7ZEU78LQIgGXZBl6lx+eRtLnY5pDR3aJAPah59/h3UL54Fm/KfigQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9018,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfbvJICRA9TVsSAnZWagAAVU4P/0ce7MNCPxx+hXwcWXmW\nY1HHhgj+BsTfO00xW5eq1HlcglukaKnxXoEz7Dd5sfRzmbuv+7KRAsvCcIIM\ngCXaChM1T2++uX9IEtACTwa2UMNP6WcQWkgm6XdmvcxT1679vuqjIkCizxay\nhYcY+FgQy+pwNivXNUDZ60kQyGnhNprn9gnvR6xW7YdYriVsW6NkswCx7qn1\nKOVz9a0dLgoYQdhUbUk9TU4M9VG+3QrTKTgvy63w0IkLbblcOAlok48cCk+q\nl5tsj8ZtGcPlsXJf8iZGi8pygItHirbd9M/Rx+jF3JEV0oFC7cZeqB0fw+zl\nxFsUVmZiruOHq7ADFQSTe+TmdS6lKBXONz3jHV50KHURjRj14M2aaK0DMcnP\nMrPyPtkG30YwZmOgHHqMSdfNBQwRKN6EMLnYNhhyjDAMkGTiWFEApvE6bVni\nYPR+IdNLT2pwrW12L2Pruc/H+PnqfyR7ivK78Pxik62ZkLnnwGwB4QuCUuEU\n1GXXh541MZInL+PGEWTWjHyrvlFE7NF1spBYwHgkxyOkBl/jyK9JPk7uJ9Ig\n+J9zvwFEPrUiyg/zvbKHxbg0Ek0nFvBsO5G5zM8PeBvCK8+e4Lk3VzAUe7t+\n2vRKGDOa2n/Ri7vJQ/nNUSBW+tLISpq5npmutfxcy/qYJ1lJ3BHbhQ4WTNUe\nzVum\r\n=CH1Q\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"aef3ff0310539844c24441bafaefc62b9f38b5dd","scripts":{},"_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A module for quick ExpressJS server deployment. ","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.0.21_1601106504376_0.07739133889298455","host":"s3://npm-registry-packages"}},"1.0.22":{"name":"@fwd/server","version":"1.0.22","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.0.22","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"2668000f288ef45a9924e6cf24be5fbce1f0bca4","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.0.22.tgz","fileCount":4,"integrity":"sha512-pmORhQWZK2gdLyrjugJFaALcybxbffsBQ9LPs9i89yxyL7+LLgynFQkycYWSZIt38ENfJcmtQfGzbZA9X0wjPQ==","signatures":[{"sig":"MEYCIQClVltp3U8ycLkoH28MLJeT5SbaxR9ed1kJYCwu2il/uwIhAJO54HXfwjEP6gsg619Q3iXseQBp8PO+gox7Ta8tW1W2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9030,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfpcInCRA9TVsSAnZWagAA5pUP/14XdBCwlXKnNLVHmq8O\n37mCvizNwfaFLyqOFZd5cc1WTG/pqg42QGOZgYDn+GQ3XRIoqDkx3OuotV6L\n0hrPepd0CjPK3LSU4Hf0yy7RZAEWvj8Gwk7r6WyovpbdvkHMe5nmss+DBXOq\nXS7dECpG51udhaj6G9Za+QCCUhEf60I7MGRCTm3+mRkGK9A4aiY6b38EEEU0\nF53MvXy0fZ2sNkFP93yqw36thpNgJMZ7ctbyBdaBBDOJftJENCJ7EHstZade\nd9mw+lMNKZ4jtKbRV8CXBNKMy21HCCO5iHckQwPbOPQG4E6Qc5jOtV1SHgsj\nVdLzV9sS6yYCgjFORuvSR5KLdG9rmQK2Ioc9DLXa+foTv30tv//AYcQLpIwT\nYtnzBb/Chkw6zEQ0WpLG7vq5EEnTtBHQFbaF3v4Viv43qwEFxDGdR1pS2IPe\nrDp1Lb741iEJvdv737eEmGsHmO6oLwpLHjwHxw2uI/6sljTCvUwWpv32SzDX\n7OJgKf+HzfX4Z9XWfpfkSbMaElLUOMnSV9eKb+SX+nTKsymRPsCYqiDnN0SU\n425AYTG4khowILjEyOz37YFYlHpwuC5Lxjys3WOsi9+XAbyxH3Qq02JpyQwG\ndBQ7HVRD+Qyz+sF+r2nXa6m5KWsLHtw9XiRmqrYwCQexFLpOE+mLRK53yXGO\nreiZ\r\n=L8Vx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"ff14743a5d1854510021042ebf0620edca07a4e5","scripts":{},"_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A module for quick ExpressJS server deployment. ","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.0.22_1604698662735_0.06228853427336034","host":"s3://npm-registry-packages"}},"1.0.25":{"name":"@fwd/server","version":"1.0.25","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.0.25","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"bb908a0ad387181f6fd2d51f1ffed656f0aa46f2","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.0.25.tgz","fileCount":5,"integrity":"sha512-LstZ1RvhDdzcvUxd3n98CacNJtMRIgmxyW52EoYgUyN8gWL0XecPMBp/3JOirGEzTWkCoFmSE0nqs5xpoxonog==","signatures":[{"sig":"MEUCIQCOiEPOvA9FLfk0aKmQ29vOL0YsJqIpd1/iFqKCbKDHBgIgDHA9OgVJhiE24rGZOxhXtlSNMepUev0bqhoKQzfdurU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwe3RCRA9TVsSAnZWagAAsLwQAIZ4zVlt/FXyb3SYv9o8\nwNAKrQ8JLWoPsM9tjMW+i89m46ta3ADUr0sBxq0RXx+b8ua6o+IkQdKwf/aE\nGwdeX3hNGY1GxGMWJC4bESqL6JVDmA0gdew04lmqxhQ51zrlXFo8bJu4QO/u\n6i3VdtbALiNe8WQtfiMI1gWp6aFUX3SjKjmi5YGz3Z6u5FARRShX3LUevixk\naPwjfgoZhMtUoAEld5rOOw0+BU4K4R2/+JGbRacqH0wre6Pea4E6cETiytvi\nNlULSdGoLatGMQYqNAVw2sHZ4p/D/dvbODluQgJ7cd+lyrK3uG3nUZ2sL70m\nhr9s97slPl131LPiFAwtYMyzEFQ0YLOIv7ZdnAIIZOMVsSaNN1/RUTzwM0M5\neNrvMHgMC704XHN2OaD5eDitGlZORt/6gZEYJeO2v6QzA6WQPQHmo9jlcPRc\nK3cUd5ve4c5ZlHE9dYRmnkHZy7ojBwX0fIgcoC9Ww+gZRSHz24ausWjEeyB5\n1kaMRL55SE13+IHU1WfHSXnGiliJSNtYWwO1KSSPXRRutvQN7nDGse+dwaLl\nObw4DIpKHSNUgNe90lGh1Xomv/dbF2nIQeuvxOsys3EV/tR/gZRAoG1n1LqI\nyC0rHyI2kUSc0PU7f1+YvlBIodTEoxhtcXfYDSxVgwB5/xXzcTLvjKUpb0Ol\nTBdC\r\n=ALAW\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"ff14743a5d1854510021042ebf0620edca07a4e5","scripts":{},"_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A module for quick ExpressJS server deployment. ","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.0.25_1606544849382_0.25033957681675556","host":"s3://npm-registry-packages"}},"1.0.26":{"name":"@fwd/server","version":"1.0.26","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.0.26","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"a6c7f29d2e502b06415ce1939b0ff24ac3eaa90e","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.0.26.tgz","fileCount":5,"integrity":"sha512-m2Mmd7Q3dF2o+XKc42g7rDzolk+8Cx/vlnSww2E7isKBtSkz04+tp54YToLl82oxxfBlXl7hFQn3zehk75gPRw==","signatures":[{"sig":"MEYCIQCHYySlHrrDuRA+QGFbIDw4raQDXUeKp8zfkOkCQYlO2gIhAKtgFXCks3YOMSaLvZPgX3UyyTWY6SosJ9sQw+Q0n9tb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":9111,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfwe4GCRA9TVsSAnZWagAAlNQP/3ofmBSfM23mMZYyuEir\nur4Za6J97JOzPnJpHMTI/DlFDdNu4j6FgL3uk9qn97rBB97CSPGorIVy50X9\nfXBNoSqeyt0Q/2mMGKk5BvRqQPKqztRGGdmw9uBtJ2S785gN4FIVEUuBVfFb\naMWOCWq+lXn+ln96n/vUk7FdyHJU9wAixSnaNJBVxPAb+Qh9SsOEn6CX7JT5\n6EYZkEk+OOND/ixdc8vGqMr7SPPetdzHEoz5xkeEF1v246siljWBE+1gA/YT\nI5MOzqnEf2wIac1k/ing1TLQMlbEbKHWslyht1J6QHTxauTfFbm4I9l1l22f\nVvTBiHAYGYWyMLIRodSlT3sb4WvopozyGj7gY+KTlRz2zUKzWGR4Gx9TKdSn\nhBLEpb5I+2HCGPIPS0JeiT7T9nvmD7Xi1QiVOVvM5tBNruK4lUT19mJyrOAV\n0lAQy9gp032KLm0+bS/v5OBhwo42tMd5egN1sc0iC7hyM2c9xthNz641BplR\nwoEe2w2HYgvcpCIcA6Znrw06rfeRI5IlOwGM4lgl5v35JXXFq0URlcPicIRa\nQk9sm6ZT40J1Pyrkwm/fWoAbqOsCgnUWWLyK8MA29GqhmrPZJ/XOliBAadyl\nXqp3sFjLCMNGo9I6QXWW5mfP/3dKnqoR08zmQ1Mb5QXszP9svq069a/aesd+\nPKAg\r\n=AzeP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"11d2fdd32a344da3cdb24c1d0b55a88f998ebeba","scripts":{},"_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A module for quick ExpressJS server deployment. ","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.0.26_1606544901694_0.5026545854682947","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@fwd/server","version":"1.1.0","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.1.0","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"c93126d3f25ef1b705f621e4d7033082d124bd39","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.1.0.tgz","fileCount":6,"integrity":"sha512-a6e+vixraByiNDqPgTlAGffihISIu1Ea6EMvhyQU0AWuCdlyHFlfcnRaFV1eKmEEUSALz5khbJZM8xTxX1UDJA==","signatures":[{"sig":"MEYCIQDwclGFmDQTH0PL7mgSGeyto5IHPem0qM3UHAbCpdLFlwIhANyikvOemcQf3YBt4gfA95HI3+Upcm3nF9wFJ/paBUat","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5706139,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf59stCRA9TVsSAnZWagAAAJEP+gKYz4M+LCOYTDqQ5FLp\nDIL1GaY2T/C2gkjy2ER7rfo1Qo+J3c19THXiHjoQUnHzYsuRV2GZYyAKQ1/8\n5wQnHJ5dKfrDXe+swceoS5B3xmGRbR/minRnNRIHxMfL4bwgZFhtVGVZf2LV\nGUU7f6wUEC1jGkSccBG6SZIHdOFXnHGbwTC0289Iuogx19raYY0Pv3Ows9eD\n+HG5st5y90RS04lc8jqEQIEi+ODnFQFnzswzXr2RLKuRAQ9ZoiWfXSv8wHNi\nTDWC9mJf50ICQbXuzKRfD8SdPWqUzU5KKZzsQbBvXcDrKwqJnzMF+5uOfHOd\n3M3BFbAnc8++3jNXdty9poRfq7eL/XGnPw8E6qYX5kK31LKU97iKPN+sxeFP\nqayWZySip64WPIx3TzjgzPuNw3gUjwgUpNV9waIa2cwgqSl8CXfbwsyFIxhh\nWnGRsonWyFsyB28zREr3cDxH7gr+SIsH9yB2Hwybu1rulnp5fo10e5DVUGhi\nJf8/246dd8mB/dLSotbSx4fhAacN5pXqXdScGR/R6NO7W38NRBq/J3TYRrRZ\nZ7XtOKl+j4aTdYr0VEn1VSBam3l9sUY0tnWsIWDY9A/4lCQQJQU+UHcXxrPF\nDe41Y5EugbgPqIxeYs1XlzVLCy2xj8LNT9bgUxWmIaToTXU/MviJfKL+K3YD\n+MCn\r\n=NjtV\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"5d069d3ba396d73dd9c00d17bc139772774cadaa","_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A full-stack NodeJS server built on ExpressJS, with lots of goodies to expedite development.","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.1.0_1609030444803_0.4000318354819945","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@fwd/server","version":"1.1.1","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.1.1","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"de09bd294b1986d7d287be43627ef42746cc956d","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.1.1.tgz","fileCount":6,"integrity":"sha512-YotrtZ09nbYynH5gzjYR9pKWJS9P8GFf++z5ObAQutW3rQgAgPBpiWcXvskbLtssjLeYSEE60EmHtMPD62buhQ==","signatures":[{"sig":"MEQCICsU3mhSm/vFo8WbZs9ru+CV2eExyj6XDd05LULj/g59AiBkqN2Pn79t2EHmftK7KsWZlft5m9RsKbjiWGLyRBVHhQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5706124,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6QK1CRA9TVsSAnZWagAACasP/AhIEgvlMAsHG+0F/yIS\n7jLaTekIxAh1u04p0SJVxFIpdBWLuXHZUIwtqE80rg0/HL8Q6ETD7kWRW2Vp\nTBWklyzXA8ol+2HeOqZ0eU7RpUbDMVWBoBVYV08IHNHX4Z3G73cUKYYNP9w8\nqotJ2WD1rZtsMY6hxdIpQkbg3hwBHJSM8KhSCzuLvbyNCVzEVIjD5K7TOPc7\naL/Rh3z49k9/NjExUqP1qYTuOR6ERxQyZqfE80B5cT2gSCFmKeNtyZvkeAKj\nRAD4xNiTTAdW4EiYecIwFM6L+s6+NGRYS3ooE41GQRaN1EzagXNecrcybfb2\nperrfHGk6ZayVLX9QP29DAHqLW2rsj/mNnyhg+Kmz9rW2ZGlV6d9OT0REmmL\n0yuxwgQ4wgNRjtCFYcE+xBNVh649fphVnbg3DYpgK2b6lrsyta/mzrDH/K5Y\nDVtIzvVNddZO32RNYANx9FCOKoFyj3xOCjmQy26YpszMr+A9w7LmJLCPKwUk\nKLAVyQl5HA9aJbroDN06KOC0FSouT90bQZpovccQrccFUsNfOIBLbM33EGDj\nQNKD+ZXle/je8HDnVqk65P/Kdf2Z638DUtAiIYJVNR7gQn4yNZXgohMj/HN6\ncF+cDWqjj+tD7QXXv+5KQNMR66ba/IcBqB6uwX6U6p1PWZKFVK67qV0jfwT1\ng7EW\r\n=cZV4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"902df12d10c941a6019943592120c14baf75c131","_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A full-stack NodeJS server built on ExpressJS, with lots of goodies to expedite development.","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.1.1_1609106100713_0.9007410815304673","host":"s3://npm-registry-packages"}},"1.1.2":{"name":"@fwd/server","version":"1.1.2","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.1.2","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"448790b10100608e73ff397212fb3e67de896060","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.1.2.tgz","fileCount":6,"integrity":"sha512-x0BFRw53HSBD2QKniWFcyAIycJGw+QMwtIyuI4C1FheSWm51qZikaktJiEX/zA2cSUqVxyAgXs+1Kyckhe4Iww==","signatures":[{"sig":"MEYCIQCRFzR4nMYWojBi2669HZOtAAyizjJ7bP4UG+KCOvyJyAIhAOsuLi5EDB/RWrfLP8cRAofhyJtoDmyQApzyS0DBa8yJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5706120,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJf6fDZCRA9TVsSAnZWagAA3jIQAIKHTs//ooNy6SY1x8Gm\nnqcTlOaToYFFEvvPM+fE047o0tp1BWZhxvtfqHGBXaYwNRzk9074zstyYh0j\nTyT8JI/jgBFZTDkBP7E3g93yr/RR6/9Qj9HIkMSoPLiKQoyKc39wkT3rB0Jk\nEhCF8DSGCF138AEEZUrZrLlLioYmxJ1C2P6TTxNDRDi1j+O0mwR9UTBBjUia\nzHzKyUC7pC/2seXqDHrrFC4YyGaHnGT+1zd3Mdr43CBFM5z+KUp4AhPgOtDv\nxfr/Hu1WCPzMKK/o4YEQvlCjWB5kfg4smKnEelfNrN3kZrXjnc15c+14CkaP\nSJrzRy2NCYoKFZs3SBRxj67GiT2cNtvqSNhN9/n23LvkJozsFk65d5asZc7+\ntRM8LhezXkweJU7CIeLqnzbmkl67E5ss5EmtaR5nCpizSL2QYUOUix5ohh8q\nki9fzCdWAmXco3XipgISXr6OHhafcTcQN5vHiUTxTCyKSv8Cc4YdwT1TvQFu\nVaNhSCmZmfKbcdOZxmOAlDRyW8wLOJuBh3+icsnkrJLKXdp8ev/wmhIhayff\nTArqgrsvJULRr0O+mkuTHDdZjGmNMPwp2byI9O8WEe/M1qCf2/6/hqQ+tFdt\n42xEyaVB8vXgVB27KtpCifX2CDOyXekd6SM+ZQ0KW+Ekl8YAqj4kiQ4EYmkZ\n5wve\r\n=WY7W\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"abfc1465570126fd80fe8fd8d4826820992fc061","_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A full-stack NodeJS server built on ExpressJS, with lots of goodies to expedite development.","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.1.2_1609167065125_0.07672720549601375","host":"s3://npm-registry-packages"}},"1.1.3":{"name":"@fwd/server","version":"1.1.3","author":{"name":"Forward Miami","email":"hello@forward.miami"},"license":"MIT","_id":"@fwd/server@1.1.3","maintainers":[{"name":"fwd","email":"hello@forward.miami"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/deploy/issues"},"dist":{"shasum":"470d3ebfdd1209c4e991c05fc5b2652aff02c3ab","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.1.3.tgz","fileCount":6,"integrity":"sha512-awl7YQXagsB4YnEx4nRCwqPby51kk27tz2rC5AQrXR6NzsY4BuLzZsre9ghRxBJbUPp1c1b6sIz2WV9KniWUdA==","signatures":[{"sig":"MEQCICgzrI4K3CUiPGPycw3J1hK2Q7VC23ViPj029BkGOSR6AiA42ciVrWhGnXAh7AWYuD1KOJGl66I5l8b85ou3mrecMw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":5706131,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgCkxZCRA9TVsSAnZWagAAVlEP/iQaxwEAAnTjy04cMQjf\nureZovY2KmqJPtMmj23Kcfo0PGdziJBkJJLk6i+hwyoAfvTC+Ol3CDAgfIZz\nKoGTyb/EaBrHAjsw2XDGXBDkbmtbW3kC3z2pzsKFfNOWOceFN6YOgGZ55TvN\n2H95ArXhSoReofoNL8NMP/cOeuMsr6cg7q65bdMdpS9+nIEfl9CTtugKh7gi\n+6gdSuqmhTcCqvW68Nv6cXRhwCXalsGERGKhTQSR4mpKOl+ClVZ/gvMdfwtq\nihYnQEDd1wepg47XYUCF+PULyUxcfWDbAn/EvnR3B/tsMmHyFSQynTnDcQIw\n7mwP2GGGoENhYPrXjFFHx0oIBC8gQpkHszf1++M1Hp2hWo9Tn4HgVw8DDZ0q\nLR+EBYEkO40thNTePdSFFGvDo9YFjVR5w0pj4xffZx9JKq1R6esBUQLqhJXX\nxlKw07k+Du6JRnYHrvV/gZhUodb5MlDZVE0+Vmn0p7flRsnSgHN37oo9Y/B3\noJtYHTPWDU0g3JvJ5fp3EeI9vM/gKWS2XD7Hh9/nsF94LBhjO52xYVxPHHrB\nZi6erwU7e0uSRfFgycLoU/MNtYntUFmtJ/bUTUUW0AIxBe2Z5gUofPVLJkXd\nuyfVPrN1ViWeSCTUtcOT3IIsSBdxTNCBitP/j3z4UiRNTInME+plEUNgO7Kq\nErVH\r\n=+I3c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"e9edc55784449d1c63d16f1a3da350758447d1ad","_npmUser":{"name":"fwd","email":"hello@forward.miami"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"6.11.2","description":"A full-stack NodeJS server built on ExpressJS, with lots of goodies to expedite development.","directories":{},"_nodeVersion":"10.15.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.19.0","lowdb":"^1.0.0","moment":"^2.24.0","express":"^4.17.1","memory-cache":"^0.2.0","parse-filepath":"^1.0.2","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.1.3_1611287639914_0.7349677695111927","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@fwd/server","version":"2.0.0","author":{"name":"Fresh Web Designs","email":"hello@fwd.dev"},"license":"MIT","_id":"@fwd/server@2.0.0","maintainers":[{"name":"fwd","email":"hell@fwd.dev"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/issues"},"dist":{"shasum":"6d623df466ad74d532945c260bc58d74c2ebced0","tarball":"https://registry.npmjs.org/@fwd/server/-/server-2.0.0.tgz","fileCount":6,"integrity":"sha512-JLC6mTExNSh4BHcyOw/F2eHT6Fl0GESI5qX4O/1od0fU7LBZ1y7KHbsli2OWSWi2peSeYQ9yVDGZjIDXqy9oIg==","signatures":[{"sig":"MEUCIQCVAYskgQp2jSd2+0rg8t1qnUCEuyqq9Fw4D7CEufNaUAIgSgLeu2jz/BOs6fTHrdHomXKA9lUsyG5xvPGygx6uSzk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":692670,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJimXlrACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrGxA//XMH809m3cJj9M+MhSWfm3GRHoqtSGqfKnD+CXF8ldVMQH6Nq\r\n+nc805UHDpLWrA66fHS2WPr/LIp+K35cjQS6xdtVklmAnuEA7ut3WdzMX8bD\r\nRQILRsw5IhUhYIhnnENWgio8EZUVx3YonI0rCNL+AiLynhdbjZ54RPbSJIVv\r\nJDnkzDXmD33iSnR/nO+CelBNimnMgwbuPc+IBzkxW674IM4Uybwfh3WrsBhs\r\nEHLlzYtmVytuVwnIrU3OMn8ax5A2yokkkR69rlUlwGYkEGu9EDWT14JLsHje\r\nOV4ZN+Z2XZ/U03mooLdi+vJdLU0MwzoGq7rH3QfH3BY57+8/RrmSxC7TZe7y\r\nNVUheqVHPZ38O+gI/YYDnClqSEuJWN9xglP4RVFt5VJc+dEc9HOsNT4B1AGG\r\nPINWRNQjhGIG/JikQhz4L41OgcS1gXbyg3vLsiZslXoNuP2hUx4e4GRgINtc\r\nYUoE1k77unDzpYHhwGn7e3Kk88aBahRE2Zu2mCiCGnBZ/c7kRg8qVO9UtXhT\r\nhAg6DSOafKe0+pKDSr3vi9RobrZGsbhAzRk39RG1I3+/pPvRWR7JTeMa4D83\r\n16Pnox8nnmDph55ZsJ6601WPhwlK1kWxT3E/LqFzoMVCOl719RLeMEYXp+2s\r\nsXXc8ERxTatWPYjiFLd9050BbA0NNnPbTnY=\r\n=dzBy\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"efc7da37c711ecff60f341262d1de8b87f9ae917","_npmUser":{"name":"fwd","email":"hell@fwd.dev"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"8.12.1","description":"NodeJS Toolbelt","directories":{},"_nodeVersion":"16.15.1","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.21.1","crypto":"^1.0.1","moment":"^2.24.0","express":"^4.17.1","@fwd/cron":"github:fwd/cron","@fwd/time":"github:fwd/time","@fwd/cache":"github:fwd/cache","chrono-node":"^2.3.1","@fwd/database":"github:fwd/database","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_2.0.0_1654225259227_0.31413846265565093","host":"s3://npm-registry-packages"}},"1.1.5":{"name":"@fwd/server","version":"1.1.5","author":{"name":"Fresh Web Designs","email":"hello@fwd.dev"},"license":"MIT","_id":"@fwd/server@1.1.5","maintainers":[{"name":"fwd","email":"hell@fwd.dev"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/issues"},"dist":{"shasum":"832be02678d4b0b8ced7c43491074cb76a8e6175","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.1.5.tgz","fileCount":6,"integrity":"sha512-pLOC3mphFZvhSR3O4Md5KgqAIJx9EydKWgOHTW0cWasjTY39wYKFZh4k30++QFU/P2QL0AsoLV6D9cWH/0XjXQ==","signatures":[{"sig":"MEUCIQCtjdyo0fgeRCz8nD2oYY8fQIxE4rgiMzOjWMG8iMS4IAIgFe8K/fFLwztfhH0dp5rcWQwDdC9h8XMsByr6e1SqYq8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":693088,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJiph/GACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoDzg//bIp2bVEcH9+p2RriKL9TyQlpdDNtiCKzFnP85wckA7Cvp+ik\r\nYG8PEjQ4lQe0KiuX1Yhd2SMkpZtFW+g+OH+OMDVMaT3wgnjT5HLL36485S6X\r\n3qC/g4nLVdwFTPZ9JlV4W/S4k8icrSY9KKHGlY39ZURpmN+T9pMur4u8mEPZ\r\n95+cgYYysAsirrkZ2Z3VPVLXJC+pirPrRcb5GBzW5SdlWy0DViElkdWp7EHG\r\nrTF17ASnEOyYzvkFYVX+rpedrvyTdXR1aNSFjBwys8jmiiAT4h+GH78UNwCf\r\nIVDdet6CfxAslDOJQWlDSbL34SqMmdc1O0GvswQrln+hzImj+yHtJakUUe5j\r\njKDcyBfV2dFemJ4IxPuz3Q/R4NElqd5fiDuixu4uJ3n1E/AXmw0O1BTwTJjU\r\nvlo7+UO20JK6bGRk0B1lHzjvxal5vUtuDCTDAfseLK6aJWgsDIT1Kaps1hw1\r\nSYj9OGp9uwW2P4uywFkdJntk6Bnp2dMJZR5e/DbZ7tZEetFnaupDqdgwaVRF\r\nFuZbAE/1HaKk/b1IFRBeh1JzDPi3119N3nTgf0WEZ3bNsnPyHsqWRUSRpM/B\r\niergpB4gc8r1WFSCfa+JjdU83d/Qr5nq1+zpmfFY9/BVZNW8C8PW75md6b6n\r\nbhujAiRf73mmx7Nwo2f4JsxchnIwMkxzVBQ=\r\n=lbpb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"b8d101cf930b4ee89dac35a6f97db035004b8895","_npmUser":{"name":"fwd","email":"hell@fwd.dev"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"8.3.0","description":"NodeJS Web Framework","directories":{},"_nodeVersion":"16.13.1","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.21.1","crypto":"^1.0.1","moment":"^2.24.0","express":"^4.17.1","@fwd/cron":"*","@fwd/time":"*","@fwd/cache":"*","chrono-node":"^2.3.1","@fwd/database":"*","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.1.5_1655054278042_0.5803921675482058","host":"s3://npm-registry-packages"}},"1.1.6":{"name":"@fwd/server","version":"1.1.6","author":{"name":"Fresh Web Designs","email":"hello@fwd.dev"},"license":"MIT","_id":"@fwd/server@1.1.6","maintainers":[{"name":"fwd","email":"hell@fwd.dev"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/issues"},"dist":{"shasum":"d457d2265df45807aa7cf0396de32b13ad4e6af5","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.1.6.tgz","fileCount":6,"integrity":"sha512-sc14tGn8fxiqHQn2FIdd8qxl2PYYk91+7TBzD0rgH0vpDXuXWZpV2B0gFjfUGXEILZIuZj5yRiRsEQYZ0wB0lQ==","signatures":[{"sig":"MEUCIQC1vsL0QDRoEaWwHayDmHg//UgkXfdRHNjyXqG0oFYL7wIgWCHeEv0G+bXITdf9nNMbDtCfib/zh89HmFEIqV9evxk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":693545,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJipiHeACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoULA/8DpOaN9zi5qXa6bEbQdaaGygoIztUNhhbTnZpd/Q/SLaOS9vx\r\nx3ngMdQxt6v8YGzLXO3G/ioD+uY9qhdKzwQ3YkY0z951DoNrAvrBxGtqhN53\r\nm9F5f3rw7jTX8GNhJjC1FPr+xLUxKHjK7lxjPS0po0semx3TSOef2oz5ZpYy\r\n9P0HVCztahNJUW/3jM22pPKdeQCFv9TJS6IzVF9+jdJDB3QOULaCZP1O0gDR\r\ntx8/B9UQwZB6wZvzoTHfFkuKp3MEL7kIUPUyI4z5QIChSVasvkkhSMWXNQei\r\n7Jj/RxKp6f4rkoYJlheHq0Fo18avYSBMtbxqAYsAR+j47j14QhT9B+j+qXVY\r\nqgUGpeGNDOjUiquHFPFxIwXfRBd8wnAu+xzx1b5w7JqwPQSQX0m/F8a2UDZv\r\nTSzml8ClYhBunN/96S0U8oVyn/LBW7htIg5Zc9ZTZ7jO74Q0G/rjcQQr4UYX\r\nJ3S8XYz00X0oTNlSWKnJh0r1NBE/Xhedmjmz1vnwMhjtXXG1pnSp5lewYIi7\r\n1SOqh/jP7OWk2ZNbUSrt4bHVeag+O3w3J0gs25R0eFean+wQ+LQAXqEA0xbN\r\nlXtaoWWKgHv+2wLoRa9ZPnxphQULxv17H+6E12BS/E7dbyr3elB1NRlv8cPy\r\nxXx3ay8eM2pGQupfTsGaCVzPcTUv26FFDNM=\r\n=SBky\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"920a7e14a17fdf4cbf6356186772e751f46cfeb9","_npmUser":{"name":"fwd","email":"hell@fwd.dev"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"8.3.0","description":"NodeJS Web Framework","directories":{},"_nodeVersion":"16.13.1","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.21.1","crypto":"^1.0.1","moment":"^2.24.0","express":"^4.17.1","@fwd/cron":"*","@fwd/time":"*","@fwd/cache":"*","chrono-node":"^2.3.1","@fwd/database":"*","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.1.6_1655054814793_0.8819257968875822","host":"s3://npm-registry-packages"}},"1.1.7":{"name":"@fwd/server","version":"1.1.7","author":{"name":"Fresh Web Designs","email":"hello@fwd.dev"},"license":"MIT","_id":"@fwd/server@1.1.7","maintainers":[{"name":"fwd","email":"hell@fwd.dev"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/issues"},"dist":{"shasum":"1e55c08f5daed7b2b9d1eb3fe2fc71a95136604c","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.1.7.tgz","fileCount":6,"integrity":"sha512-QUZ6Q4qaSm1+x3wyjc+mE+p35WwrM2m1YBUI24SMMX588cOzkg/Hd5YUHZ8AV3fP38ePCJSWCgumy7vIfm0/7Q==","signatures":[{"sig":"MEUCIEg+JVTX+RFnP/2uwbxw5l1KTC9bMu+N3SRJtg3V9q7SAiEAxD2sEntezKvsikNq/XHthPTOc9lugDcwOj8Z1WQLs1o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":693063},"main":"index.js","gitHead":"6835c649919f7094339fb5438089804ac1a6335a","_npmUser":{"name":"fwd","email":"hell@fwd.dev"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"10.5.0","description":"NodeJS Full-Stack Framework","directories":{},"_nodeVersion":"20.12.0","dependencies":{"ejs":"2.7.1","cors":"^2.8.5","axios":"^0.21.1","crypto":"^1.0.1","moment":"^2.24.0","express":"^4.17.1","@fwd/cron":"*","@fwd/time":"*","@fwd/cache":"*","chrono-node":"^2.3.1","@fwd/database":"1.1.1","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.1.7_1713640166362_0.6581949898306618","host":"s3://npm-registry-packages"}},"1.1.8":{"name":"@fwd/server","version":"1.1.8","author":{"name":"Fresh Web Designs","email":"hello@fwd.dev"},"license":"MIT","_id":"@fwd/server@1.1.8","maintainers":[{"name":"fwd","email":"hell@fwd.dev"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/issues"},"dist":{"shasum":"e66c90beb153ee357f57602c26b76643704e11be","tarball":"https://registry.npmjs.org/@fwd/server/-/server-1.1.8.tgz","fileCount":6,"integrity":"sha512-aHK+4seNuZxWU7GC/9hUM6cQT39TEoyC+eb88M4d8lx6lTS4PQQn5lMeXB7MhUPT/e66ZkbQlF/bcL4RZXPgIQ==","signatures":[{"sig":"MEUCIQDuYuWFojh9wPYyBFHwNnGwnZm61kv0bBu8pnBqPswchQIgNLnACD0QaVi0ew1nmZ+htXa+b+gSF1AV04/ZF4CxY2A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":693064},"main":"index.js","gitHead":"e819e63b32528f1021ced8bffd56cded9bfc2bf4","_npmUser":{"name":"fwd","email":"hell@fwd.dev"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"10.5.0","description":"NodeJS Full-Stack Framework","directories":{},"_nodeVersion":"20.12.0","dependencies":{"ejs":"^3.1.10","cors":"^2.8.5","axios":"^1.6.8","crypto":"^1.0.1","moment":"^2.24.0","express":"^4.17.1","@fwd/cron":"*","@fwd/time":"*","@fwd/cache":"*","chrono-node":"^2.3.1","@fwd/database":"1.1.1","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_1.1.8_1713640316499_0.52550604988302","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@fwd/server","version":"2.0.1","author":{"name":"Fresh Web Designs","email":"hello@fwd.dev"},"license":"MIT","_id":"@fwd/server@2.0.1","maintainers":[{"name":"fwd","email":"hell@fwd.dev"}],"homepage":"https://github.com/fwd/server","bugs":{"url":"https://github.com/fwd/server/issues"},"dist":{"shasum":"18ed29dbdcd1f0f253493d15d404ac09420b9a40","tarball":"https://registry.npmjs.org/@fwd/server/-/server-2.0.1.tgz","fileCount":7,"integrity":"sha512-lC7lSc5HXPyWsYC7HzVV6FkTockuwwT0Yn8PhJsreaCv73TCtpHbg57muQyzBsTWJigBHzsaGYIawLLopoSLYQ==","signatures":[{"sig":"MEQCIFbiWkYM1xFSUdpQIt904LjDrOcxaAp0AEZGdSpDxFDmAiAn5aVD6rel0jmhowGKhPbjTajOKoJAEk3j/NH9kY8kOg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":693497},"main":"index.js","gitHead":"66ac2f9347aa126b4942aaa137998a0082a3a0b7","_npmUser":{"name":"fwd","email":"hell@fwd.dev"},"repository":{"url":"git+ssh://git@github.com/fwd/server.git","type":"git"},"_npmVersion":"11.2.0","description":"NodeJS Full-Stack Framework","directories":{},"_nodeVersion":"22.14.0","dependencies":{"ejs":"^3.1.10","cors":"^2.8.5","axios":"^1.6.8","crypto":"^1.0.1","moment":"^2.24.0","express":"^4.17.1","@fwd/cron":"*","@fwd/time":"*","@fwd/cache":"*","@fwd/database":"*","moment-timezone":"^0.5.27"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/server_2.0.1_1748573573901_0.0721847476612194","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@fwd/server","version":"2.0.2","description":"NodeJS Full-Stack Framework","main":"index.js","author":{"name":"Fresh Web Designs","email":"hello@fwd.dev"},"license":"MIT","homepage":"https://github.com/fwd/server","repository":{"type":"git","url":"git+ssh://git@github.com/fwd/server.git"},"bugs":{"url":"https://github.com/fwd/server/issues"},"dependencies":{"@fwd/database":"1.1.1","axios":"^1.12.2","cors":"^2.8.5","ejs":"^3.1.10","express":"^4.21.2","moment":"^2.30.1","moment-timezone":"^0.6.0"},"devDependencies":{"jest":"^30.2.0","supertest":"^7.1.4"},"scripts":{"test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage"},"jest":{"testEnvironment":"node","setupFilesAfterEnv":["./__tests__/setup.js"],"collectCoverageFrom":["index.js","!node_modules/**"],"coverageDirectory":"coverage","coverageReporters":["text","lcov","html"],"testMatch":["**/__tests__/**/*.test.js"],"verbose":true},"_id":"@fwd/server@2.0.2","gitHead":"a465b295bd2f9f19c0d6ca9c5c18c169bd36511d","_nodeVersion":"22.14.0","_npmVersion":"11.4.2","dist":{"integrity":"sha512-N/dyJHg1zIdCwA2A31QO2ch69ZDMBNURKoWNvkkB/s/6h1gs4tVBG7yWV1RxxpXnAeYOxdnEpuSk/VtvMB1Psg==","shasum":"297e2655a61518f4cd7547a7e527e23e81e9e68c","tarball":"https://registry.npmjs.org/@fwd/server/-/server-2.0.2.tgz","fileCount":45,"unpackedSize":930542,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC46RDQkMf7d4qTDugNgSjmehIa0bDYUnx+Z1QVVRlw8gIhAL1rYhNF/UATPL5QgNh9hP3eZYGc1iBf45QoOM5IVY+6"}]},"_npmUser":{"name":"fwd","email":"hell@fwd.dev"},"directories":{},"maintainers":[{"name":"fwd","email":"hell@fwd.dev"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/server_2.0.2_1760319614569_0.20592613721946695"},"_hasShrinkwrap":false}},"time":{"created":"2020-08-17T18:26:35.807Z","modified":"2025-10-13T01:40:15.082Z","1.0.18":"2020-08-17T18:23:15.891Z","1.0.10":"2020-08-17T18:23:15.891Z","1.0.11":"2020-08-17T18:23:15.891Z","1.0.12":"2020-08-17T18:23:15.891Z","1.0.14":"2020-08-17T18:23:15.891Z","1.0.15":"2020-08-17T18:23:15.891Z","1.0.8":"2020-08-17T18:23:15.891Z","1.0.9":"2020-08-17T18:23:15.891Z","1.0.16":"2020-08-17T18:23:15.891Z","1.0.5":"2020-08-17T18:23:15.891Z","1.0.7":"2020-08-17T18:23:15.891Z","1.0.2":"2020-08-17T18:23:15.891Z","1.0.4":"2020-08-17T18:23:15.891Z","1.0.17":"2020-08-17T18:23:15.891Z","1.0.3":"2020-08-17T18:23:15.891Z","1.0.6":"2020-08-17T18:23:15.891Z","1.0.0":"2020-08-17T18:23:15.891Z","1.0.1":"2020-08-17T18:23:15.891Z","1.0.20":"2020-08-17T18:26:36.021Z","1.0.21":"2020-09-26T07:48:24.500Z","1.0.22":"2020-11-06T21:37:42.867Z","1.0.25":"2020-11-28T06:27:29.526Z","1.0.26":"2020-11-28T06:28:21.832Z","1.1.0":"2020-12-27T00:54:05.121Z","1.1.1":"2020-12-27T21:55:00.963Z","1.1.2":"2020-12-28T14:51:05.414Z","1.1.3":"2021-01-22T03:54:00.744Z","2.0.0":"2022-06-03T03:00:59.496Z","1.1.5":"2022-06-12T17:17:58.205Z","1.1.6":"2022-06-12T17:26:54.972Z","1.1.7":"2024-04-20T19:09:26.601Z","1.1.8":"2024-04-20T19:11:56.710Z","2.0.1":"2025-05-30T02:52:54.158Z","2.0.2":"2025-10-13T01:40:14.895Z"},"bugs":{"url":"https://github.com/fwd/server/issues"},"author":{"name":"Fresh Web Designs","email":"hello@fwd.dev"},"license":"MIT","homepage":"https://github.com/fwd/server","repository":{"type":"git","url":"git+ssh://git@github.com/fwd/server.git"},"description":"NodeJS Full-Stack Framework","maintainers":[{"name":"fwd","email":"hell@fwd.dev"}],"readme":"![Cover](https://raw.githubusercontent.com/fwd/server/master/.github/banner.png)\n\n# @fwd/server - NodeJS Full-Stack Framework\n\nA powerful, easy-to-use Node.js framework that gives you everything you need to build web applications quickly. Think of it as your Swiss Army knife for web development - it includes a web server, database, file operations, caching, and much more, all in one package.\n\n## 🚀 What Makes This Special?\n\n- **Zero Configuration**: Get started in seconds, not hours\n- **Everything Included**: Web server, database, file operations, caching, and more\n- **Natural Language**: Use human-friendly syntax for dates, times, and cron jobs\n- **Production Ready**: Built-in security features and comprehensive testing\n- **Beginner Friendly**: Simple examples that anyone can understand\n\n## 📦 What's Included\n\n- 🌐 **Full Web Server** (ExpressJS) - Handle HTTP requests and responses\n- 🔗 **HTTP Client** (Axios) - Make API calls to other services\n- 💾 **In-Memory Caching** - Store data temporarily for faster access\n- 🗄️ **SQL-Like Database** - Store and query data without complex setup\n- 🔐 **UUID Generator** - Create unique identifiers for your data\n- 📅 **Smart Date Parsing** - Use natural language like \"next friday\"\n- ⏰ **Timestamps** - Easy time formatting and timezone handling\n- 📁 **File Operations** - Read, write, append, and manage files\n- ⏲️ **Cron Jobs** - Schedule tasks with natural language\n- 🖥️ **Shell Commands** - Run system commands from Node.js\n\n## 🛠️ Installation\n\n```bash\nnpm install @fwd/server\n```\n\n## 🎯 Quick Start (Your First Web App)\n\nLet's build a simple web application that greets visitors:\n\n```js\nconst server = require('@fwd/server')\n\n// Create a route that responds to GET requests to the homepage\nserver.get('/', (req, res) => {\n    res.send(\"Hello, World! Welcome to my website!\")\n})\n\n// Start the server on port 8080\nserver.start(8080)\n```\n\nThat's it! Your web server is now running at `http://localhost:8080`. When someone visits your site, they'll see \"Hello, World! Welcome to my website!\"\n\n> 💡 **Tip**: Static files (like CSS, images, JavaScript) are automatically served from the `/public` folder. You can change this with `server.start(8080, { publicFolder: '/dist' })`.\n\n## 🌟 Real-World Examples\n\n### Example 1: User Registration System\n\nLet's build a complete user registration system:\n\n```js\nconst server = require('@fwd/server')\n\n// Serve the registration form\nserver.get('/register', (req, res) => {\n    res.send(`\n        <form method=\"POST\" action=\"/register\">\n            <h2>Create Your Account</h2>\n            <input type=\"text\" name=\"name\" placeholder=\"Your Name\" required>\n            <input type=\"email\" name=\"email\" placeholder=\"Your Email\" required>\n            <button type=\"submit\">Register</button>\n        </form>\n    `)\n})\n\n// Handle the registration form submission\nserver.post('/register', async (req, res) => {\n    const { name, email } = req.body\n    \n    // Validate email format\n    if (!server.isEmail(email)) {\n        return res.send(\"Please enter a valid email address!\")\n    }\n    \n    // Create a new user in the database\n    const user = await server.database.create('users', {\n        id: server.uuid(),           // Generate unique ID\n        name: name,\n        email: email,\n        created_at: server.timestamp() // Current timestamp\n    })\n    \n    res.send(`Welcome ${name}! Your account has been created.`)\n})\n\n// View all registered users\nserver.get('/users', async (req, res) => {\n    const users = await server.database.get('users')\n    res.send({ users: users })\n})\n\nserver.start(8080)\n```\n\n### Example 2: Blog with File Storage\n\nCreate a simple blog that stores posts in files:\n\n```js\nconst server = require('@fwd/server')\n\n// Display all blog posts\nserver.get('/', async (req, res) => {\n    const posts = await server.list('./posts')\n    let html = '<h1>My Blog</h1>'\n    \n    for (const post of posts) {\n        const content = await server.read(`./posts/${post}`)\n        html += `<div><h3>${post.replace('.txt', '')}</h3><p>${content}</p></div>`\n    }\n    \n    html += '<a href=\"/new\">Write New Post</a>'\n    res.send(html)\n})\n\n// Show form to create new post\nserver.get('/new', (req, res) => {\n    res.send(`\n        <form method=\"POST\" action=\"/new\">\n            <h2>Write New Post</h2>\n            <input type=\"text\" name=\"title\" placeholder=\"Post Title\" required>\n            <textarea name=\"content\" placeholder=\"Post Content\" required></textarea>\n            <button type=\"submit\">Publish Post</button>\n        </form>\n    `)\n})\n\n// Save new blog post\nserver.post('/new', async (req, res) => {\n    const { title, content } = req.body\n    \n    // Create filename from title (replace spaces with dashes)\n    const filename = title.toLowerCase().replace(/\\s+/g, '-') + '.txt'\n    \n    // Save post to file\n    await server.write(`./posts/${filename}`, content)\n    \n    res.send(`Post \"${title}\" has been published! <a href=\"/\">View all posts</a>`)\n})\n\nserver.start(8080)\n```\n\n### Example 3: API Integration with External Services\n\nBuild an app that fetches data from external APIs:\n\n```js\nconst server = require('@fwd/server')\n\n// Get random joke from external API\nserver.get('/joke', async (req, res) => {\n    try {\n        const response = await server.http.get('https://api.chucknorris.io/jokes/random')\n        const joke = response.data\n        \n        res.send(`\n            <h2>Random Chuck Norris Joke</h2>\n            <p>${joke.value}</p>\n            <a href=\"/joke\">Get Another Joke</a>\n        `)\n    } catch (error) {\n        res.send(\"Sorry, couldn't fetch a joke right now.\")\n    }\n})\n\n// Weather information (example with caching)\nserver.get('/weather/:city', async (req, res) => {\n    const city = req.params.city\n    \n    // Check if we have cached weather data\n    let weather = server.cache(`weather_${city}`)\n    \n    if (!weather) {\n        // Fetch fresh data from API\n        try {\n            const response = await server.http.get(`https://api.openweathermap.org/data/2.5/weather?q=${city}&appid=YOUR_API_KEY`)\n            weather = response.data\n            \n            // Cache for 10 minutes (600 seconds)\n            server.cache(`weather_${city}`, weather, 600)\n        } catch (error) {\n            return res.send(`Could not fetch weather for ${city}`)\n        }\n    }\n    \n    res.send(`\n        <h2>Weather in ${city}</h2>\n        <p>Temperature: ${weather.main.temp}°F</p>\n        <p>Description: ${weather.weather[0].description}</p>\n    `)\n})\n\nserver.start(8080)\n```\n\n## 🗄️ Database Operations Made Simple\n\nThe built-in database works like a simple JSON database - perfect for prototypes and small applications:\n\n```js\nconst server = require('@fwd/server')\n\n// Create a new record\nconst user = await server.database.create('users', {\n    name: 'John Doe',\n    email: 'john@example.com',\n    age: 30\n})\n\n// Find all users\nconst allUsers = await server.database.get('users')\n\n// Find users with specific criteria\nconst youngUsers = await server.database.find('users', { age: { $lt: 25 } })\n\n// Find one specific user\nconst john = await server.database.findOne('users', { name: 'John Doe' })\n\n// Update a user\nawait server.database.update('users', john.id, { age: 31 })\n\n// Delete a user\nawait server.database.remove('users', john.id)\n```\n\n## 📁 File Operations\n\nHandle files easily with built-in methods:\n\n```js\nconst server = require('@fwd/server')\n\n// Read a file\nconst content = await server.read('./data.txt')\nconsole.log(content)\n\n// Write to a file\nawait server.write('./output.txt', 'Hello, World!')\n\n// Append to a file\nawait server.append('./log.txt', 'New log entry\\n')\n\n// Prepend to a file (add content at the beginning)\nawait server.prepend('./notes.txt', 'Important: ')\n\n// Copy a file\nawait server.copy('./source.txt', './backup.txt')\n\n// Delete a file\nawait server.unlink('./old-file.txt')\n\n// List files in a directory\nconst files = await server.list('./documents')\nconsole.log(files) // ['file1.txt', 'file2.txt', 'folder1']\n```\n\n## ⏰ Time and Date Magic\n\nWork with dates using natural language:\n\n```js\nconst server = require('@fwd/server')\n\n// Natural language date parsing\nconsole.log(server.date('next friday'))        // Next Friday's date\nconsole.log(server.date('tomorrow'))           // Tomorrow's date\nconsole.log(server.date('in 3 days'))          // Date 3 days from now\nconsole.log(server.date('last monday'))        // Last Monday's date\n\n// Timestamps\nconsole.log(server.timestamp())                // Current Unix timestamp\nconsole.log(server.timestamp('LLLL'))          // \"Monday, September 28, 2020 4:30 PM\"\nconsole.log(server.timestamp('LL'))            // \"September 28, 2020\"\nconsole.log(server.timestamp('LLL', 'America/New_York')) // With timezone\n\n// Time conversions\nconsole.log(server.time(5, 'seconds'))         // 5000 (milliseconds)\nconsole.log(server.time(1, 'hour'))            // 3600000 (milliseconds)\nconsole.log(server.time(2, 'days'))            // 172800000 (milliseconds)\n```\n\n## ⏲️ Scheduled Tasks (Cron Jobs)\n\nSchedule tasks using natural language:\n\n```js\nconst server = require('@fwd/server')\n\n// Run every hour\nserver.cron(() => {\n    console.log('Hourly backup completed')\n}, 'every 1 hour')\n\n// Run every 30 minutes\nserver.cron(() => {\n    console.log('Checking for updates...')\n}, 'every 30 minutes')\n\n// Run daily at midnight\nserver.cron(() => {\n    console.log('Daily cleanup started')\n}, 'every 1 day')\n\n// Run immediately and then every 5 minutes\nserver.cron(() => {\n    console.log('Health check performed')\n}, 'every 5 minutes', true) // true = run immediately\n```\n\n## 🔐 Generate Unique IDs\n\nCreate unique identifiers for your data:\n\n```js\nconst server = require('@fwd/server')\n\n// Generate a full UUID\nconst id = server.uuid()\nconsole.log(id) // \"9e471b08-38fe-11eb-adc1-0242ac120002\"\n\n// Generate a shorter UUID\nconst shortId = server.uuid(8)\nconsole.log(shortId) // \"9e471b08\"\n\n// Generate UUID with prefix\nconst prefixedId = server.uuid(16, 'user_')\nconsole.log(prefixedId) // \"user_9e471b08-38fe\"\n\n// Generate UUID without dashes\nconst cleanId = server.uuid(32, '', true)\nconsole.log(cleanId) // \"9e471b0838fe11ebadc10242ac120002\"\n```\n\n## 🖥️ Execute System Commands\n\nRun shell commands from your Node.js application:\n\n```js\nconst server = require('@fwd/server')\n\n// Get system information\nconst cpuUsage = await server.exec('top -l 1 | grep \"CPU usage\"')\nconsole.log(cpuUsage)\n\n// List files in current directory\nconst files = await server.exec('ls -la')\nconsole.log(files)\n\n// Get disk usage\nconst diskUsage = await server.exec('df -h')\nconsole.log(diskUsage)\n\n// Execute with options\nconst result = await server.exec('long-running-command', {\n    timeout: 60000,    // 60 second timeout\n    maxBuffer: 1024 * 1024 // 1MB buffer limit\n})\n```\n\n## 💾 Caching for Performance\n\nStore data temporarily to improve performance:\n\n```js\nconst server = require('@fwd/server')\n\n// Store data in cache\nserver.cache('user_123', { name: 'John', email: 'john@example.com' })\n\n// Retrieve from cache\nconst user = server.cache('user_123')\nconsole.log(user) // { name: 'John', email: 'john@example.com' }\n\n// Store with expiration (expires in 300 seconds = 5 minutes)\nserver.cache('api_data', { data: 'some data' }, 300)\n\n// Cache will automatically expire after 5 minutes\n```\n\n## 🔍 Data Validation\n\nValidate user input with built-in validators:\n\n```js\nconst server = require('@fwd/server')\n\n// Email validation\nconsole.log(server.isEmail('user@example.com'))    // true\nconsole.log(server.isEmail('invalid-email'))       // false\n\n// Phone number validation\nconsole.log(server.isPhone({ value: '555-123-4567' }))  // true\nconsole.log(server.isPhone({ value: '123' }))            // false\n```\n\n## 🌐 Advanced Server Configuration\n\nConfigure your server with security and performance options:\n\n```js\nconst server = require('@fwd/server')\n\nserver.get('/', (req, res) => {\n    res.send('Hello, World!')\n})\n\nserver.start(8080, './my-app', {\n    // Security settings\n    cors: {\n        origin: ['https://mywebsite.com', 'https://app.mywebsite.com'],\n        credentials: true\n    },\n    \n    // File size limits\n    jsonLimit: '50mb',\n    \n    // Timezone for timestamps\n    timezone: 'America/New_York',\n    \n    // Static file settings\n    publicFolder: './public',\n    maxAge: '1d', // Cache static files for 1 day\n    \n    // Upload settings\n    uploadFolder: './uploads',\n    \n    // View engine\n    viewEngine: 'ejs',\n    viewsFolder: './views'\n})\n```\n\n## 🧪 Testing\n\nThe framework includes comprehensive testing to ensure reliability and security. All tests pass to maintain API compatibility.\n\n### Running Tests\n\n```bash\n# Run all tests\nnpm test\n\n# Run tests in watch mode (reruns when files change)\nnpm run test:watch\n\n# Run tests with coverage report\nnpm run test:coverage\n```\n\n### Test Coverage\n\nThe test suite covers:\n\n- ✅ **File Operations** - Read, write, append, prepend, delete, copy, list\n- ✅ **Utility Functions** - Command execution, sleep, UUID generation, time/date functions\n- ✅ **Validation Functions** - Email and phone number validation\n- ✅ **Cron Functionality** - Scheduled task execution\n- ✅ **Caching** - Data storage and retrieval with expiration\n- ✅ **Server Setup** - HTTP method registration and routing\n- ✅ **Integration Tests** - End-to-end functionality testing\n\n### Test Structure\n\n```\n__tests__/\n├── file-operations.test.js      # File system operations\n├── utility-functions.test.js    # Core utility functions\n├── validation-functions.test.js  # Input validation\n├── cron-functionality.test.js   # Scheduled tasks\n├── cache-functionality.test.js  # Caching system\n├── server-setup.test.js        # Server configuration\n└── integration.test.js          # End-to-end tests\n```\n\n## 🔒 Security Features\n\nThe framework includes comprehensive security measures to protect your applications:\n\n### 🛡️ Built-in Security Protections\n\n#### **Command Injection Prevention**\n- Input validation and sanitization\n- Dangerous character filtering (`;&|`$(){}[]\\`)\n- Command length limits (1000 characters)\n- Execution timeouts (30 seconds default)\n- Buffer size limits (1MB)\n\n#### **Path Traversal Protection**\n- Path normalization and validation\n- Prevention of `..` directory traversal attacks\n- Secure file operation handling\n\n#### **File Operation Security**\n- File size limits (50MB for files, 1MB for append/prepend)\n- Input type validation\n- Proper error handling without information disclosure\n\n#### **Web Security Headers**\n- `X-Frame-Options: DENY` - Prevents clickjacking attacks\n- `X-Content-Type-Options: nosniff` - Prevents MIME sniffing attacks\n- `X-XSS-Protection: 1; mode=block` - Enables XSS protection\n- `Strict-Transport-Security` - Enforces HTTPS connections\n- `Content-Security-Policy` - Restricts script and style sources\n\n#### **CORS Security**\n- Disabled by default (requires explicit configuration)\n- Configurable allowed origins\n- Credentials disabled by default\n\n#### **Input Validation**\n- Enhanced email validation with length limits (254 characters)\n- Improved phone validation with proper error handling\n- UUID generation with parameter validation\n- Cron job validation with interval limits (1 second minimum)\n\n#### **Resource Protection**\n- JSON payload size limits (1GB default, configurable)\n- URL-encoded data limits\n- Cron interval limits to prevent resource exhaustion\n\n### 🔐 Security Best Practices Implemented\n\n1. **Defense in Depth** - Multiple layers of security controls\n2. **Fail Secure** - Default to secure configurations\n3. **Input Validation** - Comprehensive validation at all entry points\n4. **Error Handling** - Graceful error handling without information disclosure\n5. **Resource Limits** - Protection against resource exhaustion attacks\n\n### 🚨 Security Recommendations\n\nWhen using this framework in production:\n\n1. **Configure CORS properly** - Only allow trusted origins\n2. **Set appropriate file size limits** - Based on your application needs\n3. **Use HTTPS** - Enable SSL/TLS for secure communications\n4. **Validate all inputs** - Use the built-in validators and add custom validation\n5. **Monitor logs** - Keep an eye on error logs for suspicious activity\n6. **Regular updates** - Keep dependencies updated for security patches\n\n## 🤝 Contributing\n\nWe welcome contributions! Here's how you can help:\n\n1. **Report Issues** - Found a bug? Let us know!\n2. **Suggest Features** - Have an idea? We'd love to hear it!\n3. **Submit Pull Requests** - Fix bugs or add features\n4. **Improve Documentation** - Help others learn\n\n### Development Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/fwd/server.git\n\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Run tests in watch mode\nnpm run test:watch\n```\n\n## 📝 License\n\nMIT License - feel free to use this in your projects!\n\nCopyright © [@nano2dev](https://twitter.com/nano2dev).\n\n## ⭐ Show Your Support\n\nGive a ⭐️ if this project helped you! It motivates us to keep improving.\n\n## 📊 Project Stats\n\n[![Stargazers over time](https://starchart.cc/fwd/server.svg)](https://starchart.cc/fwd/server)\n\n---\n\n**Ready to build something amazing?** Start with the Quick Start example above and let your creativity flow! 🚀","readmeFilename":"README.md"}