Description
Describe the bug
I'm currently using the datadog api client within my cloudflare worker and I recently updated the client from version 1.24 to 1.27. I ran into this error since the update:
"TypeError: Illegal invocation: function called with incorrect `this` reference. See https://developers.cloudflare.com/workers/observability/errors/#illegal-invocation-errors for details."
I took a look at the changes across the different versions and found this PR:
#1646
It looks like that might be that change that caused the error I started observing. I was able to resolve my problem by downgrading back to 1.24.
To Reproduce
Steps to reproduce the behavior:
Try calling a datadog api client within a CF worker context. It's tail logs describe the error I shared.
(I can provide a repo which can be used to test if that's desired)
Expected behavior
I would like to expect that the latest datadog client continues to send requests in my cloudflare worker.
Screenshots
n/a
Environment and Versions (please complete the following information):
A clear and precise description of your setup:
handler: ExportedHandler = {
fetch(request) {
const logItems: HTTPLogItem[] = new Array<HTTPLogItem>();
const conf = client.createConfiguration({
authMethods: {
apiKeyAuth: env?.["DD_API_KEY_SECRET"],
appKeyAuth: env?.["DD_APP_KEY_SECRET"],
},
});
const logsApi = new v2.LogsApi(conf);
const params: v2.LogsApiSubmitLogRequest = {
ddtags: "env:" + env?.["APP_ENV"],
body: logItems,
};
// This line throws
// vvvvvvvvvvvvvvvvvvvvv
await logsApi.submitLog(params).catch((e) => {
// This log is recorded 100% of the time
console.error("Error submitting logs to datadog", e);
});
// ^^^^^^^^^^^^^^^^^^
return new Response("OK");
},
}
-
version for this project in use.
1.27 (but it looks like any version that is 1.26 or later) -
services, libraries, languages and tools list and versions.
package.json:
{
"name": "cloudflare-logger",
"version": "0.0.0",
"private": true,
"dependencies": {
"@cloudflare/workers-types": "^4.20240405.0",
"@datadog/datadog-api-client": "1.27.0",
"cloudflare": "^3.0.0",
"tough-cookie": "^4.1.3",
"zod": "^3.22.4"
},
"devDependencies": {
"@babel/runtime": "^7.24.4",
"@testing-library/jest-dom": "^6.4.2",
"@types/jest": "^29.5.12",
"@typescript-eslint/eslint-plugin": "^6.21.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-config-standard-with-typescript": "^43.0.1",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jest": "^27.9.0",
"eslint-plugin-n": "^16.6.2",
"eslint-plugin-prettier": "^5.1.3",
"eslint-plugin-promise": "^6.1.1",
"jest": "^29.7.0",
"jest-axe": "^8.0.0",
"jest-environment-jsdom": "^29.7.0",
"jest-esm-transformer-2": "^1.0.0",
"npm": "^10.5.2",
"prettier": "^3.2.5",
"ts-jest": "^29.1.2",
"typescript": "^5.4.5",
"wrangler": "^3.50.0"
}
}
Additional context
I am guessing this has to do with the CF runtime releasing the this
reference in the PR when the client attempts to make the fetch request call.