* Use userId instead of attendee email
* Only write if booking is accepted
* Create `getBookingRequest` function
* Return already requested booking
* Type fixes
* Type fix
* Type fix
* Pass empty seatReferenceId
* Handle no userId
* Update test
Fixes CAL-5372
# Delegation Credentials with CalendarCache.
Following content is a snapshot of the [internal document](https://calendso.slack.com/docs/T08B8KA2BNF/F08L5JYU3V3)
**Problem-1 :**
CalendarCache needs SelectedCalendar records to work but SelectedCalendar record is only created when a user connects their calendar and then enables some calendar for conflict checking. Because with Delegation, no manual connection is done by any of the members, we need a way to create SelectedCalendar records automatically.
**Problem-2**
CalendarCache connects to credential(regular credential) which doesn’t exist for Delegation Credential scenario. Also, DelegationCredential is common for all the members(different from Credential which is different for different members) of the organization and we need to identify to which user the CalendarCache belongs.
**Solution for both problems**
- Create credential records for Delegation Credentials as well - Through Cron(new - we could schedule it every 5mins)
- Now create SelectedCalendar records for those Credential records - Through another Cron(new - we could schedule it every 5mins)
- Now CalendarCache records will automatically be created for those SelectedCalendar records -existing cron
## Fixed some Delegation Credentials bugs unrelated to calendar-cache
- If DestinationCalendar wasn't set(which is possible only with Delegation Credentials), then Google Meet wasn't used as a conferencing app - [Added a test]
- If no SelectedCalendar is there but Google Calendar connection exists(possible only with Delegation Credential) then we were not doing conflict checking. It is expected to not do it for Regular Credentials, but for Delegation Credential we must check for conflict in that case too [Added a test]
- Earlier if a user has Regular Credential as well as Delegation Credential for the same external id which is the member email(say member1@acme.com) then availability were retrieved twice because we weren't deduplicating credentials as it wasn't a trivial thing to do. Now that is being done.
**Env Variables:**
Note this PR doesn't introduce any new env variable. The existing env variable has been added to .env.example. But if this env variable isn't already set, it must be set.
`CALCOM_SERVICE_ACCOUNT_ENCRYPTION_KEY={SAME_AS_SET_FOR_V2_API}`
**Deployment Plan:**
1. Add Observability for SelectedCalendar when _error_ field is set
2. Follow https://github.com/calcom/cal.com/blob/calendar-cache-dwd-support/apps/web/app/(use-page-wrapper)/settings/(settings-layout)/organizations/delegation-credential/delegation-credential.md#setting-up-delegation-credential-for-google-calendar-api to enable Delegation Credential for i.cal.com
3. Note that to be able to see the option to enable Delegation Credential for an organization, you need to enable `teamFeature` and `feature` for `delegation-credential`
## Automation Tests
- Introduced tests for calendar-cache.repository.ts
- Tests all methods of the repository
- Added more tests for handleNewBooking/delegation-credential flow.
- Added test to verify the bug fix when no DestinationCalendar exists and Google Meet should be used still
- Added more tests for Google Calendar/CalendarService targeting DelegationCredential
- Added more tests for getCalendarsEvents.
- To test the new logic of calling getAvailability still if there are no selectedCalendars in case of Delegation Credential
- Also introduced tests for `getAvailabitlityWithTimezones` which was an existing function but now has some new changes.
- Added tests for deduplication logic in CalendarManager.ts
## How to Test
Enable Calendar Cache and Delegation Credential feature for acme org through `features` and `teamFeatures` tables.
- Enable Delegation Credential for acme org
- Enable atleast 1 calendar for conflict checking for one of the users(say owner1)
- Ensure GOOGLE_WEBHOOK_TOKEN is set in .env file
- Ensure GOOGLE_WEBHOOK_URL is set to ngrok url of webapp in .env file
- Hit cron endpoint `curl http://localhost:3000/api/calendar-cache/cron\?apiKey\={API_KEY}` that would cache the freebusy result for the selected calendars
Followup
- https://github.com/calcom/cal.com/pull/20698
- https://github.com/calcom/cal.com/pull/18619/files#r2046795643
* fix: Don't allow seats for recurring events #19061
* update the commit with English
* Update common.json
* Update common.json
* Update common.json
* Add edge case when people have already enabled seats as well as recurring event
* fix type issue
* Handle case where seats and recurring is already enabled
* minor fix
* minor change
* typo
* Block backend functionality
* blocking new booking and other enhancements
* final-changes
* minor-changes
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Tushar Bhatt <95581504+TusharBhatt1@users.noreply.github.com>
Co-authored-by: Tushar <tusharbhatt0135@gmail.com>
* init
* updated typing, english localization text, used existing calculatePeriodLimits and isTimeViolatingFutureLimit to determine if go to next month button should be disabled
* improving copy
* semantic dialog heading tag, proper EN localization,
* reverting
* force local to origin
* Translations by LLM
* intit tests
* moving NoAvailability to its own file.
* refactor overlay component to encpsulate logic in hooks
* improved tests
* remove unintended change
* fix: period data type import. Providing default periodData values
* fix: type errors on event object
* fix: updates case in type import
* removing translations
* remove unnecessary import
* remove unnecessary import
* improving mocks for booker and logger
* moving tests to __tests__ folder
---------
Co-authored-by: Tushar Bhatt <95581504+TusharBhatt1@users.noreply.github.com>
* feat: redirect to original event link for rescheduling cancelled booking
* allow cancelled booking rescheduling when allowRescheduleForCancelledBooking is true
* chore
* fix test
* chore
---------
Co-authored-by: Tushar Bhatt <95581504+TusharBhatt1@users.noreply.github.com>
* feat: add rescheduling to UI
- Introduced displaying the original booking information.
- Updated UI components to show rescheduling status and details.
* fix: update link styling in booking single view
- Changed link text size to small for better UI consistency in the booking details section.
* refactor, type fixes
* added missing margin
* added rescheduled under other badges
* optimised getting booking
* updated namings and perf
---------
Co-authored-by: amrit <iamamrit27@gmail.com>
* Type app options
* Refactor `writeToPersonRecord` to `writeToRecord`
* Abstract writing to salesforce record options component
* Add option to write to event object on cancellation
* Add on booking cancel write to event object to schema
* Refactor writing to record on booking option to use `<WriteToObjectSettings />`
* Pass event object to crm delete method
* When cancelling booking write to event object
- App data isn't being read
* V1 pass app data to crm service
* Undo .env commit
* Fix passing event to cancel crm cancel event method
* Pass event type metadata to `EventManager` in `handleCancelBooking`
* Handle writing to event record
* Type fix
* perf: Slim down loggedInViewer some more
* Move locationOptions to apps router
* Moved calVideo related handlers to separate router
* Moved calendar related handlers to separate router
* Rename
* Moved deleteCredential to new router
* Moved updateProfile to me router
* fix unit test
* fix e2e test
* tweak
* missing
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: unknown <adhabal2002@gmail.com>
* extract NextRequest
* update api and tests
* booking limits tests
* fix more tests to use new approach
* update more tests with new format
* extract getOrgDomainConfig to not use req
* extract req from loadNewUsers and pass in hostname/forcedSlug
* fix instant meeting types and hostname fixes
* fix handleNewBookingReq
* fix type errors in tests
* make hostName and forcedSlug optional
* fix type err
* Revert "fix type err"
This reverts commit 9d5de9019d9dafe348c97b876baaa1d0675967e5.
* wip fix e2e
* fix: add missing headers
* migrate handle recurring event and also create tests specific to fn
* platform recurringbooking
* fix type
* hard code types on request object
* bump libraries
* fixup! bump libraries
* fix: accessing host if headers not passed
* fix: v2 recurring booking
* fix: accessing host if headers not passed
* chore: bump platform libraries
* fix tests
* push
* chore: bump libraries
* push lock changes
* bump libraries
---------
Co-authored-by: amrit <iamamrit27@gmail.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
Co-authored-by: supalarry <laurisskraucis@gmail.com>
Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com>
* refactor handleCancelBooking to not have next request
* fix platform v2 function calls
* dont fall back to "" if no seat refrence
* add missing type from merge
* chore: bump platform libraries
---------
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com>
Co-authored-by: supalarry <laurisskraucis@gmail.com>
* chore: decouple ui dialog from AppRouter and Atoms
* fix type e2e test
* fix: import dialog from @calcom/ui/components/dialog
* fix: remove log
* fix unit test
* fix
* fix and move data-override-list test to features package
---------
Co-authored-by: hbjORbj <sldisek783@gmail.com>
* fix: skip when browsing month has no available slots
* Fix zustand error + add wip tests
* Fix issue with using brows
ingDate too early
* Use slots instead of schedule return types to remove hard coupling to tRPC
* Some await fixes + use type definition from extended core feature
* Move useNextMonth to custom hook
* Add unit tests to cover the next month scenario
* Use changed interface, schedule -> slots,isLoading
* Return no-op until ready