import { NotFoundError } from './not-found.error'; export const webhookNotFoundErrorMessage = ({ path, httpMethod, webhookMethods, }: { path: string; httpMethod?: string; webhookMethods?: string[]; }) => { let webhookPath = path; if (httpMethod) { webhookPath = `${httpMethod} ${webhookPath}`; } if (webhookMethods?.length && httpMethod) { let methods = ''; if (webhookMethods.length === 1) { methods = webhookMethods[0]; } else { const lastMethod = webhookMethods.pop(); methods = `${webhookMethods.join(', ')} or ${lastMethod as string}`; } return `This webhook is not registered for ${httpMethod} requests. Did you mean to make a ${methods} request?`; } else { return `The requested webhook "${webhookPath}" is not registered.`; } }; export class WebhookNotFoundError extends NotFoundError { constructor( { path, httpMethod, webhookMethods, }: { path: string; httpMethod?: string; webhookMethods?: string[]; }, { hint }: { hint: 'default' | 'production' } = { hint: 'default' }, ) { const errorMsg = webhookNotFoundErrorMessage({ path, httpMethod, webhookMethods }); let hintMsg = ''; if (!webhookMethods?.length) { hintMsg = hint === 'default' ? "Click the 'Execute workflow' button on the canvas, then try again. (In test mode, the webhook only works for one call after you click this button)" : "The workflow must be active for a production URL to run successfully. You can activate the workflow using the toggle in the top-right of the editor. Note that unlike test URL calls, production URL calls aren't shown on the canvas (only in the executions list)"; } super(errorMsg, hintMsg); } }