-
Notifications
You must be signed in to change notification settings - Fork 339
Allow blocking on fastify cookie #5910
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
Overall package sizeSelf size: 9.74 MB Dependency sizes| name | version | self size | total size | |------|---------|-----------|------------| | @datadog/libdatadog | 0.7.0 | 35.02 MB | 35.02 MB | | @datadog/native-appsec | 8.5.2 | 19.33 MB | 19.34 MB | | @datadog/native-iast-taint-tracking | 4.0.0 | 11.72 MB | 11.73 MB | | @datadog/pprof | 5.8.2 | 9.56 MB | 9.93 MB | | @opentelemetry/core | 1.30.1 | 908.66 kB | 7.16 MB | | protobufjs | 7.5.3 | 2.95 MB | 5.6 MB | | @datadog/wasm-js-rewriter | 4.0.1 | 2.85 MB | 3.58 MB | | @datadog/native-metrics | 3.1.1 | 1.02 MB | 1.43 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.14.0 | 120.58 kB | 841.68 kB | | source-map | 0.7.4 | 226 kB | 226 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.1 | 109.9 kB | 109.9 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.2 | 53.63 kB | 53.63 kB | | istanbul-lib-coverage | 3.2.2 | 34.37 kB | 34.37 kB | | rfdc | 1.4.1 | 27.15 kB | 27.15 kB | | @isaacs/ttlcache | 1.4.1 | 25.2 kB | 25.2 kB | | dc-polyfill | 0.1.9 | 25.11 kB | 25.11 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | shell-quote | 1.8.2 | 23.54 kB | 23.54 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | semifies | 1.0.0 | 15.84 kB | 15.84 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | ttl-set | 1.0.0 | 4.61 kB | 9.69 kB | | mutexify | 1.4.0 | 5.71 kB | 8.74 kB | | path-to-regexp | 0.1.12 | 6.6 kB | 6.6 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | module-details-from-path | 1.0.4 | 3.96 kB | 3.96 kB |🤖 This report was automatically generated by heaviest-objects-in-the-universe |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #5910 +/- ##
==========================================
+ Coverage 80.75% 80.79% +0.03%
==========================================
Files 462 467 +5
Lines 19924 20019 +95
==========================================
+ Hits 16090 16174 +84
- Misses 3834 3845 +11 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Datadog ReportBranch report: ✅ 0 Failed, 1253 Passed, 0 Skipped, 17m 36.43s Total Time |
bdfd56f
to
d4fcd49
Compare
BenchmarksBenchmark execution time: 2025-06-24 10:06:39 Comparing candidate commit 5e07eed in PR branch Found 0 performance improvements and 0 performance regressions! Performance is the same for 956 metrics, 32 unstable metrics. |
d4fcd49
to
cc4df74
Compare
arguments[arguments.length - 1] = function (err) { | ||
publishError(err, req) | ||
|
||
const hasCookies = request.cookies && Object.keys(request.cookies).length > 0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
eeeeh, usually we check that in the listener instead, not sure it makes a big difference, but when debugging it's nice to still have the DC event fired, even if it is with empty object
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't want to create an AbortController
as it's an expensive operation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I talked with Ruben in slack about this last time, and from what I understand, it's really not THAT expensive, it's just a new object, nothing crazy
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think his definition of "expensive" wasn't what we understood from it
// done callback is always the last argument | ||
const done = arguments[arguments.length - 1] | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
why add this ? there can be more arguments between reply and done ?
if that's the case, there was a bug before no ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hook could have 3 or 4 args https://fastify.dev/docs/latest/Reference/Hooks
Could you check now
@@ -45,16 +46,35 @@ function wrapAddHook (addHook) { | |||
|
|||
if (typeof fn !== 'function') return addHook.apply(this, arguments) | |||
|
|||
arguments[arguments.length - 1] = shimmer.wrapFunction(fn, fn => function (request, reply, done) { | |||
arguments[arguments.length - 1] = shimmer.wrapFunction(fn, fn => function () { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if you remove the arguments from the function signature, you potentially break any behavior in the framework, that might be checking "func.length" to detect the type of callback it is and what arguments to pass it
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it is checked 2 lines above
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what ? I think you're misunderstanding my comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
he removed the request, reply, done arguments from the function signature, thus if code in fastify checks for this callback length, it will be wrong no ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes sorry, I misunderstood it. you're right.
const zlib = require('zlib') | ||
const fs = require('node:fs') | ||
const agent = require('../plugins/agent') | ||
const appsec = require('../../src/appsec') | ||
const Config = require('../../src/config') | ||
const { json } = require('../../src/appsec/blocked_templates') | ||
|
||
withVersions('fastify', 'fastify', version => { | ||
withVersions('fastify', 'fastify', '>=2', version => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
aren't you removing coverage for fastify v1 by doing this ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We do not support fastify v1, I will add this to the documentation
What does this PR do?
Allow blocking on fastify cookie @fastify/cookie library
Motivation
Plugin Checklist
Additional Notes