Make tsc happy when using strings as Date in embed

Validation on embeds has interesting behavior. Embeds have a `timestamp`
property that is of type `Date`. However when providing a Date,
`WebhookExecuteSchema` silently ends the operation.

The resolution was to use strings and to annotate them with `//
@ts-expect-error`. This was not my first choice, but it was the best
option I saw.

The other option is to allow `Embeds` to pass strings as a timestamp but
I'd want a second opinion before making that change.
This commit is contained in:
Zane Helton 2025-06-29 11:34:57 -04:00
parent 9143c1d408
commit 590331518c
2 changed files with 22 additions and 2 deletions

View File

@ -29,6 +29,7 @@ const parseGitHubWebhook = (
req.body = discordPayload; req.body = discordPayload;
// Set default wait=true for GitHub webhooks so they get a response // Set default wait=true for GitHub webhooks so they get a response
req.query.wait = req.query.wait || "true"; req.query.wait = req.query.wait || "true";
next(); next();
}; };
@ -51,6 +52,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -67,6 +69,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -83,6 +86,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -99,6 +103,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -115,6 +120,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -131,6 +137,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -150,6 +157,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -166,6 +174,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -182,6 +191,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -201,6 +211,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -222,6 +233,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -238,6 +250,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -258,7 +271,8 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// TODO: Improve this by adding fields for recent commits // TODO: Improve this by adding `fields` to show recent commits
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -276,6 +290,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -292,6 +307,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -314,6 +330,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -336,6 +353,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -352,6 +370,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],
@ -368,6 +387,7 @@ function transformGitHubToDiscord(
thumbnail: { thumbnail: {
url: payload.sender?.avatar_url, url: payload.sender?.avatar_url,
}, },
// @ts-expect-error Validate using string in schema
timestamp: new Date().toISOString(), timestamp: new Date().toISOString(),
}, },
], ],

View File

@ -74,7 +74,7 @@ const messageUpload = multer({
router.post( router.post(
"/", "/",
messageUpload.any(), messageUpload.any(),
(req, res, next) => { (req, _res, next) => {
if (req.body.payload_json) { if (req.body.payload_json) {
req.body = JSON.parse(req.body.payload_json); req.body = JSON.parse(req.body.payload_json);
} }