{"version":3,"file":"interactions.mjs","sourceRoot":"","sources":["../../src/interactions/interactions.mts"],"names":[],"mappings":"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","sourcesContent":["import { ApplicationCommandType, ComponentType, InteractionResponseType, InteractionType, type APIInteraction } from \"discord-api-types/v10\";\nimport { PlatformAlgorithm, verify } from \"discord-verify\";\nimport crypto from \"node:crypto\";\nimport ApplicationCommandInteraction from \"./ApplicationCommandInteraction.mjs\";\nimport AutocompleteInteraction from \"./AutocompleteInteraction.mjs\";\nimport BaseInteraction from \"./BaseInteraction.mjs\";\nimport ButtonInteraction from \"./ButtonComponentInteraction.mjs\";\nimport ChatInputInteraction from \"./ChatInputInteraction.mjs\";\nimport MessageCommandInteraction from \"./MessageCommandInteraction.mjs\";\nimport MessageComponentInteraction from \"./MessageComponentInteraction.mjs\";\nimport ModalSubmitInteraction from \"./ModalSubmitInteraction.mjs\";\nimport PingInteraction from \"./PingInteraction.mjs\";\nimport SelectMenuInteraction from \"./SelectMenuComponentInteraction.mjs\";\nimport UserContextMenuInteraction from \"./UserCommandInteraction.mjs\";\n\n\n/**\n * The Interaction :)\n */\nexport type Interaction = PingInteraction | ChatInputInteraction | UserContextMenuInteraction | ButtonInteraction | SelectMenuInteraction | AutocompleteInteraction | MessageCommandInteraction | ModalSubmitInteraction;\n\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function verifyInteraction(request: any, response: any, publicKey: string): Promise<boolean> {\n    if (request.method !== \"POST\") {\n        response.statusCode = 405;\n        response.send({ error: \"Only can use POST method\" });\n        return false;\n    }\n\n    const signature = request.headers[\"x-signature-ed25519\"]?.toString();\n    const timestamp = request.headers[\"x-signature-timestamp\"]?.toString();\n    const rawBody = JSON.stringify(request.body);\n\n    if (!signature || !timestamp || !rawBody) {\n        response.statusCode = 405;\n        response.send({ error: \"Invalid headers and/or body\" });\n        return false;\n    }\n\n    let isValidRequest = false;\n    try {\n        isValidRequest = await verify(rawBody, signature, timestamp, publicKey, crypto.webcrypto.subtle);\n    } catch {\n        isValidRequest = await verify(rawBody, signature, timestamp, publicKey, crypto.webcrypto.subtle, PlatformAlgorithm.OldNode);\n        console.warn(\"Fallback to discord-verify (old node)\");\n    }\n\n\n    if (!isValidRequest) {\n        response.statusCode = 401;\n        response.send({ error: \"Bad request signature\" });\n        return false;\n    }\n\n    const interaction = request.body as APIInteraction;\n\n    // Handle PINGs from Discord\n    if (interaction.type === InteractionType.Ping) {\n        console.info(\"Handling Ping request\");\n\n        response.send({ type: InteractionResponseType.Pong });\n        return true;\n    }\n\n    return true;\n\n\n}\n\n\nexport function parseRawInteraction(data: APIInteraction): Interaction {\n    let InteractionClass = BaseInteraction;\n\n    switch (data.type) {\n        case InteractionType.Ping:\n            InteractionClass = PingInteraction;\n            break;\n\n        case InteractionType.ApplicationCommand:\n            switch (data.data.type) {\n                case ApplicationCommandType.ChatInput:\n                    InteractionClass = ChatInputInteraction;\n                    break;\n\n                case ApplicationCommandType.User:\n                    InteractionClass = UserContextMenuInteraction;\n                    break;\n\n                case ApplicationCommandType.Message:\n                    InteractionClass = MessageCommandInteraction;\n                    break;\n\n                default:\n                    // @ts-expect-error Never should occur, but just in case\n                    throw new Error(\"Unknown ApplicationCommandType: \" + data.data.type);\n            }\n            break;\n\n        case InteractionType.ApplicationCommandAutocomplete:\n            InteractionClass = AutocompleteInteraction;\n            break;\n\n        case InteractionType.MessageComponent:\n            switch (data.data.component_type) {\n                case ComponentType.Button:\n                    InteractionClass = ButtonInteraction;\n                    break;\n\n                // Later TODO: Implement these select menus better\n                case ComponentType.RoleSelect:\n                case ComponentType.UserSelect:\n                case ComponentType.ChannelSelect:\n                case ComponentType.MentionableSelect:\n                case ComponentType.StringSelect:\n                    InteractionClass = SelectMenuInteraction;\n                    break;\n\n                default:\n                    // @ts-expect-error Never should occur, but just in case\n                    throw new Error(\"Unknown ComponentType: \" + data.data.component_type);\n            }\n            break;\n\n        case InteractionType.ModalSubmit:\n            InteractionClass = ModalSubmitInteraction;\n            break;\n\n        default:\n            // @ts-expect-error Never should occur, but just in case\n            throw new Error(\"Unknown InteractionType: \" + data.type);\n    }\n\n    return new InteractionClass(data) as Interaction;\n}\n\n\n\nexport {\n    AutocompleteOptions as AutocompleteInteractionOptions,\n    AutocompleteOptionsType as AutocompleteInteractionOptionsType\n} from \"./AutocompleteInteraction.mjs\";\nexport * from \"./BaseInteraction.mjs\";\nexport {\n    ChatInputInteractionOption as ChatInputInteractionOption,\n    AttachmentOption as InteractionCommandAttachmentOption,\n    BaseOption as InteractionCommandBaseOption,\n    BooleanOption as InteractionCommandBooleanOption,\n    ChannelOption as InteractionCommandChannelOption,\n    formatOption as InteractionCommandFormatOption,\n    IntegerOption as InteractionCommandIntegerOption,\n    MentionableOption as InteractionCommandMentionableOption,\n    NumberOption as InteractionCommandNumberOption, Options as InteractionCommandOptions,\n    RoleOption as InteractionCommandRoleOption,\n    StringOption as InteractionCommandStringOption,\n    UserOption as InteractionCommandUserOption\n} from \"./ChatInputInteraction.mjs\";\nexport {\n    MessageOption as MessageCommandInteractionOption,\n    MessageContextMenuInteractionOption as MessageContextMenuInteractionOption\n} from \"./MessageCommandInteraction.mjs\";\nexport {\n    ModalMessageModalSubmitInteraction as ModalMessageModalSubmitInteraction,\n    BaseField as ModalSubmitInteractionBaseField,\n    ModalSubmitFields as ModalSubmitInteractionFields,\n    fields as ModalSubmitInteractionFieldsType,\n    TextInputOption as ModalSubmitInteractionTextInputOption\n} from \"./ModalSubmitInteraction.mjs\";\nexport { ApplicationCommandInteraction, AutocompleteInteraction, BaseInteraction, ButtonInteraction, ChatInputInteraction, MessageCommandInteraction, MessageComponentInteraction, ModalSubmitInteraction, PingInteraction, SelectMenuInteraction, UserContextMenuInteraction };\n"]}