15913 Commits
Author SHA1 Message Date
emrysal c62f333337 chore: release v6.1.7
Post release / release (push) Canceled after 0s
Release Docker / Prepare Release (push) Canceled after 0s
Release Docker / Release AMD64 (push) Canceled after 0s
Release Docker / Release ARM (push) Canceled after 0s
v6.1.7
2026-01-28 16:20:47 +00:00
Eunjae Lee 91a62a14ee fix: disable prefetch in /bookings (#27351) 2026-01-28 13:05:20 -03:00
Alex van AndelandDevin AI 718aef579c fix: optimize bookings/get query to use subqueries instead of materializing 400+ parameters (#27319)
PERFORMANCE: The bookings/get endpoint was taking 24s due to materializing 400+ email
addresses as individual parameters in WHERE IN clauses. This caused massive UNION
queries that overwhelmed the database.

Changes:
- Replace IN clauses with Kysely subqueries for queries 4, 5, 6, and 7
- Query 4 & 5: Use subquery to get emails from users via Membership table
- Query 6: Use subquery to get event type IDs from EventType table
- Query 7: Use subquery to get user IDs from Membership table
- Only fetch user IDs when needed for userIds filter validation
- Add new getUserIdsFromTeamIds function (lighter version without emails)

Before: WHERE email IN ($1, $2, ..., $400+) - passes 400+ parameters
After: WHERE email IN (SELECT email FROM users JOIN Membership...) - passes only team IDs

This reduces parameter count from 400+ to typically 1-10 team IDs, letting the
database optimize the query execution plan.

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-28 12:21:49 -03:00
Carina WollendorferandCarinaWolli cba329d6d2 feat: removes account dropdown from oauth consent screen (#27191)
* remove acount dropdown on consent screen

* change button back to go back

* add missing translations

* fix avatar

* code clean up

* add translation

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
2026-01-28 15:34:59 +01:00
sean-brydon ade823f135 sort team Ids (#27349) 2026-01-28 14:33:58 +00:00
Eunjae LeeandDevin AI ddceabe5d4 fix: use FeatureOptInService for bookings-v3 check (#27183)
* fix: use FeatureOptInService for bookings-v3 check

* refactor: simplify FeatureOptInService API and fix bookings page

- Add resolveFeatureStates method that takes only userId and featureIds
- Update listFeaturesForUser to take only userId parameter
- Remove getUserOrgAndTeamIds from _router.ts (now internal to service)
- Fix bookings page to use new resolveFeatureStates method
- Parallelize getUserFeaturesStatus and resolveFeatureStates calls

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* check session?.user?.id first

* remove comment

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-28 14:28:36 +00:00
Lauris Skraucis 987e727464 docs: document business rules in AGENTS.md (#27347) 2026-01-28 14:13:09 +00:00
Volnei Munhoz 61dd7eb64c chore: Upgrade Next & React (#27332)
* upgrade next and react versions

* upgrade next and react versions

* upgrade next and react versions
2026-01-28 10:47:04 -03:00
Benny Joo 1a31f9136b refactor: Move integration attribute async components to /web (#27341)
* calendar switch

* wip

* wip

* wip

* fix
2026-01-28 10:44:18 -03:00
Carina WollendorferandCarinaWolli 8e5a5629a4 fix: fixes oauth flow with user sign up (#27307)
* fix oauth flow with sign up

* extract key as const variable

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
2026-01-28 13:35:27 +00:00
Amit Sharma 5bea18fd5e feat: hubspot rr skip (#27310)
* feat: hubspot show owner availability for round robin

* fix: translations

* fix: use app name variable for text
2026-01-28 16:57:02 +05:30
Carina WollendorferandCarinaWolli ff6fa64b63 fix: UI improvements for team-wide limits (#27133)
* add badge

* allow undefined

* fix ci type errors

---------

Co-authored-by: CarinaWolli <wollencarina@gmail.com>
2026-01-28 11:13:07 +01:00
sean-brydonandClaude Opus 4.5 ea76df47d2 feat: add invoice URL to proration and test seed scripts (#27297)
* feat: add invoice URL to proration and test seed scripts

- Add invoiceUrl field to MonthlyProration schema
- Update billing service to return hosted_invoice_url after finalizing
- Save invoice URL when creating proration invoices
- Add seed script for testing proration with real Stripe data
- Add cleanup script for test data removal

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* add invoice url

* add invoice URL to tests

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 09:42:57 +00:00
Rajiv Sahal 8319666d76 fix: replace new Date with dayjs (#27306) 2026-01-28 10:46:17 +05:30
emrysal 843314c397 chore: release v6.1.6
Post release / release (push) Canceled after 0s
Release Docker / Prepare Release (push) Canceled after 0s
Release Docker / Release AMD64 (push) Canceled after 0s
Release Docker / Release ARM (push) Canceled after 0s
v6.1.6
2026-01-28 02:40:17 +00:00
Keith WilliamsandDevin AI 3d0663f4af feat: add composite indexes for booking queries at scale (#27315)
* feat: add composite indexes for booking queries at scale

Add new composite indexes to optimize common query patterns for the Booking
and Attendee tables. These indexes are designed to support the system at scale
(14M+ bookings, 50K daily inserts) while minimizing write overhead.

New indexes on Booking table:
- (userId, endTime): Optimizes /bookings/upcoming queries
- (userId, status, startTime): Optimizes busy times and filtered queries
- (eventTypeId, status): Optimizes round-robin and team booking queries
- (userId, createdAt): Optimizes API queries with createdAt sorting

New index on Attendee table:
- (bookingId, email): Optimizes JOIN queries filtering by attendee email

These indexes target the most common query patterns identified in:
- get.handler.ts (bookings list endpoints)
- BookingRepository.ts (busy times, round-robin)
- API v1 bookings endpoint

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* feat: add migration file for booking composite indexes

Add SQL migration to create the new composite indexes:
- Attendee(bookingId, email)
- Booking(userId, endTime)
- Booking(userId, status, startTime)
- Booking(eventTypeId, status)
- Booking(userId, createdAt)

Also clean up comments in schema.prisma to be more generic.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

* fix: swap Attendee index column order to (email, bookingId)

Per Cubic AI review feedback - place email first to match the filter
column order in queries that filter by email.

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-28 02:01:29 +00:00
Alex van AndelandDevin AI c45be81af5 refactor: lazy load KBar data fetching hooks only when opened (#27314)
* refactor: lazy load KBar data fetching hooks only when opened

Co-Authored-By: alex@cal.com <me@alexvanandel.com>

* refactor: move KBar data fetching into RenderResults for proper lazy loading

Co-Authored-By: alex@cal.com <me@alexvanandel.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 21:45:44 -03:00
Alex van Andel 4228f576b1 Revert "fix: cancel download fetch when progress toast is closed (#27151)"
This reverts commit fd476bf7f7.
2026-01-27 17:37:31 -03:00
MorganandDevin AI 23067cd8af fix: await unawaited calendar.events.patch call in updateEvent (#27313)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 20:29:35 +00:00
Keith WilliamsandDevin AI 21500c7047 fix: remove _count children query from EventType and Workflow repositories (#27309)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 15:23:26 -03:00
fd476bf7f7 fix: cancel download fetch when progress toast is closed (#27152)
* fix: cancel download fetch when progress toast is closed

- Create new progress-toast utility using @coss/ui toastManager
- Add ToastProvider to app providers
- Update download components to use AbortController for cancellation
- When cancel button is clicked, abort signal stops the fetch loop

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* fix: track active toasts with Set instead of accessing toastManager.toasts

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* feat: add AnchoredToastProvider to app providers

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* refactor: extract common CSV download logic into useCsvDownload hook

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* refactor: improve progress toast with i18n support and Progress component

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* refactor: replace useCsvDownload hook with DownloadButton component

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* refactor: rename DownloadButton to CsvDownloadButton

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* clean up i18n

* fix: properly throw AbortError when download is cancelled

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* Revert "fix: properly throw AbortError when download is cancelled"

This reverts commit 3c64b848140271e4dcd2e45dba5302eef9ca562c.

* fix abort controller

* fix layout shift

* better handle error

* fix: address Cubic AI review feedback

- Fix typo 'copmlete' -> 'complete' in download_progress i18n string
- Treat null batch as failure during CSV download to prevent partial exports

Co-Authored-By: unknown <>

* remove redundant try - catch

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 16:46:37 +00:00
7ce1ee5cea feat: add forcedSlowMode rate limit to Team and Organization DELETE endpoints (#27258)
* feat: add forcedSlowMode rate limit to Team and Organization DELETE endpoints

Co-Authored-By: alex@cal.com <me@alexvanandel.com>

* test: add NoOpThrottlerGuard to disable rate limiting in tests

- Create NoOpThrottlerGuard class that always allows requests through
- Create withNoThrottler helper function to override CustomThrottlerGuard
- Update teams.controller.e2e-spec.ts to use withNoThrottler
- Update organizations-teams.controller.e2e-spec.ts to use withNoThrottler
- Update organizations-organizations.controller.e2e-spec.ts to use withNoThrottler

This prevents race conditions when tests fire rapidly against rate-limited endpoints.

Co-Authored-By: alex@cal.com <me@alexvanandel.com>

* fix: use jest.spyOn to mock throttler guard in tests

Changed approach from overrideGuard to jest.spyOn for mocking
CustomThrottlerGuard.handleRequest to always return true. This
properly disables rate limiting in tests for the DELETE endpoints.

Co-Authored-By: alex@cal.com <me@alexvanandel.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
2026-01-27 17:24:30 +02:00
cal.com 0bcb110d20 chore: add .env.production to git ignore 2026-01-27 17:02:30 +02:00
85f3cd6228 feat: apply Frame component to webhooks settings page (#27291)
* feat: apply Frame component to webhooks settings page

Co-Authored-By: peer@cal.com <peer@cal.com>

* refactor: include header and description in Frame component

Co-Authored-By: peer@cal.com <peer@cal.com>

* refactor: wrap each webhook in individual FramePanel

Co-Authored-By: peer@cal.com <peer@cal.com>

* refactor: implement two-row badge limit with overflow tooltip for webhooks

Co-Authored-By: peer@cal.com <peer@cal.com>

* style: improve spacing between webhook items and header

Co-Authored-By: peer@cal.com <peer@cal.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 14:48:33 +00:00
Alex van Andel cb7960f571 Revert "chore: release v6.1.6"
This reverts commit 2337e56bea.
2026-01-27 10:43:47 -03:00
emrysal 2337e56bea chore: release v6.1.6 2026-01-27 13:28:58 +00:00
Alex van Andel 53a3b0c111 chore: release v6.1.5
Post release / release (push) Canceled after 0s
Release Docker / Prepare Release (push) Canceled after 0s
Release Docker / Release AMD64 (push) Canceled after 0s
Release Docker / Release ARM (push) Canceled after 0s
v6.1.5
2026-01-27 10:08:56 -03:00
01ae6f1b9e fix: Salesforce tokens add token_lifetime (#27264)
* Create `getSalesforceTokenLifetime`

* When connecting salesforce, add token_lifetime

* Migrate token_lifetime and refetch if token expiry doesn't match

* Add tests for Salesforce token lifetime feature

- Add unit tests for getSalesforceTokenLifetime function
- Add integration tests for token lifecycle management in CrmService
- Fix type error in CrmService.ts by extracting refreshToken variable

Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com>

* chore: re-trigger CI

Co-Authored-By: joe@cal.com <j.auyeung419@gmail.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 10:00:48 -03:00
Morgan 13840764fb Revert "chore: use gh auth login with token for commit step in draft-release …" (#27293)
This reverts commit 8848efef4f.
2026-01-27 14:56:59 +02:00
9b1f86a671 fix: lowercase identifier values in routing form editor (#26616)
* fix: lowercase identifier values in routing form editor

Co-Authored-By: peer@cal.com <peer@cal.com>

* fix: remove unused @ts-expect-error directives

Co-Authored-By: peer@cal.com <peer@cal.com>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 17:39:11 +05:30
Peer RichelsenandDevin AI e3c0e11eb1 revert: remove link cloaking restrictions (reverts #26292 and #26528) (#27289)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 12:01:39 +00:00
sean-brydon 1122c116b6 fix sub-teams (#27284) 2026-01-27 10:26:09 +00:00
sean-brydonandClaude Opus 4.5 cb76e8bde0 feat: add proration invoice and reminder email templates (#27246)
* feat: add proration invoice and reminder email templates

Add email templates for monthly proration billing notifications:

- ProrationInvoiceEmail: Sent when invoice is created for additional seats
- ProrationReminderEmail: Sent 7 days later if invoice remains unpaid

Includes:
- React email templates using V2BaseEmailHtml
- BaseEmail classes for rendering
- Billing email service functions
- Translation keys for email content

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: use allSettled

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 09:28:27 +00:00
bf39489899 feat: add token refresh lifecycle callbacks to CalProvider (#25203)
Add three new optional callbacks to CalProvider that enable users to react during the access token refresh lifecycle:
- onTokenRefreshStart: Called when token refresh begins
- onTokenRefreshSuccess: Called when token refresh succeeds
- onTokenRefreshError: Called when token refresh fails with error message

These callbacks are invoked in both token refresh locations:
1. Response interceptor (when API returns 498 status)
2. Initial access token validation

The callbacks are properly passed through the component hierarchy:
CalProvider -> BaseCalProvider -> useOAuthFlow hook

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Rajiv Sahal <sahalrajiv-extc@atharvacoe.ac.in>
2026-01-27 14:47:56 +05:30
Benny JooandDevin AI e625308881 fix: Improve the error handling in Stripe collectCard method (#27249)
* fix: improve error handling in Stripe collectCard method

- Add CollectCardFailure error code for better error categorization
- Replace generic error with ErrorWithCode for consistent error handling
- Add error mappings for common Stripe errors (customer not found, invalid API key, rate limit, etc.)
- Include Stripe error message when available for better debugging
- Follow the same pattern used in chargeCard method

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

* fix: add CollectCardFailure to getHttpStatusCode mapping

This ensures the error returns 400 instead of 500 when collectCard fails.

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

* docs: add comments explaining ChargeCardFailure vs CollectCardFailure

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

* refactor: simplify collectCard error handling

Remove complex error mapping logic per code review feedback.

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

* test: add CollectCardFailure to HTTP status code tests

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

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-27 06:47:11 +00:00
Dhairyashil Shinde 15dc8f07d8 chore/companion-version-upgrade-102 (#27266) 2026-01-27 07:40:06 +01:00
devin-ai-integration[bot]andali@cal.com c96e40b3d6 fix: replace by_team_admins with by_team_admin in dynamic i18n keys (#27270)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: ali@cal.com <ali@cal.com>
2026-01-27 05:59:02 +00:00
Beto 46d54b36ce refactor(companion): simplify context menu implementation and improve layout for badge spacing (#27265) 2026-01-26 22:52:38 +00:00
Dhairyashil Shinde 17cc9358d7 feat/add-tooltip-to-assigned-badge (#27262) 2026-01-26 22:43:13 +00:00
Alex van AndelandDevin AI 43d05f4426 fix: disable prefetch on team page event type links to prevent Google rate limits (#27260)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-26 21:34:50 +00:00
Barath RajandDhairyashil 4f2f0242eb style(ui): improve padding for VerticalTabItem (#27251)
* style(ui): improve padding for VerticalTabItem

* correct fix

---------

Co-authored-by: Dhairyashil <dhairyashil10101010@gmail.com>
2026-01-26 21:21:14 +00:00
Eesh MidhaandDhairyashil 72d6fcb371 fix: remove sticky positioning from page headers in pages on scroll (#27242)
* fix: remove sticky positioning from page headers in pages using ShellMain

* correct fix (mostly)

* fix: disable sticky headers on routing forms and members pages

Applied disableSticky={true} to remaining affected pages:
- Routing Forms page
- Organization Members view
- Platform Members view

---------

Co-authored-by: Dhairyashil <dhairyashil10101010@gmail.com>
2026-01-26 18:13:34 -03:00
Udit Takkar 3e30a5c3ea chore: hide download booking button (#27255) 2026-01-26 15:18:25 -03:00
7dcc2fe78a feat: add multi-step download app dropdown with platform-specific options (#27211)
Co-authored-by: peer@cal.com <peer@cal.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: pasqualevitiello <pasqualevitiello@gmail.com>
2026-01-26 16:17:32 +00:00
sean-brydon a359f0ba01 feat: organization upgrade flow v3 (#25972)
* wip flow

* add tests

* WIP migrateing view

* push back step

* fix tests and logic for adding new members to existing teams

* few UI fixes

* type fixes

* fix nits

* few UI + re-route fixes

* fix teamId when migrating
2026-01-26 17:03:12 +01:00
Morgan 8848efef4f chore: use gh auth login with token for commit step in draft-release job (#27248) 2026-01-26 11:38:33 -03:00
1e31ac089a fix: use createPortal for FeatureOptInBanner to avoid Intercom widget conflict (#27121)
* fix: use createPortal for FeatureOptInBanner to avoid Intercom widget conflict

Co-Authored-By: eunjae@cal.com <hey@eunjae.dev>

* fix: guard portal rendering against non-browser environments

Add typeof document check before accessing document.body in createPortal
to prevent SSR/test crashes when document is undefined.

Co-Authored-By: unknown <>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-26 14:07:29 +00:00
Alex van Andel 667e500918 chore: release v6.1.4
Post release / release (push) Canceled after 0s
Release Docker / Prepare Release (push) Canceled after 0s
Release Docker / Release AMD64 (push) Canceled after 0s
Release Docker / Release ARM (push) Canceled after 0s
v6.1.4
2026-01-26 10:57:41 -03:00
Morgan f4ef922e00 chore: use token for commit step in draft-release job (#27244) 2026-01-26 10:36:28 -03:00
ba6a87b699 refactor(companion): split calcom.ts into modular service files (#27206)
* refactor(companion): split calcom.ts into modular service files

Split the monolithic 1692-line calcom.ts file into focused modules:
- auth.ts: Authentication configuration and token management
- bookings.ts: Booking CRUD operations and actions
- conferencing.ts: Conferencing options
- event-types.ts: Event type CRUD operations
- private-links.ts: Private link management for event types
- request.ts: Core HTTP request functionality
- schedules.ts: Schedule CRUD operations
- user.ts: User profile management
- utils.ts: JSON parsing and payload sanitization utilities
- webhooks.ts: Webhook management (global and event type specific)
- index.ts: Re-exports all functions and maintains backward compatibility

This improves code organization, maintainability, and makes it easier
to understand and modify specific functionality.

Co-Authored-By: peer@cal.com <peer@cal.com>

* fix(companion): avoid logging sensitive booking response data

Replace logging of full responseText (which may contain PII like attendee
emails and names) with responseLength for safer debugging.

Addresses Cubic AI review feedback (confidence 9/10).

Co-Authored-By: unknown <>

---------

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-01-26 19:03:41 +05:30