{"_id":"@mgfx/express-middleware","_rev":"36-1ff404c78954f4133817bcc46a26615c","name":"@mgfx/express-middleware","dist-tags":{"next":"0.1.14","latest":"0.1.18","beta":"0.1.37"},"versions":{"0.1.1":{"name":"@mgfx/express-middleware","version":"0.1.1","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.2.0"},"devDependencies":{"@mgfx/validator-iots":"^0.1.1","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"08479293eac7ee39ccb8eb34f3737d1ee941ee59","_id":"@mgfx/express-middleware@0.1.1","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-Ef4c5RBu4PgbfdlEix0gAMUUHN/09j7v7/9uv7FMfh3lT9lR/XGK/H5fcU8hY1M5j+765eJHBiznZE+pEV+8OQ==","shasum":"a51008a4e2fe26d85f38659069604040917cf676","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.1.tgz","fileCount":7,"unpackedSize":9130,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeYO9pCRA9TVsSAnZWagAAN/AP/1mPgdUMeWwBna5gkRqs\naY6e4RpWxmxz7KrErieOr9XWc30J2ulS6job+If7YnH1NZvFMWokS2gfsIrg\n166kPRGoE5aNzIaJrY77e3A6mPtwtVElORjX2A3tGhlt7/r++Y9e7t3F3KXj\ncEpmYW9LHnmdMY5cSnzlQweYpu6oCX+qidX4KKbgAmdiOkLvRC1amMAKUHi0\n1lLFCaGNQMykFoBtsEF+8uNZJe30FfPnJJvDYEHGJUaCq5t0YTpYVsiAaQ9C\no5BThsO8vG6raTuPa7aJhyEPvFNI7p3D/UTYEGcW8R5I3vROyeSL7vB1uVz/\nJ09tucwjjc67uAhkbMvMxXYy4xNmWbfBvhIAapZZ/MexRCVDb28y6hD2P20M\nMHw3qE3CdkL612jmTJNUoDPSSvRCKuzw3wFYr41L5+KzPwiri3L6Lj3Jd+TT\nODFcwlf+a522AVyATkWzeMAv/DvLrD1/dfMvE24JIoY/yZCNcq3V9B0lhp/k\nVMV0PiOf0PskHxVhEcftv2PElNP5EmIJ7dMRfrhC9qhlYFcoqaM9Rcqsn5Nf\niQ2og9OQ5W/f6ZLiLeA41/zmI+F+gMsRThtJGZddo7qO/sYJHHe6dIbwd94L\ngEO8IxZcD730WcDrR2Wmg0ijSCEkeTi6ExdUtm3YDzw2Lo0t3oZCFak9EGHg\nyqb2\r\n=6Ae7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCVYJiN7rYGXF5SMK9PB34NCQsI+YvdYByW6AubWy4o/gIgfGNhkHjkxxoLr2M/xN5mjjUgH6EOGuq4AIJr3nsGpTQ="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.1_1583411048641_0.4047418382945116"},"_hasShrinkwrap":false},"0.1.2":{"name":"@mgfx/express-middleware","version":"0.1.2","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.2.0"},"devDependencies":{"@mgfx/validator-iots":"^0.1.2","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"e62814eb6602dcc3de619ad1f104244bbf904bb5","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.2","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-samxUYOVm1qa84jlcmkWYiMwxX+2wAo7lTsadP4MhfQAbGMtEbXQrkhfMJSSBpb3M47ngzGRD6S5Iv0inWO3Zg==","shasum":"7937ad20abc2ffa78ab5e6ed790b9c0e0f1a4fd8","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.2.tgz","fileCount":7,"unpackedSize":9335,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZhZ7CRA9TVsSAnZWagAAl+UP/RjRzR0UzvYkOPyl1C1m\nwAjf/3Cvi3yD7ZR3Qdn/2vNx798yvb0EUIgrDjVvkvGoojvI7Oy16pMIs07W\nxgr/lDRCOM9DQG5Sg03xtrmOC7or3zUD6SRX4j27kmezXTATjgndMVLYiJ3K\nK4yiNn20IFux/LdTpp5PMy5Bcj6QejLdMEQGdihlc060bB+cS+7vZlK5Dyyt\nmX7qjpZgop3FrWDahIJEGUJUqvhCdkYEy2sSpeqD7vQSsXQ7h6+Www3lPRgn\nxv5zsFxR6m44jJN1AbahAlfKTxxlYue862K6a5M939FMNSpu9setIhfHD7PV\nAus9zXIwdojAzU7uZ5tvefMiIlwjII4tebFbOYNeXHWdeFmAAy5CGEmuQumu\nEV5zJV1UyZmeWGeZwnZr+4L3i2o0ImVRGLcwkHpq5eT55NiPb6IpDLFk7Oza\nDdQ5I/EmbsYNtgdkocWciDDjuXcycZiTO+bESwSbgg/6zd0PB0UAIVqTM95F\nB7M9KcUHgu2pP7mSFwz7vp5Hms8L8sG+iyCmQMYf/mKkbGu13jhTzP7kZ33S\nu8Gzm9GsJTftRb8UhrpK3StyU7PDtJrN6eLTxOP042QZYPKojNwD66uqK87i\nM/dlIJt37YQpcGIUa5GC8Juy/iMWLRy/NAyBcuqjDz3PqqMlIIk99J+TKgVd\n20VY\r\n=bSV6\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHy2jqEq0HUa4i35uPZAMJ6jLVuhZP00k7A+aqZj2JfwAiEA2OybSmbEsCtvWPY0RcRDMK16hEoI/pKa+Iqxn6HfaaA="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.2_1583748731202_0.94153298119104"},"_hasShrinkwrap":false},"0.1.4":{"name":"@mgfx/express-middleware","version":"0.1.4","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.2.2"},"devDependencies":{"@mgfx/validator-iots":"^0.1.4","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"c14507bc91efbe20c6c937b193452785f2662669","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.4","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-EhNGYW9hwuBiWmeMnX9PJWwIuX+vgxEz68oNkgXe9gljiZkXogKUKpj7YBwEUhp+V1G1Zl+lezTn5cIamsrUyw==","shasum":"d92b72166a9ed9120d2b1665274280c1e187f212","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.4.tgz","fileCount":7,"unpackedSize":9743,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeb5fhCRA9TVsSAnZWagAAGOoP+waYKtDVvlfvrmd8qMiJ\nt0GhYgdkucOxoLu5+5NnEkqGHMt6cJLKSDk4JyMKT5bX4UbX+/RhaCF5dzY/\nVQ6uabB4HB6b0H0XpY57t2Zu/4y/kcnh3/hxPmhCkxc9Ef8Y0BxyemHQk+d7\nFC7NAtcc5B266CxjBfJvj7o5JDt2IFSNqItDGatwFSQR2bffFgGsy2B6vplu\nsKQnoKu1dGqFm/wxMqYrxmdS4u9PtdS/1mR3bcb9SvRAkANoG53ExRuRDMRp\nO8sY7kOmDpaf98ddeWEvULw+jnmNchZHFAt41bZcdZT9VM5WogAAWqzJdKeH\nnqVJCs6+eT1roNTppTe3aR2reTqXc5zWC9v53pkkSF2c3NrZL1dudIVvJBqX\nqLYob4SWBHDpQP2fhITT/oR6nnMwAKi6MlXn7GP9W3AdL85c4JI583h4I+44\nzY/0k3We9b4J5QTNNodKgNv1Hrf50kkBdKpWgeNHNzsVSJT1dnPkGxUB/0i3\n14EyNUjZ658ow/l2AuZyfCQzvBwQ30KZifpl+lS2ftqHclmuIbClHsx92+4k\nSmvW2S9WI7As5slUO0Gdu2NkCRELrnscg1jQ/7Aj017GChBnIH+113f4AeiN\nsd/K37MC/66enbhc/wwS4wwGxxnVXo1+TkIPLQa8J5VIWnnjZ0myjHPDho69\nrd6G\r\n=8yWP\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHAPQXd4j8mSExThD6kDe9+Sk2dpL2na7NxLCfL6o9omAiEA89khLo4W8c75SbrZzmX1wgm2LuWVtuSiOTAzxDkREiI="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.4_1584371680758_0.3912705367073217"},"_hasShrinkwrap":false},"0.1.5":{"name":"@mgfx/express-middleware","version":"0.1.5","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.3.0"},"devDependencies":{"@mgfx/validator-iots":"^0.1.5","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"6227aa9c8ea4e676901d1760b4fd304228b50a44","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.5","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-tAv/5hEhNpV/S2evVcI92H8gGwb0zietiGVY1WlbO4+7+miPh/AWQ4oCiuymvTS8ZzkelEmMD+LdEEP3QvcctQ==","shasum":"39e7b0ca7362b18ae2f39650be0f241ea26fae92","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.5.tgz","fileCount":7,"unpackedSize":9948,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeb8dOCRA9TVsSAnZWagAAKp4P/2fKq7MQNnAUPnnnjSwv\nSy+SCpScNWbloJFED63dAKlfpMR25ELs469TEMvjSAr0ZzcJgmUnoROid6UT\nBEzaVQWIUxcEOB09GNXghXtEmX5MX/Oa7LJFVVB6n6HWpMXJk1VhS5tQJEQk\nFuY8Bok4icmm9LhQSG24ofM9/+lMVJCfu2JDOOi+mNzRBxrOvedhoVoNEcz6\nZ95fQApcLnBK8uJIneDuTvCkgFKfmjJpFHR/oxjtgJxVAeeaBul/WWppjYi8\nBnXuC39NaF/rwe3QSyZ7spuRfOeb0ooA+hFMU1hg9XCcOIBGaklk7cfYy8ns\nZETji3EXRKqJjLXJByU7PThQfqMDUQcKaXreYYzQJ8xkg7hPqx7YSf+zyIoh\nNZ2xfu52Tdj6EQQn8wHiWmZjbGNIDJpjfmpwlqVlrx9j2k7Z/5ihBYpdFVrq\nva3486WiOp6p9VvLqhHvpUsADYxAnXy6tuo5969a+dVdk7oMaoaUlx4FhfQV\n0/QSy+4aUj5C4nbqyoTVFSVG3OJ/kkYHf7gR79ESW0kWUaX2Hns32GqqRKjL\nFZUOVNyMKt2ZivEJf/nWxcJN99V8E424w0kvq0o6cskWxfrSChewekVBhAVk\n8aQ0ffPeLWn3id3Q98OYDZxBlnAs3FvTQz3Xy5JXMCSBf/OLt5O/biviN3sa\nH1Z3\r\n=sMKH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDILA0YXLmQHGX0LjGhVwRTGBygT4WUiLmfXccYBW/NNQIhAIyaWZMEYL4wDG5Q6A4YbU4tZgWcqhTNW5FEiFdxIkC2"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.5_1584383821552_0.02718413319218338"},"_hasShrinkwrap":false},"0.1.6":{"name":"@mgfx/express-middleware","version":"0.1.6","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.4.0"},"devDependencies":{"@mgfx/validator-iots":"^0.2.0","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"72a1d24dc0e65e2df4ece919f4ad0f4898452597","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.6","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-J5bYWqNhsCL7Z+CcOcHUpdMBG1+ZmjmCU/l26RTYBCH6VFfMmPD6+6/4UsUkGPjozfJYFIz7kDRh7NkbyMLpYA==","shasum":"7b534a82fa5ed0940966d528f39ab5501e9c3fa9","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.6.tgz","fileCount":7,"unpackedSize":10153,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegyIkCRA9TVsSAnZWagAAIEoP+QC4356mx8kvV2Bw2b2Y\nOGVKYeU13W8oFbeK4K9+bKa1hQzMWHXfFBNHwela2D9xp6iavcvrmpOh02P/\nRQGgw7pHjeQSKemyzzhWk1UQcLNzrdGdAEsSaxjDLWUllg9B4wmYQdRWy3ZU\nU4hQHrQ4inXMAD22FF6GvyCFBxeXm6rze5fHoIMLitSdCa3tzR/5U6LBQeQx\nnC4Yx2Mm+fxbvvrAC+v823dDkcMujYocrOQE4BYhxKTbqcaVLrVXr+kQxVw2\nSagbkwThveVrytfhQr+rP3LwGmZEzBh9lFJ4/X6rP4uufbKvzx91X7tzkxia\nM0NE6PA+H74WTxWjssou6y4lBpLHqf1JOGcOtbzUvezGekMZAHpoeW8SseP6\njs/5w+l26m3B/dHcdgkx4X+Nr3m77DQ28/Lh9n9UGXrIwVJa5vmVo89m+vSC\nyurHFxKn72/sEy2Hn/kj9mxqp+NQPrABgDIq9tHKazMfXe18wvRPDhPCnx+N\nkb1w+INHFTnsfTboZZjDENAo5SHdCZqu9Zd74lFsKGIIBAZKh3FA+p4Lh+aX\nFCT1DE1lygdNsGTa69DWgNDmuFoMTlzUbtdz4PES3vSwksbFR9KzMIRwtqTy\njIcdcBJTmam1i9SqcXFivjKxn7tby23nU/TlsP6TDgAmVQG1COYgoN8r97cR\nig7+\r\n=obYR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZiZDSg3bnTx4Mkyyt0mCrMaNbbqJYj5YCFlbLLa75SAIhAOrHwjTsYXKSDA9S7ONOvnksjK3U4tlEYHfvyFYmNlA5"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.6_1585652259846_0.4142242916780319"},"_hasShrinkwrap":false},"0.1.7":{"name":"@mgfx/express-middleware","version":"0.1.7","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.4.1"},"devDependencies":{"@mgfx/validator-iots":"^0.2.1","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"58e232ef3d2b7e0246e6424427cb6bd0bc3c60fa","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.7","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-dQZ4jh3gZICIrWuMv+/fVmEER37qxdXn3dUaYQEx8KuPdHsNv/VcqMVn8mh+VC87rs96AgdPwNzBpW/VKM4eNg==","shasum":"0f2f8bcebdd58732635c0227af9367c1e6bf8340","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.7.tgz","fileCount":7,"unpackedSize":10358,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJegyd8CRA9TVsSAnZWagAASwMP/2GHtHSlWTIFz6JdaMKV\nzAsAbbuY4IDkRETMsgGpHRm/WPGtH3x+Td1ngBPi6i3SimDSdrcOJN+HIHd7\nOcpM4+dblxyLAsTjgXx0uhDFNmsE8RzoKyFa7xv7G3IYi9irZXCCoi1dDyLZ\nzEdj1ZDqBRGwjU9fMekuHmpJkhHXA/Z4PIU8E34tryAwgjFkuu75tna+pqh9\nqk7XmVUdq/u+/OzCs6Wk1Kbd4l8clMd2wvKBuCTZc2/9B2MMf0qrZ5kUEiTw\nhvoB567VphbK58FGYVIKR39Zb6MrNzyEtNrjegkkDUJXQZk49e2MrzPFPN33\nWnxBab2WfqsC6b9dWJ+mA86bquueArkR3TnGMh+qvvJ0CLHpusgtWVc7JveD\nRc1Ta7UxDooPnU1BLoFjaO1PevpKp+4nUSYlFtUu3oWtJ/0dKAj7f30pn3E4\nK6NgaEN4p2240wjx9gy5jo9ol+TotM/6ni+U+swHMul5yotEdIBtGSHM/cgV\njw07rLdDhL9fn9ipjrtOFBgokpCZzvJ5u43yUkrgQmBK85JGlrtKsHd26w/s\nTGLFAlEtjfvzqoYZrPEZ/ZBwz4XN2BJyjImGpiL0lTjRW7jERryHbv4Zgk+S\nc6hMoifLnIXqrtcNpBCiGWjtnRDjn0THNBfP7E8OCAbUR6PAuFJF2Jx6ZcFJ\nLsbj\r\n=15fB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjGLnBO4KizhKV+HSSfwn9K4h381kWanXRoRPfmYPgdAIgDLofaf9EKX5OIOc/tVq4mBi8jc1qhIEbElOqnm2N3qY="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.7_1585653628614_0.900666923174763"},"_hasShrinkwrap":false},"0.1.8":{"name":"@mgfx/express-middleware","version":"0.1.8","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.5.0"},"devDependencies":{"@mgfx/validator-iots":"^0.2.2","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"d2e981ff3b00192b3ee0ada78a848b1daf21973b","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.8","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-cmybcEnqejvfKHwryx6DawCSw6ZSw/q/+hyNtEckI6Kl/fO+IAKg8X2LP7g99Au/8VxnhHcNTB3QMFbQ75bUQQ==","shasum":"2cfe97da8a321dadd3bcef0fb16e0cddc1b7c96e","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.8.tgz","fileCount":7,"unpackedSize":10563,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehQY5CRA9TVsSAnZWagAA/EYP/1oktRceC8A5hTCDKP0H\nVRl9pFTTsjtDob7VbCupX6FDkoC3eNt60y6aEZ+6psH7QiPtTIpuYr3YJ8h1\nGIerf/Tbr9Mu8blVMkp7nrakhRMe7eDfsR3sfQxo10q2SrZh1zzaU8NABhwf\nPOOTtT9EdvWXBBZFSGqDoMCCleBKhD18hg8SvH5P1qe8Kurk6a5YvXihP4ry\nAJDWOCWjEsL+UFmlWJ9+pkrUdQHrXPIovB5Qgzznt1SMRVEp/snelQAPd+D4\nj4TsNcOitIPpstK/5y7rtYvwESUR7EqWdfaFj7cufCVfZtHa53JMeM3dNjde\nD3ndA3pNM0Wr5yCSArYnLfUabOctD912bVpes4Rr5LigjIYCLhGvFsmYQbJg\n3hIkClXxYb9C982txuyeSaFqM0U3iXIcKIeW/7qGEc2z7UslEqlBd3EkKkYx\noVdxwR6jtiXdQZf2bVpiMzO5EqPh5JTP9KqmRBAQVzjAZ+gEy2ufCfDVdq07\n0zWKrvGTf6hVFZCSfrMEgjkaHQrry+Iye+BmIplm2pRpI6jFaoRW6GiU1PIy\nYUtZXpTY2avbw32SJ68TIRrjoqRVfoMBN9hx9UT2uwXK2/ZpyOVFRrfp8JY1\nrF+2GKRPxTRwSXYfCiycigH3o8H/pCefj1fCqGn0NOwKyJxHbhYfudGpkl3X\n7EZr\r\n=BDBF\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIG2s4N+OjKtJSgtbbhUl4+AP2GxdY0zV4YZr1A9zt8YPAiAKELAE21nIW8MCF52Md8U5x3WsROwp2ZtWZ14NQB244A=="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.8_1585776185239_0.9847918103000337"},"_hasShrinkwrap":false},"0.1.9":{"name":"@mgfx/express-middleware","version":"0.1.9","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.5.1"},"devDependencies":{"@mgfx/validator-iots":"^0.2.3","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"b8c5dca9ed8ee5b9fe0e1e62267d42f7dcb921b3","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.9","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-5YN49bg6ql3U6jsvXHDtw20Pcz7YLwBnSv4ml4Fc75GajZJPQiE4h5xjd0a6O+4T0WFekCZkG+vclxoq+AkKnQ==","shasum":"3861a1e22fdf7947757b91a6ea764241f080c63b","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.9.tgz","fileCount":7,"unpackedSize":10768,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehYTKCRA9TVsSAnZWagAAxG8P/jWC0Dx2TD4eZNdhfnqf\nDoCOtv3HJkJ0bOtioWARPnn6mdf8fZZIVhQKCWODr1W+Ap9JSs48vnfsU9gx\nURAIx8NEu49SuHid+axYPxmWnJ/rx2vjUghlVpC+lu9ifSdQ9z/z0PBZdb85\nm9srfhJybhXxhcHoiTBz7mqm9VUgJehXumT6EPKypP0A9k+tJ1jPMM+sKPwX\nmv2i6XaUYoBU1jgHXTx4bs9g7boh7I+l8aamFTIdRvmWVByxZy8MGNMr978x\nZhPFUS1VwRcQaHApiQLuVItDWRFuzoFjAQ2khmj07fbiYoc+3Q74s5cA/sap\n8Z2ezEU36PZ9lh9f14zYbz23ldhJfG6Zr0UBhy4qlxn7nzMinyd2EJP8pGIF\nRiU723JqKfkn5X2V85/MN+pLvoCIEJdsmxS4nZRqlKEyOv6chuOKXPAfd0g8\nNNVSBj0yGO09bOhLmx1cjNSYMnD20OVeJeUvPmsz28GI1z2sX2hox/1L2bt9\nMhL/eyTCZrV2BPpoqbglvo9kFUrjOYLtNVCI/FbwZKGfE3Hk+y21qIjcKv70\nC+5PQyyHZre97EnyIt8Ov4szQ0xHqcWLbmX9AVpeq2hcNwD8dbWtsH6oB9/p\n0FN1fVf7O5lopm602xh1Z3Kj/7DxtqRgLmvFc2WWwi4gSsupoEcgZJyBlfnH\n6ARt\r\n=fpsL\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGlmADz1/DuGLog3/Gs33QGeWsiAjkCcdND8jTG0O2ovAiEAsGo+p4EwKzBsSic8HcbZlYKB6yq+Zei7ihYYQ+4Y/OU="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.9_1585808586439_0.9151047905382179"},"_hasShrinkwrap":false},"0.1.10":{"name":"@mgfx/express-middleware","version":"0.1.10","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.5.2"},"devDependencies":{"@mgfx/validator-iots":"^0.2.4","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"2d94c42affe84d4bf217e5989314bf38c0c8e94d","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.10","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-DnnOiLLGcul/9+8lWG+UIL1K7SaGRFRFhZ3Lep2CDjj8/7+pPijjK6l7Jks4B/hQKMtOodqP7odoNAVy9jmTWQ==","shasum":"95e7187fcdddf72328cdfa53514a8a7f9db45b50","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.10.tgz","fileCount":7,"unpackedSize":10976,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehYuYCRA9TVsSAnZWagAARt0QAKHKVNT9lzl4DWoh0EcW\nj4olsvuYMEd9pagpG1TQocYatpCMtEFsihmxIeUgzGTX2bRdt1N3zbho5LfO\nxLcver+rlpakN7yAse6tQhzSDxwBPZJ0/79UFB69E31vIl0cX2JVCVEQ1sxy\nzeXQQGHy0vgluXV7EGq6Jas90lwy1/WIECT7txtfUfmCZKK9yJe15ac/kMBQ\n8e0lK1Pnrt8GtZeGehpbSVDtC7LN2JWvGnZjv+ng/02reWkGBD5FNq1yCpCV\n9By/lEcbd+BSXgFD1Z+yHno9qfKQjeHP7p9/6DVjOD2yQ5YgNcjivHeGM5P8\nM727LPQX/HIb6pe54sfanRG4DIV0wCxZJ264DVDYoIr3AAp2Vh8EFormSxVX\n3b2I9M/5QTQGUkT+7A+al1oubto1Pen1gGMZZR+Cm/Z7LNd9fDmIz0/IvqkU\n80HoejI0IyFT5YGdf7/F9BnFESY7QRbYIYiNQBgEGdidVtqkdbq5oLMz6jUx\n2QhgkmXLl3dxlJX0VeFaxMlmnkC3wbNbJfi7sc3ITRfnRz5VSPhX2+7IT3Gg\nbw5MA6ZbICVGMgy2HAp7aEOV7dJawYII3x+Ost+TEffYz/X4nlZjV3Tn969V\nWk04JhzXGaR/xK3ZV9EoW2Ap/m/fbXQun6+cwF7dvb5njWUqzh+AzlOHmrZ3\nM5Wv\r\n=/goH\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICRBN8omhAJ79UWEegcO22JbHfQQ6+redEGqvxOIg9qgAiEAtv6xvkotQ7Ey6XZ2YKe7oTyFp3qdUwfoPvTsUpzjLRI="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.10_1585810327739_0.9887500319482154"},"_hasShrinkwrap":false},"0.1.11":{"name":"@mgfx/express-middleware","version":"0.1.11","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.5.3"},"devDependencies":{"@mgfx/validator-iots":"^0.2.5","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"24dcc2ca860ee0a3f7996d793318aac797968b5e","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.11","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-75eXhnYamc/e53PVm1VK50NH0dwgp0ileTIP46G3fgni0cijz9wVVB07NBPdmPT4yPzjjV2jyTPSIGZIssPHJA==","shasum":"36c44c7459639654bc660f311551337aefad312c","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.11.tgz","fileCount":7,"unpackedSize":11184,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehZj9CRA9TVsSAnZWagAARCgP/1Sb3abIhUCje7Hj33rw\nP/z++SYkC8YyVBRhCOfqD/eOT8pHcqFu+y9ccmhVMCQ4TxD1mh7M5Rhf32dc\nr5jxXBfu6hjMwbPZIpdDjlSdl2YKd4MfodDlBvw3YwXZpVoJKa0g/+MJJA8w\nhI2zBYbM57x2LaPHCbZ1YOJT6mgpTmZULIGHU4i5MvCwY6KjcM9EWqAqtpWY\nfjwznwtHRi585HjXf8NUv+4vZ2xgpYXst9KWmkf/OEij38LWLE04kl6a4E35\nPSr9CKos4AL72KIRp5RRQ7uGeiZMQqjSNkhm1Rp1UOlB8jMI5E/DXhN5BF0Y\nP1+2qA3YeGqJN+oFi9K3miP1wnvzUCe2CQm539P4fUVsvozHj/hR6ZcxSTCv\nXZPr9vl73Cg5UGzSZMR/GhJJipkiSc0Ext9JeGr0EOOaRkFXtKwqbzpWg9f+\nKD9Caa3H8ny7mZxjp0t6FXI1mku6mAFRcAjLYxBlw+Fe75admhLSTOrJ9Klq\n7Mgz/hVXotqRBJBQWachrQZsTVo3G3oCO9Ibwsdfq2J12Ffa0xqv8KzQyjel\nGJWdUElQju2whyYK3FeeaaR8e68y43+qnO4ujxB9QyGexTILChdtgbA9gp83\nXF17GaDu8H7id3IdS1EJFQUfABweC/MMRQvUuiX24p+S+eswle+pvL0GOhrU\newuh\r\n=VZS+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIF9s76BK7On/fh7Lk+xu1VCuOP8WRn9GhEu+/CYUD4RaAiEA+6/6A9W6jpAIeprZv4rim7unp32TvfB0XcAYhX3wjDc="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.11_1585813757019_0.9221817059945534"},"_hasShrinkwrap":false},"0.1.12":{"name":"@mgfx/express-middleware","version":"0.1.12","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.0"},"devDependencies":{"@mgfx/validator-iots":"^0.2.6","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"15ba4b6d699e5e9d7c88bf07ed4ae3ecf5eb373e","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.12","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-40iV7x1L2ZYECpA++UGNzEsY/oPtS3kMLY5VoLyYz46y2C1ld0DJnd7kTLBDue9Q7VeXxHLhwh3bet76cxvNag==","shasum":"0a309584f2b45c6faaadd66a6370c6f12ce1b517","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.12.tgz","fileCount":7,"unpackedSize":11392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJehzpGCRA9TVsSAnZWagAAFXgP/RD8mpDW1oRgA32WjONF\nqW3BQcFJZ0pAjfW0KmMe7B6io6452MY2SZYboFY3GSFeY0DK8IiX3GnSj4bG\nYOLKQ0X9CYwBHh6r1nAeOJ0xZlcd/DExEtWk93bRccpaPl22gYIw0gDjlX8j\nuRhj5nz5e9+36p9mET/Ch4pkX3/E0V3tEXHnIX+bsmvaC+VYXcxtEN9kbGG1\nf2waSCCxMiWkVX71UQq03TulQ+96xq2yzMF5iQGyusuF6OB8I1OHj985wyVR\ntCExIeUhSGPMuv1si89iFPWZ2Ij4izms7EIRzVzZuw3rp2fwcRaaa3GBZ5oX\nYfZoXXcr4ZuoL/9AUPhOZRNN3x1KupOqJQhHmzzshIkyTL9yg3IRNsyM23UQ\n5fx7rcmuNKB76+38oW9MEo8yT4/QT/WWB1ojkjM6cwn5pEC1KfBEeY5Wc3/q\n6RN4BDxeU06S6WX/egndZDWZIcVwcP0ipXdW9+N8XyinwL1OnBT3GOcivjTA\nl6gKLN9HVw9djoAE3Pb1ruWUhUcVIkApzpnjB4RZW46X1iFh3sBgE9s6966Q\nS/aF1RovxavSkB7jpJBe9nOorQqcflBJqQiSHgMm3APVLx+SaLI5gR40vcqO\nAm5YH/HC42tBFtdnYbu0FT5GOcXm88fobnpOQy1EJuaCHhmJJlOs4WA8lt+s\noXYD\r\n=4AK2\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDct6cUo5TT4s1ZVRQEWhXwwJk80+G/lXG2/zarggLzbQIhAODM6oCybFC+TVRopo8cyScoQ0190JmG0+8LRbNm+V/u"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.12_1585920582543_0.8586467352042335"},"_hasShrinkwrap":false},"0.1.13":{"name":"@mgfx/express-middleware","version":"0.1.13","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.1"},"devDependencies":{"@mgfx/validator-iots":"^0.2.7","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"635d0d0d60c6b4cc2fffa46fd6161921ca4ade35","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.13","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-rwE2BM/D6oebCPXytyY7ntccC8D4BxO1JxpNfKgCaP9yMihG3dP+4SgxKbTP2T6Boi5uDrLDhl3mXIcp8itYTQ==","shasum":"50f5bd433e0f477acf616051e9917e7c53acb2fd","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.13.tgz","fileCount":7,"unpackedSize":11600,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejaG0CRA9TVsSAnZWagAAkYkP/A40Fwsnj+kcGw0J/Fs9\ntCzdaC0GG8BVYrNgFwDaQpPGd2+pJol7u6V+Azm5iwOPslYiqgmPBrWpMrfY\nv1eBsD8diUDozS94+8mQYUFUnHKkmFR2VuKy+XD0MFVuFevFJA/R6LLS57ca\nhfEEnXIwt8YGd1KLhIL2zGt15qYtu+4HdDCCQmnVsCA4OR1PrL/aiEhQyBCe\nPEeRtoFa2yxiyp6gxW55tS0HD5JAxj+hdSOzExXFYQxl+bB4irGCRRjLLsD2\nxrV4UrxOUGYRmb2XvWHBKZSfU8bOW4WaLm1WKvv7UGAT0Z8Mfi4GDKZ0OfsS\ne2ZBWwxmo1c6+hvdkT79BspSbSSP5SQkJLoGQUAu1OBwlmh7fsERA4p3mHkb\neGq0o6rH7Tu/No2ZO6al2QJCnqGuBVmC25Ut2UxWG5ooK+0EQRrfhdEwyrdm\nDuGar/bKk3fzU8QD5+q6DOaGrXCsJKojqdYjqN2Tm20nJrQdefWEQPOyhvgW\nMHSc0d7VP4UEKEeH8WBo50i/MQoQJUXRz9Ay1IHhE19NOTdJM2lWiPZ4vdJn\n01PKbhgP1WSpW7HqkJKXbSygEFalErlnP9pSFqedPYavyPK+UO66GG+4EEZw\nHetSk4qXeu6+XEUybERN/Tedf7X5q+c37NCrmD1ll3FWZgmQwyeDd6z6m6VO\nt0B8\r\n=Y6v/\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCb0rr0AinP7zTrpj3wDN9ea44r6xpADjUD3WpLaivDjwIgKHC5sdcnaAM7B7VdfcDb73BZmWBxa6zEJZ5QK/kjSj4="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.13_1586340276029_0.8271701544019212"},"_hasShrinkwrap":false},"0.1.14":{"name":"@mgfx/express-middleware","version":"0.1.14","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.2"},"devDependencies":{"@mgfx/validator-iots":"^0.2.8","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"11172205ebb9da77017ad9a49749579efff4782e","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.14","_nodeVersion":"12.15.0","_npmVersion":"lerna/3.16.4/node@v12.15.0+x64 (linux)","dist":{"integrity":"sha512-HKL36AuJrFJ5DVGbrO/YOX4EdR0RzdTFspr0SxtlRr+Xe6v+FRKyltku9NMMPKF5NHSouCBPVHxIr0d+RIAyGQ==","shasum":"db5afa617ef2f3b7c7cd191f663a11fd212b6a0c","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.14.tgz","fileCount":7,"unpackedSize":11808,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJejh+CCRA9TVsSAnZWagAAC7oP/0Jtgti1tmQaI69r/0UW\nkQUoLH03y+FBaYNMGKFTtlJhrOJlzjLddafhaeR/DQTug9yhHa3/45DQ+r1b\n7mQBjhS3Rkm862QEq9ljSD5XYH8+Jq6c5Zd+H+o9dcTqm42+kVZOd+xfrt8Q\nuydZynS16XG39nKZsJMm64g4x4qAB/cBQ5pWC+OjFCzLknsCIJ4Pn2AEbBz9\nRoUQ+0afF5qynWD72rwyqVllIMgEJDeQgKVO+yl6KRA/QYfE8uSR4kbnqGHL\nAO5MJUYc7xLUgH4nbQ28haJDLxqdCgX9uLwnBBQCfixZ+pGXXqmkIQaXzGcY\n0brSK8n7Ea9e5sCcEH13gXh5tfFhZMpHiI2w0e7k57hKtAkeh1mAbb7NNvsx\nqaC19nJAw1RC/ctZn/4cvj6yigvpbNFZF1vw8cJXxUrOKwQlePCTAXK6DMbN\n9KRPQ64l28DLcpUJhmmDQ2lARV/WKx82LjWhuSt129S2XQH/9mI98LQkS04t\nkd6g+0g254q7XZowp3g7GFt+Al4/lw5GlmfhZKdqZKhQGeZP7cYufqrGoZgR\n2DGyKSvKRip1MU2wNgSGW51SEG8wBx7tiylAwNwsqRSeT5oewyzLUgQz46GQ\nZOcuaOjDJ4gPpSu3x3wJqqinmWe3yOzjlqPpWhkoO30TbxFDCFIZIrUMqNMd\nbAkh\r\n=NDZg\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIG41q+E+RxeyqD0G1wBCeFSVTpApaPabtrqkR8ifYyYOAiEA/BPCvfoPZKtK9sfjJp7hVDtDiasvlbVs0Je0kJ7FKUs="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.14_1586372482537_0.5207538544871493"},"_hasShrinkwrap":false},"0.1.15":{"name":"@mgfx/express-middleware","version":"0.1.15","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.3"},"devDependencies":{"@mgfx/validator-iots":"^0.2.9","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"f6520add9e4d9ec7abad887cdbaedcfc4a3b2030","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.15","_nodeVersion":"14.1.0","_npmVersion":"lerna/3.16.4/node@v14.1.0+x64 (linux)","dist":{"integrity":"sha512-kQXxV4Sv6L/eyxxlnGOxKptmC9cG10oPZi2HGAnic1x/oPLMObh2HyJPHFpj8gOJ4rJxNiObOxtNAF+u5nh7oQ==","shasum":"26cec24c70810c456e5cf9972045812e1bb5e13d","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.15.tgz","fileCount":7,"unpackedSize":11902,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerEONCRA9TVsSAnZWagAAnskQAKSS5P0NYsrCmdl+1qfk\nkKt+icdRCfKL+UMiv4g/0dh4PqCOjSxPqNeAGEgmct7myEphLUqFZcW9chgb\nLstad7eWm9dqlHKCqbsip9QN+iI97RuV1Ta/Vq9ElQMmAqfykA/k05DDgvSj\nCMbmN7/0s4L942an2xh9bld7BNeIWefvfR+iI9YruWFbPhouQJ9uiduz5oTo\nxempZRujCPkqg0AAE19VQkPavra+8TU+CY8nHuu/pCn+dszONkHp5K+P5shP\ncVZQQML0hsdOUubO+afxylmiaY2jYZ3saOvAS0hnTya5OahOi6PHjAzngyT8\nSjASG56GnwUAmJ+VIrWVm9eE0NHm9/BqEsLdDgn/fJxBvR4P9WxTg7ncNWeO\nYdIf95p02j5hm3XyawcOIuRuiiiiWCn6IfarygpIichmd4LxGkzqFNpXIe7Q\nXrCXfKU8BHp36ZdmZVKLSn9a/UlzwEiYq6WHg7fNhLmL3UQ0cO3mYMu2J5jj\n7NdHbODXJJgFCcx6SH375lc9DAU4OE540KLPoDZsiZH7bl3dioK5tq7pYxid\neJhAwX8+o2EGX80ZAqSBWOEB7MJwRs/k9AvsIeGuq715jjjAahRbPL32J9tV\n/N+uHbaClZbFgHl9pYFLAcGlmEyAmqWE0C4fy6S436UFlSD4Fv69j47RhkXR\nodKW\r\n=bB61\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIFXLg3+S+Zo97YwuFg1uRy837FH5W/d8Dmhxq5WGMlV/AiEA2evImCtH3ZtSqZMKPTkMTczMVnbd3LEVD3qZgHjRJy8="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.15_1588347788687_0.933869250889239"},"_hasShrinkwrap":false},"0.1.16":{"name":"@mgfx/express-middleware","version":"0.1.16","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.4"},"devDependencies":{"@mgfx/validator-iots":"^0.2.10","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"126cc3d108107d365904499131d18ceb558ff99a","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.16","_nodeVersion":"14.1.0","_npmVersion":"lerna/3.16.4/node@v14.1.0+x64 (linux)","dist":{"integrity":"sha512-q0/n8b/SM4fHhk9KChcRnl/h291z9r/I+781OkG6YmF4d37KwvE7WKcDhpczrnpM++x9ZQqiYjQIVj9k5ZeL8g==","shasum":"6f958d62e6ee1a98eee949a3ad8d376546ba6efa","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.16.tgz","fileCount":7,"unpackedSize":11997,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerEnICRA9TVsSAnZWagAAa24P/0Tv5GwwoSttl/qctUt6\nmLjSL/U+afBQbRK34dJTmpdd6AyMi3GuzpSvmlepDa5xfy5BdD+tMFYf7BIi\n1wM7Qdkm2lGXlQf5d1yO2AWOlINbOIgwGKHfWFetB5hH30WtuZPwOq1BOauG\nNAWRKYFuHkuaejqiI9LABTaPCWPpPZx1XhcpKG2kdTdKrEWcXEi0HpXT7d1i\nm/fG4PeQOUxFPpV0xMqXuUYnmoltWtGyVuSSQRwmHgfWNyK8Cr6mW+3Xhl4m\nClM/4iGTvHyS3Q0EAUjTS9SI02Pm8mBrz9a4rxW+KHJD0EJF7yPZv2cemq7d\n/NvHkpk6sv2Drgu4fEaZGMpxYAyGgUwdu3n5zUF8+GJKbHrJ9A9D6YF4dLhJ\nT0D7MNRgqb/bV0LwPlfqYvzE/3WIWdpSLCiLeprqrFFhIY85G+Jmflxh5JrZ\n1VIAg0jBriu5oft846z5iJPlbnqxsh2SNpZqP9OdxOOL/a3DEafDgtUvUVwh\nym/O1RAM64CuEZmPC/G9bMhJstU1oW6dbC3evPEv9Q38u3ctQxcZpqmgrH4N\nzDm/aPLR1JlTtOS+tMxSDvVxxF2ANOX9nAGjXZh5j3Dppuwy2aR2ID/nNCvG\nn8fVJJZB/1orhGnkfqKuE8oWYthUZuVYiAV+u0O+s9tsjtriHCTBZsdgPFpN\nc1A4\r\n=YVYK\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCoD1mDIdtfukAilCRaAOa48OXRKJCCrX54a45Ww5FuKgIhAPECmbT/0ijWFAKNcCtKPjXlaEhmnRDcdfWes/tETnK2"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.16_1588349384493_0.06759768631418894"},"_hasShrinkwrap":false},"0.1.17":{"name":"@mgfx/express-middleware","version":"0.1.17","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.5"},"devDependencies":{"@mgfx/validator-iots":"^0.2.11","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"45d90110f854015a3024a73d0db9c0ec32185d27","_id":"@mgfx/express-middleware@0.1.17","_nodeVersion":"14.1.0","_npmVersion":"lerna/3.16.4/node@v14.1.0+x64 (linux)","dist":{"integrity":"sha512-zQFzFrJMGI96gQVGBI6ZVaiLR8x1ExIfrDwRDOOlW1zdHMk6BZu5WoQsSgonyz5LN/ty1bp2LDHAUntUWgd2jA==","shasum":"85c8bfe7d2bfa93a88789f5fcc89e8c1308b4d9b","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.17.tgz","fileCount":7,"unpackedSize":12091,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJerFD6CRA9TVsSAnZWagAAM7oQAKCFTGgG5ULvGCkaqsVP\nP7fibPVf6hgYh/I2r9i9PKRgBWHstXLWY1CqfKjBkZ7gvtIxzZ5M+0FmPAAL\nosJGblf8rveRksv330zkScm1dI5YSvLW+8mybtkxUFJXF2HBnvqzMBcsfA20\n2ZJfn9OPSnNsZgo+//3DpwGMI+I4CPemaLmOB3lXoTj+ylu9+4LGk6hdxcSR\nrrd0rgQP1Y5vlCwi3DxAvS+6IsvpcrZhW9JrhRGIMDbi9xvg8u/kYHnDO+ut\n7Sis7Sa+U+9GzgeC+PrNyHR7KjlOpwGkPjUKoQBERa2bYrHTBbcRTIJSy2v2\neujYwbC5RQ+Xo6WkuD9GZ3KBdMUybL9SAtlTILmAT1BBMeRWd9nhFfh52LYH\n9hB9o0aRGHjj/26Ty22sIUUo51Yj2XVEon/+phAkBRnhrC/l3RmlRk4H4/V+\nJJ/D1VIPJYpyPOX6cNwyuc5hmhiZ5BxvKLdOSoR8+0VqdoXC2JGNMNTeiH1k\nyf7mR+9mE7/R76hFZpW2VzEj6ecypzDgRiMHcnAvOKxj9+SxNy4ZIzdlRpwG\nz4Jz1w3L//+g5ExBNi5nxKukIYJ3bzbE0vM3l6pL8rf7Mn+gtDOtNuUobCML\nk/CIdfPE5Kc3VNs7qsDmwmBmMVZZFlUPHMu/F/478P0KDdExwsXzKPoqcZBX\nOd/P\r\n=HQp+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIHJgqHPofTkR2lGarHir2N9nfDN8FEhwLA6xwWnHGlVpAiEA9Gvvc6Tf0XpTQSCXu6KZEBKc8ZWQ/TPraC39r6hOAJs="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.17_1588351226579_0.4853432200317094"},"_hasShrinkwrap":false},"0.1.18":{"name":"@mgfx/express-middleware","version":"0.1.18","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.6"},"devDependencies":{"@mgfx/validator-iots":"^0.2.12","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"df9fa5589e4c78a1e69000b2c9b294833287b320","_id":"@mgfx/express-middleware@0.1.18","_nodeVersion":"14.1.0","_npmVersion":"lerna/3.16.4/node@v14.1.0+x64 (linux)","dist":{"integrity":"sha512-Aj4MVg3OsZ7552Z7hAV0ux04e7sDB+FzlcSFyM5Ewv8rZ/Bt3cMWXLTZz1DxmpMugnMgYoeapTM0FSKY2FLuJA==","shasum":"0ff2c371d343e0664afa200a218f7b7bcb24784e","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.18.tgz","fileCount":7,"unpackedSize":12185,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJesYSACRA9TVsSAnZWagAAr9wP/Rl5jpEvNEWYMcM2SImW\n9d2NP4drkQvp98qmGjw00cmWZ62lpGrAaUUIpPAaVbwoXTkSqxAbH6NYXYhv\nypdu1SrDD+HOBG4i14eQhPiLDL8iyJD5hakQLu0WDAAajf5zzMFXrixH8e2C\nEs/AaIFbqz2oLkXjszYb4iL51NEb96X/vrKHC/1BMliXNn9i/J7HJHR7FfUR\nJanJLfXmU1qkK8I3txrke1XMYQ/TLJwpBkx1e4jlLYDpXA4HsuAeTn1EBpdN\ncK682XrKSU3nqHAZSrcSx4qOVAfu9lwAXmKFc5P2Jlncx/Oe6dR0KjSVwpH+\nn8EEjgd51sltKLc8a0JEspCH1K54GmqQ+o3abM09ZgcCZQObriA1cedCKB6c\nmttcVnnFviFWncIPuJ2J70fXXnBmgJw+J9eNQESBRRA7WwpV+LIm5uv3cnfd\nATO7CeJ/HQZqg8ksjhcV7tohNVtwRcAUAK7pSXdk4hvdTvqf85kTEt7AB7sx\nromGKBcPGqYN07UrkIuFskdMoAuyrWz2/9P7ho4SNX8y4i8wiQhaQqJAyrC7\nd1RUPxkzPu0KAIE40OD1ML9Mc4BpiqbHBEuTfKSFMBCrvdYr5nNaSmYiRz1K\n/CyqzRwRgPJVPprdF6ETVPrj9ptWFcCAZ9U8azk/knfPbGe3sjSwhULy22b4\nIDlZ\r\n=wtAC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAIACxlKMMXDEpZbt7qS4FXEoVM4846R1ZW52hnZ2FPWAiEAtGzTlVRuj/AN2jMUMbA+uLKaB92nmHx+EdcarU6tngk="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.18_1588692095764_0.28756739168353884"},"_hasShrinkwrap":false},"0.1.19":{"name":"@mgfx/express-middleware","version":"0.1.19","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.7"},"devDependencies":{"@mgfx/validator-iots":"^0.2.13","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"727554a4f702a9c468e3fbb4b823ebc9ae45e633","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.19","_nodeVersion":"14.2.0","_npmVersion":"lerna/3.16.4/node@v14.2.0+x64 (linux)","dist":{"integrity":"sha512-1P6aMM85LuNiPVzHRTK13add/8w8OULELYCV/d6gstphvxLhNZ288wBdA5gPQIXz4U8WCLJL15D0Jub5Bajiyg==","shasum":"9b2129193a0da41d8ba5496305b5cc5752409d34","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.19.tgz","fileCount":7,"unpackedSize":12279,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJes9x8CRA9TVsSAnZWagAAPVMP/iwzemhkGEanq5Df3B8e\nYtzMUUqswTXjT0gyksP7/QTm/+VyinyTZouCJhEYd+nhU2mofkbez4K5exOZ\nLXcBzSgsS78qAZII7Q88a1zP5ruPmbAmKYEq3MwWkLxS6QQ38XFUzoyf6npb\nyC284U8wz9lbZzTNZw3fL1GPAe53PYdSYY+xsMcAxBvT8eThCCzIXUDfqrrw\nG3Urvc0QCxkNI7wwNBhp6RbMasPnexyfbqzHbf5y4jo4KHxJGxYDo/QLdsX+\nxdk2eMoA0VDZ5pQLoZJ8WWNNnVVbZXRdER9zzi22OBNGics70d6+gjIfkwiL\nOYAE49Lh2s+ezQwax+vjq7TX7V1SGQuL2pTWgKAkU31FiadWjOuqfICMKWl7\nimj+OQGUJhXdzga0+JA+jj0nvhWQOBPAx0sCgQ4tCFobthahaBzWO2VQaJaT\nqmjzLTZUWhqPObr6uhTGrb4GtM8znm3vKu2qQEF08J1gQNxQIWzUs8HDvJX+\nSqQgo5AxipR9i9xRanSZgx3nQ8frSQXjMleKJmrFcOc3PptqDaddjijHfi+i\nLbKqMDRleot74sDZd2uAXZiRjeHi/sNQYpkZPREZK9Hf0Mvf0ShAkDzNEWb2\nwyD4mqH1rjvMOa/lIS/QMUGRkVuGalWA3ygfRuSgM0JHQzIVFU4fMArdVHqc\n900L\r\n=RrB3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICTh/A1CVfwUegFuZ77Q0sdyWHMX4po7vpwuu/3WfcaKAiBplFXL7BnVspkDi24AeZ7JxgFVKujHG4sk/G6vIAguAw=="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.19_1588845691861_0.053146903517291344"},"_hasShrinkwrap":false},"0.1.20":{"name":"@mgfx/express-middleware","version":"0.1.20","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.8"},"devDependencies":{"@mgfx/validator-iots":"^0.2.14","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"2ac179b7b5767c471c90d4c43dba5840313321e2","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.20","_nodeVersion":"14.2.0","_npmVersion":"lerna/3.16.4/node@v14.2.0+x64 (linux)","dist":{"integrity":"sha512-5XZ88oNpuudgMpH2lvBFRBapoIdxOLLPNdMOKUClKj/j+HFHY6Ll17nStjiDB3ivfteboriqjkEa3CnxoxFRag==","shasum":"219c7b169a3879afe69c0f14f6fd7dd4a92e6fc2","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.20.tgz","fileCount":7,"unpackedSize":12373,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeu9KoCRA9TVsSAnZWagAAljoP/1PB6d0xjbduZXioEnu+\nlw6eLgGEizMN2ELCxJpZr75y5X9pBLDImnHHAqjtMdYjdd3iXxahjRxHu7Wz\nWz21urr0068A+TmLrTbvt5DhEKkXgbYhNmDKecAVvOkQ5tltIc7BAopnJ9Wj\n47nem5/kktjoSL64jub1idQ/WN5RtIufdOYIz9y0JYgYXrTYd9YMEUaieWsG\n8nOu2ehKZ9jWbOKlTdFIeNsAmSDDkbT/W0jH++ajskiav2pcw0yz2J4GUbEE\n1fTS2wlMtQjpEFeG/CCHo2kLGHwILGkaHEu7bMMtcRlwxhVQ/axfHf0jTrDP\nhOvSN86sVKOJzoYOLW+3HNZds4FBbrlOQUVDa5xQ9IEJBrhI6OgE61hrEhJM\nsyIBNfi1mAsOZ1VueG/Qc09gynH6I/rmRdF1qQAxqAid2KYAVJ884aIjsROZ\nBffjkuY/KSib+MS2ura3vte7cD0LzoaZufoJKQjdQ6Oc/bZXy+tPYq3ibazR\n7SfQB4iTCidadymXjA0k1ExS+9JlsWEnQCQ+hiVI+mOvJiHBXUKmQVDNZNHN\nfqgJTvRKEfY2klKrdV2991Z9Qp0zpT7pL+zXe+b858QJOQK6N370yw2x46gO\nCesthw6GyxSOidKUzo3rZEFSCXwSw1EZmwnl193VTeBe/+LaXR5KwBZyCJm0\n/nn+\r\n=i3Uo\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIHIpk8y9/HnqsV4W+pqkco2vI6AX0HI/0wLdrMcrDAm/AiAm20kNNXUPdWpX4Y7f+P3dxCZvxSTA01Q6o5y7gsbv0A=="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.20_1589367464365_0.6153748257428442"},"_hasShrinkwrap":false},"0.1.21":{"name":"@mgfx/express-middleware","version":"0.1.21","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.9"},"devDependencies":{"@mgfx/validator-iots":"^0.2.15","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"ad1b585f3a201b4a8a2d3fdf97c7ae7a3e9c0a36","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.21","_nodeVersion":"14.2.0","_npmVersion":"lerna/3.16.4/node@v14.2.0+x64 (linux)","dist":{"integrity":"sha512-55BDMbKIOo536KvnBelS5izwllPCzXMNJIDwKUXO0JAmq52l6I6nV9dQy4w/C2nIUaR2CVb7wreHjBU+HGTs6A==","shasum":"985144b23b5d4b96043bdaab5c2448fd8e98d8f0","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.21.tgz","fileCount":7,"unpackedSize":12467,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJewlz2CRA9TVsSAnZWagAAQsMP/ipw98HCkHzRMw+U5xuF\ny8lLUlyV4CbIjNdGigJaibZbQCqtujBQv1P+0K/VYZEfV4ccLDQpZO8ADzMA\nx2FENR1Tx5iIDJRevPELZCiw1eWTFclKx7NauL6VMC6aDVbLITr3Y833bKhm\nFx7rXt14Ol8vuCL/DqNLVQ87IuAXzdiJUAtPgStRy0iT5EX2ecnUSrzaWAzl\nkRbZjH8B7uL3yoAbcnvCxJ99SjnvK+eZqG5dDVSqhOgwB7kqPl5zaEhT37k0\n6VHR+HEgI2j6wwdQdw56GX95GXhms7M/r/Kx+wFHHYeOR4HIeqmAsJ0lPhxp\nxIeTg/6paSOSD7sCxFa7RkLQWb2jq1JAYMB5PV/NZmF4TzKGPyzzUnzQ6G0/\nP61PfdprPSmu7ilc62dnLK5Ug7vPy3VPJYQ7watMYPQhrXvdugr3qiM4X9ku\nm7PlT+nyWDMhHY0Xk/FPb8nKWeBxI5qFPb9twHQVXWsgT11Xv16WoqadTxOV\n1Lcn65q01bRftm3adc75h/A+DfRUCu/NDNqCVlEpCWqIBtWmdFrFSRxyDa3M\n62wPqon5EM5PaRyl3pDXAQBrCHcWGKJ28Ju16F2sJ6Ongn//3eXdKuRKILC+\nzzmn2f6qhqT2aCQmvrqhErsR5zhkFfc9QPuK4RPowakd9K6L4u9hxlqD8NyS\ng/Hq\r\n=YSpw\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCICR4wCbIGfRGE9QPBtDzKrtYG0ZbYOO0LaTKNlUb6oFKAiEA+oini7pM2GugviIzUGvgxEN3bKX1MNJyVdjk5cc1SeI="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.21_1589796085620_0.04519225526955406"},"_hasShrinkwrap":false},"0.1.22":{"name":"@mgfx/express-middleware","version":"0.1.22","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.10"},"devDependencies":{"@mgfx/validator-iots":"^0.2.16","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"39e3c702b5c04c072c5e13056833c3e841d81706","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.22","_nodeVersion":"14.2.0","_npmVersion":"lerna/3.16.4/node@v14.2.0+x64 (linux)","dist":{"integrity":"sha512-thNThHn84lMZvw6K+ILBZ3/0MfuwQoL55haoyKs7YvtXrGZQk1Nc/kXz4kJkinF5RCHP+EdRqBMURzVifKEfew==","shasum":"9fe8ca40282c9c3c83369b0ec1b21e23e49f8ce4","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.22.tgz","fileCount":7,"unpackedSize":12562,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJew+MYCRA9TVsSAnZWagAATYsQAInZk5Z7gpuIBpBYnvAz\nY1uMuk6JwxBtQ3AVf3dh4mY9VE41LFricna8/Qg+sm1NOv2E9j6EhcEDIvb9\n/o/cuq8GkSh1Smb463BP9g0jqL2S7spnrrj3AzTeD1l7JA8o+GxVppeDKtFQ\nqaUBmOIvFEqe5LPRy8/H32WrZjd1ktRmP0Wk69pbW6TJIJTHvhPur24f8RGd\nGrd7pJNI1Vdo9P4GN5bt/Uzt+Wp8k3oWLCmbc/0I6iraKmIJ6yeg7gCFKUcS\ntDkg0R2COFOcEOlgI0Hnvuvl/sKiGXUEE9wZ4vBXb44RUo3THPMT1Wrk2XOz\nDHzA0XDJnej+8X9iEfbieDJZ3kONYEaPQfx/hKpJH3ecVK+/5mpIlAJ4gCGX\nwMuKs7cDUB3t9qPvDxO9ixeZVhBi5FokXEQ+WSS/o8lIRMS1ltSAd0v7JcIP\n0+FSEHQdMXoakXJjVvAFDjU4o0RhF3xgDPWympoScANtgi6smDkjNbIHQJYy\nFCyib5locnoMFosjraQXULLY+NB1y+ZpEQgMujuIJAwcB/hzk382TIuK6mvr\np75UR1caJbxFisuC5yFBWRxvq5hO0TYPKXmmv2rYiaQg0vIXoKfEq3wzvg4D\nnYuIP4ZbWdAvOL0hH3JFbdBSXKB8i5V73snNCNFmVYyISbZp6yEJg+fGf7mV\noACp\r\n=cMz9\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDZq0m4UEomCAJEAPsxtXG+IukKPqtAB61Av0afPTwBRgIhANZeaSZHd0W9RI0pi6qeg51W0bCb7sBI24Y48kMooicQ"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.22_1589895959588_0.05473417005852488"},"_hasShrinkwrap":false},"0.1.23":{"name":"@mgfx/express-middleware","version":"0.1.23","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.11"},"devDependencies":{"@mgfx/validator-iots":"^0.2.17","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"580f4eec1e135c346013dd2338b2ed7cd876ad74","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.23","_nodeVersion":"14.2.0","_npmVersion":"lerna/3.16.4/node@v14.2.0+x64 (linux)","dist":{"integrity":"sha512-5o22liIO9GBWIsCMLGif9bauCGjOSt2LQc+6niGC14Vvgj50ULyvahghBQBlVjbO4rn23XVxX8J5Y2v6hlNR3Q==","shasum":"ae9fa201eb128a63b7c719efaf483bbe3bffbe8f","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.23.tgz","fileCount":7,"unpackedSize":12656,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexABkCRA9TVsSAnZWagAARFQP/icaSiHpDoInXPMGyn1D\nJVXhcFJJ2yzq5tLJ0fyhweWB3Y1wdS6KfFwP+5kuMumtJaaDK5LDMZkagPXd\ngAcLjFoehIHCXCSK4wDNZvOe3Gkx3wbXRbnluVXNwrb3sAkHY1L5931VNhBW\nalNFKIn+BuwVCTLBVKEvUQqW+k4IKBO5oBAjEXZLBYcGVY3zRHNKVVTmzHRw\nutX7BdsQ90e/bq3pwwp7y2tXghRDLU1UX4ENvt+Qe7p+uJ2OjuyuTNnOIZ33\nHU4JpP2kYwPx1Tvw7AsyI+SV9T6fJJcY7urNtEx+uw6hXzpBCLNVZ0koHJbP\n6z+MUkz/k29qyYOIXeMsd9wOs+ueQtUNDWOeSacBVIqIfnoL13HHilT3BEuZ\nDVRfURW/vA4RLHpjIpCfvphJzKYlQa5I2xOB9yKLRIZr1Tm99C//eTncLPXA\n9iP00j9ziSaOs2StW+gloojBlsXJwl+AVJE6x5HUx0uaeElBmENq3FmH9oBS\n6mChgIm24su5uPbUcxvHgWrNSJ1K6uoCYUdk+lQgV7tNaigKJx4Xu637u+qo\nLtoMedrYlBtLZhRq13+5uLGsQipl52l9EBnWbX/v2coDKz8ofNkZChOpHkIS\nhQmOmsJ/BdffpykhaCPv36al06cjBie56Q9mtt4amPtiFPC/0Zkz8qc3IIYv\ngZWz\r\n=XveN\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC9P+iVXTX9u7qC5+z0wL50aJ0VT5nTY4AOI31qPGn7agIhANUz+fioIz7C8goUi5nOkNo/gkn8P1sYFb1Y9dvqcK1f"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.23_1589903460331_0.5959396526638732"},"_hasShrinkwrap":false},"0.1.24":{"name":"@mgfx/express-middleware","version":"0.1.24","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.12"},"devDependencies":{"@mgfx/validator-iots":"^0.2.18","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"20d5b8a8438c93289389b8c4e7914b7342e4e387","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.24","_nodeVersion":"14.2.0","_npmVersion":"lerna/3.16.4/node@v14.2.0+x64 (linux)","dist":{"integrity":"sha512-pNNwnENkBHyrEcpBtVQwle+TlBSsANsjnvVPZF3msuhpZ1VA1dD9zmY9p1sYl9Smp7mXgw7Jjp88xy/LeZUp4g==","shasum":"889b9bd945acb017d91c695c8e5cadbf659c8cb8","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.24.tgz","fileCount":7,"unpackedSize":12750,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJexoMvCRA9TVsSAnZWagAAXIYQAKKf4tlBPcpKYX3c7ig+\n5pqw0kPlyJZekMaqFriswi5o4SHBoLstGGuWmSSY2A7qGeBzQsQ8OV6+3ASe\ng6fEAAGt3wgVpyiLsiK6FF+XyuJzfQqGEPtBYJnKpWUCRjsAbFaLti7hO8Di\ngKyPouGDkJtPGKyLbk+cXPMKoeXLmnu3lMGAH0JN2I4AdF4ImmhMmeYwF6aj\nqF1UDBoK4eoqSzOdH54yTi/JpD7k8FKghM6CKl8tWOzsb4Sq5MOHek4+shkh\nshJ9sJNw9Q+pHvI7uem/PRZYkT1X/BY4q7OUSaup+yN7omQx8NT9Qk8yZuRG\nfzGMsU6Z8RH+8hB7HsoKQf9xYnyh1CYijSSbTXTNUBIJSkZs2X+kw9+XfxtQ\nm5E2k9ODqyYBFLElU5w7ZjsC+tb5ShUDxPpuWf7v+tBW6dbT9ULLe1ctZHdH\nOGmERIWt/v9iC0BLyNdeta+XCpWOSqYEN56x8Url5YJOsz/PrXb0lHKdBZH4\nAGm018mW/4T8r8BYGml+Zi1NvwkHdocbpKNoHkbk9ldWReB3lHKhlYNOhVJi\nH9Wg84cjA4P82P9vKrkzucI4bnKvebS08tpKqyWj3DbVuJ4vY7ss2qX4cxLk\nqOZdwXWatzHAVHaFLqOCAsX34i6R87xjr8fjZ+9MPrIMJ2/EBWfC6PXOWvMu\nHBK0\r\n=xvit\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDIU09yBoh5Hdzh2oj+piqI5uAsW2hgmVJWwVXP8A7uQwIgHP+6og1DN/qpTpEcncJQe948wP79XgTHvLI1kWWkVqk="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.24_1590068015298_0.14967255498230014"},"_hasShrinkwrap":false},"0.1.25":{"name":"@mgfx/express-middleware","version":"0.1.25","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.13"},"devDependencies":{"@mgfx/validator-iots":"^0.2.19","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"d9792140e08f621c3d28ac8d62377644097db638","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.25","_nodeVersion":"14.3.0","_npmVersion":"lerna/3.16.4/node@v14.3.0+x64 (linux)","dist":{"integrity":"sha512-esA4tYCWvZAMrZLAp/rW140ge8djxQZwJlipNow0IqFJFsmJQVOkLFQdtXGAiYRZKJ5ZMCOeJITDVOAWcf951w==","shasum":"4feeb286b3e281ac1df680a36f82b0a041fe25b0","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.25.tgz","fileCount":7,"unpackedSize":12844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe14nhCRA9TVsSAnZWagAAYt0P/23vh5nxNX+oiwtvYCmZ\nxqLNWv+pF+q5k6Z0qZ4sqHqKrXtiyCwlwgvsWSl2fBPWpRDBtJQTh2m/CT5A\ns/4RvmkN8m3z3aqkAotujqKzZauWrfB1xZW0dhZCuIjU4lnv71oSpmLYA9bI\n5z6sRo6nKxqb4fQHPcG9Fnipkd2wqpXH3IzOjVwfqgQ1DRMN+WdO6/sQ2H2Q\nudZJ5hrglMEwv++wczA8cfORe7oWY4YZXpBYV+63O3KyaYxHPGwM9VAOFgRH\njmPjzaigW0oWbo04s1JnxhxRsXyc+YggWzYPlxdNRJAgVI7elVAZC2/COH29\n72x6rZcJZS8Udg5Io3Uo0+hj06nkxGaQfmrhXPYLGFDpm67DN5pvFXE3qhFZ\nOoRX7jAzxYT+Z3dCfFHmLUqYLSHkRL/P1YQ/EZwZYl02yonW5dQSk9m1cQOZ\nzru7gzGR4FfHUuYMG18fTayAI6whnl/EUpRJ5C7sPx896yQRFvF1ptqQ7pPC\nI7UyPK7IAvqz4eb54e3HsoqrSJB9gQMtKOvq8E/2i3OLgKtDZqWGSjVTV3tA\ntTZAaJYjP7e3ovpVl4x7shysKgQAb58B8Q6iKQhdvOSaS65C5YzgqUhLmj7U\nYicz5Ot41zl1R+qwl1UrmUKQ6Tqnk5FH1YsKkGSiqEWr1sDbU+obgf/7NGpj\niZoK\r\n=jtdj\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCwFcVxsmevunDlot4UEebF4lpH1Ab3wPAQ046FgHLMmwIgKbwnKqHOsPCGw9xudHj3GW2g8KjEepihplT2HVYicso="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.25_1591183840737_0.4964648321202836"},"_hasShrinkwrap":false},"0.1.26":{"name":"@mgfx/express-middleware","version":"0.1.26","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.14"},"devDependencies":{"@mgfx/validator-iots":"^0.2.20","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"1e6eb6297e11dfc5c67051f120f4420b5e4d1d2d","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.26","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (linux)","dist":{"integrity":"sha512-TIhTKcV+jbSJkEw1zD21j0F7wI/UeRg+Bb0tjql22PCqJm3cLkq2Wxm/qcM8u4xpUc+2u+qOYN/CvnVe+opOpw==","shasum":"ca2646de47cbb10d34db4ef7f39b0142a092fdad","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.26.tgz","fileCount":7,"unpackedSize":12938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9NOqCRA9TVsSAnZWagAATUEP/0KtDq2uS3x9XnNoSKut\nxOm9uVK2nHTSxAeYR7VDFOQfo77V8cmRMJuQZUqMFJmE1umeHol+P8IwaxkS\n7ujUEGcWcIVnpQS0GlGfA1LjM00AoishnEa8xJUHbfMe2kqYR5L1zDh7+x1G\nNXs2BPGn56ImG6sVJ5tg+3TorT2hqFN7dWsOWcQtQXoh/VMgABGyCL4bYWDE\nq/90a7SoMfEc9612OLaRelC/HanazP2XQdRPdUbdZ9T95n2yNllJ9nAbX4x0\nc2CNlU6mp37smhJWKHvlXKJTVvtj+eqjdgrmpbvhzvvyU6ts8YN37wq+X6+N\nbg0DED9e7I6LLKX9w+LqnvyqcTgqJDqUF0YJOVv1NpwRGrTFbCneND+0jzkl\n/JnhHjR2PT82spAkmnorP99ARTWbIH3xJXSRpzbjQYeQCFZEFS+LXjAc2fj/\nmyrJ1xzCULnBiiWVECRWr0nYxer/BPC3FIQkBdpHgpPtRq8srlm8neot5Ndp\nnZXOP8485qI0hx4AMe9Eh4Woca+pHMt7thF4mhtbeQ6zMq5/2Inov6EcUDfd\nQ++JwSg+RWZGU7nR7+X1voGhE2dwHZT9+04Y8hvWmCxBHb6ARCx8WTOjozLA\nlsmmV/iDERq5oI1/u24PB+ke8zNLeCMuLzmeNQqlo+UsVcCV917/qVCWxBRv\n7SU0\r\n=fVof\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDPz7YkvPSDzeAvFDJ9H62nxkpiSVxP4XdgvfkBcV/DqQIgHHA5N4HqDzdAcv9YvrCwTaWYFRu/j6ii1AtbXNdDoT0="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.26_1593103274278_0.42329929024350754"},"_hasShrinkwrap":false},"0.1.27":{"name":"@mgfx/express-middleware","version":"0.1.27","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.15"},"devDependencies":{"@mgfx/validator-iots":"^0.2.21","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"7aaf043b9c745f39ca971ccf1d2f0334d5956433","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.27","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (linux)","dist":{"integrity":"sha512-znsUZ1hjiBlV8ii3jgJhJK5EvCfE462hNA9memVuOZzqJWJdPNiGFJyFg5uJIoMKnGwFrCb+9EnuZ2vy85Vr+A==","shasum":"d492778507a898e0c31c72926323a6e367817b75","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.27.tgz","fileCount":7,"unpackedSize":13118,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9NohCRA9TVsSAnZWagAAXWwP/iHziYLK2mORazo2wuEO\nkK7y6cCOByKQyinZ0eiGJ3YRMhT8ef+l9VXSBPIG5OgMNaYQqPtlgdJ7mOBp\n+6O7aCS+5MExulglJRumqnkFwjiJyAFw8zYl+VpbW4lkmC46/71sAJbjolEQ\nof5Cx04ZuVnYWtdTz3o2UyJaHRq/fEyNuQ9rPck64e4csJikn+zMra1sKz+m\nMgDDnyb9l+vq7vHZLtjdSrzchudu/utQAmzAWw3aLF3+obzv8J/kbglM10cS\nkC0l+2UqNrwXFlZ0n/pr+mNi8UJbiW6EDIyX180xNHNZnqk4IKhpmZevd/IU\nKP/f8SeiqxFcSsiDNkSwkxCzUq+YsTlPo3pBBa8apOfm72ed/2y/wlKRmvpg\n74l5Ax+FM1+Ef7DQdBSZcbHSGH7BL7RuwTKC5XhFMz5TYsGzKb5KjmirnITa\ngKJ6wGNu9jTpAwXq2oy8zd7fiam4nMVlZBxLLem5fFl8EXZU8UW1L3tyNz1N\nog4ymkn5L4RHMDMBDO7fxIBePZjZmigdzS3jGIdX4NJj0YiGQYEUpJ4adCtX\nXhTbCgCVE4X4cU03+FzylfDATpfG2xwtReS/x5Y7ZtK7uxPvbmSdOzjEw4H/\nEBJhdps4ragRzrJp8He9ASY7harVSt2XW0fatJz9UU0ONph7vPjT+eKi/NoW\nX53h\r\n=sLJY\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDVK3HbR1FWdm4NUAm5xa73JzMJ4IGgN46um/RRAaS0YQIgY48j4YQH+mL3XllCUzOjqGNAYqH8MzTXxIE1+43SZj0="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.27_1593104928706_0.5161564841229216"},"_hasShrinkwrap":false},"0.1.28":{"name":"@mgfx/express-middleware","version":"0.1.28","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.16"},"devDependencies":{"@mgfx/validator-iots":"^0.2.22","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"174fde2e25c2f6e3eb4934b382a589fa79e075f1","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.28","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (linux)","dist":{"integrity":"sha512-2YjgH1kueptvZW/STIxzVh2J0cF4Q4ZCEsTv/i6t54ipEsdfjANNMVEuQ6WjaVkBkvBIbxTeWGrK6NrZIByOnw==","shasum":"cd8da1b05df3cebc25570b93299533f9b7681f0d","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.28.tgz","fileCount":7,"unpackedSize":13287,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe9ODwCRA9TVsSAnZWagAA3a8P/A3/ql13EkhkX2Fg3gH0\n+Hdw1CcWrxgNCqiwiSsW8dT71FE57PIztYt6BWdi2Ku4t09nKxKLaGeSqQaZ\ndRwskETMeoGaIzK7DipTIoRif29box0U998PjB6YHljMBW0b2Zaw6SghDzgE\nqkeBw+srjHE5a1KFyEygJq38d4U4tfvLfA1LgLNX1GWzmsOsT5CUveQ2i2xW\nn15izndWGEF0s/0DJf1jpHN/xFfjtLcpKyTQ5JLZikHmnptzaBSX8ym1bsXK\n4P1OuEt3TBZylUKBC/70/9iH+7ajIMx6rigTMvdqzZ/jzysFbnJ2R27N8xIE\nRmc+yXHs1NwcH0d+bNQwH6Uv/eIgzXfx/VX0MItmwZ0yhdiY7o3lm5A/bN85\nBPqsRCb+fVvcifgbzfKfHK+ePnNbjvQ5lCXENXETcbVXNDM5jpOODMXyklhu\nZC4qQtUtdHekke2oonBgQ6d+xP5FvCN5dGV2wVM2o98OJCWE1upXCXIRoYgi\nBJ1ItOTSuhLuWFekZ5vkrQrkzkiy09Ukme5JTG0TepHrqJ65Wlf9da6Rs0T5\nOR3OlJ/nVPy9feDFDcl4RvSW7/6icxPeRKL0XxeW+97Efh3EgEox2R9i5SAr\nm1x0LJ+Ew4CPcmr+6vfegJEvxQbX1VLLlANqr2/uMTlUo8uw+V4xVHJl4OeB\n7uQU\r\n=4Ylf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCICJs7uvoWmU+EZZ2JwNeE0QLrIz8Pa1rnv4lxmS3ICoaAiALSVseXejZ7M16PvO3c4V9h/ejYMU3XyNy0UnWrCGb7g=="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.28_1593106672022_0.5110405731911798"},"_hasShrinkwrap":false},"0.1.29":{"name":"@mgfx/express-middleware","version":"0.1.29","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.17"},"devDependencies":{"@mgfx/validator-iots":"^0.2.23","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"0862590f6e66813aa6e96824c96265e809086826","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.29","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (linux)","dist":{"integrity":"sha512-guK7BVr8sQvImddMmQPBnTNoGPumigCj7DwYLTlaXLV/mF0mkoUevQVdMqCdKNx6aFPdZyhsYf2gbFbds4oe4Q==","shasum":"f49d687e73ff854fc2f16110dcc418c7bf2de8b0","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.29.tgz","fileCount":7,"unpackedSize":13381,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJe/JQaCRA9TVsSAnZWagAAPMEP/A8e7Co0FMEVgFnAAAzX\nkK8NmUBFNFewVMkMALChhahE8sqXqRMySb56ZCx97GKfroKLDMSiXt1e/+3N\n3JxUOWsFSKfB/FnC3L5E304mzRECkOjy6eHbYy0/C9pjC82L3IQsjHPNCOey\nF/ZZ+C68OEs2NXlvd/UkqTEZNkwTZEv4KW4RpD5nnVqmphlLKCuayPbXwdW0\nhEUUqEocS6BtD8VQKRgEFnedIiqQ22uLkb4Z1lLrTDkVhVJxEk2ZybHrmJgJ\nZcz7I9ws8oQAIkGZDI2wyJKofFn8L1NuHZnLpAp2RXy/nkMnnBI+u/bZVURm\nn2nQOMbPPtD7xen9C6hjWlDW+5HviqenbFfSoOrOl6Zl3EyMq+rn7CKuGWWq\neL3T5hpRVwpMqBxiLkgFcbJ/ygkDfQeM8+bOboqztEJQ5VwhC4fjtxPmak1J\nWDeYMAHU5ZAzisGOqWdnXUSWko7nzmRz81H3yV1zdT2xgI2vHasnsCuPpUuQ\nErpL4CXW0VQSnS4ON2v3SuokRbXVp3Cl6NjLnKkrUnVmsO2JND0PfLiqOHeK\nsmVuIclZxj3QSwnQKkb3J0F/qt3DDjwSnEpft4FT/KhWvs2eGaOshHRy6+G4\nTJEyTGuif72zN4ve9pdNqBLUqtpEs/V0fJAi+GLT/+YTjFThFcm6p/0Dzv4n\nLTSt\r\n=O5Nq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDZ4YkTARSoPTJoswKmG+cxs5S/q9VAkH8RLwAJihREJgIgRHtrgesOLxcmvxC65sBQ/rjpfyf6ccrjKxxs++SuHDU="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.29_1593611290572_0.9440208972255237"},"_hasShrinkwrap":false},"0.1.30":{"name":"@mgfx/express-middleware","version":"0.1.30","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.18"},"devDependencies":{"@mgfx/validator-iots":"^0.2.24","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"266a80eb6c732e83bde49b6de17fa8190cd7ecf2","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.30","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (linux)","dist":{"integrity":"sha512-bClDHn3BybnUtVgUdmxwwVJ3uLr4XKxYblW4hpz8qs1NNMkxmJpudveYbMb6nJ3ygkA6OnLiK2nOSpWqz+RNhg==","shasum":"c4d00b4e46c7ad557fdf0c9088c154d5c1f6a757","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.30.tgz","fileCount":7,"unpackedSize":13475,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfAyWhCRA9TVsSAnZWagAA1OIP/A+xHV89YX1mwKIzRZgA\nv5CfMZmKjF32fpDhfsaKQDSF56fpc4GI9pw+53zuU9qURcahDzg/3NeRbjYv\nGocLiAbLdBZvuGVDdfq3rSLTq1RjryVplfVp2JaBsQnS4aLP+4mlG1Uf0+lX\nCw12RWTDXPn4NezW2r7GEi7gALB4kkRWrRgSSN/Q+CyDBId1rZLpnjUPD84v\nsdm7t3BmuX/g7ehHiXtZwzuB5t25/s0kTLCfal9Y03qqI31bxdKzIjXhGiaF\nrNVbW/qdoc2PZKKWcQu2T35+a8ZCy2/yETkblYUUchnDq+puKu8EQUUcwIaE\nyVxk/wbt/BPphMXW3x/6lxouQ5JS0cQ7NrFpWOd3/qFLdwP8FqfzQ83A5e10\nNZqVnJ+k/2fxKcaiHOUggQ5VssBkJ0TdvUg79TBhi3k9/ixUWEp0s83UgPyG\nzBQheBatKuAz4qqS9R+SDgWsCP9R2M1AQUFn93dJdXYtxja2+2a4ZoqdHLDW\nbzOY3lTpv8clxRZZ5sFo6Kugb9OMOp0AzQEtktLhMWnx0YotHU7dlrkkEDMl\nTVa4zcxHtLlZuqBBj6ZFe4C1kP3bUFd0xRZ7P2s2fea35GXJQLu4+ngLnsgs\nwasrXENwe6CLEHxPK7hEzoMVggmf14QV0GpITnok8H9J368JoPpjJn5kRF0X\nzaFs\r\n=mfpa\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCj9n9Ga5bV4a0dzIXrBk18MSVxsBr9dPAouP4r/welTgIgdpYyBifcgrNkjawb9PVXA4rLElkk7pOGeVLYMQo2MEw="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.30_1594041760577_0.30133812484769074"},"_hasShrinkwrap":false},"0.1.31":{"name":"@mgfx/express-middleware","version":"0.1.31","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.19"},"devDependencies":{"@mgfx/validator-iots":"^0.2.25","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"9ada6758610d76e410135aaacfcde1676f1e1fd2","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.31","_nodeVersion":"14.4.0","_npmVersion":"lerna/3.16.4/node@v14.4.0+x64 (linux)","dist":{"integrity":"sha512-McnxVGtml/+aqISXqjDT0Tzgpc9+h1+oQn36I8Qc5kBew4kYWtWuXuRV18YuxKXA13IzkUs7SbM4uQXzVmONbw==","shasum":"4c883bd77f0cb27831ce4eea572209157f80b648","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.31.tgz","fileCount":7,"unpackedSize":13569,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfBcDKCRA9TVsSAnZWagAAfNUP+gL40M5MSkVW7KM+eJJJ\nZR4vFDi18lapJukepZJHJrvK70rjFzbpDrBv5Z+SfK/ln8O39OKiFMbOJJ2o\nXNgoMZSAy/GMmHWLMxvEZFyfBp/gnRs3b4BswHipLf47SiuHQhj/nGmiLmLz\nW5G7EwjddY1oipoxfjfilfYDaxiFDt3pB62jUJuU/fswWaNaBiUrT6NrpHQ5\nV7km/aKFZ79JcPrOLPmMT4YKbNF7MU5NXDQiXc6fN241rO4K9B3Tm6sJVfKj\nxWBJl7MiTag6G6P9ocqQ6fRtAjQWE2qCgr/bJ7baWvYzlHlrtwZjEvWEUgYi\nHfyoIIJVOQLpPBsR+MyDBLPQBjbvYtP2qatoVwcjSROLdHF8GE7bzDzhG52f\ne/JFt3LjEA6PPwj7prtbwGUnHNFvpw7yGo3PkLm1jjxaG2l3qKkdMqdg3jTN\nfbtIOr15fvDl4QBIbRamI5unYsjn2swGd51+D6IRVLd9T8f6grsRDgkwCUoU\nnPGBMs6iLKo2zLfidCYyIi9gvCF3bq1DTHTNK+V/XPFWwGIULriVZzcYzX4H\nOg6L+iF8FNt1HttdIS5BhDCzBV9CnOfkOwtFmf/GumHvF2Mldb/48tJJcjMh\niv6rXuvuN1SUo7rUiLevuhFA78xe+0if6lPAoVNR42BhXiyAVLCKFjSBs/un\nUeLc\r\n=Xram\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCFHSx8pXgMVb2xjHGrLT/Kjjn8DJLrR6zikA5pDqHosAIhANsLOHbpYFgwNrgfOXIeJ52y205VaGSi4/zUNh6ctlQT"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.31_1594212553690_0.9502514193857579"},"_hasShrinkwrap":false},"0.1.32":{"name":"@mgfx/express-middleware","version":"0.1.32","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.20"},"devDependencies":{"@mgfx/validator-iots":"^0.2.26","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"68db2cfed36ed56332d4e4208413312dfc827e0a","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.32","_nodeVersion":"14.8.0","_npmVersion":"lerna/3.16.4/node@v14.8.0+x64 (linux)","dist":{"integrity":"sha512-UJWWn4Wq7DrVRjeKY2NF6Yk+hhW2VWRPSV5LLTGXNP38i3JmRN5Fggg8xi+4/Xl6RPrcKhQ2w5VSpRC9DxEE1w==","shasum":"c4b12c20d9503317745b6b6cc7481a2bedc37642","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.32.tgz","fileCount":7,"unpackedSize":13663,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfPmWSCRA9TVsSAnZWagAAqaYP/irn/XPZ1CWeOfyphLRZ\nSACaDAkEoHvB01T4+8W1ldzLE1zFjYqr6zDsm/ngWbYdC81sD+qjeRxf1U7O\np6f447ipgVjJWL0401+25xr+zp4oPllxfTExyaMDnYphsJZPjYnxnDYS1Aui\noMzfaighL52lq6VFn7n/bCfcjt1PD9E1LeOe2SqfqFzg8ru/vbCBMLkJEDqx\ngCgzk9vb++2Txcc54y3D6W7sqevwrxQEPSImUQOwVT/szSrSnegNRXpxy8EN\n2l+WwrmRhUxt1TFmRqz7fTcfLAJFVuu2IvgvujjzHQcziIRQaPWglxhAVaGP\nMDF7SJqnauMlDpNvxv+rwN6OnwF8aqTrdiX+zUMnm9EcHVD0N9AZP7R0vo9W\nzslE7wneYruM2QVklZqn0zPbUdkYaUXd5V72A7TfER6KR2wSTA6iyKAhkJOZ\nYNK9aYGel0R3XybyrnRrLkbieP3LSGYl5sUSkY5/GrB8oG4TyTl7v0caGIAi\ng8g/srMK+mxs012Dw9FpIamu056f7Fx8qLR8krOYpErf0zQA+hOH3ygdyE3t\netdOjyyt1PKrqNdE2ARS8gNimOhXlgFXOCszYy7b/tAG5xIel/XYJsH9jxIf\nxVCLZktdtPiJfd6n9BfmcTbJGgLYoDQinYqP8i2n2byb0MoL5tg3aDZmoSOj\n7WMv\r\n=hiwd\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIC8iHNYGTgiOxQQK0H+Kuih3CjMFnXv53HGU+9JAUx7CAiA6+fgTHKPWxzgkzMpB7uOco5VlAywsjGBRKCfMw4l6mw=="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.32_1597924754283_0.8484500544817368"},"_hasShrinkwrap":false},"0.1.33":{"name":"@mgfx/express-middleware","version":"0.1.33","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.21"},"devDependencies":{"@mgfx/validator-iots":"^0.2.27","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"1802d9733b8dc735b2277dee6f92dc0f7f24cce4","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.33","_nodeVersion":"14.13.0","_npmVersion":"lerna/3.16.4/node@v14.13.0+x64 (linux)","dist":{"integrity":"sha512-6c+SV9/Ek0orRzJhhUrWWV4VhA+mFZPrfAIw0wuJdi8US+7qI3e1EXyTcbjCZVXHZ8oNcYYm/FafGBDVa5Utqg==","shasum":"4619b1823f41f40ad8b8fbbf7f7f87af4aa50298","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.33.tgz","fileCount":7,"unpackedSize":13757,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffs5OCRA9TVsSAnZWagAAwXkP/RBv52vV8f6w6Go4Mrr7\nGPA49J0CwXryJaNpeM4InckX2aK07unGTW40FbiOR3qUpeyUKf02FtvAwOb8\n6Wom2eH6UnhS30ulXeZ5gqMo9YLgd1fL+X1yr6Sse+eNIEifMoJda9WMAye5\n1IFmrtEFkMoyRpGDQnxSFo5sSXQGyM2oAy7+BJ8mKzUYAAYDsXc8yqyxpCrw\nvvZNpZ0GeW1p8+kZ/YJmZKK5zLOuh/jSCKnK05jyDJj06RXSg/IPz1ersBqn\nX2pZyUPEmQCpUSSpN6ThBchWB8zt+notJi4jQZG4suc9cSilrMbjOnAKQdNJ\nuflp1iSvqd6ZBPBDdLdBgthZqVbmr0DaSnzqg7kbUNG5rDHQb5LFUnP9WB9K\nSk7WOZta4Kqil6IvcmhC9tVYlKBMFSeDka7CqY63pzfmUQCTp3mtEjN7vSYG\nLYa47VFH82EUZ7NX6droCMOkHDoD/3CrunWZXa/EjUyg+IioJve1Tduhdvbi\nwAO39t7BmYZtt5xMcR3iHQ7iA8dsepRnsOEUC2V3QZcGh9KTN01s58mjWmuF\n0yT4QasViC6USicJx8UHJwko45/FAQNvFf4K4yDIi5ialav0YOui9KFBCqNn\nSRt+acc88Od4gg2m7qIlvyWcbWMp1X24stGhLdCD6zGHtKHCgvGgacSaZYeY\ngKWG\r\n=soWT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCz855anzDrfRgClB+7fPYmBG8xFx+3hG/B8Po1pDWqnAIhALFrpiYhh/lbVX3a842hmAWYEKdojq708CxwAp+2zDDr"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.33_1602145870505_0.42390252653952154"},"_hasShrinkwrap":false},"0.1.34":{"name":"@mgfx/express-middleware","version":"0.1.34","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.22"},"devDependencies":{"@mgfx/validator-iots":"^0.2.28","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"c0a3eab21300e508c235ee0b1ad7ae157ea1695b","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.34","_nodeVersion":"14.13.0","_npmVersion":"lerna/3.16.4/node@v14.13.0+x64 (linux)","dist":{"integrity":"sha512-K7cQgQrDtuUQs4eKKZuTMkkqCTHhS64WRSib43FchmXmoCDkgFMbEZyS2OsGI5v3yyx09uGKyL/Ul3E8wPZoMQ==","shasum":"ac16a50b5e2d2a69edbeb9a15bf6ffa4a865e2cd","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.34.tgz","fileCount":7,"unpackedSize":13851,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJffvJcCRA9TVsSAnZWagAA/KkQAIORR0UODmJiNquIbFtQ\n3MBsf8nb4240K8oUrL2UeKXHY0Ic33Y0QaTsRmG3BVG4tZ7xTSk2Y4hHSeFs\nuoCWn9b8/o1qxYvFgINnUxkTmf0weF8kKQ7u0Ux87jwJSPabUBAl0ilW35xx\noTjxbMEqt/QhfhDkqOIPNMcU3alAuK9OOJbzL26cXT+y/Cit5RIr2HWLq2EX\nSwH4QXezWd6SijsbY/J1wfF+IJ/UmKL/k/O0RVQEyFBATRquHTl9CDsoMGgf\nPcCDeOIfV8owFm3ZHN8Vf7bEOOrG64W+fqQa5kyM9ldRfDsULbA9iML93l0c\nTmPNbczg3W6TWyvq3vgZK8p5BeKnlmWADSEVNLi69mTjk4BN+zP7D/zCR/7y\nZfXzyUSK/S3dIpc21BscuizHxET7so60fyVsLLrlDXwJSaojp8rTObJrtwuU\nstH9y2Vd4XjMLr+nJDtiRJpjpDJkn1KZQD+ZEIb7HRPfVyW8s4KBziSrra+o\nKZdMbAZceVJQ2co2vP7+ES9Q77rD4plpf550dADranuvt/WaJqLuxDrd4QTi\nKkke1GFJq4FeH4wu7GQjRzFkvsANK7enB7pHtsypFHePOL7BeoN8EMt3oiVv\nFkY/3yUw4tb/Tdqf2aJQ3Ns4EugcwUxxrfcKE397kGqD6unP5+48agh/IoCP\n1SOJ\r\n=zRRl\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIErFdUGhACqVx/yiJVcV72UJV6uVTQnpDOR2S7u2+/DLAiEA5fiLuDzJcJNCVzElw5IUqyYM5uKHqrrWmyzr36ysBnk="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.34_1602155099605_0.2393477460097715"},"_hasShrinkwrap":false},"0.1.35":{"name":"@mgfx/express-middleware","version":"0.1.35","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.23"},"devDependencies":{"@mgfx/validator-iots":"^0.2.29","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"143ab624cb2475f3946f067462a5869d2f4b0a5a","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.35","_nodeVersion":"14.13.0","_npmVersion":"lerna/3.16.4/node@v14.13.0+x64 (linux)","dist":{"integrity":"sha512-UHMI7YHBLPMY3BCoCNe5nNUdVXeURtF+3DKYUPaRd9Ie6jc3FmKUWWqXAD3S9HfH4GO+e31dDC3XLAwzdmnkcw==","shasum":"50ff2bf596a4a3a276caab4cb262b0286b3317d5","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.35.tgz","fileCount":7,"unpackedSize":13945,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgCNrCRA9TVsSAnZWagAAfYYP/Amde95W9xddCwjhaUjA\nvnElfd8EQQzju2KQip/JsZpBaOxv/Xbs+V/2hx1qF0fV+5ptFcBT0oBCnWDz\nPWKzRpHaz512g4pE0xd0dh1HcMN7QiW/lcELRUY1nhVUI7yNfB825nqy1N8i\n6PDKJti3bVtU7/FcoCoJSC5n4m/yaGAT2yjvI5c/z1YsA/e4vbEHY+kgQlGw\nCrtMjzMA5yEXT+SZEUWB0wEYTojC9PNL/Mk7HM+kZXkXnGFNXaku/kcVZjNB\nNS6Yoee8TNFNA4eNSaCQheu9ebwOuLsJp4kIdFS6jpOHmFYj+h2eZdcU6lRk\nuPp0kz+TKPDFxqy4w4UVNr4I0xAD+lCTrTC3Y58R0vp1ZjTrC2DU6epIEaaT\n1LL6haQVyk5DE88qzbtAT1wKiQUCFyD59uqD5+S//SoZrtewvwIJY7GcTMQL\nfk2mJhR5iQpfhH6i0l+3n4AtxspW05PByXJP4nw2pV8e8hIstKz7qXqqwGFv\nxUPJTps8/mkcboiPapEicR3ldTX8cw2GIfTZB48F7OpHT4mYheVzUqdGMIYp\nKOSagsVE/+Xf6qRwxLk0SPSWI9EEzKsstJnJmJcSuneBauIdMTJ9avicePp3\naARrvysWiiZEZnH++Uax0GyaiGG5+LD+pSLWHZd4LnjK+LDo1Ou220J4Tmck\npMez\r\n=Yf0p\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIAVwq0O1CH6HsEUceGsTl25aftsYEtBaRFAwdtu794z2AiABybZiJ8DfmIPLAbgyq4FC5z0v0/tsk6u6kAgklsacMg=="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.35_1602233195521_0.3474843139903039"},"_hasShrinkwrap":false},"0.1.36":{"name":"@mgfx/express-middleware","version":"0.1.36","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.24"},"devDependencies":{"@mgfx/validator-iots":"^0.2.30","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"9616dc9e215bfddc790e2e0aeaaa0152396c4deb","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.36","_nodeVersion":"14.13.0","_npmVersion":"lerna/3.16.4/node@v14.13.0+x64 (linux)","dist":{"integrity":"sha512-iMVnR+bg5BOLXFME/v2kSpLQwtROBCoz5X1ucqGx7qoPD1r0CZHvPuYx0nHEUsexAGb89VVbFK1p8D4Qy3asDQ==","shasum":"d2e5237a356d1a405d6be0ebd7d2e5fde010bd72","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.36.tgz","fileCount":7,"unpackedSize":14039,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgDDaCRA9TVsSAnZWagAAtWAP/2qzjYasqTl33cMpy7HY\n15FPLP5EhdXNHFn4RIe5yFTsgH0j750wzWC8B312tgUqGo8Qg1eS1111UKd4\ntO6AA1NuzOzSurjCPVFQS3yrLZ/oG+xm+JCIUx19GxTZSoTmQajW+wgdVZ4i\nCMlpVjMjOc6LpvEWPi9tQ1YzC6y6Sv2D0JeWUttHbou9S7FkJTIS0iRiyAAy\n/gz+Sn7uWsPryJLObSfhse9UGvvSP27T6thaMJ8Yfx5kNi5q3GRpErWY4m88\ngr7hPf9FxOv1MWP2c3rernc0eV6nFRwYN8z1ZpwFB5H8NuxsGoRWzDaIU8RB\n97GAmnn9Lnqie7SC7xhXCJy0rfOgrNF8BMSPUvoic1GZaNfWZpAHlNUi5IaY\n1rw9E9sVk4gTi6RNpRUo/kJX52UU8g9/suvosnxbui6rpC5MXa/GM5lEY52z\nztx4d9hpa0lgbc2LZZ/s1FRVuxaO9n2Kfe2dixT0MVm8L65yYlmUtUxfyYda\njBiLEqVHzr+rQv5Gw/eVRLDwUIq44FW/uFHBz3ii0v9MzQgmG3qngNQzwxfr\nRH5H6NdGDp1an7xByOKI0ptmhV4m35xcxAQx+keEHVL3otVQredQfHtJW5R4\nHG4xcIwxFy1wuExr0U+Cq072wvOtXLOpV+/X8hFWFicd/MjdYm+Qv8HljMge\naFbJ\r\n=uUhh\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD8ZyWJOuYaOprWiuLrsmeEJCmTUP0qQK3xr5eSb1qEvwIgI7U1jUgcKOguwTHIXtTp3XD0L1cojx5BUMogAD/2oZc="}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.36_1602236633647_0.4482019187633892"},"_hasShrinkwrap":false},"0.1.37":{"name":"@mgfx/express-middleware","version":"0.1.37","description":"Express middleware for mgFx applications","author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"homepage":"https://github.com/ai-labs-team/mgFx#readme","license":"ISC","main":"dist/index.js","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"scripts":{"clean":"rimraf dist","build":"tsc -p tsconfig.json","test":"jest"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"dependencies":{"mgfx":"^0.6.25"},"devDependencies":{"@mgfx/validator-iots":"^0.2.31","@types/errorhandler":"^1.5.0","@types/express":"^4.17.2","@types/jest":"^25.1.2","@types/supertest":"^2.0.8","errorhandler":"^1.5.1","express":"^4.17.1","fluture":"^12.2.0","supertest":"^4.0.2","ts-jest":"^25.2.0"},"jest":{"preset":"ts-jest","testEnvironment":"node"},"publishConfig":{"access":"public"},"gitHead":"12d70abf1762db4c26a657739c7eed5974d167ed","readme":"# `@mgfx/express-middleware`\n\nExpress middleware for integration with mgFx applications.\n\n## Features\n\n- Creates per-route mgFx contexts that includes `http.method` and `http.path` Context Values automatically\n- Run mgFx processes in that Context via `req.mgFx.run()`\n- Run an arbitrary Future and fork it's resolution value or rejection reason to the HTTP response via `req.mgFx.fork`\n- Run a Task and fork it to the Response in a single shot via `req.mgFx.runF()`\n\n## Usage\n\n1. Install `@mgfx/express-middleware` into your existing mgFx/Express application:\n\n```\n$ yarn add @mgfx/express-middleware\n```\n\n2. Add the Middleware to an Express application:\n\n```typescript\nimport express from 'express';\nimport { localConnector } from 'mgfx';\nimport { expressMiddleware } from '@mgfx/express-middleware';\n\nconst connector = localConnector();\nconst app = express();\n\napp.use(expressMiddleware({ connector }));\n\n/** mgFx Task definitions, Express routes, etc */\n```\n\n3. Use `req.mgFx` within your Express handlers:\n\n```typescript\nimport { after, fork, map } from 'fluture';\n\n// Use `req.mgFx.run` to run a Task within the context of the current HTTP request:\napp.get('/run/:name', (req, res, next) => {\n  // `myTask` will be invoked in a Context that contains the values:\n  // { 'http.path': '/run/:name', 'http.method': 'GET' }\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    // Explicitly use `Fluture.fork` to run this Future\n    .pipe(fork(error => next(error)(result => res.send(result))));\n});\n\n// Use `req.mgFx.fork` to run an arbitrary Future and send it's value/error to the Response:\napp.get('/fork/:name', req => {\n  after(100)(`Hello ${name}!`).pipe(req.mgFx.fork);\n});\n\n// Use `req.mgFx.runF` to run a Task and send it's output directly to the response:\napp.get('/runF/:name', req => {\n  req.mgFx.runF(myTask({ name: req.params.name }));\n});\n\n// Use `req.mgFx.run` and `req.mgFx.fork` to run a Task, do some intermediate operation, and send the result to the\n// Response:\napp.get('/complex/:name', req => {\n  req.mgFx\n    .run(myTask({ name: req.params.name }))\n    .pipe(map(result => result.length))\n    .pipe(req.mgFx.fork);\n});\n```\n","readmeFilename":"README.md","_id":"@mgfx/express-middleware@0.1.37","_nodeVersion":"14.13.0","_npmVersion":"lerna/3.16.4/node@v14.13.0+x64 (linux)","dist":{"integrity":"sha512-WfFz3lxbypNp2/ePabLOpjQJ2UYXgZgBaKvci9IEooqXBqUDJwqGR4O0bbfe8cdhyOkHgTczTBu3datEURRcPQ==","shasum":"4aa5ea0b9f6403a2c42a75879791bf4014813f75","tarball":"https://registry.npmjs.org/@mgfx/express-middleware/-/express-middleware-0.1.37.tgz","fileCount":7,"unpackedSize":14133,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfgJTcCRA9TVsSAnZWagAANHcP/1xsX7FU5jJsVpyXExld\nYAhNKYbTdX53QrHC8RIeSY9lymf+97rCeBmuhBiI6FnGEkgfRBAGN+2dRctc\nOU4U1egJyxZXzpTeWB0yC4d3Fb4da9ztZxu+QMqvbBf23tKrg9tkksgf5plP\nJelmPjYoo2r6RD2dh2uMIkw6+WnzeuudnTe37O1QDNHqj0h0SxrHOjJRFypa\n8JCxMljxG2OchffeiSIPPw1EeI6a6qwIIsUpqYurV24eENj8yuw6undK4tz/\naN191abstPaywFFv1kIAv9z257v3Zsr0f1bQvVG1IWx6TeEnAq06elkEktmu\nn9ipY0E652Nw+B/E/8QqlMztT9/rbfv4ycjkfLczd0SXZyU6d+7jXJfts+XM\npMf4ET/M1gtN6w+YkZ9/lErP9HOecmNT6ZNDMzb/JK7F2bzgOJyDk8d6OtbH\nZBAoM1KQtClEcvbKnwLTta2eBEU45lu42YxZ7gGcv1qWGndXqiB2stiNwGpK\nw4f/PDq9a0zaw8xkrJjhtcqyU/6sYCEXstxxtvtvC1XYY9I6CrfPLO2ygF+D\njn+W+kdlBUUaZydSFZLZ1FyEWfoVgKQ7NYcyYkxlnOIDkopPoYhvCX+Nm/+y\nbFzJ5RRjot32Afj8leyOjjICnuTm3c2nFsqfeTbmIT3ZEPEzcE5NzSSm/HtW\n7JNz\r\n=nvAR\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDfX4QMwX1UpzSltIgAq3W06SXIvLTGc9TH4rfsKYzM9gIhAMKfNYzAyy/0nH/F70Z2BQuHV2s+0tMMbUmH2MUYOauN"}]},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"_npmUser":{"name":"warrenseymour","email":"warren@fountainhead.tech"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/express-middleware_0.1.37_1602262236241_0.006829131095156038"},"_hasShrinkwrap":false}},"time":{"created":"2020-03-05T12:24:08.359Z","0.1.1":"2020-03-05T12:24:08.789Z","modified":"2022-04-06T05:17:50.206Z","0.1.2":"2020-03-09T10:12:11.308Z","0.1.4":"2020-03-16T15:14:40.868Z","0.1.5":"2020-03-16T18:37:01.713Z","0.1.6":"2020-03-31T10:57:39.991Z","0.1.7":"2020-03-31T11:20:28.756Z","0.1.8":"2020-04-01T21:23:05.376Z","0.1.9":"2020-04-02T06:23:06.599Z","0.1.10":"2020-04-02T06:52:07.891Z","0.1.11":"2020-04-02T07:49:17.148Z","0.1.12":"2020-04-03T13:29:42.682Z","0.1.13":"2020-04-08T10:04:36.210Z","0.1.14":"2020-04-08T19:01:22.695Z","0.1.15":"2020-05-01T15:43:08.839Z","0.1.16":"2020-05-01T16:09:44.616Z","0.1.17":"2020-05-01T16:40:26.693Z","0.1.18":"2020-05-05T15:21:35.955Z","0.1.19":"2020-05-07T10:01:31.984Z","0.1.20":"2020-05-13T10:57:44.455Z","0.1.21":"2020-05-18T10:01:25.922Z","0.1.22":"2020-05-19T13:45:59.732Z","0.1.23":"2020-05-19T15:51:00.442Z","0.1.24":"2020-05-21T13:33:35.435Z","0.1.25":"2020-06-03T11:30:40.870Z","0.1.26":"2020-06-25T16:41:14.384Z","0.1.27":"2020-06-25T17:08:48.818Z","0.1.28":"2020-06-25T17:37:52.186Z","0.1.29":"2020-07-01T13:48:10.683Z","0.1.30":"2020-07-06T13:22:40.733Z","0.1.31":"2020-07-08T12:49:13.850Z","0.1.32":"2020-08-20T11:59:14.449Z","0.1.33":"2020-10-08T08:31:10.657Z","0.1.34":"2020-10-08T11:04:59.808Z","0.1.35":"2020-10-09T08:46:35.653Z","0.1.36":"2020-10-09T09:43:53.845Z","0.1.37":"2020-10-09T16:50:36.346Z"},"maintainers":[{"name":"nateabele","email":"nate.abele@gmail.com"},{"name":"warrenseymour","email":"warren@fountainhead.tech"}],"description":"Express middleware for mgFx applications","homepage":"https://github.com/ai-labs-team/mgFx#readme","repository":{"type":"git","url":"git+https://github.com/ai-labs-team/mgFx.git"},"author":{"name":"Warren Seymour","email":"warren@fountainhead.tech"},"bugs":{"url":"https://github.com/ai-labs-team/mgFx/issues"},"license":"ISC","readme":"","readmeFilename":""}