Files
calendar/packages/features/tasker/tasks/triggerFormSubmittedNoEvent/triggerFormSubmittedNoEventWorkflow.ts
T
Benny JooGitHubDevin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
431fbe44fc refactor: decouple @calcom/features from @calcom/trpc/server (#27751)
* make GetPublicEventInput

* space

* mv feature flags router to trpc

* remove trpc imports

* wip

* mv OrgMembershipLookup to features

* fix

* fix

* update

* fix

* revert formatting-only changes to improve PR reviewability

Co-Authored-By: benny@cal.com <sldisek783@gmail.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-02-10 09:28:37 -03:00

74 lines
2.5 KiB
TypeScript

import { z } from "zod";
import type { FORM_SUBMITTED_WEBHOOK_RESPONSES } from "@calcom/app-store/routing-forms/lib/formSubmissionUtils";
import { scheduleWorkflowReminders } from "@calcom/ee/workflows/lib/reminders/reminderScheduler";
import type { Workflow } from "@calcom/ee/workflows/lib/types";
import { ZWorkflow } from "@calcom/ee/workflows/lib/types";
import { CreditService } from "@calcom/features/ee/billing/credit-service";
import logger from "@calcom/lib/logger";
import { shouldTriggerFormSubmittedNoEvent } from "./formSubmissionValidation";
const log = logger.getSubLogger({ prefix: ["[tasker] triggerFormSubmittedNoEventWorkflow"] });
export const ZTriggerFormSubmittedNoEventWorkflowPayloadSchema = z.object({
responseId: z.number(),
responses: z.record(z.unknown()),
routedEventTypeId: z.number().nullable().optional(),
form: z.object({
id: z.string(),
userId: z.number(),
teamId: z.number().nullable().optional(),
fields: z.array(z.object({ type: z.string(), identifier: z.string().optional() })).optional(),
user: z.object({
email: z.string(),
timeFormat: z.number().nullable(),
locale: z.string().nullable(),
}),
}),
hideBranding: z.boolean(),
smsReminderNumber: z.string().nullable(),
workflow: ZWorkflow,
submittedAt: z.coerce.date(),
});
export async function triggerFormSubmittedNoEventWorkflow(payload: string): Promise<void> {
const {
responseId,
form,
responses,
smsReminderNumber,
hideBranding,
workflow,
submittedAt,
routedEventTypeId,
} = ZTriggerFormSubmittedNoEventWorkflowPayloadSchema.parse(JSON.parse(payload));
const shouldTrigger = await shouldTriggerFormSubmittedNoEvent({
formId: form.id,
responseId,
responses: responses as FORM_SUBMITTED_WEBHOOK_RESPONSES,
submittedAt,
});
if (!shouldTrigger) return;
const creditService = new CreditService();
try {
await scheduleWorkflowReminders({
smsReminderNumber,
formData: {
responses: responses as FORM_SUBMITTED_WEBHOOK_RESPONSES,
user: { email: form.user.email, timeFormat: form.user.timeFormat, locale: form.user.locale ?? "en" },
routedEventTypeId: routedEventTypeId ?? null,
},
hideBranding,
workflows: [workflow as Workflow],
creditCheckFn: creditService.hasAvailableCredits.bind(creditService),
});
} catch (error) {
log.error("Error while triggering form submitted no event workflows", JSON.stringify({ error }));
}
}