From 39af71131a39e2144823841a41aa829440bdbe4f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 20 Mar 2025 08:33:16 -0700 Subject: [PATCH 1/4] modified webhooks to match djs webhook send format --- assets/openapi.json | Bin 627310 -> 628420 bytes assets/schemas.json | Bin 25370417 -> 25371287 bytes src/util/schemas/MessageCreateSchema.ts | 2 +- src/util/schemas/WebhookExecuteSchema.ts | 15 ++++++++++++++- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/assets/openapi.json b/assets/openapi.json index b78f33e563f7a5d568b9252ea7a942fad598e95e..edd49baa131f578e833f3a086fe214ffbef032ba 100644 GIT binary patch delta 113 zcmaF2MD560wT2eP7N!>FEi9K8PFF}^l9+y9iaCAyd@p8?=?W%{64MvhGivjvq^4!& zWtL>-=N0P*FEi9K8PJh6}tlu87j0K2UftU@5*|$e5FMu-p@#3uHP6(WQn5+io(5h5a__7-A=9;NLqX_c=V-8zVBOVw&s z_ujkO>d>is58sdT{yPUxI3_sbm@-5Jm58J=RfwW0(Nv>4G1MTIIO0j5CbdYUHg%{= zJ?hhdhBTrvNi?A;&1g;wTGEQvw4p8SXiqX7=tw6z(}fhe(v4KQlSU7El1?vrlR+Q) z(vM8~lSMWI7|0+7lfw{(GK}GjU?ii+Wi(?L%Q(g}fr(6FGE>N7D$~ekIt9$2keL)Q zi`f)&33HgsJm#~2g)Cw*OIXS>ma~GDl(34`l(L4ktYbYJC}Sg=xD?pTWo%(9mvaSI zVyVC*&D_Fn_OO>*xsBVogFCs4yV=J*+{=C3&wdV2 z!9gD25D)SY4|A9!Ji<{P7>{$BCpg2CJjK&I!?Qfc^Sr=|yu{1A!mGT- z>%766yv5tR!@Io4`+UHMe8gEk<`X{U9G~$yU+^X8`HHXkhHv?f@43Ja{K!xI%rE@P zZ~V?5{K;SZ%|HChe_LhA5ppFtQm!mlk)!0Qa`H z*OBYW_2l|;1G%BxNNy}A$xY;@ax=NP+(K?Cw~|}SZRECcJGs4_EO(GQ%AMrSau+#8 z?kabaQ|0b*n%qO~DW}W5@WG&x_ME*Ho%)&U`J-A3kQkgjHzZ+q z`Th}#3gV+XCtVz(gR;%VnL+uX`Gvc4w`8a&C^(-yEGQ_ADhU=Bwyzdcq^2kAEQpK? zDz-(`-f}7@?qczWPvs;W*}A>_=p0>SZpgfl`5_BJ7KSVeSsbz?WNFBe)pIz~6!=@%3R8rl6r(sLC`l~op)dXD&j1E8h`|hDD8m@e2u3oB(TpLHv5aFp z4={m=Oky%qn94M!GlQATVm5P_%RJ_@fQ2k#F-us=GLl%%3LXR=;$a>knMYa4D$HX% zP6|)3nkRXRr+J2FNo5Udd5-6Kffsp+mwAPCyvlku@EWi425+*FO}xe1yu-V^$NOw% z3tQR7c6P9nUF>ELd)Y@C`$^{j2RX!HKHvx+a+G5n=L8?|F(*02X)-v&Cw$6he9jk~ zoaIMJ{ofD_rFoKl2N}@*CH=!SDRRpZvv5GP%Xy{KIYT z@Gt*ymwU;wsq+sW*g=zbGJlR}e2Q$kZi(?ZijGeR>%vqG~&b3$`N^Fs4O3qlJ+ Zi$aS-OF~OS%R)(^9V diff --git a/src/util/schemas/MessageCreateSchema.ts b/src/util/schemas/MessageCreateSchema.ts index 4eaf7c96..2538d39e 100644 --- a/src/util/schemas/MessageCreateSchema.ts +++ b/src/util/schemas/MessageCreateSchema.ts @@ -69,7 +69,7 @@ export interface MessageCreateSchema { } // TypeScript complains once this is used above -interface PollCreationSchema { +export interface PollCreationSchema { question: PollMedia; answers: PollAnswer[]; duration?: number; diff --git a/src/util/schemas/WebhookExecuteSchema.ts b/src/util/schemas/WebhookExecuteSchema.ts index 943cbe9e..c2617d12 100644 --- a/src/util/schemas/WebhookExecuteSchema.ts +++ b/src/util/schemas/WebhookExecuteSchema.ts @@ -17,7 +17,10 @@ */ import { Embed } from "../entities"; -import { MessageCreateAttachment } from "./MessageCreateSchema"; +import { + MessageCreateAttachment, + PollCreationSchema, +} from "./MessageCreateSchema"; export interface WebhookExecuteSchema { content?: string; @@ -43,4 +46,14 @@ export interface WebhookExecuteSchema { flags?: number; thread_name?: string; applied_tags?: string[]; + message_reference?: { + message_id: string; + channel_id?: string; + guild_id?: string; + fail_if_not_exists?: boolean; + }; + sticker_ids?: string[]; + nonce?: string; + enforce_nonce?: boolean; // For Discord compatibility, it's the default behavior here + poll?: PollCreationSchema; } From fdab1c9945afbeb0018a2aa19bcd4a438a737da5 Mon Sep 17 00:00:00 2001 From: root Date: Thu, 20 Mar 2025 08:59:11 -0700 Subject: [PATCH 2/4] Updated webhooks to accept params as provided by djs --- assets/schemas.json | Bin 25371287 -> 25370417 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/schemas.json b/assets/schemas.json index c4d03c9d29e498e141727278dfe064b8eb81e70a..eee1b9e0b83c1fe88a532fa3c45845d6565353e4 100644 GIT binary patch delta 986 zcmWl}Wq1%|0EN-#QX@t;3>e)pIz~6!=@%3R8rl6r(sLC`l~op)dXD&j1E8h`|hDD8m@e2u3oB(TpLHv5aFp z4={m=Oky%qn94M!GlQATVm5P_%RJ_@fQ2k#F-us=GLl%%3LXR=;$a>knMYa4D$HX% zP6|)3nkRXRr+J2FNo5Udd5-6Kffsp+mwAPCyvlku@EWi425+*FO}xe1yu-V^$NOw% z3tQR7c6P9nUF>ELd)Y@C`$^{j2RX!HKHvx+a+G5n=L8?|F(*02X)-v&Cw$6he9jk~ zoaIMJ{ofD_rFoKl2N}@*CH=!SDRRpZvv5GP%Xy{KIYT z@Gt*ymwU;wsq+sW*g=zbGJlR}e2Q$kZi(?ZijGeR>%vqG~&b3$`N^Fs4O3qlJ+ Zi$aS-OF~OS%R)(^9V delta 1090 zcmWm5XLyJQ07c>FMu-p@#3uHP6(WQn5+io(5h5a__7-A=9;NLqX_c=V-8zVBOVw&s z_ujkO>d>is58sdT{yPUxI3_sbm@-5Jm58J=RfwW0(Nv>4G1MTIIO0j5CbdYUHg%{= zJ?hhdhBTrvNi?A;&1g;wTGEQvw4p8SXiqX7=tw6z(}fhe(v4KQlSU7El1?vrlR+Q) z(vM8~lSMWI7|0+7lfw{(GK}GjU?ii+Wi(?L%Q(g}fr(6FGE>N7D$~ekIt9$2keL)Q zi`f)&33HgsJm#~2g)Cw*OIXS>ma~GDl(34`l(L4ktYbYJC}Sg=xD?pTWo%(9mvaSI zVyVC*&D_Fn_OO>*xsBVogFCs4yV=J*+{=C3&wdV2 z!9gD25D)SY4|A9!Ji<{P7>{$BCpg2CJjK&I!?Qfc^Sr=|yu{1A!mGT- z>%766yv5tR!@Io4`+UHMe8gEk<`X{U9G~$yU+^X8`HHXkhHv?f@43Ja{K!xI%rE@P zZ~V?5{K;SZ%|HChe_LhA5ppFtQm!mlk)!0Qa`H z*OBYW_2l|;1G%BxNNy}A$xY;@ax=NP+(K?Cw~|}SZRECcJGs4_EO(GQ%AMrSau+#8 z?kabaQ|0b*n%qO~DW}W5@WG&x_ME*Ho%)&U`J-A3kQkgjHzZ+q z`Th}#3gV+XCtVz(gR;%VnL+uX`Gvc4w`8a&C^(-yEGQ_ADhU=Bwyzdcq^2kAEQpK? zDz-(`-f}7@?qczWPvs;W*}A>_=p0>SZpgfl`5_BJ7KSVeSsbz?WNFB Date: Sun, 23 Mar 2025 16:28:25 -0700 Subject: [PATCH 3/4] Fixed errors in authorization for webhooks with tokens --- assets/openapi.json | Bin 628420 -> 637104 bytes assets/schemas.json | Bin 25370417 -> 25537875 bytes src/api/middlewares/Authentication.ts | 2 +- .../routes/channels/#channel_id/webhooks.ts | 36 +++- .../webhooks/#webhook_id/#token/index.ts | 139 +++++++++++++- src/api/routes/webhooks/#webhook_id/index.ts | 172 ++++++++++++++++++ src/util/schemas/WebhookUpdateSchema.ts | 23 +++ src/util/schemas/index.ts | 1 + 8 files changed, 365 insertions(+), 8 deletions(-) mode change 100644 => 100755 assets/schemas.json create mode 100755 src/util/schemas/WebhookUpdateSchema.ts diff --git a/assets/openapi.json b/assets/openapi.json index edd49baa131f578e833f3a086fe214ffbef032ba..df2e7d9092389108b8b77bd3c58d1c56ea0a50d7 100644 GIT binary patch delta 482 zcmZvWJxE(&6o&cEcfQ=4#i(E+4l&dpuv)#H3Sw)dgFgsnaOk3@Ai2@WAws3lW>A8e zE=GJokP6Z+tu%u8btrO0X$6G{T}l_TRCH38Duk9^GdPIDGrWg~_q==S&H2mb^sLyV z$ppTcR0sEw3d`wK5~VoV2v~jvouDlD+}wI5D1qY=JwW6{gzWMXr+~8|!#dk0hXlIY zWdZL7WFOpssKs%ev~&4s#@{p1ji@D?P$by_=OG(-`wT z{o(`fhTx{mR(&*Tu9N4O`+DUozY&No8I}5IL}f&7$T9G8OsygIgRgIr&OS5e2vak@ zUTy90C$aQLJx6?xTd;b{K^%PHpzht~Csp^AR|~i^@-ZCvOkK0fv*Nx#sJt=_O#PD8 z$iG(s#0QKJ^5@im)rjiQ)^BzMVnL%Fk#S$&?ee?jDN&x3SuC)J^6+^Wda+j&gdzo@_>F^OMd`decr_UZ4Xn6;)~_{?lN zy+MeXeftG-#)VAN4N6(`xBIMSIV?W?!aFvx?dca-d=Xrq_Imb)9%z0kn zRW9%vuk!|P@)mD%k#~5P_jsQV_>hnIm{0hW&-k1#_>xO}#n*hpw|vLOU2)U{pDOZ!L%TaO-xu#r8j+Sf7b>zBo zJ-NQzKyD~Ek{ioSo5n8@a9APHr!EkUPqqBjl0tD0#Fz zMoyE{<*{;xoGFi!$IBDsiSi^lOP(xe%Twg3@-%t6oFmVWXUenWTzR&fC(n`R>SVso zCWbB_Xj6OlN~IiM(Di_VlB->Q9i{{!@b$9@0+ delta 986 zcmWl}b({!x0LJ0Zt4^G54yQX#$LTumPIt#)Om{nc*^QT*ZQ26sb`zUAwP1Cd+Kf$X ztV3J!d;WM%o?92Ws+~grI`N&TJ3Q~x|6rm`^C{77V z5=ALWQ-)~DQjYRepdyv1Ockn9jq22(Cbg(d9b%|UJ?hhdhBTrvO=wCpVrfnbTGEQv zw4p8SXio<^5=SRG6Hfw(bfGKV=uQuM(u>~op)dXD&j1E8h`|hDD8m@e2u6~`C`L1e zhZxH^9%eifn8+k1Gli*4V>&aK$t-3whq=sSJ_}gLB9d9m5|#qXSk5D)@F*)-iCM*J zQhAIuJkAq5$y(O2o(*hd6Pww>Q#{QxJj+(Lv7P65o)>tLmw1_1c$L?9oi})sx7a}% zZ?ltK>}C(|@Gg7V$9@iQkaP}lm?IqJ81L~uAMhc^Il)JK%qM)xXJqg>UvQFBoaPK? z`I4_V$JdoaI&-}u#{KoJ6!Jk~`1~<9IZSHWFd;G=U z{KLQe$Nwp^_a(=mhTu?3~7nY02Mdf00 zak+$CQjU^K$))8oa&f-y z2698Wk=$5rA~%(r$+2>CxrN+PZY8&t+sJL@c5-{UgWOS$lRL?s<#;(kPL#XIUFB|a zce#h$Q|=}Amix$k<$iL1d4N1n9wZNzhsZp>Gj6GM|ilS5NNQ$y22(?c^tGefgNvqN)2b3^k&^Fs?l Y3qy-S$)UxeC84Dul%5v1Ok0!g0}*qT0RR91 diff --git a/src/api/middlewares/Authentication.ts b/src/api/middlewares/Authentication.ts index b4f48477..f0f01252 100644 --- a/src/api/middlewares/Authentication.ts +++ b/src/api/middlewares/Authentication.ts @@ -32,7 +32,7 @@ export const NO_AUTHORIZATION_ROUTES = [ "POST /auth/reset", "GET /invites/", // Routes with a seperate auth system - /^(POST|HEAD) \/webhooks\/\d+\/\w+\/?/, // no token requires auth + /^(POST|HEAD|GET|PATCH|DELETE) \/webhooks\/\d+\/\w+\/?/, // no token requires auth // Public information endpoints "GET /ping", "GET /gateway", diff --git a/src/api/routes/channels/#channel_id/webhooks.ts b/src/api/routes/channels/#channel_id/webhooks.ts index 2060760d..152f6d00 100644 --- a/src/api/routes/channels/#channel_id/webhooks.ts +++ b/src/api/routes/channels/#channel_id/webhooks.ts @@ -28,6 +28,7 @@ import { handleFile, isTextChannel, trimSpecial, + FieldErrors, } from "@spacebar/util"; import crypto from "crypto"; import { Request, Response, Router } from "express"; @@ -111,8 +112,39 @@ router.post( name = trimSpecial(name); // TODO: move this - if (name === "clyde") throw new HTTPError("Invalid name", 400); - if (name === "Spacebar Ghost") throw new HTTPError("Invalid name", 400); + if (name) { + const check_username = name.replace(/\s/g, ""); + if (!check_username) { + throw FieldErrors({ + username: { + code: "BASE_TYPE_REQUIRED", + message: req.t("common:field.BASE_TYPE_REQUIRED"), + }, + }); + } + + const { maxUsername } = Config.get().limits.user; + if ( + check_username.length > maxUsername || + check_username.length < 2 + ) { + throw FieldErrors({ + username: { + code: "BASE_TYPE_BAD_LENGTH", + message: `Must be between 2 and ${maxUsername} in length.`, + }, + }); + } + + const blockedContains = ["discord", "clyde", "spacebar"]; + for (const word of blockedContains) { + if (name.toLowerCase().includes(word)) { + return res.status(400).json({ + username: [`Username cannot contain "${word}"`], + }); + } + } + } if (avatar) avatar = await handleFile(`/avatars/${channel_id}`, avatar); diff --git a/src/api/routes/webhooks/#webhook_id/#token/index.ts b/src/api/routes/webhooks/#webhook_id/#token/index.ts index 8e0ad0dd..aa73b3fe 100644 --- a/src/api/routes/webhooks/#webhook_id/#token/index.ts +++ b/src/api/routes/webhooks/#webhook_id/#token/index.ts @@ -10,6 +10,9 @@ import { WebhookExecuteSchema, emitEvent, uploadFile, + WebhooksUpdateEvent, + WebhookUpdateSchema, + handleFile, } from "@spacebar/util"; import { Request, Response, Router } from "express"; import { HTTPError } from "lambert-server"; @@ -129,13 +132,38 @@ router.post( // block username from containing certain words // TODO: configurable additions - const blockedContains = ["discord", "clyde", "spacebar"]; - for (const word of blockedContains) { - if (body.username?.toLowerCase().includes(word)) { - return res.status(400).json({ - username: [`Username cannot contain "${word}"`], + if (body.username) { + const check_username = body.username.replace(/\s/g, ""); + if (!check_username) { + throw FieldErrors({ + username: { + code: "BASE_TYPE_REQUIRED", + message: req.t("common:field.BASE_TYPE_REQUIRED"), + }, }); } + + const { maxUsername } = Config.get().limits.user; + if ( + check_username.length > maxUsername || + check_username.length < 2 + ) { + throw FieldErrors({ + username: { + code: "BASE_TYPE_BAD_LENGTH", + message: `Must be between 2 and ${maxUsername} in length.`, + }, + }); + } + + const blockedContains = ["discord", "clyde", "spacebar"]; + for (const word of blockedContains) { + if (body.username.toLowerCase().includes(word)) { + return res.status(400).json({ + username: [`Username cannot contain "${word}"`], + }); + } + } } // block username from being certain words @@ -248,4 +276,105 @@ router.post( }, ); +router.delete( + "/", + route({ + responses: { + 204: {}, + 400: { + body: "APIErrorResponse", + }, + 404: {}, + }, + }), + async (req: Request, res: Response) => { + const { webhook_id, token } = req.params; + + const webhook = await Webhook.findOne({ + where: { + id: webhook_id, + }, + relations: ["channel", "guild", "application"], + }); + + if (!webhook) { + throw DiscordApiErrors.UNKNOWN_WEBHOOK; + } + + if (webhook.token !== token) { + throw DiscordApiErrors.INVALID_WEBHOOK_TOKEN_PROVIDED; + } + const channel_id = webhook.channel_id; + await Webhook.delete({ id: webhook_id }); + + await emitEvent({ + event: "WEBHOOKS_UPDATE", + channel_id, + data: { + channel_id, + guild_id: webhook.guild_id, + }, + } as WebhooksUpdateEvent); + + res.sendStatus(204); + }, +); + +router.patch( + "/", + route({ + requestBody: "WebhookUpdateSchema", + responses: { + 200: { + body: "Message", + }, + 400: { + body: "APIErrorResponse", + }, + 403: {}, + 404: {}, + }, + }), + async (req: Request, res: Response) => { + const { webhook_id, token } = req.params; + const body = req.body as WebhookUpdateSchema; + + const webhook = await Webhook.findOneOrFail({ + where: { id: webhook_id }, + relations: [ + "user", + "channel", + "source_channel", + "guild", + "source_guild", + "application", + ], + }); + + const channel_id = webhook.channel_id; + if (!body.name && !body.avatar) { + throw new HTTPError("Empty messages are not allowed", 50006); + } + if (body.avatar) + body.avatar = await handleFile( + `/avatars/${webhook_id}`, + body.avatar as string, + ); + webhook.assign(body); + + await Promise.all([ + webhook.save(), + emitEvent({ + event: "WEBHOOKS_UPDATE", + channel_id, + data: { + channel_id, + guild_id: webhook.guild_id, + }, + } as WebhooksUpdateEvent), + ]); + res.status(204); + }, +); + export default router; diff --git a/src/api/routes/webhooks/#webhook_id/index.ts b/src/api/routes/webhooks/#webhook_id/index.ts index 59fdb76d..c27b4612 100644 --- a/src/api/routes/webhooks/#webhook_id/index.ts +++ b/src/api/routes/webhooks/#webhook_id/index.ts @@ -4,8 +4,15 @@ import { DiscordApiErrors, getPermission, Webhook, + WebhooksUpdateEvent, + emitEvent, + WebhookUpdateSchema, + Channel, + handleFile, + FieldErrors, } from "@spacebar/util"; import { Request, Response, Router } from "express"; +import { HTTPError } from "lambert-server"; const router = Router(); router.get( @@ -54,4 +61,169 @@ router.get( }, ); +router.delete( + "/", + route({ + responses: { + 204: {}, + 400: { + body: "APIErrorResponse", + }, + 404: {}, + }, + }), + async (req: Request, res: Response) => { + const { webhook_id } = req.params; + + const webhook = await Webhook.findOneOrFail({ + where: { id: webhook_id }, + relations: [ + "user", + "channel", + "source_channel", + "guild", + "source_guild", + "application", + ], + }); + + if (webhook.guild_id) { + const permission = await getPermission( + req.user_id, + webhook.guild_id, + ); + + if (!permission.has("MANAGE_WEBHOOKS")) + throw DiscordApiErrors.UNKNOWN_WEBHOOK; + } else if (webhook.user_id != req.user_id) + throw DiscordApiErrors.UNKNOWN_WEBHOOK; + + const channel_id = webhook.channel_id; + await Webhook.delete({ id: webhook_id }); + + await emitEvent({ + event: "WEBHOOKS_UPDATE", + channel_id, + data: { + channel_id, + guild_id: webhook.guild_id, + }, + } as WebhooksUpdateEvent); + + res.sendStatus(204); + }, +); + +router.patch( + "/", + route({ + requestBody: "WebhookUpdateSchema", + responses: { + 200: { + body: "WebhookCreateResponse", + }, + 400: { + body: "APIErrorResponse", + }, + 403: {}, + 404: {}, + }, + }), + async (req: Request, res: Response) => { + const { webhook_id } = req.params; + const body = req.body as WebhookUpdateSchema; + + const webhook = await Webhook.findOneOrFail({ + where: { id: webhook_id }, + relations: [ + "user", + "channel", + "source_channel", + "guild", + "source_guild", + "application", + ], + }); + + if (webhook.guild_id) { + const permission = await getPermission( + req.user_id, + webhook.guild_id, + ); + + if (!permission.has("MANAGE_WEBHOOKS")) + throw DiscordApiErrors.UNKNOWN_WEBHOOK; + } else if (webhook.user_id != req.user_id) + throw DiscordApiErrors.UNKNOWN_WEBHOOK; + + if (!body.name && !body.avatar && !body.channel_id) { + throw new HTTPError("Empty messages are not allowed", 50006); + } + + if (body.avatar) + body.avatar = await handleFile( + `/avatars/${webhook_id}`, + body.avatar as string, + ); + + if (body.name) { + const check_username = body.name.replace(/\s/g, ""); + if (!check_username) { + throw FieldErrors({ + username: { + code: "BASE_TYPE_REQUIRED", + message: req.t("common:field.BASE_TYPE_REQUIRED"), + }, + }); + } + + const { maxUsername } = Config.get().limits.user; + if ( + check_username.length > maxUsername || + check_username.length < 2 + ) { + throw FieldErrors({ + username: { + code: "BASE_TYPE_BAD_LENGTH", + message: `Must be between 2 and ${maxUsername} in length.`, + }, + }); + } + + const blockedContains = ["discord", "clyde", "spacebar"]; + for (const word of blockedContains) { + if (body.name.toLowerCase().includes(word)) { + return res.status(400).json({ + username: [`Username cannot contain "${word}"`], + }); + } + } + } + + const channel_id = body.channel_id || webhook.channel_id; + webhook.assign(body); + + if (body.channel_id) + webhook.assign({ + channel: await Channel.findOneOrFail({ + where: { id: channel_id }, + }), + }); + console.log(webhook.channel_id); + + await webhook.save(); + await emitEvent({ + event: "WEBHOOKS_UPDATE", + channel_id, + data: { + channel_id, + guild_id: webhook.guild_id, + }, + } as WebhooksUpdateEvent); + + console.log(webhook.channel_id); + res.json(webhook); + }, +); + export default router; diff --git a/src/util/schemas/WebhookUpdateSchema.ts b/src/util/schemas/WebhookUpdateSchema.ts new file mode 100755 index 00000000..bc276e44 --- /dev/null +++ b/src/util/schemas/WebhookUpdateSchema.ts @@ -0,0 +1,23 @@ +/* + Spacebar: A FOSS re-implementation and extension of the Discord.com backend. + Copyright (C) 2023 Spacebar and Spacebar Contributors + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . +*/ + +export interface WebhookUpdateSchema { + name?: string; + avatar?: string; + channel_id?: string; +} diff --git a/src/util/schemas/index.ts b/src/util/schemas/index.ts index 2972b1a5..ca473dce 100644 --- a/src/util/schemas/index.ts +++ b/src/util/schemas/index.ts @@ -86,4 +86,5 @@ export * from "./VoiceVideoSchema"; export * from "./WebAuthnSchema"; export * from "./WebhookCreateSchema"; export * from "./WebhookExecuteSchema"; +export * from "./WebhookUpdateSchema"; export * from "./WidgetModifySchema"; From 855c858503d4937dcbd8f0cdc0957410b4740adb Mon Sep 17 00:00:00 2001 From: root Date: Sun, 23 Mar 2025 16:35:16 -0700 Subject: [PATCH 4/4] Prebuild for schema and openapi json files --- assets/openapi.json | Bin 2621400 -> 637397 bytes assets/schemas.json | Bin 25537875 -> 25538096 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/assets/openapi.json b/assets/openapi.json index f7451189fd6b8c2675b680f612da564ded3275c7..c9fdd76caf9f50b1e94555fa778f5dfbf6782e12 100644 GIT binary patch literal 637397 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�fP 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 TJEhJJXQ#8vQJ|V16gZ%BV?>)Y delta 1533 zcmW;MRd^Q!6o&C<)QAzIn=xt|-QC>{(%s$727C@Fk?=3w7&M9~Jwib#1r$U;Nu`x; zct0+F?{hBCxj9=d1VT=q4}`=hNbwY336xNY6s*KbqNGZu5G7X%rBo_~Dz(xmtT4hvL z?!849l?sE3pczu?B1LIljP`_zLT=9viR`o3I&MuoYk98*Ib3*pBb;J$7Ix zc40U6U@!I|4*PKc2XP2L;71(B5&VRoaTLdJ94BxRzu;G#!fBkrZ}=T&aSngrJpRN5 zT*M{(g}-qbS8x^Aa2+@B5B|kX+`?_#!ClCZPOy{MN#Z1Rk~twxawmn8(n;lnI;ovBPFg3OlitbTWOOn) znVl?7RwtX2-O1sEIXRthCzq4k$>Zd8@;MRC`(vU!<#!4=1)V}pVW)^w)G6i^cS<-V zol;I|r;Jn9Dd&`TDmWFLN={{`ic{68=2UlTI5nMGPHm@-Q`f2I)OQ*<4V^|#W2cGJ z)M@54cUm|tomNh3=L4sW)7EL{w0Al<9i2{2XQzwP)#>JRcX~KIonB6Fr;pRu>F4x! z1~>zqLC#=jh%?j~<_vd6I3t}=&S+0j>v