{"_id":"@aspecto/opentelemetry-instrumentation-express","_rev":"28-99068c4cc76165dba977f00bf85ff06d","name":"@aspecto/opentelemetry-instrumentation-express","dist-tags":{"latest":"0.0.115","dev":"0.0.115-dev.0","canary":"0.0.114-alpha.4","alpha":"0.0.114-alpha.0"},"versions":{"0.0.100":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.100","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.100","@opentelemetry/instrumentation":"^0.15.0","@opentelemetry/semantic-conventions":"^0.15.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.20.0","express":"4.17.1"},"gitHead":"666e73c9d3d8720f0baf552d8c9ba165b1b751a1","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.100","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","dist":{"integrity":"sha512-ALhCUBTeyp2DD7vYbjWP3lZCeiRdA41S8kcUL5m3NOrarnvLACJ/9TsweQyQRIBH4jaKuS8Eg+FDEAUU6LD2LQ==","shasum":"56593daaf196818098a40689a2b8672935bd9cbe","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.100.tgz","fileCount":14,"unpackedSize":47074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLTB9CRA9TVsSAnZWagAA3TAP/2EiKU3/DkViYAsObRGh\nlDv6FYhRFWXsGh+/8I01iF0+YepMfRToiLzNq96Hy9tYICk2B6cq62KL8ucY\nNxMqDYUxXO84Tob7dPyNKk1v+UGOvpjGgIMkZm12qOf6mPAaKf0HJEnwJqQ6\nNEP3btPebDtT/3B7uI227P5J7gj7KZWlb26B4l5cP+Z+2l/z4GX/kwc0bEI5\n9RBpbsGtOfz8cVS/1AzEluCPFyW3mddbrlvhq1EbX0FLbXlCmD4JFplD4+wu\nA/dz2gkkDAqes81v+G8gM6cHz9IoOWn7GZJtrhmB5Xtdeq15Wo1/isweJ4uP\ntxBHN8IePqV7xBaQYYMEYP1amkVIy3CaSKM0rNIpjPNqyjm83+p7P5gpB96q\nS9jz20I+RC0VvkgqNLnoQL96nQ0xh7FSIDI1ib6vfHi1PEZP1JvP9KdRriSD\nUyH1L86Ju+jp9XVYlBZ7TEbuCOw83riddbJyytff0e8wfUNbtATs73uulBzc\nVSlw4ly/FBXWMhyZmhQt9B+NoV1prjteJy+g+nQ42EK4IPNukXPaTdVw+lHb\nVpkHRUkYxn1PRYyvyKpAiNgO5wFWP3odIK1euWEqpqZWOAukxPuyFY6yoz1u\nAFAndTU9BX0PbM0cl41sYYZzxT2dlKf1g+gRau+laqcie7ERGnVaWcSEuttC\nXyRk\r\n=UBOU\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDXrRnRp9p5IlXRlNR3Gnfz9CGFgfswGh8XZSdCoa+ejgIhAI+IGq0muxTM5icr8v2fLXSLgVc61xwzZbpIOdEMiLpx"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.100_1613574268589_0.01813734815241763"},"_hasShrinkwrap":false},"0.0.101":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.101","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.101","@opentelemetry/instrumentation":"^0.15.0","@opentelemetry/semantic-conventions":"^0.15.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.20.0","express":"4.17.1"},"gitHead":"d613d1554ac87e6bff0d74c36c308ed2c3341470","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.101","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (linux)","dist":{"integrity":"sha512-o+8LKgIbJpFsuUrmgFa+7kLIO6jRKKdnNkLrqfk3zeILHEpN4RUnvYlZYN0cQ2ztq6BU1Fz6cPX6q+rcr55fwg==","shasum":"d5670ccc76b435d9bfbd4a44e1caff40aa70dc25","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.101.tgz","fileCount":14,"unpackedSize":47277,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLToWCRA9TVsSAnZWagAAjJ8P/RqoSeQbMeURz3BYfXeE\n7w4GvfdNYSr6RqXGE/wg/uNZuxdgOWtzwMPMu+A7tboBeQ/I8siH/KR0flkq\n8SlYaT1fUpXWOA9woeNDhA9Q92qljkEGeBewEE93S9y7IyIlqWVBy2l0YDhq\n+sbLLGUvJVMMjCJImWO8F60yKiqQJWGOCqLFsI02GrPzQ6GOtCOrNbUaaCr2\nPiT7I4/TP5rj2MUaA3J1DVq1o4WERIYnF+jr0m80dvrBfxlMK9eayX+o2sT9\n8EZ+lLfhevVjUq0dXIrHy+tyJ69OhhTtVm2kLz/AR0wE/uwyHXPzE2UrHfYb\ngrW9uTP5y6XED282i5yGhr5Az8zaJqXOMbZJjEBaIsFiTakCe2bfa1ZitrHq\nno/6mUGaa0TTbXs5y5NRQJKSdIe7ZwVnkF0p+kTgF+h2EQRyEOQxIp7qxNvE\njnb+n6HCccTtNWXdkTPrvFMZVmpOU7A0n1cRQMP9Og00Rlo9mjGu5W+C2GkY\nbr8Crb7ctBQkBQYPX+E8ho1ZZ6vakrm9qOc410MQs46rXtTJInl79Fmlkvko\nVAWQvG53NIke58tdQicjBPk6rqecoLEWESBWp3Puym1Iu9BwAoQdyRcvBlQQ\naUKAwQQu07+qu6sJMXstekKK40DG88IjYFsqF8bfgsEqbLB6F0h69HKFaOSt\nWAs5\r\n=uuLv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqrQvDNMZNYDMbd36Aonq+IMMClK9s/d5ccplFA3jTIgIhANyTBlLLYwnth/32h1DIjWqTZDWCaejMgidZ0oTrTxDD"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.101_1613576726099_0.6859138054701144"},"_hasShrinkwrap":false},"0.0.102":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.102","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.102","@opentelemetry/instrumentation":"^0.15.0","@opentelemetry/semantic-conventions":"^0.15.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.20.0","express":"4.17.1"},"gitHead":"546f2d970cea07c4d226a50ddaa53a7f88136627","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.102","_nodeVersion":"14.15.5","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","dist":{"integrity":"sha512-QhIHJk6GX7pdJuY8nLwop+ToF7vYfnZBk14aiqQY8GcURkb1g5MvLgIrMIJRXszQDurYjS5nwS97Frg19nmQRg==","shasum":"e6f7dbc2ed4d2a179195079dcc0af6933cb1c37f","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.102.tgz","fileCount":14,"unpackedSize":47480,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgLmvrCRA9TVsSAnZWagAA6rUP/isNZOElhJSAvZD9CQh2\nUoPP3/xRbE9Cn+SPNhB1jAGKmyd4exTtDS+rxNgxT0Klif33ZgAPjI7EWJYm\nKGj6NiK7m9k47BQ8E1uZYI2cZnvpQJ0cRQ7ANTjvt+TZHHJTm4PeJGCWdo0e\nh+uLWAMzOxq9k6lFGhT6Rf9ifOhunXR2NoJZ70nPehJ7aBZ7FVPG51fa81Rh\ncjubCL9PVN6QICyDDufsAZJDH0NMqby3UravxCQS2wsCQNpFSITTBKwy9uRA\nEu5tJfFOsPpSk/xLEjb209knopLo6vqzlkICUmxxbZbujVWHNaoQ4vSp567Y\nANrABGgTnAEYy4iDGs+kCs9BfOJKcNsH9LB7EwGt5xDsojWNROB0i4zMTMak\nm2M7zCy7je9G7XKbvAnaNaIRviG/AfUm6N/I+zSMC85tAN6tH/jh1JjVO6iw\nwFXpR59cah/35Rup3BV+Z0660tbiLUMEexvGTRcK3i0vZZBVazYEW9DybjGm\ng9UxUc/VcDuckdTyYTzuauzhpfwykEjO7XZEkpVN6fWJe4HV6ibXzMQfFZ+3\n2YiEsXVjZtWYjWXG7GzFbQXcqa5rnqGjpO0sFZoE9EK5dr05RitYHjY6PK8o\ntciIUTsDSg0J6Qy+1Dqiv6PfmInxXCj2UhLlINk9jqTL6JukfcafOP11rRcP\nfb47\r\n=u0Cn\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIA0qN/AWEsBLf8BFANwR9YeFD951xWszet5DAUQNm98IAiEAt5b6c0xNxSSuSCIoyuXxVGd9Nw+A9WsQXht65e5lbe8="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.102_1613655018911_0.7366402401851044"},"_hasShrinkwrap":false},"0.0.103":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.103","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.103","@opentelemetry/instrumentation":"^0.17.0","@opentelemetry/semantic-conventions":"^0.17.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.20.0","express":"4.17.1"},"gitHead":"a410d594fd253e0053ae228d269773d8a7897bde","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.103","_nodeVersion":"14.15.5","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","dist":{"integrity":"sha512-76U9xqbKqJv2/nvSluPSlb8wXgLIRArT9hCtn+cLSaNvoNdDHhqUjknI8MYyvNKUE2zUogiT+3zgLFgA8UVuww==","shasum":"d77c0b6650786de1f94bd954459810f77ec08453","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.103.tgz","fileCount":14,"unpackedSize":45838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgO5B+CRA9TVsSAnZWagAAsnIP/2adpG+WOwu85BEuRYhy\njxhhStUK6B06HveA228zneM4Zutuo1BrDGlak5WSGra28ZYMprm9YUB3eQ9J\n4TwjpgXzK9LI3SwWk/JUreLOO24BJt0lKHhjLj2x/ehcQ9njLv9FIYnSoDsi\ndGNdDxf3tEnJVGf6OzkhGZXwjXzBskCUxeYcuRmRdVVBHx6dEAppuBHRcdwD\nrEr3vcurtddy4mLH3NfL8tafwkwU7rycone11tMQO+pGfGLoec49EmdJiuNR\nh0BWzxLYnVE8VUO0TNVCadXTrKC7npHjbpnjbwypxlHdaE4T22ZaD0F8LtEN\nlz7vJSG8Vq9k9HkO5Hop8ZuxMX9B0wSJVIW0DUtzBBZgtmpAg8knf6fJRY26\nZ2YxeqGYMraCXl91nDVc58oMsKT9hdCz/EDLZpfSjvEGxbXc+IY1Yym+bpI4\nruifnchKhdBNov+Tyk/PiIpQDfryPFASonLn5VjyK2LJGszXcj6H1AvBk35W\n6gBblFvAnEis7R8qpgTKQZ4ElpAMsbcXYT/m0JeRp6rh18/P7dKMq2mHjFK2\nH/HUuznXim2uj+KnHdFrri3GARP/99wd7lekNPly3m97MntD8qRQI9a7c2Id\nK+kD24O6tuoTntrTkrLyFIkGtt3GNLXDSBaKaTiiI5AGxcDUXGk4P+XQ5Gza\nMp+f\r\n=SICu\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCSynaWeNx7uM6UC/TL2mM0Jju2ek7tKJyrXF8LhI+BqAIhAN+BH0DyxHuHRLwDVPZn0QpglzWYCscdTgoh6WEDmze3"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.103_1614516349827_0.44288296936280913"},"_hasShrinkwrap":false},"0.0.104-dev.0":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.104-dev.0","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.104-dev.0","@opentelemetry/instrumentation":"^0.17.0","@opentelemetry/semantic-conventions":"^0.17.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.20.0","express":"4.17.1"},"gitHead":"e8b8a0e1cfca53db2e4a170bad0e2b140a340d97","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md) as well as adding few other attributes:\n- Request and Response http payloads (body)\n- Request and Response http headers\n- Runtime layers executed as part of the request (express `Routers`, `Routes` and middlewares)\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.104-dev.0","_nodeVersion":"14.15.4","_npmVersion":"lerna/3.22.1/node@v14.15.4+x64 (darwin)","dist":{"integrity":"sha512-OycLqu9DN9S94eJA6DtX9RrT8kZnFIylq9dH0YDn9l0PNXTpuNe6WZSSw0xhoUdLUwAeatV8V8EngYbrQME7lw==","shasum":"cddc1559ec6ce5453a73be862b7c27bb2f9cb59a","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.104-dev.0.tgz","fileCount":14,"unpackedSize":46883,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgP0YfCRA9TVsSAnZWagAAV4oQAKEE4wRZO7xNw7J6kgwZ\nrco0OPFAen+ZTLh4IGQjCz/HyT84jZAfgpS5u26W4vfxDc/CdFqRqKXW75lh\nQ586acbRmdJ4U73XjSg30Q9I9F4j/SKswaGZ9Cw8pIuuVnFICUOZPqArrsvW\nq2NGN+S6YZse0N+HdhbUznkUt4CanKS19P//svYmFKD1BSdmk8nL3I0SrPwy\n+GpQk1SOklCFzZK2paUqrGUKjm8colPHNzKKtec5O28Qs+aTAYxPthH/oEnm\nYhU82dNmDmejk7xF8UVOsLL0yZZ65gxxtxj8/kOZbShUb9zGbsNaR5z/7au2\nsFXhb2dIg4y+gquY67Q6pcXaAlnLl6n5nM70/097mwmQuqfcOd75YW8EZD6I\nnHZ4bROSeVXSOKDUiqX8BTjQZnJm1rJB4VbBlTisNrcDk/xl2HiYxFYT8F9q\n4QC9pa09S0+cuicUOg7o2W4BQukdQEKtxuzyMrcOoGrXle8hw0eGCg/+q8hK\nnweHBgNserVhJbir1eYvOKubGKab72F3YFSpx+0002VbNKza7OwbAueXzrdk\nEDFPOOGGHlIh7XBzvPRSKZYpDOLbD0BuKY5Uo/ujShR1feQIRyX+3VP9J+ek\nrQnVXzVKXfhC/7pl9jhV9IhoFShkiDqTUAC82yUwobFzm9793fLMDo/4Obo0\nwuAl\r\n=68Zy\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAJqNuMbgPt+wJgwUCqhqBdOD5V/y59JyviUWV788QJGAiEAzFe4UCsjU0T6MuunEQAkQ/R2tcDiglPkVIX7ILSw0iw="}]},"_npmUser":{"name":"yanivd","email":"yaniv@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.104-dev.0_1614759454671_0.06407644149318759"},"_hasShrinkwrap":false},"0.0.104":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.104","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.104","@opentelemetry/instrumentation":"^0.17.0","@opentelemetry/semantic-conventions":"^0.17.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.21.1","express":"4.17.1"},"gitHead":"eab45e2a9a1270c1fd8407a88e4f7792d10206bd","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.104","_nodeVersion":"14.15.5","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","dist":{"integrity":"sha512-25/eQrUllG/MePjC9smWa1ul6ytBEYb7EEg+922D6YR7v2vJLYgnoPn6pwTAgf2cPRsXQ6tQM80QMpNIf+KZKw==","shasum":"0830c69a20cb32078b9edc6d99757f6d86d4302e","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.104.tgz","fileCount":14,"unpackedSize":46847,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQMg0CRA9TVsSAnZWagAAamkP+wUY6yOszr6TjTW/Ikq9\nvB8H3AhU52gcQq4JgOIJz7EOSopZ7e/4Caeetvuphb0fEHxkACoALY01kBWH\n0+rJ33eYbSbpa523vLF/8Efl3DDn+Z1v7VvW44yzNg5sXVS1mb3+hS1OJeXW\nDrQLm4kxExWnbglHetsD0ZLD1m+/zS6fNxtPvTkUM0R321q4y+ln7gvS0dYO\nKDIHHj7d7VlHh5ULPpdBWmkP/GHgwqRy5AAORA83Z2IuaEuQ1Hg7f69HPH2K\nOoP8BGZEPuuwZIWc/cSp2N3aPfTmJtxU21wz4+a32rl2ZouBuoU9aenp+1z0\ntdFmvtCz7xloPiKDb/BlMN8uq4sXjk1zW3LoiLXwddY5aWeeFdpO2YOSIm/a\n0/qi5chyRv0rie/RaG99hvRLD1+dEx30MmS3viKQAGGTRrRFtxW8PMIWh+c3\nYR9+SfE1zoHSDz1alza34Zl2h3VGk05rn9w8maPiytSFg6U2hS79PuSPq3ey\nIKjuYJ5Zk2U+UsdJRLvP6WHkHGmxfq5F7l+sBfFPungdPHC/0goWwUIJMtoA\ntg8mTSh8RexPN13tiIhp7lm+9vPpFenVW76iR/OcsZBBXR04rNarH3dWLdNi\n1LlLQnrW/+y0HySYUIryMRyKcjovWA6mhg9UHUxfcV/B7ETkP1DjFznJnpii\n/7sa\r\n=/uH3\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCMFOcRgw5rhXZ4flDQrrtaFdiEpcbbUKbe83YyLj0K+gIgfcyhjPdO3M803KFIZOmFLGiBIgxosgJ9FQVTgN4jTDE="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.104_1614858292096_0.9576785314236154"},"_hasShrinkwrap":false},"0.0.105":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.105","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.105","@opentelemetry/instrumentation":"^0.17.0","@opentelemetry/semantic-conventions":"^0.17.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.21.1","express":"4.17.1"},"gitHead":"00695d2f993f5b13bceba351a2b86a1d17c52d37","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.105","_nodeVersion":"14.15.5","_npmVersion":"lerna/3.22.1/node@v14.15.5+x64 (linux)","dist":{"integrity":"sha512-CeVifYP0gmZZ7LZkJZHZBEq2B1qtXtIGMJUTM8nJOdjfmNt5EKLraOMVrS6qcg8XCJNmSwcD/F+7tF14Ug5NLQ==","shasum":"6d2d070031dcb65fad139fdc0a68b6e67015ec16","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.105.tgz","fileCount":14,"unpackedSize":47050,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgQOG7CRA9TVsSAnZWagAAFfcP/0+WbMS3cgSovuGB/pci\nirq7wmETzQk8UD56erT70znomKJ9isSTpGpbZ7R4qaJ2J/UBtgSsxqZ4oW4d\nSyVpcz9ftQIzhkSKiXA7y7bmzMptJtmNoT8tv/TWug+DB+raJn86Krj6w13j\n+iS0E8uE0LSoyav2kA3ktblQGTQP3ybyXyDqRV3j94yLA0modXsiqo20TLHw\nPbuhOL7yv5gDwNgxILudA0CAM+W7IZV/8BWT/GE48QPKBoniBT3/IacAedZW\nL3koAKu8REhHxzyaxp2y9oiKl6WPtOqPR7lgFr9b8UiexzdjmL5ZUuVrg6xK\nPuXAEI17qHYpVJV54a2sk2TfVGrrHsUtnO4vXNXCLVDA94Fc6s5iWZrRNtrY\nsKOVlbC7UayYVDAs0eoy+OoZuEW3SSiA9Px3qBdojN4lUwCDTJNQxfzYiTAO\n+fZu8TqIWoDRqnOhuJtdJwh2jV1YwmbZvEcu1u9dZXZpkzmSkpagNE4f/Ivp\n1E0xrN3zIbgdzCQKfvsdKy7Q8Atfla879YAmYLeomWF0EUax7QpTZhkVqi54\nmGeE72acDY59KHrnhSKrEJwkOKhIGhG/XabeJrX1LZLNLeRbIYfkwKkZ+bsj\n6dhvU0JpPwvwmGtTabqmDJaPpt/I925hAOK19s1D3+GVJ+4erpf2QnWDwobA\neow5\r\n=Tql4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCjKO+CG3RNDp1/XczJyrEq527k90IwIyOEkvMORndTYwIgK9Qb2StM8E2vdXj4BUK0E2knLWPL1Hs1xJziIQ7V7nY="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.105_1614864826679_0.9747414626687225"},"_hasShrinkwrap":false},"0.0.106":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.106","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.106","@opentelemetry/instrumentation":"^0.17.0","@opentelemetry/semantic-conventions":"^0.17.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.21.1","express":"4.17.1"},"gitHead":"d2890af9ce167399b1845edda08dc818bb1b5e66","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.106","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-L403W6vBCI+bpBV5vtD2KU8f7KQaX50VmwWt7kHjPMgQtId2L36PlcWsr7FBUQ6u/ZQbyCOLoR+/zOUFcO6X6g==","shasum":"fcbf01b195c09a0d6af66bbeb34e4a1f3a8a9562","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.106.tgz","fileCount":14,"unpackedSize":47253,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgRPYdCRA9TVsSAnZWagAABO0P/i3UNxznyoLl0/iu5Gvf\nkGkGJdqU9mVG23tkXD3MwzwR8AttTZxZSUA3prKZxMi/4i4+jjdgCJ9p/bJQ\nnV/RtzI2VO2DeDPubRfUaZqJK0NRet7Bj4JOFai7YCvatmy/BUBJOAYwDXdO\nbNHtQ1PDLB5/qSb+tjVnCGSGODx2Z6iiBu1bIbXVxP5HUXmyktsaZNPio6z4\n8BmoDCrB3Dh6Xuo5ny50yX4WS7D8sAZhsyISzeFmCJTrmzgA4K3tWYaGOFoN\nPLru91vm/SoEg0FyvXLRv4vsZ/g8F0dUKLu3uSI7QHQjD//zTrlGnRh9TnvN\nfqcsqMNoxRwVJ/DnV8/XTw5Ekfk/bkHZ0bY2ohT/poGgYwArjHYgidSBugSk\nyJq1QyicAlmZu/SQCJavkxz7ZqSScavnx1BbZwE7r8YU0m/VdnphYlTYKemd\n9mdXGuS5eJcI5nePZShESrDPZwuPF+OQ7hIsZ2WFStpAkX6s3yiSJSRi88uS\n9Lq29qPgvbnsjJAIy0OK5CEPmlM1UbNjmNCnNrvRo9FQVQ/PuCHOB6fuF3wL\n/TJuuyHqPAF86WjnxOpUjbkYWp86QQ2s5BFK7f+Ke67T+jeKfSSoBXVjuFS6\nXEn8ws6b94oH19USk1A2bo45JTLRmmNbgQ7vPziRWI809vuDuJoWgqxLGhDL\ntjyB\r\n=3vWe\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAVlDRxmY4X17whIoyWGBOFeMp9bQPnrwIaWMHFgBlJ6AiEA/AB28ZRxbxlGxEluXd5jK/t6rkkR3XIdhQaI7sOvHqI="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.106_1615132188790_0.35546404527162534"},"_hasShrinkwrap":false},"0.0.107":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.107","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.107","@opentelemetry/instrumentation":"^0.17.0","@opentelemetry/semantic-conventions":"^0.17.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.21.1","express":"4.17.1"},"gitHead":"629b9065eec3800f98c107e889c35c0df468b3b9","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.107","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-7ePxLklzIapWJhhc/16uBlE/qR1YqDl8e7ekxzffYeh3egJEZOqNpq7jtIaV6u9RK/pVrHf3gwyqN5Vgnaospw==","shasum":"8005db8c995eca69d2a0a84b5a727ec16c1549b7","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.107.tgz","fileCount":14,"unpackedSize":47456,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgSiN8CRA9TVsSAnZWagAAcGoP/0pXBqSd9z+uZ7MjbvSo\nH447k3QhsSFfgRgVLPLlW1QuFZGGjjdyclGzWxU6Ee4zUJPACsHgt+C1ACxR\nU/IA0//suyoYjmyl/93XAB26bTAdzrNz6Brhp5rP40IBAgVaPybqu6JPDnqv\nxcsVGeetqEBqwylQZ4V1J1AQwKJFqjD0B8R4jARpc9z1ki8zvMJU8JYBhxqz\nhdQl2R7Z180HMTFTuhS48tzKed4cnjvGXmxo7G6k7DEZl9J6r8lfJMExG2Zs\n/SV7ojffGe3MKTaBOutZD+NKrMwGmIdhp4qY2Prx0pA76aUU8SImURHzkLrD\noDMrzm/193t9X8UrukS8bSY8yr2dP0yj07Z8OnEnu2DKKowTq0LWv9h3ct6i\nXzV+SeNWFpCHJWaxWLeCJYZSOn2+eEoNi4X+TdB0w3lzjsDWQ1y3xDf2Zx9D\nI25yCza70JZ0xNIGYbdwhnWeVpHHScKfQPk06JNYD7/cBiaQY0g8z/u0zkqv\nvBAvtnpqiYL3doPo+8aDZpFZqhPGvW1S8bYdbegufImp3lQm0hvUWpFE6kHw\ncuoDR+mhL733kdKe6cBS4Zyy3XKYViN0Wf0vGsHbSQZWM6SYXAu4uF0OBV7j\nKcspJs/8dyKDlk5+Q6BUVXZQk2cP7svQDZrX7JXfxEjH1kSaAArEYe7VFT4n\nZf2x\r\n=p70Q\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFSfIu27kgvATPvOESk0WAFmCR/YVCWYERQmy+kYSG1ZAiAoh66mLRKp8W/QAh07C9MFWdq+zLsxVSLQzegXx0Zl+g=="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.107_1615471483822_0.7301254792737344"},"_hasShrinkwrap":false},"0.0.108-express.23":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.108-express.23","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"0.18.0","@opentelemetry/semantic-conventions":"0.18.0"},"devDependencies":{"@opentelemetry/tracing":"0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"peerDependencies":{"path-to-regexp":"^0.1.7"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"74c187efcb047d63ac9996629980aa78fa18d26c","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `(span: Span, req: express.Request, res: express.Response)` |\n| `moduleVersionAttributeName` | `string` | If passed, a span attribute will be added to all spans with key of the provided `moduleVersionAttributeName` and value of the patched module version |\n\n## Attributes\nThere is not special category for express in opentelemetry [trace semantic conventions specification](https://github.com/open-telemetry/opentelemetry-specification/tree/main/specification/trace/semantic_conventions#trace-semantic-conventions) to follow. This auto instrumentation is setting following attributes on the span:\n### http.route\nThis is a conventional http attribute, which is out of the scope of http module. \n\n#### Cardinality\nThe route attribute is design to have low cardinality. It will never contain arbitrary ids on the url path such as `/users/1234`, but will always contain `/users/:id`. The number of permutations depends only on the number of express middlewares (or routers/routes), and the number of hard-coded `path`s, configured when calling things like `app.use([path1, path2], router)`.\n\nThis guarantee can be strong, since backend systems can use this route in various low-cardinality ways. However, there is also a price - if middleware stack terminated early, the route only contains the `path`s on components that we have already consumed:\n```js\nconst router = express.Router();\nrouter.get('/user/:id', (req, res) => res.json({name: 'foo'});\n\nconst authMiddleware = (req, res, next) => {\n  const isAuthorized = false; // in real apps this will have logic\n  if(!isAuthorized) {\n    res.sendStatus(401);\n    return; // terminate the middleware chain early, before '/user/:id' is consumed\n  }\n\n  next();\n}\napp.use('/api', authMiddleware, router); // router will not be invoked if authMiddleware does not call next()\n```\nCalling this app (when auth fails), will result in `http.route` attribute to be `\"/api\"`, since this is all we consumed from the path at the point res is sent.\n\n#### Covered Cases \nThis instrumentation goal is to produce correct route attributes in all common use cases, and all the edge cases we could think about. But it is still possible that we missed some. If you encounter a case which is not cover, you are welcome to:\n- [Open an issue](https://github.com/aspecto-io/opentelemetry-ext-js/issues) to let us know. \n- Or, you can [open a PR](https://github.com/aspecto-io/opentelemetry-ext-js/pulls) with a fix. Make sure all current tests are green and add a test for the case under [opentelemetry-express-layers.spec.ts](./test/opentelemetry-express-layers.spec.ts).\n\n#### Semantic Behavior\nSince express routing can be quite complex, we will list here the properties of the calculated route, with examples.\n\n##### Relevant Middleware\nRoute is calculated relatively to the middleware which invoked `res.end` (or some other function which invoke `res.end()`):\n```js\napp.use(express.Router().use('/:firstRouteParam', (req, res, next) => {\n  next();\n}));\n\napp.use(express.Router().use('/:secondRouteParam', (req, res) => {\n  res.sendStatus(200);\n}));\n```\n\nInvoking this express app with `\"/foo\"` will produce Route attribute of `/:secondRouteParam` as this is the middleware which terminate the request.\n\n##### Multiple Paths\nIn express, user can set an array of paths, which will invoke the middlewares if one match is found. The instrumentation will report the first route that matched a path from the array:\n```js\napp.use(['/baz', '/:routeByParam', '/foo'], (req, res, next) => {\n  res.sendStatus(200)\n});\n```\nThe above example, when invoked with `\"/foo\"`, will produce route attribute `/:routeByParam`, since it is the first match to `/foo`.\n\n##### Hierarchy\nExpress implements advanced routing via `Router`s, `Routes` and custom user middlewares. Whenever a routing component is matching an url path prefix, it is concatenated to the route. Leftovers of the path after all components paths are fused, is added to the path at the end.\n```js\nconst v1Router = express.Router();\nconst authRouter = express.Router();\nauthRouter.use('/p*', (req, res, next) => {\n  // do some auth logic, and call next() on success.\n  next();\n});\nv1Router.use('/products/:id', (req, res) => res.sendStatus(200));\nconst versionRouter = express.Router();\nversionRouter.use('/v1', authRouter, v1Router);\napp.use(['/api', '/some-other-path'], versionRouter);\n```\n\nInvoking the above example with path `\"/api/v1/products/123\"` will produce route attribute: `/api/v1/products/:id/`. Notice how multiple matched routers path were joined together to form the full parameterized route. \n\nNotice that during routing the request we also invoked internal router `authRouter`, which consumed some '/p*' part of the path, and then restored it when router terminated.\n\n##### Mounted App\nExpress allows to define an app, and mount it under a path in another express app. Mounted app behave just like any other router in regards to route:\n```js\nconst mountedApp = express();\nmountedApp.use('/route-in-internal-app', resEndMiddleware);\napp.use('/mounted-app', mountedApp);\n```\nCalling this app with path `\"/mounted-app/route-in-internal-app\"` will produce the route attributes: `/mounted-app/route-in-internal-app` on the main app correctly.\n\n##### Error Middleware\nExpress Error Middleware is a function with 4 arguments in this format: `(err: any, req: express.Request, res: express.Response, next: express.NextFunction)`. The same behavior for route calculation also holds for error middlewares:\n```js\napp.use('/foo', (req, res, next) => next('some error'));\napp.use((err, req, res, next) => res.sendStatus(500));\n```\nCalling this app with path `/foo` will result in express error, which will be propagated to error middleware. `http.route` will equal `\"\"` (empty string) in this case, since the res ends in a middleware which is mounted under main path. Notice that even thought the error is created in internal middleware under `/foo`, the route still does not contain it, as the res is ended after we end the `/foo` middlewares and handle the errors in the general context.\n\n### express.route.full\nThis is a custom attribute produced by this instrumentation (not part of the spec). The purpose is to supply a way to build \"the big picture\" for early terminated requests, and unconsumed path part.\n\n#### Cardinality\nThis attribute can produce high cardinality value space, and should be used accordingly (can contain millions of different routes such as '/users/38264', '/users/9386916', etc).\n\nIf we look again at the example in [http.route](#httproute):\n```js\nconst router = express.Router();\nrouter.get('/user/:id', (req, res) => res.json({name: 'foo'});\n\nconst authMiddleware = (req, res, next) => {\n  const isAuthorized = false; // in real apps this will have logic\n  if(!isAuthorized) {\n    res.sendStatus(401);\n    return; // terminate the middleware chain early, before '/user/:id' is consumed\n  }\n\n  next();\n}\napp.use('/api', authMiddleware, router); // router will not be invoked if authMiddleware does not call next()\n```\nThe `http.route` is just the part we consumed: `/api`. But `express.route.full` will equal `/api/user/273861287` (notice that the full route contains arbitrary id, and we might have millions of those).\n\n### express.route.params\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url:\n```js\napp.use('/:id', resEndMiddleware);\n```\nCalling this app with path `\"/1234\"` will produce the `express.route.params` attribute: `{\"id\":\"1234\"}`.\n\n#### Cardinality\nSince this attribute contains user ids and possibly any text, it has high cardinality value space.\n\n#### Params Hiding\nThere is one pitfall to this attribute, which is not expected in normal apps. It the same route params name is found multiple times on the same route, then only the last value will be recorded:\n```js\nconst router = express.Router();\nrouter.use('/:id', resEndMiddleware);\napp.use('/:id', router);\n```\nIn this case, `id` is found twice on the path. When this app is called with path `\"/1/2\"`, `express.route.params` will hold just the last value `2`: `{\"id\":\"2\"}` as the previous value was overwritten by the second one.\n\n### express.route.configured\nThis attribute reduces further the cardinality by producing a route which does not match route when multiple alternatives are possible.\n\nFor example: `app.use(['/foo', '/bar'], (req, res, next) => {...})` when invoked with `/foo`, this attribute will hold value `[\"/foo\", \"/bar\"]`. In this case, `http.route` will be equal to the matched path `/foo`, but if we invoke the app again with `/bar`, `http.route` will change to `/bar` while `express.route.configured` will stay the same.\n\n#### Cardinality\nThis attribute is expected to have even lower cardinality than `http.route` as invocations of an app with multiple path alternatives (`app.use(['/foo', '/bar'], ...)`) will produce the same configured route. When multiple path alternatives are configured on few layers, the result could be many many permutations which all describe the same code execution path.\n\nAlthough rare, configuring multiple path alternatives is valid and supported in express, and this instrumentation library offers low cardinality option for different use cases also in edge case.\n\n#### Closer to Code\nThe `http.route` and `express.route.full` attributes are very useful when the matched path out of the alternative is important. It looks better in UI, and better capture the intent while debugging single request. But they are lacking the info about how express was actually configured (with multiple alternatives), and they hide the fact that we matched one option out of few.\n\nThis attribute can serve to point the developer to the right place (in code), and to get a fuller picture of the trace while examining the span attributes.\n\n### express.instrumentation.errors\nIn case of internal error in instrumentation, this attribute will contain the error description.\nThere are no known valid use cases which are expected to produce this attribute.","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.108-express.23","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","dist":{"integrity":"sha512-F+1mJedWlrv2dRF5aEa3i1mWTeBqvOrXuPw1893OqjNN3FejClYBV8TTu2T8oMj3ifZbj0VVur1uuBaILyRWJQ==","shasum":"4128afc99d6201548c0fb7217250eff89691e722","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.108-express.23.tgz","fileCount":16,"unpackedSize":69533,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgVxEBCRA9TVsSAnZWagAAQhwP/AxpArRdawDKhtu18xgw\nO0EV7Q0218hAS6zhKrAyzWVtnNwkOOjFjKR+fghTDNHfvtwNJU/D1Lw9l+3d\n55+IzX3kOTBj/g6UB0SF1KcKnlbkTgRk8T2vqKCPFhYj46EXipHBEouGNb0+\nyreBdnofkFNUpKxTpp63t9bUeUpcF+HqGtJNqRtxBuzNikL3KSOjlb7LIY8G\nz6VVoBQ23iDTA8raQJT+jEem2uSUegYSCNLWVZlEKJ7juHnnecWbBPicOs7e\n9mhvoSACeIja4YyiHmIk/BkAz2og74cbnpN2O+r7Gs/UH0EqXgau9m4yFQIq\n4+zf/IZdH/AyxWenEWGYCB/YhVd/ruSH63ns1vZchMGg6Tiplu3APr4mo6h+\n1VMjcrTSVzFbdt0V5iUoKP7FsJhrUxkyRbaJHHzblG9R5VLnJlu7i7SLT2k0\np4q/whTaSZ7u/UTLRY6B7Tyk6iT3c0KbavmqXPjFrFDP9DZfLfVfZwAtloIS\nMQhxk02hCclEk4DzKOvG2KQfX2kgKxudvLoQxuNcEbj8TldOsG1iIq3/C8Rc\nMGU8Nb7ai608lZkdApwa/vPZg2G7Ei+8DrCVuRuRi6joKcGSzyA1k7rvoYPn\n6fWTzIiO0lXv3EcV7HbzpIDbPxY13+rlsKydF1KSncO8Mv23pVKWbdb1haQN\n6Zbz\r\n=QZSA\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDBcp/HshDaBD2NDUZejgHhfd1rs8HjKNMm//YRac3xcAiEAmKIvGCqNcUDtDbtoLqqbdvTftDY/1TAIzuDZuUJy1c4="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.108-express.23_1616318721002_0.17004098548745916"},"_hasShrinkwrap":false},"0.0.108":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.108","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.108","@opentelemetry/instrumentation":"0.18.0","@opentelemetry/semantic-conventions":"0.18.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.21.1","express":"4.17.1"},"gitHead":"a5d6b9f82ca056d8944c9126c84a3d45048c7a9e","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.108","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-+iDC0YRlBFNTkGvrmPLR/pmcAN2nvw6KVuGY/8G23dDFqJEKYkLPEdJyy8tfK+nC1r4jZ7TCCny+l8SwF5jWhw==","shasum":"300bf784a72eb3d1cbb4d8c96b42d7efe60ec821","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.108.tgz","fileCount":14,"unpackedSize":46910,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWwPhCRA9TVsSAnZWagAAuUYP/i6GQNL86XiUms90Cu+w\n71dbzXiY1B9thJf1iV9jEscLzE7qHfXZVrbKJJRgZhPgLMzddlHvJdBM3qbS\nxjVwcAPz3+UVypbn2pMEXUWDhCahcDkQM3k3macAvlO1d/DpZFG3wNstoAU1\nKtTt3Qht2DdsdMaUrzCX3IJxtefo06odNOVMNuFLd07Idxgm2wW5d3K1Ag1N\nqzYBVYNjbNNgo1V9sTvdDb9FAOf/7bFjslPvJmrYRgvdlv1X/yhvv0bnMfC0\nT7KpOMUwprEyNcN2OeYa1fW1o38AoxG+VWNqVM8GUqunYM3GOBVjzomiujrc\nogoQhBRZEirYAVwZEtSNHhVmMY8riEzNe06TIk2y23AayfQolqUiLC9nI631\nC6/tjOcPETcV7SaaZXZrmOQJgV9PdsRI2/nx15QsMQXFja7YrhWTBBVtkIBt\nhMK6uB8HfsJYJoqL+zCykJihIzSAt9zh7beqYuV5kfmAdNBvfY1GsTv+tyW9\nVBo7HMEfUQlf3bqnMpsIA0O8eBe6itykKP8GyaKlKDwlOgAaZmzSMf3nltFx\nG8/koz6PnR1DnUX+6BMIrtbR03xdeut6B1kY8egf3iKoi/FUB/uxnlKngYQj\nrKr4wR4Xk/Noj0BngaqWdwcAI2ysEcbARY7kn3k1nPdvkwM1O6WgrfCXJgXO\nYT4E\r\n=SLks\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDQXRX0bVWsWIE5dzEfWkNoXXGkJyU7CVWuhIdlOKHrNQIhAJNbxPBYTQp+BSAKXTr39+QTTb3ti8gMBeM55ArcyF2d"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.108_1616577505565_0.8743058116481732"},"_hasShrinkwrap":false},"0.0.109-express-context.0":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.109-express-context.0","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"0.18.0","@opentelemetry/semantic-conventions":"0.18.0"},"devDependencies":{"@opentelemetry/tracing":"0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"peerDependencies":{"parseurl":"~1.3.0","path-to-regexp":"^0.1.7"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"4beb65050ba278673c1a21c77e1d468775690b0c","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `(span: Span, req: express.Request, res: express.Response)` |\n| `moduleVersionAttributeName` | `string` | If passed, a span attribute will be added to all spans with key of the provided `moduleVersionAttributeName` and value of the patched module version |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if user sent request with invalid path or method (resulting in 404).\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.109-express-context.0","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-/yYkBQN1l4RWGSIZ9AEz5Rljp1Tt73jMW+CRcuiEveOjMgI+PGcpiK9gqnU8n0AGcjZfKv8WR96pcvPwmGVxdA==","shasum":"582b738d1305a2f0b166642dc8d7a860921aed32","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.109-express-context.0.tgz","fileCount":22,"unpackedSize":65229,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgWxxCCRA9TVsSAnZWagAAgagQAIckUWGH9Jwhmud1Red9\nDXxUZO/3Pm275mP6gQinCORJLlZE09SQqif4FqH8r/SHKtcPlIIcHnmNGQoO\ndUmDV8CWo12L8FqtSdWHPnbNNsBP3jUJyIs+aCtGjiXzbc2vse3L8WcW0h7Z\nfVrg3NRm3a1cKj2H7kqlesDcTdgOt/O9OgRa0T/gvegTQjfi6zj1Dka3XZIp\nyi5i27mura1DAdOkl6oQ9JkqR7Iq8zTOxZoe6HzC2g3+1rHsZH58iSElXcwf\ny+ifQrpnWRlBdMdcgiFw0owH8K9ur/ZJvuh1YmOjgagSG8h35TqJiMa8gdvn\n2OdwKTmdvWtAgIE7RcFOmQiePgmU/a3pjzbHgAnkAnfQVDYcwltvMA3SsQoS\nA5SBYl7RCMq315+RuXv6jrA6TaaF0dhU6hNCt3bHBQc1xCP0mjIJDgyIP9vn\n7R6Q1ijqYxDFlk3ewtTcV4a+1zSvG5bPJS2whLhoKyekdBfshHlN8qtBJ/Ui\nOvdZ/DlfM7/E4z2I9PRs1789IndzoB7k0oUIAF7mpTxrMWFw8mYZV9EM9EvO\nnk5Txc1a/uMxvpQfKDI2lZqF+o+DwUN+a29182nVcUr0fwg9AAyfvc5LhyPG\nDWnhhU3QmfsJjeym/fJl1mczMdyohG0W4OBMMXCKC5byFGbVGYoBPOiH3AP6\ngZqd\r\n=wiLZ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIAwLMimzhojhpRcLkyU7z2fOFw/nDVe3UwnevEsyQiCCAiEAlPW+SOTV/0Y3ARhGDrUcpzGpEj7zDGwmnIzLnjxDvqc="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.109-express-context.0_1616583745945_0.5229307440770974"},"_hasShrinkwrap":false},"0.0.110":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.110","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"echo \"Error: run tests from root\" && exit 1","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update"},"publishConfig":{"access":"public"},"dependencies":{"@aspecto/opentelemetry-base":"^0.0.110","@opentelemetry/instrumentation":"0.18.0","@opentelemetry/semantic-conventions":"0.18.0"},"devDependencies":{"@types/express":"4.17.8","axios":"0.21.1","express":"4.17.1"},"gitHead":"43c55407debde1e02c6c3518dbefb0242967382c","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.110","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-74s0DSPxCy0WjdqUwutFkE2fGbWf1pZhGQupaMF5duUAESKosHV7Ydzc5rkfhppAeJdPea/jzVPqz0hvCk8pxA==","shasum":"f116267a84b308c476d48c65d955771f05ec1fbe","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.110.tgz","fileCount":14,"unpackedSize":47316,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgW2tXCRA9TVsSAnZWagAAGh4P/3SgPrVrrZa5f+60bq0v\nPqtBqyFhb3eo5V6kZv5Ye17eG5Aa7fgv4VAgTKP6NSSej+RuOu3pkrIeXWti\nt5fYdwglhUMdgJJaGrsfr4t0V0l5ITJjCLw0k8aTD0HO8637OmDk5aAXm0K5\nDp/PpfIprA6+ctJtjjeHwH+XIUrrDesLMNehy0LVF+30jiyVikmtvrenBs1z\nX4cb9LUOgResbD8xZ8IwJb0HW0nboMYnyA4IuwvsmPV7wyA5z3UbgSaweCih\nshWmWWCggYJuc8FEAJ095Hgs4BaK0pLgjWgglFI4Oak05uQ576qPi/GCFPbF\nv43K3uftmwlNepYO4GKTKxAN4M5vawyY54KTDcjEDXv+zv+2nd98XJRbnM0N\n4T+tf9lZarDL3fEUa78l7NjeStEj64ZmlDxX/WE6uZgli1Wj1qJ1W0E/EMOy\nIK0Y50MCR15khK22CNPGKN9OHVnGs1alQswdYpeEhxd5ficeEqaiZ8GYSGWs\nJ7pfzOFmHbsy+vCz5iczWqy/bvD/d5o2huNpTV7WmSheSPKpREmNMb2epcRv\nExjxEw3tffIODlARU0e2/DpAP1r0BVqQzYBR1JdV5Vp70z1HmNGIb/GXOi9o\n5h3RftbUSsMhsalxArnR2MGt/THxFjO82K8LUV+DKKzK1U94T1kqIHEo1Fdu\nl2H3\r\n=lUXT\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCA2OCBRBftg5Rb6ULyIUDqZbUxlx6o0qRUwF6RoynJyQIgYLkNs0LcVKCvoR9fJ/hGajnMEyfjWh5J0vNHkkElq2U="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.110_1616603990800_0.39470696489878554"},"_hasShrinkwrap":false},"0.0.111-otel-v0.18.1.0":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.111-otel-v0.18.1.0","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/instrumentation":"0.18.1","@opentelemetry/semantic-conventions":"0.18.1"},"devDependencies":{"@opentelemetry/tracing":"0.18.1","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"peerDependencies":{"parseurl":"~1.3.0","path-to-regexp":"^0.1.7"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"1d6626d9371c90f91c88dae9a4ab16e431aed1e4","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `(span: Span, req: express.Request, res: express.Response)` |\n| `moduleVersionAttributeName` | `string` | If passed, a span attribute will be added to all spans with key of the provided `moduleVersionAttributeName` and value of the patched module version |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if user sent request with invalid path or method (resulting in 404).\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.111-otel-v0.18.1.0","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-4r0RgukiJH/ewt7ANDK98QB0Bje6ZlEjdCA5k9ZOvpejDaq+ASjMW1pfQtTM12p3dBxM2dCES7Tj3QvMY/FjJw==","shasum":"b3c2be3dedb7ce9a97023c013c03d180cef64852","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.111-otel-v0.18.1.0.tgz","fileCount":22,"unpackedSize":65636,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgYxa+CRA9TVsSAnZWagAA+c0P/R5uO/2rRAaY9XfQ8FIO\n0B+IPSxhJ9EYK2bCCGQOB1pgPem/m/IipxL4S0KBDVpOg5Sjs69tk4gHdFFu\nlPo8rm2nfHiHNEkSHDrRmApiyETl6joEa/NOjDWx+JZTKukmxVUTBd+lJKMe\nR900babIodgvcfs5+SuwPIz54rdg2IKbQwLJ8YNYG6wjGAVh4ENNVSV5Opa+\nlnTRP1H1vbkq7NnBrv8oulyq2s4GT+ktCjC/ovg77RjgL5S0vA91UyRZzWeB\nJ0nIALiYieXJO9emfM2DQb0dpKx/B9EgtjN62d1VaoM6ceSCQhHjY4Ok9Mpd\nuzPBzslcWPyh7+WG3f0XUjjKPCjk+fGnhiDh/Lu1NyQzokktkbH8l2GVyV3u\nvPUCfVTlp3etO7JlnQIRKBNCIeVDI9rfJd/1jYjtYG9+UPRvq+qOvCQ6lNrh\nKZ629chDTU0qN6pw1uyjvCvFdekeWIf20XFfwiWP2hbkjjjj89wZi/R06ANI\nd/2VCo5G4bmVQMvNPJAtoilF5MWLuJyR+qDEqPfPIbcvfihBOCSqfYwtgXQx\nPQQxD9HBERgtvj78MV95i6QBRx6PqBv2kdCiZGWqmNlqFgDFhzb0XawshA4q\njB+dsHNw6+vZUz9FU2abiPzzNe/PiNkHcx7Y2WrDavHVowpPRsXpg2GtCagK\nNAF1\r\n=9wWm\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCAAVighMAj04+hYZNb24VMqGHBfRD9NrEKW5fz12RKlQIhAI3nIJkxo0JqKyz0HHOyYXUmDNno+P480V+yR3gmj+9t"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.111-otel-v0.18.1.0_1617106622002_0.6776749370946966"},"_hasShrinkwrap":false},"0.0.111-otel-v0.18.2.7":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.111-otel-v0.18.2.7","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"peerDependencies":{"parseurl":"~1.3.0","path-to-regexp":"^0.1.7"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"e13aa6f70072f4d3425e98cfb13e6141956177ca","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `(span: Span, req: express.Request, res: express.Response)` |\n| `moduleVersionAttributeName` | `string` | If passed, a span attribute will be added to all spans with key of the provided `moduleVersionAttributeName` and value of the patched module version |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if client sent request with invalid path or method (resulting in 404). This can be useful to filter out requests from internet bots which try to call common routes on servers.\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route, which can be useful to observe express internal components, with the cost of more spans in each trace.\n* Set few alternatives for route attribute, each with different level of cardinality vs accuracy.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.\n* Distinguish between handled requests (ended from user middleware), and unhandled (terminated from express built in 'finalhandler').","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.111-otel-v0.18.2.7","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","dist":{"integrity":"sha512-W9mnN8djSGztpSgmSLB6H59PUGquCLIvWSFQhM8+8SmvfOgqonb7BPcsaqwMOPuJdiz2CiSFyk+UF13CYoDxkQ==","shasum":"f841a5098905d2fe04e13b517ac4a10971a67d09","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.111-otel-v0.18.2.7.tgz","fileCount":22,"unpackedSize":67473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgazEmCRA9TVsSAnZWagAARikP/0MAvwxpy6ougB70yoMd\nUEEUuPrdSAYoBE4mXCE6m4M0DhCiLx5URs/uQcjv3ewPnMY9Bban8apnT3q9\nhVcnMb+9v+2jN2FxO0cjGjpEH7HjTUIua1kvWz1Rm7yreWzfXXmjQJfnaR2k\n4vdJ5L5sfP7MCjuuaOJte2h+nDDe7JgD+6uSyMRhxckKwp0oodMEkfkmynJo\nvPE4cW7psyoyMs6VMmIgwZLvtIHmi09VctqFZhlmUpHBGQUAI1rh42LhnC76\nVCyGLb1D7Q3qprlTDFST5YIeiplHcjaawEwISyBKPwaKE8g5ShTQEQS8UNYg\neda+jAB338Uec+MmMl5ElMOXZHFX/+Rlc6n2+iFnjMXGHQivo+0d9OqjEMkD\nvIYVOdTNXgHJtPxzbTbyrQrGwr1dsxuOyw1tF+wq/GkqeLw6ve7fQCh1zdJM\nYZafc8m51ENrUvk9ddw1+8EQir6qnQr1PG7whUWnZRhuS+rK+e8HXQ1vHzyy\nqVeKcmFhdkvhiRdudItpDEvjBzrnvMokJaZz5WwvhBnKA4sWqUuk94OSWFka\nFBn9n48s2QwWipAa1StZOH7yeO7nEJKwanzX5BuoU/nYyiCHQi4DD4DJ4xMh\ndhP7C79ALwHFJ2beyda14X0nfbAqk6qZIRh/fvISYI7jlPPrFz0R+rLYNYru\n3je0\r\n=PHDr\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCqOZxEeVqRUzUJvD51fXqpCLbnvmpWV4fgsALWNIUg8gIhAPk5pO2vMvGWFYuEhkeENS3gs1w2s7KJ6lRL1drLixku"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.111-otel-v0.18.2.7_1617637670396_0.7262871472936043"},"_hasShrinkwrap":false},"0.0.111-otelv0.18.2.7":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.111-otelv0.18.2.7","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"peerDependencies":{"parseurl":"~1.3.0","path-to-regexp":"^0.1.7"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"e13aa6f70072f4d3425e98cfb13e6141956177ca","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `(span: Span, req: express.Request, res: express.Response)` |\n| `moduleVersionAttributeName` | `string` | If passed, a span attribute will be added to all spans with key of the provided `moduleVersionAttributeName` and value of the patched module version |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if client sent request with invalid path or method (resulting in 404). This can be useful to filter out requests from internet bots which try to call common routes on servers.\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route, which can be useful to observe express internal components, with the cost of more spans in each trace.\n* Set few alternatives for route attribute, each with different level of cardinality vs accuracy.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.\n* Distinguish between handled requests (ended from user middleware), and unhandled (terminated from express built in 'finalhandler').","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.111-otelv0.18.2.7","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","dist":{"integrity":"sha512-Ahji13v28Zw37R2aaOXeeKp1SgN85X91+XRf+H7jO2gVFHs4PhSYNU6Bsn0pPSIifeMm1SSVTkv3GRE6oNfiUw==","shasum":"648d865ac7b53bfb5ceb1c7d6d6858b1c4498402","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.111-otelv0.18.2.7.tgz","fileCount":22,"unpackedSize":67472,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgazGxCRA9TVsSAnZWagAA65YP/R7Gm0KClflTriIomVMY\nvhUfhuKZOCOXKGHtH6CFTHrNKHq4p0G3SYlyovtz7qxCGFfrVvhiSYQNtqpg\nrMC3vtxh+HXIeEQuZ94xa+zxBvKP3tzVHZoKbCRrKBadkr0W3tdqNfw678l8\nhEv0XOkVYcuP39n9AoqP6+enV26JTOoKwRtVoUrY5dHrTYlGNUaVCLfGPZjH\nilqcOCQrH4dltB5d1c73X1RlQm6pEbvscCLhOOEl6iNuhEqfZceF0Cpe3YQj\nWEoahjB+uQP80072zoMPWelBMm7k1dCYjm1enJ5yQ1B1gdY1UNYqFfp9CqD3\nYKgF8mV7GW0NvmC1e9mNBYHzu8Q5Dz1omZqD7toYNhuEDEUnX8OvlVMvhP85\nFcBt61rFNgVk2moUgOVMKDxkPpKCggFm3ivI7MeqewoTQ0fumKtX8nQHBtHm\nl/KRIRHFpqDs3OgJKBaeW5bQQhRfunplbDBR7LvkMkngUGJxft502xW3rh11\nHzdZ+byNv8oer6RUX+3UxJh++Rv8ZPN7XPBYFGMU8QaeUdTBANJciMbmRjl3\nKX6Ipyh88ye0sxCCY4QWHzd4UAusqTE9CVzss2CN5/SZgDnTUhIueIirYV7W\nWluIcsQathXaBJO/8N6CESpCeZF7PtrV8qerxaaDWYbJXiTvjpO+gPbZFoxG\npKc4\r\n=TTmV\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCT1ZSN79yvDQzsa1wgbaeEvZnaiXvw4tnPym/xVK1P/wIgUJO1qHdtAA6GclyNr18W1zqsZiEcss9/NS/YQh1szDo="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.111-otelv0.18.2.7_1617637808874_0.4685965336049476"},"_hasShrinkwrap":false},"0.0.111":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.111","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"peerDependencies":{"parseurl":"~1.3.0","path-to-regexp":"^0.1.7"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"dc7392eaf813034ee39720961d9ac638dc11c0b6","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.111","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-xzjr6z+cWHXMguubw+693HQ+HcewDcrEO4/OrvcjCyZ8aGr2UiIwFIMBltqE5XsRil0Mxp1osAHk80Qhp6rG7g==","shasum":"fbc72e5663444b7a448703b468aee17f72c04e34","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.111.tgz","fileCount":22,"unpackedSize":67838,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbAg2CRA9TVsSAnZWagAAL2UQAKN9NdapQ9CebA48bGy/\nj3TfLtI59L+H1seoUUBvqG4AoPAa+g1LSejhVvUxbRUA/7MK/TRCVBB5WYer\nWhMacTO++VmZyDgC5iW0vyQSEWjznIAXrEITpNO62JkYQKVKXP3rBME7R+KJ\n8GAaG4EZV3gONeP2Zhm6ZA+cRCG9MFZStzo3Qeq5X/bLj18j+FETcuFzSsXC\nPAUxBOUGtEg7vpGaQFuKK1OGCVZy2xVF0ID/e5vj/JXc0uB9tBNaGbBpraDs\njj6jM9CctL0KonqmOPfXj4ef1FRyrQhEDDJ2D3Y8IAr8mq0uv2TnVQ8zFJS6\nfWQDqsv+980cHbpwt+pKRrVkhjt5luxG+qEc4pBu7f0InLr4+DIaHTSaNQ2V\n2lVBGTuyqD2FHjq6O/k4OfP67S6S9uh6wFikxK2+KAMnkkso8LaXnbByug5S\naRqCu2ejOHAk1281aNeDZNMEWJrscuDKoSzJ4yPI6yRQK3w1R/q+YORyR5Xd\nywVTGYn501ZlKQTstDPEU+SdL9MZP+6s6Flq8nSncM4kLPPBIAczTXNdmoVZ\nlAZJWDWEy/cRON8GccHSPlDvH4ddSskczn+AybvH/1t0b+QHIGdCXygGMWlz\nmZN/pFqn3z9suljq3EuFImfLmiAlmomXW9X+OgMLZXKBiCbCfT/YmXW99SAa\nzx9G\r\n=G4sv\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCEp73ZnEwqnhZcHk0f1ncMCgS7Zgkb/1d5SWeIcOKW+wIhAOxvdqGRxayvogzy48dbcOA2xVHoUc0NfjUvF1L5Q203"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.111_1617692726267_0.6332826085731109"},"_hasShrinkwrap":false},"0.0.112":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.112","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"peerDependencies":{"parseurl":"~1.3.0","path-to-regexp":"^0.1.7"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"c038dbcf9307120ec4abcf2b59a2f06b77c75e24","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.112","_nodeVersion":"14.16.0","_npmVersion":"lerna/3.22.1/node@v14.16.0+x64 (linux)","dist":{"integrity":"sha512-+uPJG9UcLPZ8lalcqtIO5tcIr37deT48SEuwmqwhmEcg7SjmjtD8fe00O2gFfmztxP2X2Bo+OOEcNW8soAEGyA==","shasum":"cbde893df08a63a9a53824245233ffd1413be9a3","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.112.tgz","fileCount":22,"unpackedSize":68041,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgbDbqCRA9TVsSAnZWagAASs4P/i1KGqcpnQMpzEnI2P90\naWwieQxZUHnelfX9Et0rauO9kSAGhojN7EMvcKkpHmiFzOklOL5jPfTFmfHE\nNfgLb5qawEYjuwygYgq+QK3O1KkD5ZzJT/UCo2dDrPFKcyNd+Uvdeh8WfvQV\nH3SXA8lzkA2YGAHxxnOIwIlMI/MmWWsDO9+WtBncz9ghpAH2P0XntYQuh55l\nVCPvXLf0onxn3Iw1JAGYwZSMNEqRCCYN4fYVls3E95/NxBjfW/izi2sB0kz0\nHaJ+nW4Ej1nnH0p8Bu9GmvzPaOlxGXP7MBY3uCRMe6GTSTjM0qn/oofZ2q1G\nVsrFPsc2iDBfGnjqBWg8I6rCeYfLH7AAwWa3DOhm8m3fxydbl9nLOTroKopa\nLjDpPWjYd0AdoC+kbPl7zZQbexbzb6JTbhpffWfjJmv1olVDziwbjrBMpoj9\nGYEtyVsJzHo1Ds7GEHAWJ8kDJnPAUv6BU+0OML9fhjWhU1DecdDpkKdWx868\nytG+Uur6DE1t8Q8OWwiHVA8mXrzdPomUQJN1TBCfanV7uythSyC/uivZXLc0\nrG7NiwHYLWq/9NPSuRtQHmeYoPsuf0wvi7Aqj/8JKlL/tS4RdIK5+GNhELjK\nLk0/utGx3B3t/QdiV/qeoGdP3p7dNGgyhimieZLoOSpKAUVaPHkNtptql/WK\n+SpH\r\n=bFWB\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIH9oMWTF96vtTAdzW9ahdXRPQin5XkhpIxT44j5sIcSvAiEAnhkhq0p1zZ1O5MzAwqcGadQ2llPomyqF1nYhzDzdQKs="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.112_1617704681799_0.6128864085998871"},"_hasShrinkwrap":false},"0.0.113":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.113","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"88fbd2390cec6f8f15c5d9a671ebc61c85292dce","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.113","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-oXCfV2MKnOATbRoSaVQb8xzR27eRHSQKLSHqXOZ91pQQUSDi91vl75tJceukJDy4o4W5pm9SVxoZOZH0BCwiXQ==","shasum":"6b02febefdadc83797dce5acca77dcecceb3d084","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.113.tgz","fileCount":22,"unpackedSize":67977,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgfFbaCRA9TVsSAnZWagAA2+AP/AwfEJWmHgtxaf6Dk2VB\n9jNeFXQ2PIeEpRCCTm9WuYtLZWNMv9I7yg9D5YjykwRBJHsP/XXcM9Ku8yT0\nSvO0kKkelCZRfxJL9oZSq8Z6B38nhFXSWiEi6hReYaaO5lhJQuKRVB7KMRyx\nI24uZxFSkqu7zCFWJ7dvFJABEQuxvOB2HiPS0WZbUwr1YeUiv/NEan609kQG\n2Org5oQNCZ4pMgOmGDK0fnQc7AtT/Du5m0ERl3gCAQCYXaoEJ/MC36wud+Zn\nGTW1uqImECWBpwSV6jyWTdLBtJZh3M38WBVu6zGRzLDhYggZH0coGHHxRKmu\n3mpOMttVX0Iyf/ziZKrCXj0K7BPuFNexCK2faZu7xM5OeJD3fH2c4vNGi/NX\nsYXcHip9u20jRXuc2GitYw2X8o1z+hJsHWEy0i1zJ3iaRyaDmzzJmE/LbOe7\nPs8vS2MK0/S9AXw+N/Sxi/L3EEs+jTwzYzrNuceE8qqqnPqc+TPbkdF5ydIV\nW3JA5Hyn1NTfRv7DR0dgdNM1Znd4cEHgKpADIzdtBDi8T24I1BfRVU8+J8Yi\nWcATljfEbGqTx9pqoAIlBSDu639fJQf+iAlHDut2mSlm0Yd295DtQuHUVVtX\nq3LDbwYxJAvnjShFXeyOfpeSZ4w9ux5TeFK/3zPErQ2hAcUknHEmAaHTT1sI\npXRG\r\n=sYZ4\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCKM0ZjzeYUiFHujgLrOIwLL5gbi3wEoJUL2YwcxvGNkwIhAL8W3p8qFPxW2N7z9IA5hJuTuaxsoohQU3Ms7iNhESav"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.113_1618761433684_0.7550400254504384"},"_hasShrinkwrap":false},"0.0.114-alpha.0":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.114-alpha.0","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"ec2ef9c31e0a9b2b1f6b1b288f79736e24477f43","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `(span: Span, req: express.Request, res: express.Response)` |\n| `moduleVersionAttributeName` | `string` | If passed, a span attribute will be added to all spans with key of the provided `moduleVersionAttributeName` and value of the patched module version |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if client sent request with invalid path or method (resulting in 404). This can be useful to filter out requests from internet bots which try to call common routes on servers.\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route, which can be useful to observe express internal components, with the cost of more spans in each trace.\n* Set few alternatives for route attribute, each with different level of cardinality vs accuracy.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.\n* Distinguish between handled requests (ended from user middleware), and unhandled (terminated from express built in 'finalhandler').","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.114-alpha.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","dist":{"integrity":"sha512-xD7MDIfzXn2DH6eZvhDFrOeeY1YHyPpL6HqhfvYicHEBHTRMgJ+3O0Lv8k4pvgVA7RjsiynI031LbFV54E7VTw==","shasum":"df8925effb145ea6a60b485d7ac30d35625b024c","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.114-alpha.0.tgz","fileCount":22,"unpackedSize":68220,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghTNHCRA9TVsSAnZWagAAoIcP/0iKqjapVVS9VLMJ30We\nA+tDBkMq0hkcIk0W9sMNeBvsgUjQ2LgeLmnapJNJjpSkQdVYw3VIWdJCV2Km\nCzrpwu8Oj+X1lNqnzWjiZ0VhGL3Yn8WTXnxFtkhhROT6srUZ8rfK+5ZcVXGx\nOA2JOuMaW8GNwjf8gftDnG7o5cAPYUP531UwauIrATUIPdAHEy56KeepbFUW\nhkoAf1fxNEn9a8vf9lJ4/uIU6p0HAI6EiLh5T73eQi1/gvKyYLqxl6JBGuHI\nA6np/Tt4CwkEW5NuI+/kQN7BumHw+IWQj9FreaBbY4g9StAnTCAeFfLJAu0Y\nLXy+N0kbQ2dEw5vsU4sgmyUZZnVFkkHbcjusM6097YI0du3d2HKsrfUj4B8g\nLxQAjbgZX0xR0jc5l1RZMeDuRQmYnFGPt6Bk0J9X+/umrv3sBjzH+4WRWWya\nTqzKmJB19OcfTAOt1nz6N0EOhGUKao6dK/IQDaFcciK6q+JXk1aQLkC5p5Pr\n3CnYt+GDQ60a2A3EdKvdHQhhJo7zVx04mTznvvYYOOwPBN3MsZqfe5Bu0XU1\nOYVCZDlTW2pAB4baxcS8ubuY/k67lmTUTGrBgwVpl6tyQy784w93sDadeYAg\nDvdsZb/3WFtAqTfITWj71+rAwkMmDZNfGR0eqPbDTN2AfNvMMNtULzRqa4fy\nlSU5\r\n=fExf\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCzLk/h7Bi+xw58+y0eHknDogHyqOfEUwJpwu981kw/pAIhALvPI/PINRkvseO/2xaRsI7c7g27mnoim1qIy85jBheh"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.114-alpha.0_1619342151414_0.34144104420047405"},"_hasShrinkwrap":false},"0.0.114-alpha.4":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.114-alpha.4","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"0da60a387f5abd6b6f1a151f14aad0dc113d35e6","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `span, { moduleVersion, req, res }` |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if client sent request with invalid path or method (resulting in 404). This can be useful to filter out requests from internet bots which try to call common routes on servers.\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route, which can be useful to observe express internal components, with the cost of more spans in each trace.\n* Set few alternatives for route attribute, each with different level of cardinality vs accuracy.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.\n* Distinguish between handled requests (ended from user middleware), and unhandled (terminated from express built in 'finalhandler').","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.114-alpha.4","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","_npmUser":{"name":"amir.aspecto","email":"amir@aspecto.io"},"dist":{"integrity":"sha512-gzs6OHOcTtWk9p5XK1gCzh/DQzxTs/m3S1HkqRwZV+L137R3EvnQgxvEkxqoZNMmhy3ctVXzjSY0/NtPdfKaVQ==","shasum":"4011f109cfc90f49082f2d910a0817dbcee39dcf","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.114-alpha.4.tgz","fileCount":22,"unpackedSize":63380,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghnROCRA9TVsSAnZWagAAfZcP/08JTpkIzlFOB1qK0KGa\n/PY+r+MH524L6USYBcS+lWmOWwzNLIw6OYKKtgrph1hzNUUdsiIDXreFA9Tq\noeA/f/UMQA0KXgVmlf6FE0ZlOOsPPPNdeBnmPw1HsZVo2ZFtk16tRLK2KjdE\n0/e/ILEs46rjMLAobk6n1jpck5CyagbdOIWPDHnYrv73RQOWHb7GJ9TKhYfr\nLT4USmZ89V0eDb2OQdM6AVelxjCcQk5m0B1fpULq8iXyfOdsPoqMlePFDtmg\nle8RXAikXmr758vvacdnI0VcAGfYTLj5WKp+nlBIuFADRYyNwX2mi4DO57W3\ng5xJOcFPVp4gDt6oBKa6c1jjhUoXdiq+M2LfRzjMALMeKyvbzj6LlUt3lLgb\nwnQqX8lvdqab0JKLl6i8cCah0LYTIStWC0dBcRGLszvbC8zPPrHMS1wIPEzf\ndqxEMuYElrB1+Hy8hAE8596xY+nBfTfI7Dofiy3cxAYtfSrdqDewbJYv0Opf\nKYf6eBre59Z9kEth2YCYM42QWZMAlIoLdpy787ohjBaf6nJeF65XLOgneqwz\nA721vkHBiIccQB8Wo+8hxnOscN7E9y8VsClqTnAaqJt7sRKcmTNkzHQ+tMQP\n0m0cBaqN2zCRNIxJcnMJfhDz+Dfsnxj1eEAEFWAxS0zmB8Hs905bxUb1LGbJ\n/y2t\r\n=iCb7\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIH0TftU2VA2iqOH0xruZrMkgTeWWNyvo881Np9NLTk1SAiA/xn47JwhlsccwufDurMmvKK6YeOpj7a7/rNfpuCHbQg=="}]},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.114-alpha.4_1619424333970_0.2586066891612251"},"_hasShrinkwrap":false},"0.0.114-dev.0":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.114-dev.0","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"b6b412bfe2a0471fc23977b75c3d8054772833f1","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `span, { moduleVersion, req, res }` |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if client sent request with invalid path or method (resulting in 404). This can be useful to filter out requests from internet bots which try to call common routes on servers.\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route, which can be useful to observe express internal components, with the cost of more spans in each trace.\n* Set few alternatives for route attribute, each with different level of cardinality vs accuracy.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.\n* Distinguish between handled requests (ended from user middleware), and unhandled (terminated from express built in 'finalhandler').","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.114-dev.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","dist":{"integrity":"sha512-EoMrE3PSmK49p1coNl46sJDnUjp92Pgi0IdXcokbNOhdrpd+gQsxvOe2Wl7rjvLfzTy0b1l4w2K2mvFjhWoX5Q==","shasum":"568e566ff452e8af88b0ae6bfef01aebdaeb533e","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.114-dev.0.tgz","fileCount":22,"unpackedSize":63597,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJghrKxCRA9TVsSAnZWagAAhBkP/342JLV1JW3k+OZqy4rT\nImq4A3frMvC1nqmAu5FXmGuR3JgigMDbhs/2ZAx2zrU/qE2Yu88yoeXAjp/K\nbXgOwMi3fO9bX/yC4KxfPCPCKT9HcztVyxFlV3Kauy47owWnmvXBijTZq1TP\n9vZL00ddy/05Oe7x982bAf8Z+32wbb43/b1ZVGMyNjXqXRYGtG31zeAY4K+h\nGE0GIsXk6jOQ0WgHW2PXEXi54i7BT12vUdjB2xU1ZDK7zIiBAT1CN4RMUCxU\nibXgDn7ye+vDmjMxBcaIWQWv87SiJdl+pSuuqUR+/l5Pcj5L+BAkT1xbT0lP\ncTSYll/XyorBI/N0aveoFfnIi6YAZUlSa9XcxyXNRqIgYxRfn9XD8X9/8SRS\nACQJypZyZFOIND94ABIy9JyAamu074+7YGB1BW2DJvbh2bq1rx6W5lyyMDeD\n3squjHLOLHbG6nhzna9GVT+TTr3Eq4Mdkh+STwYcKDXCDdTGMAk6CN6EqCLo\nTrNToEfHtobw4VOYnb4/0zSBQ6mABfjTOcb3dLq7EyKXqplimP5X0Xlh+64f\nVydt2T8xeagaDatAdNiTjR0Hm7dCcGq/JgbN4MREfWPrLoA4PDt0q8vdn9qE\nB2xh7fOnAlchfeoFhe4xBz0sSeauJespn27gGnJxNIGyu+eZZb/UlFmMDKk5\n2E3H\r\n=Fr9G\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCTYwy++tlfP+PvHk0WdRF/BIHlN081KoRkhxs9wWDQqQIhAOvkEZNVxbFH7ag9tjlqDLNcnGsIIEx8eNrQ01Mh209J"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.114-dev.0_1619440304761_0.8236861348226485"},"_hasShrinkwrap":false},"0.0.114":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.114","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"5b2bba34e93b09f6371ffd423afa4fd4183c1f6c","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.114","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-4dV5dG4dC6mbKJHqltG/I0GCqtYD//Fi5SpsWQcTdZm4NVjgcmmbTujHL+FsV6ou86/TrVu+9Eiy/y65Kb2s8w==","shasum":"cceb967685ca5543b19ac6d487b5fc7714696a7a","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.114.tgz","fileCount":18,"unpackedSize":62439,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgh7TUCRA9TVsSAnZWagAAQi4P/0Aj+Ye9fWvtinIxybRp\nNaNXx13O2iyHk2Y6ec/OzfssjmtLed5UKrORBrlqes0t/97R18qjtr65S6Xn\ndyoPshAOKJweKeFldhc6hqST3hP/6o0AcDk51pk/+ZT8sOzilIwDAQywtpDa\nNAJDF8AzA5WOUdp59n6rVs+NfC1fy1VurZVcqXGBcE5IXLgkRxIaLkWmOuyQ\nWzjGRKTxhZ7eXgVX5GzP1rfrGjT+eCeIKXoswVY0fTP0viYl5HBv3ye9umko\nYSpKfEJiOHL0HBZbavE3bh+igd+uVYQQ/SS39lDCP6jX+CNUSeB5bwm7f6yx\nr3nZOus2aliHFq4r+pInBIcfokLncKxJmLmIY5xdwkVQpC1Hz8dY6yzzzYnE\nonMuTJ2RZf2qL7BMQD5TcaDbTiM/DtVwMQNWwiILD0LbLZVjqOPg2anKdjIq\nJUhJUk0sgI/oCxnkt/3uW8a5dzA/xAfuc9KO34Q12/AkElUMAmFR2Vuveo1y\nSExfqNAMR3IXAzvLf2bvccOPAwvb8swamMRIGR9JOuxhdX1hoLgxzvLt7VjF\nZcjj0jnGOML9cPecc+aI4M0+Jfibnj654jVJtI1pWrgxyNBVo076YaJ1fRxN\nrDUUxHuEZ8WKVW5BEq5OO38NXM1CLLBdEP6FqkV2f8NuKioDhEl9HAByBjZp\n3WJg\r\n=rn9F\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIGxSOn+HIbnNDoJrtJRpSO91beuiVlmEfRBfx8Cpuu/HAiBXcB3NE/j1bRQTleS+3qVdQ1vI9MYqqd33DxIk//blaw=="}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.114_1619506388178_0.4797503364270257"},"_hasShrinkwrap":false},"0.0.115-dev.0":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.115-dev.0","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^1.0.0-rc.0","@opentelemetry/instrumentation":"^0.19.0","@opentelemetry/semantic-conventions":"^0.19.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.19.0","@opentelemetry/tracing":"^0.19.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"3560592806b9ff39dce205130c89972f21e57d83","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `span, { moduleVersion, req, res }` |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if client sent request with invalid path or method (resulting in 404). This can be useful to filter out requests from internet bots which try to call common routes on servers.\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route, which can be useful to observe express internal components, with the cost of more spans in each trace.\n* Set few alternatives for route attribute, each with different level of cardinality vs accuracy.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.\n* Distinguish between handled requests (ended from user middleware), and unhandled (terminated from express built in 'finalhandler').","readmeFilename":"README.md","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.115-dev.0","_nodeVersion":"12.18.3","_npmVersion":"lerna/3.22.1/node@v12.18.3+x64 (darwin)","dist":{"integrity":"sha512-VYIsm3Q5Wu6e3RM8j/qwfJeffT4CwPb1H/GyzZHFKoWUGLnCCuuSvulkEXBr7wtxl1l/pFGIASoASrFsF4fu/w==","shasum":"1a927ed1b05828bfda4153f5b8176519b54c1c42","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.115-dev.0.tgz","fileCount":22,"unpackedSize":63846,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgiCyZCRA9TVsSAnZWagAA/iEQAIL4BkKJn3TUdW3nDzRL\nMDpmdGxbP/rfpjT/1ERffJS3gwO021RohS9NdlRk9Wdr1EtsX+3HbuQWD238\nfqKf1pp8f2CeMzHBKK1JNSgU6dwKauTu7f4gRuaXdTVPXGVcC0+UTxW7a2C0\nFm/KQz2u+pU3EVBv363YYH23usMA4OvCyK86/LY3BI9QwZp4lX1Ma0CXqSSw\n/ZAcQJdxBn6ZiR1iYtgg+PEY63BjnOFa/ADyhpQ+emNR7wGIFCcCniIAdIl6\nFYXQ7xnHNzCKP0mg7YLjHQaolSiE3pOab7Kd91McNPp8K3v1AqSpGLUA+CqZ\nDk66wvbHuaE6JhZAkkybs6wcmszXdiMM9+VTmHhv4ncictYToixZgC/doCPt\n8Kn/bj0YJN57U7M4HHKn7h9INvMNWdJREUmNJecmp/wjldzGnYefj7q4+Hti\nOIWAFAKExICN9ur2ILg3wwsCovAc011Q5wVyRx1LVknRTgbBqn5KXbRELYjF\nGa9ojo0a1m2ZvWVg/gE0Y2zkkSyU+myWg12qLs+E3MQaDFdO5i9jwQtwWMwZ\njGKuMdNEdNXMIJz2d5f0BDuVq9ITjfiBedj/QcqpGQV/wXhLkn4FWtTVCxnV\nxB1VyTVNgEUxT6fCOEOKOQcA7G21wxubl/0kqcbazbHUyAWQO/1TuUe405do\n4I/C\r\n=pt2V\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC369CFfEPVzmjf1MTIBgRKs9JcdO5SVZ4CCSeWj1WYMAIhANrA/map2GP2jSnKFPGRnFp8g10TMHq/G9Gdh10dm3Xe"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.115-dev.0_1619537049232_0.01007138820309561"},"_hasShrinkwrap":false},"0.0.115":{"name":"@aspecto/opentelemetry-instrumentation-express","version":"0.0.115","description":"enhanced open telemetry instrumentation for the `express` web framework","author":{"name":"Aspecto.io"},"license":"Apache-2.0","main":"dist/src/index.js","types":"dist/src/index.d.js","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"scripts":{"build":"tsc","prepare":"yarn run build","test":"mocha","watch":"tsc -w","version:update":"node ../../scripts/version-update.js","version":"yarn run version:update","test-all-versions":"tav"},"publishConfig":{"access":"public"},"dependencies":{"@opentelemetry/api":"^0.18.0","@opentelemetry/instrumentation":"^0.18.0","@opentelemetry/semantic-conventions":"^0.18.0"},"devDependencies":{"@opentelemetry/instrumentation-http":"^0.18.0","@opentelemetry/tracing":"^0.18.0","@types/express":"4.17.8","@types/mocha":"^8.2.2","axios":"0.21.1","body-parser":"^1.19.0","expect":"^26.6.2","express":"4.17.1","mocha":"^8.3.2","test-all-versions":"^5.0.1"},"mocha":{"extension":["ts"],"spec":"test/**/*.spec.ts","require":"ts-node/register"},"gitHead":"e144e61b5240f815c6d5482b241de7a9ea4f12ff","bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","_id":"@aspecto/opentelemetry-instrumentation-express@0.0.115","_nodeVersion":"14.16.1","_npmVersion":"lerna/3.22.1/node@v14.16.1+x64 (linux)","dist":{"integrity":"sha512-5l/GIgtqEaLY082hSr7N9nZKKZWNRGGMrBpl1pkVH8bVO46YucwRGAT/Mdk9JwRReWys5tcXee1P8n9BzWm0BA==","shasum":"116f1a51805cdff15584be887772698eaaabfe82","tarball":"https://registry.npmjs.org/@aspecto/opentelemetry-instrumentation-express/-/opentelemetry-instrumentation-express-0.0.115.tgz","fileCount":18,"unpackedSize":62642,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJgmNSfCRA9TVsSAnZWagAA5+EQAIo9LucUgTN0pQCcAGVT\nuMK5GyrKKKndBfm4wqNzx8/BngQEOIeXaudjzjcWUpJuDg5+P3ha7mwk9wcv\nSVKEooKCxyovbCq6LZtZ213j4uwtRjYEWOrCl8GnHaW7VenP6mcetr92xXsk\nqarTkwoQK46N4pv9+tk+XAPMAKV2UyWFFcQiK2iOu+o61rCuHnm0VXxNz7pO\nRIq6UEuLdU/E3H8DatcZOhTdJ1MdZQChTXNAj4pxlApzOM2cU2Zq2p+jDvas\neC9XAcxOocAoz7Q/pXbyRGRSFzvXJXBrpyHPUZ99lUKgmt/JNngV6PXDmBma\n4Okrpzp27i4XTCM/H2mxOGtlUQziLjYlKUsFBl9t+Dy9HbS7RjLVHj4/YkWz\n8nvi7w9sjzHqMHTjwEHJhs0eQGZ0iH6Dvexht/mAWT8PF0/V7BWREwVXA/XD\nchGc2y/0yH6FEX9+EWWfPUls34mYu4YGi6LfZ10z6Yvy6dBUBQgYyEppTbo0\nmLpN57aYH/4U3Zb19pfrQ6fGrQ+k2p5YjxR/ycCv6aXYRE0vs0I8fEmOF2Wz\nDlhjeGb53qPF+8SY/yP/BuA6ETqtr+jQHpC37GRMEGUKRGibTGFdkKamNQA9\nnQmsXSkns+Ul6Oi5kubl5SJpba+glhuCOHT4vPHslVijQBppG9kMqxgT1/CW\nohpp\r\n=f9Vq\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQDe+qFhGGPTD0gDx86xnf5hFmfb22KEzHTKmOYk/Ic8wwIhALgY5Sao0ZgSZkqJEprdAQLplwCi7tefOrKP86VdhQK2"}]},"_npmUser":{"name":"aspecto-release-bot","email":"dev@aspecto.io"},"directories":{},"maintainers":[{"name":"yanivd","email":"yaniv@aspecto.io"},{"name":"andriy-aspecto","email":"andriy@aspecto.io"},{"name":"habmic","email":"michael@topsight.io"},{"name":"nirsky","email":"nir.hadassi@gmail.com"},{"name":"mzahor","email":"marian.zagoruiko@gmail.com"},{"name":"amir.aspecto","email":"amir@aspecto.io"},{"name":"aspecto-release-bot","email":"dev@aspecto.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/opentelemetry-instrumentation-express_0.0.115_1620628638612_0.01230680496785852"},"_hasShrinkwrap":false}},"time":{"created":"2021-02-17T15:04:28.374Z","0.0.100":"2021-02-17T15:04:28.737Z","modified":"2022-04-04T15:48:19.830Z","0.0.101":"2021-02-17T15:45:26.242Z","0.0.102":"2021-02-18T13:30:19.096Z","0.0.103":"2021-02-28T12:45:49.961Z","0.0.104-dev.0":"2021-03-03T08:17:34.959Z","0.0.104":"2021-03-04T11:44:52.269Z","0.0.105":"2021-03-04T13:33:46.884Z","0.0.106":"2021-03-07T15:49:49.004Z","0.0.107":"2021-03-11T14:04:44.223Z","0.0.108-express.23":"2021-03-21T09:25:21.186Z","0.0.108":"2021-03-24T09:18:25.704Z","0.0.109-express-context.0":"2021-03-24T11:02:26.153Z","0.0.110":"2021-03-24T16:39:50.998Z","0.0.111-otel-v0.18.1.0":"2021-03-30T12:17:02.216Z","0.0.111-otel-v0.18.2.7":"2021-04-05T15:47:50.571Z","0.0.111-otelv0.18.2.7":"2021-04-05T15:50:08.992Z","0.0.111":"2021-04-06T07:05:26.418Z","0.0.112":"2021-04-06T10:24:42.044Z","0.0.113":"2021-04-18T15:57:13.826Z","0.0.114-alpha.0":"2021-04-25T09:15:51.594Z","0.0.114-alpha.4":"2021-04-26T08:05:34.083Z","0.0.114-dev.0":"2021-04-26T12:31:45.505Z","0.0.114":"2021-04-27T06:53:08.309Z","0.0.115-dev.0":"2021-04-27T15:24:09.374Z","0.0.115":"2021-05-10T06:37:18.722Z"},"maintainers":[{"email":"michael@topsight.io","name":"habmic"},{"email":"amir@aspecto.io","name":"amir.aspecto"},{"email":"dev@aspecto.io","name":"aspecto-release-bot"},{"email":"andriy@aspecto.io","name":"andriy-aspecto"},{"email":"yaniv.davi@gmail.com","name":"yanivd"}],"description":"enhanced open telemetry instrumentation for the `express` web framework","homepage":"https://github.com/aspecto-io/aspecto-opentelemetry-js#readme","repository":{"type":"git","url":"git+https://github.com/aspecto-io/aspecto-opentelemetry-js.git"},"author":{"name":"Aspecto.io"},"bugs":{"url":"https://github.com/aspecto-io/aspecto-opentelemetry-js/issues"},"license":"Apache-2.0","readme":"# `aspecto-opentelemetry-express`\n\nThis module provide enhanced instrumentation for the `express` web framework.\nThe instrumentation conforms to the [Semantic conventions for HTTP spans](https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md).\n\n## Supported Versions\nThis instrumentation supports `^4.9.0`: all versions >= `4.9.0` (released 2014) and < `5.0.0` (in alpha).\n\n## Usage\nThis instrumentation is automatically used by `aspecto's` tracing library.\n\nTo manually add it to a trace provider:\n```js\nconst { NodeTracerProvider } = require('@opentelemetry/node');\nconst { registerInstrumentations } = require('@opentelemetry/instrumentation');\nconst { ExpressInstrumentation } = require('@aspecto/opentelemetry-instrumentation-express');\n\nconst traceProvider = new NodeTracerProvider({\n  // be sure to disable old plugin\n  plugins: {\n    express: { enabled: false, path: '@aspecto/opentelemetry-plugin-express' }\n  }\n});\n\nregisterInstrumentations({\n  traceProvider,\n  instrumentations: [\n    new ExpressInstrumentation()\n  ]\n});\n```\n\n\n### Express Instrumentation Options\n\nExpress instrumentation has few options available to choose from. You can set the following:\n\n| Options | Type  | Description |\n| --- | --- | --- |\n| `requestHook` | `RequestHook` (function) | Hook for adding custom attributes before express start handling the request. Receives params: `span, { moduleVersion, req, res }` |\n\n## Semantic Behavior\nExpress auto instrumentation will create a single span per request with the following attributes.\nDetailed specification and cases can be found [here](./doc/attributes-specification.MD).\n\n### `http.route`\nThis is a conventional http attribute, which is collected by express instead of the http module (which is not aware of the route). It will always contain path-parameterized data with low cardinality (no ids), but might be missing parts of the path in case of early termination or middlewares that accept any path.\n\nExample: `/api/users/:id`\n\n### `express.route.full`\nThis attribute will always contain the entire path. The part of the path that has been consumed by express will be shown as is (parameterized), and the leftover will be concatenated after (due to early termination or middleware that accept any path).\n\nExample: `/api/users/:id/books/758734` (The `:id` part was consumed, but the `bookid` part was not).\n\n### `express.route.configured`\nThis attribute is relevant when user configures multi path options for the same middleware. It reduces even further the cardinality space compared to `http.route`, and supply more info about how the app routing works.\n\nExample: `/api[\"/foo\", /\"bar\"]` - meaning that the same endpoint is triggered by routes `/api/foo` and `/api/bar`.\n\n### `express.route.params`\nThis attribute holds a json stringified map, where the keys are the url path param names, and the values are the matched params from the actual url.\n\nExample: `{\"id\":\"1234\"}`. \n\n### `express.unhandled`\nSet to true when request was not handled by any middleware in express, and got fallback to the default app `finalhandler`. This can happen if client sent request with invalid path or method (resulting in 404). This can be useful to filter out requests from internet bots which try to call common routes on servers.\n\n### `express.instrumentation.errors`\nIn case of internal error in instrumentation, this attribute will contain the error description. There are no known valid use cases which are expected to produce this attribute.\n\n## Difference from [@opentelemetry/instrumentation-express](https://github.com/open-telemetry/opentelemetry-js-contrib/tree/main/plugins/node/opentelemetry-instrumentation-express)\n\n* This instrumentation is focusing on extracting the most accurate and complete `route` data, in any valid express edge case. Contrib instrumentation does a good job for common cases, but miss nuances on complex setups.\n* This instrumentation create a single span per request. Contrib instrumentation creates span per express Router/Route, which can be useful to observe express internal components, with the cost of more spans in each trace.\n* Set few alternatives for route attribute, each with different level of cardinality vs accuracy.\n* Allows to set `requestHook` for adding custom attributes to span, as well as ability to capture express version into user defined attribute.\n* Distinguish between handled requests (ended from user middleware), and unhandled (terminated from express built in 'finalhandler').","readmeFilename":"README.md"}