When navigating to a calendso user that does not exist, return notFound.#2
Merged
pumfleet merged 1 commit intocalcom:mainfrom Apr 9, 2021
emrysal:main
Merged
When navigating to a calendso user that does not exist, return notFound.#2pumfleet merged 1 commit intocalcom:mainfrom emrysal:main
pumfleet merged 1 commit intocalcom:mainfrom
emrysal:main
Conversation
|
@emrysal is attempting to deploy a commit to the calendso Team on Vercel. To accomplish this, @emrysal needs to request access to the Team. Afterwards, an owner of the Team is required to accept their membership request. |
KATT
added a commit
that referenced
this pull request
Sep 3, 2021
Herbak
added a commit
to Herbak/calendso
that referenced
this pull request
Oct 14, 2021
Update profile.tsx
mlazowik
added a commit
to qedsoftware/calendso
that referenced
this pull request
Jan 6, 2022
1 task
PeerRich
added a commit
that referenced
this pull request
Jun 7, 2022
Merged
emrysal
added a commit
that referenced
this pull request
Aug 16, 2022
zomars
pushed a commit
that referenced
this pull request
May 23, 2023
feat: adds module transpiling so api can require @calcom/prisma
emrysal
pushed a commit
that referenced
this pull request
Aug 30, 2023
* brought api keys from admin to user level with app install * rm logs
emrysal
added a commit
that referenced
this pull request
Jan 29, 2025
emrysal
added a commit
that referenced
this pull request
Jan 29, 2025
* fix: modify error handling of incompleteBookingWriteToRecord * fix: TS error? * fix: TS error attempt #2?
emrysal
added a commit
that referenced
this pull request
Jan 29, 2025
* fix: modify error handling of incompleteBookingWriteToRecord * fix: TS error? * fix: TS error attempt #2?
3 tasks
3 tasks
Udit-takkar
added a commit
that referenced
this pull request
Aug 9, 2025
emrysal
pushed a commit
that referenced
this pull request
Aug 29, 2025
* feat: Cal.ai Self Serve #2 * chore: fix import and remove logs * fix: update checkout session * fix: type errors and test * fix: imports * fix: type err * fix: type error * fix: tests * chore: save progress * fix: workflow flow * fix: workflow update bug * tests: add unit tests for retell ai webhoo * fix: status code * fix: test and delete bug * fix: add dynamic variables * fix: type err * chore: update unit test * fix: type error * chore: update default prompt * fix: type errors * fix: workflow permissions * fix: workflow page * fix: translations * feat: add call duration * chore: add booking uid * fix: button positioning * chore: update tests * chore: improvements * chore: some more improvements * refactor: improvements * refactor: code feedback * refactor: improvements * feat: enable credits for orgs (#23077) * Show credits UI for orgs * fix stripe callback url when buying credits * give orgs 20% credits * add test for calulating credits --------- Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> * fix: types * fix: types * chore: error * fix: type error * fix: type error * chore: mock env * feat: add idempotency key to prevent double charging * chore: add userId and teamId * fix: skip inbound calls * chore: update tests * feat: add feature flag for voice agent * feat: finish test call and other improvements * chore: add alert * chore: update .env.example * chore: improvements * fix: update tests * refactor: remove un necessary * feat: add setup badge * chore: improvements * fix: use referene id * chore: improvements * fix: type error * fix: type * refactor: change pricing logic * refactor: update tests * fix: conflicts * fix: billing link for orgs * fix: types * refactor: move feature flag up * fix: alert and test call credit check * fix: update unit tests * fix: feedback * refactor: improvements * refactor: move handlers to separate files * fix: types * fix: missing import * fix: type * refactor: change general tools functions handling * refactor: use repository * refactor: improvements * fix: types * fix: type errorr * fix: auth check * feat: add creditFor * fix: update defualt prompt * fix: throw error on frontend * fix: update unit tests * fix: use deleteAllWorkflowReminders * refactor: add connect phone number * refactor: improvements * chore: translation * chore: update message * chore: translation * design improvements buy number dialog * add translation for error message * use translation key in error message * refactor: improve connect phone number tab * feat: support un saved workflow to tests * chore: remove un used * fix: remove un used * fix: remove un used * refactor: similify billing --------- Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com> Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Keith Williams <keithwillcode@gmail.com>
3 tasks
CarinaWolli
added a commit
that referenced
this pull request
Oct 13, 2025
* refactor: improve _scheduleWorkflowReminders readability and add missing booking trigger events - Extract complex conditional logic into helper functions (isImmediateTrigger, isTimeBased, shouldProcessWorkflow) - Add missing workflow trigger events with immediate execution logic - Update test workflows to use different actions (EMAIL_ATTENDEE, SMS_ATTENDEE) for better differentiation - Fix translation function mock in confirm.handler.test.ts using mockNoTranslations utility - Maintain existing functionality while improving code maintainability Co-Authored-By: amit@cal.com <samit91848@gmail.com> * only show customt emplate for form triggers * filter outside scheduleWorkflowReminder * fix type check * chore: add more tests * test: add comprehensive unit tests for handleMarkNoShow with webhook and workflow coverage - Create handleMarkNoShow.test.ts following confirm.handler.test.ts pattern - Add expectBookingNoShowUpdatedWebhookToHaveBeenFired utility function - Test both webhook and workflow triggers for BOOKING_NO_SHOW_UPDATED - Cover attendee/host no-show scenarios, multiple attendees, and error cases - All 6 unit tests pass with proper mocking of external dependencies Co-Authored-By: amit@cal.com <samit91848@gmail.com> * Revert "test: add comprehensive unit tests for handleMarkNoShow with webhook and workflow coverage" This reverts commit 7642992. * fix: add new workflow triggers to api/v2 * update swagger docs * fix: e2e * fix type check * fix tests, add test for before after events * fix unit tests * revert confirm.handler.test * fix: unit tests * dummy form variables * add routing forms to active on dropdown * add migration file * Ui fixes for variables dropdown * remove other translation keys * review fixes * allow routing forms for activeOn * use repository function to get routing forms * remove unnecessary code * adjust logic in update handler * add triggers to api v2 * remvoe unused file * rename to getAcitveOnOptions handler * remove routingFormOptions handler * clean up getActiveOnOptions * refactor WorkflowService * remove logs * remove unused * fix: type check * fix: missed before after events for recurring * fix: calendarEvent handleMarkNoShow * fix error message Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * don't query disabled routing forms * create tasker function * add tasker code * move isFormTrigger function * small adjustments + todo comments * remove email to host action for form triggers * throw trpc error if email to host is added as step * fix dialog on how to use form responses as variables * remove add variable dropdown for form triggers * remove form workfows in event workflows tab * improvements for workflow logic on form submission * review fixes * base setup for seperate schedule functions (evt and form) * add missing BOOKING_PAID workflow trigger * fix pathname * fix: test for BOOKING_REQUESTED * fix activeOn ids * pass hideBranding and smsReminderNumber * adjustments to reminderScheduler * create empty scheduelForForm functions * pass locale and timezone with form user * pass formData instead of responses * pass timeFormat and locale * reusable function for email sending and reminder creation * implement scheduleEmailReminderForForm * remove added editor field from merge conflict * don't support cal.ai action with form triggers * throw bad request if form trigger and cal.ai is combined * add tests for scheduleFormWorkflows * add form submission tests * remove form response varibe info * clean up workflow actions * fixes for getting template options * pass triggerType to getAllWorkflows * move reusable logic to scheduleSMSReminder * add formdata to param type * type fixes for text reminder managers * implement scheduleSMSReminderForForm * fix import * fix isAuthorizedToAddActiveOnIds * disble whatsapp action * implement triggerFormSubmittedNoEventWorkflow * code clean up * Merge branch 'devin/1755107037-add-workflow-triggers' into feat/routing-form-workflow-triggers * fix type errors * remove async from getSubmitterEmail * fix type errors * revert cal.ai changes * fix type error * add sublogger * code clean up * fix type errors * remove label for attendee whatsapp action * code clean up * fixes saving teams on org workflows * fix type error * code improvements for activeOn ids * Revert "code improvements for activeOn ids" This reverts commit 0a3590a. * improve variable name * fix unit tests * small fixes * type fixes * remove unused translation keys * fix merge conflict issues * code clean up * remove SMS action support * remove more SMS code * add missing imports * set custom template for form action * type fixes * fix tasker endpoint * fix duplicate check * fix workfows.test.ts * use repository funciton to getHideBranding * code clean up * fix hasDuplicateSubmission * code clean up * select only needed properties * remove repository functions * Revert "remove repository functions" This reverts commit 7aa47b1. * add scheduleWorkflows function * Revert "add scheduleWorkflows function" This reverts commit fe5db4f. * move type to /types * Revert "move type to /types" This reverts commit 91e0152. * revert changes causing type errors * remove import * remove unused import * Revert "remove unused import" This reverts commit 1916768. * revert changed from attempt to fix type errors * pass object to gt all workflows * fix isAuthorized check * trigger filtering * remove form submitted no event booked code * remove form submitted no event from schema * remove more code * remove test * fixes * add getSubmitterEmail function * add trigger * small fixes * add missing workflow DTOs * small fixes * use activeOnWithChildren * fix active on when switching trigger type * remove add variable dropdown * add getAllWorkflowsFromRoutingForm to WorkflowService * fix error caused by undefined evt * fix type error * fix type error * fix tests * code clean up * final fixes and clean up * remove console.log * remove template text form from triggers * add routing form repoditory function * fix bug with key * fix test * add missing trigger in update-workflow.input.ts * ForEvt and ForForm function for aiPhoneCallManager * chore: add support for form workflows on api v2 * fixup! chore: add support for form workflows on api v2 * use only repository functions in update handler * move all prisma queries from list.handler * review suggestions * chore: handle workflows api v2 * chore: handle workflows api v2, split in 2 endpoints * fix workflow step creation * remove connect agent and fixes types * add type to workflow * chore: use workflow type in apiv2 WorkflowsOutputService * update worklfow type on update * chore: use workflow type in apiv2 WorkflowsOutputService * fix template body for torm trigger * some UI fixes for email subject/body * resetting email body when changing form triggers * use type field to query workflows * clean up all old active on values * remove responseId from all funciton calls * remove undefined from updateTemplate * refactor: split routing form and event-type workflows code * refactor: split routing form and event-type workflows code * fix template text when adding action * chore: don't rename WorkflowActivationDto to avoid ci blocking * refine update schedule to use only allowed actions * fix type error * don't allow whatsapp action with form trigger * fix type error * return early if activeOn array is empty * fix: from step type in BaseFormWorkflowStepDto * fixup! fix: from step type in BaseFormWorkflowStepDto * api v2 updates * move all prisma calls to repository (service/workflows.ts) * use FORM_TRIGGER_WORKFLOW_EVENTS for form queries * use userRepository * use FORM_TRIGGER_WORKFLOW_EVENTS in isFormTrigger * code clean up * code clean up * use repository functions in formSubmissionValidation.ts * add back trpc import * fix agent repository functions * remove unsued import * fixes for offset api v2 * add missing responseId * fix failing test --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: amit@cal.com <samit91848@gmail.com> Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Co-authored-by: Benny Joo <sldisek783@gmail.com> Co-authored-by: cal.com <morgan@cal.com> Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
3 tasks
devin-ai-integration bot
added a commit
that referenced
this pull request
Nov 12, 2025
Fixes identified issues while maintaining PR objective of removing @calcom/web dependencies from packages via dependency injection: 1. Code Duplication (Comment #2): - Extracted buildLegacyRequest to packages/lib/legacy-request.ts - Uses generic interfaces (HeadersLike, CookiesLike) instead of Next.js types - Both apps/web and packages can now import from shared location - Removed unused NextApiRequest import from calcomHandler.ts 2. Missing Cache Revalidation (Comments #3, #5, #8): - Added onInvalidate prop to NewWebhookView and wired from webhooks/new page - Added onInvalidate prop to EventWebhooksTab (needs wiring from apps/web) - Added onInvalidate prop to DuplicateDialog (needs wiring from apps/web) - Pattern: server actions with revalidatePath at call sites 3. Promise Handling Bug (Comments #6, #12): - Fixed MemberInvitationModal clipboard promise to handle rejections - Added reject handler to prevent promise hanging on mutateAsync failure Note: EventWebhooksTab and DuplicateDialog onInvalidate props are added but not yet wired from apps/web pages. This requires threading through multiple component layers and will be completed in follow-up commits. Platform DI changes (UserDropdown, PlatformMembersView, InviteMemberModal) were reverted in previous commit to prevent regressions. Co-Authored-By: Volnei Munhoz <volnei.munhoz@gmail.com>
7 tasks
10 tasks
8 tasks
devin-ai-integration bot
pushed a commit
that referenced
this pull request
Jan 14, 2026
- Fix #1: Weekly schedule now shows multiple time slots per day in AvailabilityTab - Fix #2: Allow numeric input fields to be empty with proper validation - Fix #3: Add native iOS date picker for date range in Limits tab - Fix #4: Change 'Email verification' to 'Booker email verification' in Advanced tab - Fix #5: Fix Requires confirmation comparison logic in buildPartialUpdatePayload - Fix #6: Forward parameters toggle already working, verified wiring - Fix #7: Add toggles for redirect booking URL and interface language in Advanced tab - Fix #8: Increase scroll padding at bottom from 200 to 350 for better keyboard access
dhairyashiil
added a commit
that referenced
this pull request
Jan 14, 2026
* fix(companion): iOS event type detail fixes - Fix #1: Weekly schedule now shows multiple time slots per day in AvailabilityTab - Fix #2: Allow numeric input fields to be empty with proper validation - Fix #3: Add native iOS date picker for date range in Limits tab - Fix #4: Change 'Email verification' to 'Booker email verification' in Advanced tab - Fix #5: Fix Requires confirmation comparison logic in buildPartialUpdatePayload - Fix #6: Forward parameters toggle already working, verified wiring - Fix #7: Add toggles for redirect booking URL and interface language in Advanced tab - Fix #8: Increase scroll padding at bottom from 200 to 350 for better keyboard access * fix(companion): conditional scroll padding for limits and advanced tabs only * fix(companion): remove static date text from iOS date picker, keep only picker * fix(companion): simplify iOS date picker to match RescheduleScreen pattern * update code
13 tasks
devin-ai-integration bot
added a commit
that referenced
this pull request
Feb 9, 2026
Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com>
19 tasks
akarsh-jain-790
pushed a commit
to akarsh-jain-790/cal.com
that referenced
this pull request
Mar 8, 2026
…m#23716) * refactor: improve _scheduleWorkflowReminders readability and add missing booking trigger events - Extract complex conditional logic into helper functions (isImmediateTrigger, isTimeBased, shouldProcessWorkflow) - Add missing workflow trigger events with immediate execution logic - Update test workflows to use different actions (EMAIL_ATTENDEE, SMS_ATTENDEE) for better differentiation - Fix translation function mock in confirm.handler.test.ts using mockNoTranslations utility - Maintain existing functionality while improving code maintainability Co-Authored-By: amit@cal.com <samit91848@gmail.com> * only show customt emplate for form triggers * filter outside scheduleWorkflowReminder * fix type check * chore: add more tests * test: add comprehensive unit tests for handleMarkNoShow with webhook and workflow coverage - Create handleMarkNoShow.test.ts following confirm.handler.test.ts pattern - Add expectBookingNoShowUpdatedWebhookToHaveBeenFired utility function - Test both webhook and workflow triggers for BOOKING_NO_SHOW_UPDATED - Cover attendee/host no-show scenarios, multiple attendees, and error cases - All 6 unit tests pass with proper mocking of external dependencies Co-Authored-By: amit@cal.com <samit91848@gmail.com> * Revert "test: add comprehensive unit tests for handleMarkNoShow with webhook and workflow coverage" This reverts commit 7642992. * fix: add new workflow triggers to api/v2 * update swagger docs * fix: e2e * fix type check * fix tests, add test for before after events * fix unit tests * revert confirm.handler.test * fix: unit tests * dummy form variables * add routing forms to active on dropdown * add migration file * Ui fixes for variables dropdown * remove other translation keys * review fixes * allow routing forms for activeOn * use repository function to get routing forms * remove unnecessary code * adjust logic in update handler * add triggers to api v2 * remvoe unused file * rename to getAcitveOnOptions handler * remove routingFormOptions handler * clean up getActiveOnOptions * refactor WorkflowService * remove logs * remove unused * fix: type check * fix: missed before after events for recurring * fix: calendarEvent handleMarkNoShow * fix error message Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * don't query disabled routing forms * create tasker function * add tasker code * move isFormTrigger function * small adjustments + todo comments * remove email to host action for form triggers * throw trpc error if email to host is added as step * fix dialog on how to use form responses as variables * remove add variable dropdown for form triggers * remove form workfows in event workflows tab * improvements for workflow logic on form submission * review fixes * base setup for seperate schedule functions (evt and form) * add missing BOOKING_PAID workflow trigger * fix pathname * fix: test for BOOKING_REQUESTED * fix activeOn ids * pass hideBranding and smsReminderNumber * adjustments to reminderScheduler * create empty scheduelForForm functions * pass locale and timezone with form user * pass formData instead of responses * pass timeFormat and locale * reusable function for email sending and reminder creation * implement scheduleEmailReminderForForm * remove added editor field from merge conflict * don't support cal.ai action with form triggers * throw bad request if form trigger and cal.ai is combined * add tests for scheduleFormWorkflows * add form submission tests * remove form response varibe info * clean up workflow actions * fixes for getting template options * pass triggerType to getAllWorkflows * move reusable logic to scheduleSMSReminder * add formdata to param type * type fixes for text reminder managers * implement scheduleSMSReminderForForm * fix import * fix isAuthorizedToAddActiveOnIds * disble whatsapp action * implement triggerFormSubmittedNoEventWorkflow * code clean up * Merge branch 'devin/1755107037-add-workflow-triggers' into feat/routing-form-workflow-triggers * fix type errors * remove async from getSubmitterEmail * fix type errors * revert cal.ai changes * fix type error * add sublogger * code clean up * fix type errors * remove label for attendee whatsapp action * code clean up * fixes saving teams on org workflows * fix type error * code improvements for activeOn ids * Revert "code improvements for activeOn ids" This reverts commit 0a3590a. * improve variable name * fix unit tests * small fixes * type fixes * remove unused translation keys * fix merge conflict issues * code clean up * remove SMS action support * remove more SMS code * add missing imports * set custom template for form action * type fixes * fix tasker endpoint * fix duplicate check * fix workfows.test.ts * use repository funciton to getHideBranding * code clean up * fix hasDuplicateSubmission * code clean up * select only needed properties * remove repository functions * Revert "remove repository functions" This reverts commit 7aa47b1. * add scheduleWorkflows function * Revert "add scheduleWorkflows function" This reverts commit fe5db4f. * move type to /types * Revert "move type to /types" This reverts commit 91e0152. * revert changes causing type errors * remove import * remove unused import * Revert "remove unused import" This reverts commit 1916768. * revert changed from attempt to fix type errors * pass object to gt all workflows * fix isAuthorized check * trigger filtering * remove form submitted no event booked code * remove form submitted no event from schema * remove more code * remove test * fixes * add getSubmitterEmail function * add trigger * small fixes * add missing workflow DTOs * small fixes * use activeOnWithChildren * fix active on when switching trigger type * remove add variable dropdown * add getAllWorkflowsFromRoutingForm to WorkflowService * fix error caused by undefined evt * fix type error * fix type error * fix tests * code clean up * final fixes and clean up * remove console.log * remove template text form from triggers * add routing form repoditory function * fix bug with key * fix test * add missing trigger in update-workflow.input.ts * ForEvt and ForForm function for aiPhoneCallManager * chore: add support for form workflows on api v2 * fixup! chore: add support for form workflows on api v2 * use only repository functions in update handler * move all prisma queries from list.handler * review suggestions * chore: handle workflows api v2 * chore: handle workflows api v2, split in 2 endpoints * fix workflow step creation * remove connect agent and fixes types * add type to workflow * chore: use workflow type in apiv2 WorkflowsOutputService * update worklfow type on update * chore: use workflow type in apiv2 WorkflowsOutputService * fix template body for torm trigger * some UI fixes for email subject/body * resetting email body when changing form triggers * use type field to query workflows * clean up all old active on values * remove responseId from all funciton calls * remove undefined from updateTemplate * refactor: split routing form and event-type workflows code * refactor: split routing form and event-type workflows code * fix template text when adding action * chore: don't rename WorkflowActivationDto to avoid ci blocking * refine update schedule to use only allowed actions * fix type error * don't allow whatsapp action with form trigger * fix type error * return early if activeOn array is empty * fix: from step type in BaseFormWorkflowStepDto * fixup! fix: from step type in BaseFormWorkflowStepDto * api v2 updates * move all prisma calls to repository (service/workflows.ts) * use FORM_TRIGGER_WORKFLOW_EVENTS for form queries * use userRepository * use FORM_TRIGGER_WORKFLOW_EVENTS in isFormTrigger * code clean up * code clean up * use repository functions in formSubmissionValidation.ts * add back trpc import * fix agent repository functions * remove unsued import * fixes for offset api v2 * add missing responseId * fix failing test --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: amit@cal.com <samit91848@gmail.com> Co-authored-by: CarinaWolli <wollencarina@gmail.com> Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com> Co-authored-by: Benny Joo <sldisek783@gmail.com> Co-authored-by: cal.com <morgan@cal.com> Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
devin-ai-integration bot
pushed a commit
that referenced
this pull request
Mar 13, 2026
… leak tests - Item 3: Add 7 comprehensive delegation auth integration tests covering JWT creation params, email cleaning, fallback scenarios, and error handling - Item 7: Document why virtual mocks are necessary in all test files (workspace packages with DB dependencies cannot resolve in Jest) - Cubic #1: Document getCalendarsForConnection caching and upstream limitation - Cubic #2+#3: Make credential key leak tests non-vacuous by including actual key fields in mocks and verifying they don't leak - Remove unused BadRequestException import from freebusy service
Ryukemeister
pushed a commit
that referenced
this pull request
Mar 18, 2026
…reebusy, and list connections (#28387) * feat(unified-cal): connection-based unified calendar API with CRUD, freebusy, and list connections - New GET /v2/calendars/connections endpoint returning all calendar connections with connectionId - Connection-scoped CRUD: GET/POST/PATCH/DELETE /v2/calendars/connections/{connectionId}/events/* - Connection-scoped free/busy: GET /v2/calendars/connections/{connectionId}/freebusy - Legacy calendar-type endpoints: GET/POST/DELETE /v2/calendars/{calendar}/events, GET /{calendar}/freebusy - Backward compat: dual @patch decorators for singular /event/ (deprecated) and plural /events/ - ConnectedCalendarEntry interface to eliminate inline type annotations - DRY service layer with shared private helpers (listEventsWithClient, createEventWithClient, etc.) - Input validation: @isdefined() on start/end, @IsTimeZone() on timezone fields, cross-field to >= from validation - All-day event support: Google Calendar date-only events converted to midnight UTC - New findCredentialByIdAndUserId method in CredentialsRepository for connection-scoped lookups * style: apply biome formatting to unified calendar API files * fix: use @IsTimeZone() validator for timeZone field in CreateEventDateTimeWithZone * fix: add delegation auth support, extract freebusy service layer - Comment 3: getCalendarClientForUser and getCalendarClientByCredentialId now use getAuthorizedCalendarInstance with delegated-auth fallback instead of requiring credential.key directly. Added findCredentialWithDelegationByTypeAndUserId and expanded findCredentialByIdAndUserId to include delegationCredentialId. - Comment 5: Extracted freebusy and connections logic from controller into UnifiedCalendarsFreebusyService, keeping the controller thin (HTTP-only). Moved ConnectedCalendarEntry type and INTEGRATION_TYPE_TO_API mapping into the service layer. - Biome auto-formatting applied to touched files. * test: add unit and integration tests for unified calendar API - GoogleCalendarService: 30 tests covering delegation auth, client creation, CRUD - UnifiedCalendarsFreebusyService: 21 tests covering connections, busy times, filtering - CalUnifiedCalendarsController: 31 tests covering all endpoints (connection-scoped + legacy) - Pipe specs: 37 existing tests continue to pass Total: 98 tests across 5 suites * fix: address Devin Review feedback - fix JSDoc and validator pattern - Fix incorrect JSDoc on listEventsForUser (all-day events ARE included, not skipped) - Fix IsAfterFrom validator to return false instead of throwing BadRequestException (preserves standard ValidationPipe error format) * fix: revert IsAfterFrom to throw BadRequestException per team convention Cubic AI (confidence 9/10, team feedback): validators should throw BadRequestException to preserve the API's standard bad-request response structure, per team convention. * fix: add calendarId query param to createConnectionEvent for API consistency All other connection-scoped endpoints accept calendarId; this was the only one hardcoding 'primary'. Added @apiquery decorator and @query parameter with ?? 'primary' fallback, plus a test for custom calendarId. * Update apps/api/v2/src/modules/cal-unified-calendars/controllers/cal-unified-calendars.controller.ts Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com> * Revert "Update apps/api/v2/src/modules/cal-unified-calendars/controllers/cal-unified-calendars.controller.ts" This reverts commit e18e462. * feat: enhance calendar service with connection-specific methods and improve API documentation * test: complete delegation auth tests, document virtual mocks, fix key leak tests - Item 3: Add 7 comprehensive delegation auth integration tests covering JWT creation params, email cleaning, fallback scenarios, and error handling - Item 7: Document why virtual mocks are necessary in all test files (workspace packages with DB dependencies cannot resolve in Jest) - Cubic #1: Document getCalendarsForConnection caching and upstream limitation - Cubic #2+#3: Make credential key leak tests non-vacuous by including actual key fields in mocks and verifying they don't leak - Remove unused BadRequestException import from freebusy service * fix: add defense-in-depth key stripping in listConnections controller Controller now destructures only { connectionId, type, email } from each connection before returning, so credential.key can never leak even if the service layer has a future regression. Test updated to verify stripping. * feat: add unified calendar API endpoints for connections and events management * fix: add try/catch error handling to CRUD helper methods Wrap Google Calendar API calls in listEventsWithClient, createEventWithClient, getEventWithClient, updateEventWithClient, and deleteEventWithClient with try/catch blocks matching the legacy getEventDetails/updateEventDetails pattern. This ensures proper NestJS exceptions (NotFoundException, BadRequestException) are returned instead of raw 500 errors when the Google API throws. * fix: map Google API errors to correct HTTP status codes Replace blanket NotFoundException/BadRequestException in CRUD catch blocks with mapGoogleApiError() that inspects the GaxiosError status code and returns the appropriate NestJS exception (404→NotFoundException, 401/403→UnauthorizedException, 400→BadRequestException, else→500). * fix: preserve upstream Google API status codes in error mapping Separate 403 (ForbiddenException) from 401 (UnauthorizedException) and add 429 rate-limit handling. This ensures permission-denied and throttling errors are not misreported to API clients. * fix: distinguish Google quota/rate-limit 403 from permission 403 Check GaxiosError reason field for rateLimitExceeded, userRateLimitExceeded, and dailyLimitExceeded before mapping 403 to ForbiddenException. Quota errors are now correctly mapped to 429 (retriable) instead. * fix: keep dailyLimitExceeded as 403 (non-retriable quota exhaustion) dailyLimitExceeded is a daily quota cap, not transient throttling. Only rateLimitExceeded and userRateLimitExceeded are remapped to 429. * fix: add missing @apiquery decorators for calendarId on get/update/delete endpoints getConnectionEvent, updateConnectionEvent, and deleteConnectionEvent were missing @apiquery({ name: 'calendarId', required: false }) which caused OpenAPI spec to incorrectly mark calendarId as required. * ci: retry flaky vitest worker test * fix: update calendarId query parameter to be optional in OpenAPI specification * fix: swap dual decorator order so plural /events/ path appears in OpenAPI spec NestJS Swagger only picks up the first HTTP method decorator. Swapping the order ensures the preferred plural path (/events/:eventUid) is generated in the OpenAPI spec, while the deprecated singular path (/event/:eventUid) still works at runtime. * fix: split dual decorators into separate methods so both paths appear in OpenAPI spec NestJS Swagger only picks up the first HTTP method decorator per handler. Split getCalendarEventDetails and updateCalendarEvent into separate methods for the singular /event/ (deprecated) and plural /events/ paths, each delegating to a shared private helper. Both routes now appear in the generated OpenAPI spec. * fix: update openapi.json with split dual-decorator paths for GET/PATCH event endpoints * fix: mapGoogleApiError - coerce string code to number and read errors from response.data * fix: mapGoogleApiError - guard against NaN from non-numeric error codes * fix: use read replica for findCredentialWithDelegationByTypeAndUserId query * refactor: address review comments - UnifiedCalendarService, ParseConnectionIdPipe, thin controller - Comment 70 (Ryukemeister): Remove 'what' JSDoc from calendars.service.ts - Comment 71 (Ryukemeister): Use array syntax for dual paths instead of separate methods - Comments 73-78 (ThyMinimalDev): Create ParseConnectionIdPipe for connectionId validation - Comments 79-84 (ThyMinimalDev): Create UnifiedCalendarService with strategy pattern - Comment 85 (ThyMinimalDev): Move getConnections from freebusy to UnifiedCalendarService - Controller now only handles HTTP concerns, delegates all logic to UnifiedCalendarService - Updated all test specs to match refactored architecture * chore: regenerate openapi.json after controller refactor to array syntax paths --------- Co-authored-by: cubic-dev-ai[bot] <191113872+cubic-dev-ai[bot]@users.noreply.github.com>
devin-ai-integration bot
added a commit
that referenced
this pull request
Mar 21, 2026
…eturning null - Replace username interpolation in log message with generic text (Cubic violation #2, confidence 9/10) - On P2002, fetch the existing user from DB and return it with membership data instead of returning null, which was dropping users from org setup on retries (Cubic violation #3, confidence 9/10) Co-Authored-By: bot_apk <apk@cognition.ai>
7 tasks
Harry-jain
added a commit
to Harry-jain/cal.com
that referenced
this pull request
Mar 22, 2026
…or-team-assignment feat(event-types): invite non-team emails directly from assignment
emrysal
added a commit
that referenced
this pull request
Mar 24, 2026
…28527) * fix: harden seed script org settings upsert and P2002 error handling Co-Authored-By: romitgabani1 <romitgabani1.work@gmail.com> * fix: remove PII from P2002 log and recover existing user instead of returning null - Replace username interpolation in log message with generic text (Cubic violation #2, confidence 9/10) - On P2002, fetch the existing user from DB and return it with membership data instead of returning null, which was dropping users from org setup on retries (Cubic violation #3, confidence 9/10) Co-Authored-By: bot_apk <apk@cognition.ai> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: bot_apk <apk@cognition.ai> Co-authored-by: Alex van Andel <me@alexvanandel.com>
MyCC22
added a commit
to MyCC22/cal.com
that referenced
this pull request
Apr 7, 2026
Addresses findings from superpowers code review: Important calcom#2 (blocking): TOCTOU invariant test did not actually assert findUnique ran INSIDE the $transaction callback — only checked call order, which holds in both correct and regressed versions. Rewrote to flip a scoped flag inside the $transaction.mockImplementation and assert findUniqueCalledInsideTx === true AND findUniqueCalledOutsideTx === false. Regression-verified: temporarily moved findUnique out of the tx in admin.ts, test failed loudly; restored, test passes. Also asserts the tx was called with isolationLevel: Serializable. Important calcom#1: Cascade mid-rollback test renamed from "returns 500 via internalError when a mid-cascade step throws" to make the mock-layer scope explicit. The mock $transaction has no real rollback semantics so the test verifies the handler response path only; real atomicity is covered by Railway smoke tests against Postgres. Added a comment block explaining the scope. Important calcom#4: tests/helpers/mockPrisma.ts had a drifted createMockPrisma factory that was never called (setup.ts inlines its own version for vi.hoisted reasons). Deleted the factory; kept only the MockPrisma type definition. Added comment explaining why the inline definition exists and keeping the two surfaces in sync. Added pointer comment in admin.ts explaining the TOCTOU test is the canonical guardrail — future refactors should not move the findUnique out of the tx without breaking the test first. Test count: 84 → 85. Local suite 85/85 passing in 3.9s.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.