* chore: Couple fixes to improve error reporting
* tweak: Fix error message
* refactor: Use findUniqueOrThrow instead of guard
* fix: Broken test, missing ID - suspect it passes because only one record exists
* chore: Minor refactor to split ZodEffect from ZodType
* fix: Satify typescript
* fix: theme is not configured in app router
* fix type error
* remove logs
* use testBothFutureAndLegacyRoutes
* add APP_ROUTER_SETTINGS_MY_ACCOUNT_ENABLED
* add comment to signup-view
* add a basic test for saml button in signup
* add a test for cookie consent checkbox
* refactor and remove duplicates
* rename data-testid for saml button
* add test for saml
* remove code not needed
* better naming
* improve
* address code nit
* skip saml test when needed
* fix flag
* improve
* improve more
* refactor
* refactor
* refactor
* fix and add 1 more test
* remove tag
* remove unneeded code
* fix
* fix test
* it needs to be parallel mode
* reduce code
* simplify
* fix
* fix flake
* fix another flake
* add comments + refactor
---------
Co-authored-by: unknown <adhabal2002@gmail.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* remove old code remnant
* -
* WIP
* type change
* --
* typefix
* fix type
* fix type
* change type name
* add basewhere to eventsByStatus
* add basewhere to the rest
* fix rendering null popular event list item
* URL params for start and endtime to have YYYY-MM-DD format
* remove console log
* resolve suggestion
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* Add `hideCalendarEventDetails` to DB
Co-authored-by: Alex van Andel <emrysal@users.noreply.github.com>
* Add option to hide calendar event details
* Pass `hideCalendarEventDetails` to event object
* Add to API
* Add to CalendarEvent class
* Pass `hideCalendarEventDetails` to calendar services
* Adjust test
* fix: move `hideCalendarEventDetails` to `api/v2/event-types_2024_06_14` and remove from older versions
- Added `hideCalendarEventDetails` to `api/v2/event-types_2024_06_14`
- Removed `hideCalendarEventDetails` from `api/v1` and `api/v2/event-types_2024_04_15`
* fix: calEventRaw is undefined (use event instead)
* chore: Remove debug artifact
* fix: description id + update to copy
* fix: Attempt at fixing type error
* Add hideCalendarEventDetails to test builder
---------
Co-authored-by: Alex van Andel <emrysal@users.noreply.github.com>
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* feat: Improve API v2 docs
* Consistency
* Made the descriptions complete sentences with period
* Update apps/api/v2/src/ee/schedules/schedules_2024_06_11/controllers/schedules.controller.ts
* chore: Add summaries for all API v2 endpoints
* Updated to Get all calendars
* Fix build issues
* Removed unneeded Swagger UI options
* Fix issues with OpenAPI spec
* added bookerLayouts
* added requiresConfirmation
* added tests
* undo extra changes
* undo extra change
* fixed imports
* added requiresBookerEmailVerification
* added hideCalendarNotes
* added lockTimeZoneToggleOnBookingPage
* added eventTypeColor
* undo extra changes
* added seats
* added requiresConfirmationWillBlockSlot to requiresConfirmation
* refactor: Implement BaseEventType class to avoid duplication across EventType input/output classes
## D-R-Y ##
* temp-fix: will revert later
* Correct placement of users array from EventTypeOutput to TeamEventTypeOutput
* Refactor: Shifted transformation logic to controllers using interceptors and pipes for a cleaner service layer.
* small fix
* Refactor: Moved transformation logic from service to controller using interceptors and pipes
** organisations/event-types
* feat: adde tests for `validateEventTypeInputs`
* fix: failing test
* fix: layout validator
* renamed blockCalendarForUnconfirmedBookings to blockUnconfirmedBookingsInBooker
* testing changes
* added disabled state
* fix merege conflict
* renamed requiresConfirmation to confirmationPolicy
* renamed OutputEventTypesResponseInterceptor to OutputTeamEventTypesResponseInterceptor
* renamed `darkThemeColor` -> `darkThemeHex` and `lightThemeColor` -> `lightThemeHex`
* renamed `eventTypeColor` -> `color`
* changed `requiresConfirmation` -> `confirmationPolicy`
* added tests for disabled state
* added class-validators to `disabled?: false`
* Revert: Split create and update input/output classes
* feat: Refactor responses to use DTOs with plainToClass for explicit property control
• Updated all endpoints to return response DTOs (e.g., CreateTeamEventTypeOutput, GetTeamEventTypeOutput) to ensure consistent Swagger documentation generation.
• Introduced plainToClass for transforming responses, enabling explicit control over which properties are returned in the response, following Morgan’s recommendation.
• Replaced generic HandlerResponse type with class-validator based DTOs for each endpoint, ensuring TypeScript enforces correct response structure.
• Applied strategy: "excludeAll" to limit response properties to only those explicitly defined in the DTO, preventing unintended fields from being included in the API responses.
* added pipes to transform output data
* add clean script to platform-types package.json
* added customName
* added destination calendar
* fixed type errors
* added useDestinationCalendarEmail
* refactor: api-reqest and api-response
* Update event-type.output.ts
* fixed errors
* Update yarn.lock
* added some missed properties to output
* Update constants.ts
* removed return type
* fixed some type errors
* reuse types
* Improve readability of validation functions
* Update CHANGELOG.md
* chore: post publish platform libraries
* Update documentation.json
* fix: reset platform libraries to 0.0.0
* fixup! fix: reset platform libraries to 0.0.0
* Update event-type.tranformed.ts
---------
Co-authored-by: supalarry <laurisskraucis@gmail.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
* add booking booking to team settings
* add update mutation
* add missing export
* fix dirty state
* first version of global team limits in getUserAvailability
* add test setup
* create seperate test file for global limits
* add tests for all units
* move limitManager and booking limit functions outside of getUserAvailability
* add migration
* clean up code
* move yearly booking count to booking repository
* code clean up
* don't count rescheduling booking
* add test for getSchedule
* fix type error
* fix type error
* fix type error
* fix from and end date for fetching bookings
* reuse functions
* allow null for bookingLimits
* remove bookings from managed event type
* fix type error
* code clean up
* small fixes form clean up
* fix type issue
* same fixes in teams/_post
* fix existing tz issue
* tests for fix
* adds missingn await
* imrove description
* remove spreading
* fix reschedule issue with booking limits
* fix reschedule error with booking durations
* remove useeffect
* undo commit
* add bookingLimits to UpdateOrgTeamDto
* fix unit tests
* Prepare view for app router migration
* throw error if not in ascending order
* fix disabled update button
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* update UI of signup, login pages
* remove disabled state from google sign-in
* Put isGoogleLoginEnabled to its place + fix displaySignupForm default value
* Rename Signup flow test -> Email Signup flow test
* add data-testid to continue with email button
* completely decouble formMethods values from google sign in
* fix
* refactor
* add signup page test
* revert yarn.lock
* fix e2e test
* add saml in signup
* add saml in signin
* revert
* remove space
* modules for platform plans and billing pages
* add platform billing and plans related pages
* update platform navigation to include billing tab
* custom hook to upgrade team subscription
* refactors
* export cta row component
* fixup
* only pass in subscription id instead of whole subscription
* refactor :teamId/subscribe endpoint logic, add endpoint for upgrading stripe and shift all webhooks logic into services
* refactor team subscription logic, add logic for upgrading stripe and webhooks logic from billing controller
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: Flakyness on pages that use a hard refres
Signed-off-by: zomars <zomars@me.com>
* Update Shell.tsx
---------
Signed-off-by: zomars <zomars@me.com>
* refactor: make manageg user input name required
* refactor: return managed user name in output
* refactor: store provided user name
* test: check managed user name in input and output
* docs: update swagger
* chore: Use no isolation and pooling for unit tests
* Added the params to main command
* Added back the base checkout
* Remove pooling
* Run against an 8vCPU machine
* Added pool=threads back
* Setting on 4vCPU since 8 is not needed due to workflow dependencies
* remove references to /pages for sso, setup, signin pages in /auth
* remove references to pages for insights
* remove references to pages for d
* remove references to pages for signup
* add page for /future index page
* fix routing-forms
* fix
* add missing defaults
* use getServerSessionForAppDir instead
* fix apps/[slug]/[...pages]
* fix metadata in apps/slug/pages
* refactor
* refactor
* remove duplicate code for PageProps
* remove references to pages for /reschedule
* fix
* fix routing forms
* type fix
* fix routing forms again
* revert changes for app/slug/pages
* revert
* revert changes in yarn lock
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* fix settings/admin/page
* remove references to pages for settings/teams
* remove double layouts
* move pages that do not need layout out of (settings) group
* fix
* fix
* fix
* fix
* add sso page and fix layouts
* booking: Move getServerSideProps to /lib
* remove duplicate
* bookings: Move getStaticProps to /lib
* fix type check
* replace setHeader with a server action call in withEmbedSSR
* Add env variables for booking
* refactor: define inputs and outputs by separating default and custom fields
* refactor: event type api <-> internal transformers
* refactor: v2 use refactored libraries to transform input and output booking fields
* refactor: dont allow custom slugs with default reserved slugs
* refactor: input service store only specific default system fields
* refactor: atoms display only specific default system fields
* refactor: delete unused system field constants
* fix: tests
* fix: old event types
* fix: imports
* fix: import
* chore: release libraries and use v2 with them
* fix: unit tests
* refactor: push email in case of missing phone
* refactor: satisfies check for event-type locations
* update version
* fix button to match new spec
* migrate tests to objectContaining
* fix tests
* update RTL
* yarn.lock update
* bump fetch mock to latest vitest version
* update deep mock to use vitest 2.0
* fix mock prisma type cast
* meet base test fn singature for V2
* remove console.log from next test
* feat: remove dropdown from app-store and redirect to new-app-install-flow
* removed extra code
* fix: account select loading issue
* removed getPaymentCredential (unused)
* fix: only redirect after the app has been added to all the event-types
* remove overflowIndicatorStyles
* refactor getUserAdminTeams
* send teamId instead of id
* seperate locations component
* for conferencing apps skip select account page
* refactor InstallAppButtonChild
* installing conferencing apps shows locations dropdown in configure step
* send location data to the handler
* send location data to the handler
* add the newly installed to the locations dropdown (prefillLocation)
* fix: type errors
* fix: handle es-lint errors
* fix: app is added again on submit
* only add app if not already added
* fix: type erros
* filter out managed events for now
* fix: show installed count badge
* remove 2 toast message
* feat: added tests for conferencing apps
* fix: loading indicator
* Update apps/web/pages/apps/installation/[[...step]].tsx
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* Update apps/web/pages/apps/installation/[[...step]].tsx
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* move `getUserAdminTeams` to `UserRepository`
* fix: zoom and jelly not redirecting to the new app install flow
* fix: typo
* add `installableOnTeams` prop
* split `configureStepCard` into smaller components
* fix: step count
* fix: show loading indicator until the new page is loaded
* fix: organizer_default_conferencing_app not visible in a team
* Introduce QueryClient to app card tests
* fix: typo
* add installableOnTeams prop
* fix: tests
* seated events shouldn't have multiple locations #15174
* fix: o365 callback
* fix: office365_video not redirecting to event-types step
* Revert "fix: o365 callback"
This reverts commit bba841035ea34f8c31201b64c77221b8d8c3e626.
* add TEAM_SELECT_STEP
* add apps to orgs and their sub-teams initial commit
* undo team select step
* small ui fix
* fix: wrong step numbers
* fix: dont allow app installation without cretendialId
* fix: don't show acme team as it cannot have any events
* refactor useAddAppMutation
* removed console.log
* added comment
* added comment
* move locationOptions from getServerSideProps a trpc query
* fix: failing tests
* Update conferencingApps.e2e.ts
* refactor useAddAppMutation
* refactor useAddAppMutation 2
* fix: test failing
* fix: unit test
* Revert "fix: unit test"
This reverts commit 6d74032211d094478c6d7cf9aedbce696dfb768d.
* fix: failing test
* Increase test timeout for conferencing app tests
* fix: write separate tests for each conferencing app to prevent hitting 6000 ms timeout
* improved tests naming
* fix: correct message and translation key #15657
* fix: write separate tests for each analytics app to prevent hitting 6000 ms timeout
* fix: analytics apps test
* attempt to fix failing tests
* fix typo
* refactor
* update: replace text-gray with text-stuble
- works with light mode too
* update: use userRepository.getUserAdminTeams
* Merge branch 'main' into feat/org-team-app-install-2
* fix: after merge conflict from app router migration
* remove consoles
---------
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* set error messages to know whats wrong
* trying to find if org with same owner already exists
* ensure a user cannot create more than one platform team
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* chore: Add Prisma extension to block updateMany with undefined 'in'
* Fix type
* types
* Added check for deleteMany as well
* Improved in check
* type
* Updated check to only check undefined and not isArray
* Renamed the guard
* another rename
* Changed undefined check to use typeof
* Types
* Added check
* Update packages/prisma/extensions/disallow-undefined-in-delete-update-many.ts
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Added unit tests
* Added a good case
* Rename
* Rename fix
* Types
* Temporarily disabling the extension for testing
* Added back the extension
* Trying to also log to see if there are swallowed errors
* Update
* removed unused params
* removed console.log
---------
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* FEAT: Implement Dub.co for conversion tracking
* add link creation, @vercel/functions
* use refer.cal.com/:username instead of go.cal.com/r/:username
* sale conversion tracking
* add copy referral link
* limit to IS_CALCOM only
* Update yarn.lock
* fix DubAnalytics
* use workaround for isNewUser
* pass req to getOptions
* Update next-auth-options.ts
* fix ts errors
* only show DubAnalytics outside EU
* add Dub Analytics to /signup
* use WEBSITE_URL instead
* on-demand generate links
* add migration
* add check for existing link + change fetch method to poast
* remove refer.cal.com from PoweredByCal
* limit DubAnalytics to /signup only
* simplify generate-referral-link
* restore yarn.lock
* add yarn with dub sdk in
* add yarn with dub sdk in
* yarn
* Update yarn.lock
---------
Co-authored-by: sean <sean@brydon.io>
Co-authored-by: Peer Richelsen <peer@cal.com>
The close button would actually need to be a `button` instead of a `span` HTML element to be both screenreader and keyboard user accessible, as well as having an accessible label.
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* update calendar logic to handle multiple calendars
* add method to link calendar to credential
* remove logs
* update platform libraries
* update calendar logic to handle multiple calendars
* update credentials repository
* add selected calendars repository to destination calendars module
* add method to get user selected calendars and rename fn
* chore: PR feedback
* resolve merge conflicts
* fixup
* make sure we cover all edge cases for apple calendar
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* fix: wrong reschedule link
* test
* fix
* test
* test
* refactor: get org id of booking
* fix: redirect URL to handle movedToProfile username based on domain context
* Revert not needed changes
* Revert unnecessary changes now
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
* wip
* add method to OrganizationRepository
* server side fetching for availability
* fix error
* server side fetching finish
* remove log
* fix
* fix
* fix type
* no need to export
* fix type
* address nit comments
* fix to allow paypal install on team when user already installed
* handle if parseInt fails
* Update add.ts
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* add class-transformer package to type
* update input dtos for get busy times and fix type issue
* fixup
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* added lockedSMS to future routes
* add orgMigrations routes to future
* correct metadata
* small fix
* add orgMigrations to future
* Move components to client components
* Remove tRPC element from edit user RSC
* Get username for meta
* Remove suspense query
* Remove orgMigrations from app router
* Type fix
* Revert "Remove suspense query"
This reverts commit eadd814f6e4a5d6856d9218342b7909c22fe62c6.
* Handle suspenseQuery in app router
* User edit page, fetch data server side
* Update yarn.lock
* Export getFixedT
* Set PageWrapper as root layout for settings
* Settings Layout accepts strings for shell heading
* Add OOO to app router settings
* Refactor layout for my-account pages
* Remove instances of pages router from my-account
* Refactor security pages
* Add billing to app router
* Add admin API link to layout
* Add api keys page
* Webhooks WIP
* Refactor SettingsHeader to client component
* Add webhook pages
* Refactor API keys page
* Add admin app page
* Type fix
* fix types
* fix developer/webhooks/[id] param value type error
* remove unnecessary code
* do not pass t prop to CreateNewWebhookButton
* fix type errors in webhook-edit-view
* fix the remaining type errors
* do not use prisma directly in generateMetadata
* remove use client if unnecessary
* Remove unused shell heading from SettingsLayoutAppDir
* improve metadata
* fix billing page
* fix import in settings/teams
* Use next `notFound()`
* fix type check
* fix type check
* remove unused code
* Fix calendar setting page
* Separate settings pages into route groups
* Refactor admin settings pages
* Remove meta instance from billing page route
* Update settings layoutAppDir
* Refactor developer settings pages
* Refactor out of office
* Refactor my account settings
* Refactor admin api page
* Refactor security pages
* Type fix
* fix styling in settings layout
---------
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Benny Joo <sldisek783@gmail.com>
* fix: fixed the flaky tests that failed maximum times
* Update action-based.e2e.ts
* another
* add
* add another
* update
* fix
* add
* fix
* update
* update and add
* fix
* update
* update
* chnages
* chore: updates
* reafactor and following best practice
* fix
* add and update
* update
* update and fix
* fix type
* another test
* update
* Update organization-invitation.e2e.ts
* refactor and update
* fix
* final update
* trying to create generic function for ors
* chore: Add generic function to run separate queries for OR
* Refactored getTotalNoShows to use separate queries
* Finished noshows
* Made the no shows logic handle single result
* feat: Create team event on a new team creation
* fix
* fixed failed tests
* move team event type form
* fix type error
* requested chnages
* update
* some update and refactor
* fix e2e test
* Update useCreateEventType.ts
* update
* fix type error
* fix e2e
* update
---------
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* perf: Separate OR clauses from Insights counts
* fixed bug with delete statement
* Fixed types
* Reverted unneeded change
* Need to use += so we capture data from all queries
* feat: Ability to Hyperlink text in Checkbox on Additional Questions
* update
* fix and update
* fix type error
* fix and update
* dpdate
* fix type error
* fix unit test
* Update
* fix tests
* revert test
* remove yarn.lock
* remove schema.prisma
* update
* remove log
* revert
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
* WIP
* services
* controllers + outputs
* unit tests for repositories
* use hard coded enum type
* use prisma import
* remove redunant input file
* fix packagejson
* rename to spec files
* fix typo in option service file name
* move membership call to org membership service
* move logic to service > repo
* fix membership query
* attribute controller e2e spec
* add options e2e test
* add jest watch for e2e
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
* Remove use of location from FormBuilder
* Add tests
* FormBuilderField and BookingFields tests
* More tests
* Remove always true if condition
* Fix ui import mockig that got broken after the last merge
* Ensure adding isBookingPage is done in components in /modules, not in /pages
* Detect isBookingPage prop coming from Page and add it to page wrapper app dir
* fix build
* fix
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* fix: use `userPhone` instead of `phone` for switch case
Currently this switch case never gets to the last case ("phone") as the type expected is wrong.
Here the type may have value `userPhone` and not `phone`.
* fix another case
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* fix: api v2 booking controller with api key
* add test
* fixup! add test
* fixup! Merge branch 'fix-booking-controller-api-key' of github.com:calcom/cal.com into fix-booking-controller-api-key
* fixup! Merge branch 'fix-booking-controller-api-key' of github.com:calcom/cal.com into fix-booking-controller-api-key
* chore: Add replexica for AI i18n
* Add write permission
* moved i18n to repo root
* Added checkout to i18n job
* Added contents:read
* Added actions: write for testing
* Updated contents: write
* feat: add missing translations
* Checking out the i18n files from PR head sha
* Added the rest of the languages
* Added i18n to list of required checks
* Added a comment explaining the custom common.json checkout
* Commented out languages to not crush Replexica usage
* Add a fetch-depth: 2
* Supporting fetch of external fork branch
* Put back the dynamic sha
* Added a check for null so this can run manually and not just on PRs
* Removed comments
* feat: update translations
* Reverted de and fr to re-run with new settings
* feat: update translations
* Reverted de and fr to re-run with new settings
* feat: update translations
* Removed crowdin
* Limited languages to major ones for 1st pass
* feat: update translations
* Fixing es test
* Reverted yarn.lock changes
---------
Co-authored-by: Replexica <support@replexica.com>
* feat: block pending meetings for requires confirmation
* add i18n
* fix:typecheck
* fix(requires-confirmation-block): Fixes type error
* fix(requires-confirmation-block): Fixes type error
* Tweak to set BookingWhereInput as the explicit type instead of as
* fix: type error
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Fix text for cookie consent checkbox in various languages
* update
---------
Co-authored-by: unknown <adhabal2002@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* feat: Add rescheduledBy & canceledBy fields in the DB
* fix: type check
* fix: type check
* fix: use session user email for reschedule
* fix: unit test
* feat: db field email validation
* feat: rescheduledBy and cancelledBy in webhooks
* revert unrelated changes.
* make session user secondary, default to Anonymous
* if condition not required
* Make cancelledBy optional
Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
* update cancel booking type
* fix: update cancelledBy in db when requesting reschedule
* remove default value for fields
* fix: type check
* feat: manage fields via api v1
* fix: add fields in booking read api v1
* test: expand to cover new fields
* fix: use cancelledBy param on booking page
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Add handlePaste function and integrate it with options fields
* Prevents function running if user does not paste a list, allows list items to be pasted without deleting following items
* Subs useState for rhf useWatch to fix issues with multiple form fields
* Sets options array as optional property in zod schema
* Assigns default value to options array to fix possibly undefined type errors
* Sets placedholder property as optional
* maps selectText to options on mount
* Removes comma & semicolon delimiting for pasted lists (new line only) & defines regex as a constant
* Sets default value of placeholder to empty string, provides default fallback for component text field if placeholder is omitted.
* Fix type error on placeholder
* Extracts handlePaste to service function & tests thoroughly
* Some improvements and tests arent needed
* More fixes
* Fix reporting as well
* TS fixes
* Do transforms to and fro from label
* Add unit tests
* Unit test reporting
* Test Improvements
* Self review feedback addressed
---------
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* Set the organizer in the organizer field
* Create generateIcsFile
* Add role enum and only disable for organizers
* Move emails to generateIcsFile
* Add new ics func to new emails
* Fix tests
* Type fix
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* fix: Workflow action 'email to host' only sends to one host of team event
* add in missing files
* fix host logic
* uncomment working test
* code refactor
* use connected calendar email
* add changes to util file
* fix: extend eventType info in sendCancelledReminders
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* feat: ✨ support for adding script url added for umami
This will help self hosters in setting up umami.
* feat: ✨ set default value for script URL in the form field
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* update to fix seated event reschedule
* updated handleseats tests
* updated handleSeats timeslot
* updated test to expect error
* update to remove uid in where clause (isFirstSeat)
* feat: make the meeting duration time more visually toggleable
* final_update
* Update dynamic-booking-pages.e2e.ts
* fix e2e
* fix: e2e test
* fixed
* update
* show selcted item at the time of mount
* fix type error
* Update Duration.tsx
* fix
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* fix: Chinese traditional shows multiple durations of the event as a string
* revert
* make changes only in necessary files
---------
Co-authored-by: unknown <adhabal2002@gmail.com>
* feat:add prefilcheck check box in the field creation
* chore:formatted the li8 translations
* feat:add e2e test case for this feature
* refactor:reanmed the key from prefilledCheck to disableOnPrefill and moved the readOnly logic to formbuilderField
* chore:fixed the type check
* fix:if prefilled has error. do not disabble it
* chore:removed the e2e tests for prefill in e2e
* chore:revert back to old changes
* chore:remove unwanted code frome2e
* Support name field as well
* refactor:handled the feedback changes. still unit test cases pending
* feat: add unit tests for disable field on prefill logic
* chore: resolved the type check and typos
* chore:renamed the files and type clean up
* Apply suggestions from code review
* chore:renaming test files and moving the disableonprefill hook to formbuilderFeild.
* refactor: add unit test for serach params and form values check and minor code formatting and file name changes
* fix: validating the input value partially at the intialising phase. so that form response values and from ui values are same and making sure invalid data not sent to backend on submit.
* chore:fix the type check issue
* fix: field value valdiation at initilisation and add the unit test cases for that change
* chore:add comments to the tests
* chore:resolve type check
* chore: moved the tests to the formBuilder
* Simplify codebase by ensuring select and multiselect changes the value when no option is found
* Relocate and refactor tests
* handle special cases
* Dont disable for dirty fields
* Update schema.prisma
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
* WIP
* add frontend
* backend to update weight
* UI improvements
* WIP weight algorithm
* enable weights switch + algorithm improvements
* fix weightDescription
* clean up code
* remove OOOEntryHost from schema.prisma
* implement logic (not yet tested)
* add tests for weight algorithm
* add test with weight adjustment
* finish unit tests
* fix type error
* fix type error
* add migration
* fix type error
* fix event type update handler
* fix failing test
* UI fixes for saving hosts
* make sure weightAdjustment is not lost on host changes
* fix weightadjustment for new hosts
* add weightAdjustment to availableUsers
* fix type errors
* fix default value for weight
* make weight and weightAdjustment optional
* fix type errors from schema changes
* type fix
* clean up code
* improve comments
* remove comment
* clean up code
* add tests & weight adjustment improvments
* better variable naming
* fixes for weight adjustments
* make weightAdjustments proportional to weights
* fix previous host weight adjustments
* improved tests for weight adjustments
* save weight and priority + sort hosts correctly
* fix type error
* code clean up
* remove console.log
* use BookingRepository to fetch bookings of users
* use BookingRepository to fetch bookings in getLuckyUser
* fix type errors
* fix weightAdjustment if changed from fixed to rr host
* disable weights when 'assign all' is enabled
* typo
* allow 0 weight
* set min (and max) for weight and priority
* use useWatch
* code clean up
* fix type error
* only count accepted bookings for RR
* fix type error
* improve data fetching of bookings
* only filter bookings of availableUsers
* code clean up form feedback
* fix tests
* don't count no show bookings
* code clean up
* choose user with highest weight
* use one reduce instead of two
* use reduce instead of filter and map
* don't show weights toggle when 'assign all' is enabled
* design fixes
* fix type errors
* fix: type check
* Update packages/features/eventtypes/components/AddMembersWithSwitch.tsx
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Create confirmation dialog for attendees
* Add disabling host emails option
* Fix DOM issues
* Allow updating disabling emails on backend
* Pass metadata to sendEmails functions
* Clean up
* Type fixes
* Fix test
* Allow for enterprise only
* Type fix
* Test fix
* Check for parentId
* Disable emails for sendScheduledEmails and sendScheduledSeatsEmails
* Remove unused variable
* Only update disable all emails if event type belongs to an org
* Disable scheduling mandatory reminder workflow if attendee emails are disabled
* Refactor disable email UI
* Update copy
* Type fixes
* Fix missing params
* add gtm to load in us only
* fix: Tried to give typescript some help
* fix: Alternative fix
* fix: Add yarn.lock
* fix: Oops
* fix: type err
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* test: prevent modal button clickable before flicker
* chore: add note to migrate to appDir to solve full page flicker issue
* chore: Improve OutOfOfficePage loading experience
Refactor the OutOfOfficePage component to improve the loading experience by using the `isPending` property from the `trpc.viewer.outOfOfficeReasonList.useQuery()` hook. This workaorund eliminates the full page flicker issue and provides a better user experience. The "Add" button now shows a loading state when the query is pending.
* Update index.tsx
* chore: Update outOfOffice.handler.ts to use input.offset instead of calculating offset
* fix e2e
* Update
* revert
* chore: Fix offset calculation for out of office bookings
* chore: Update date range calculation for out-of-office modal
* chore: Remove console.log statement in out-of-office modal
* chore: Update TimeZoneEnum with additional time zones
This commit updates the TimeZoneEnum in the types.ts file to include additional time zones. The new time zones added are:
- ID: Asia/Jakarta (UTC+7)
- SAMOA: Etc/GMT+12 (UTC-12)
- AMERICAN_SAMOA: Pacific/Pago_Pago (UTC-11)
- HAWAII: Pacific/Honolulu (UTC-10)
- ALASKA: America/Anchorage (UTC-9)
- PACIFIC_USA: America/Los_Angeles (UTC-8)
- CENTRAL_USA: America/Chicago (UTC-6)
- EASTERN_USA: America/New_York (UTC-5)
- VENEZUELA: America/Caracas (UTC-4)
- ARGENTINA: America/Buenos_Aires (UTC-3)
- BRAZIL: America/Noronha (UTC-2)
- AZORES: Atlantic/Azores (UTC-1)
- FRANCE: Europe/Paris (UTC+1)
- GREECE: Europe/Athens (UTC+2)
- RUSSIA: Europe/Moscow (UTC+3)
- UAE: Asia/Dubai (UTC+4)
- PAKISTAN: Asia/Karachi (UTC+5)
- BANGLADESH: Asia/Dhaka (UTC+6)
- SINGAPORE: Asia/Singapore (UTC+8)
- JAPAN: Asia/Tokyo (UTC+9)
- AUSTRALIA: Australia/Sydney (UTC+10)
- SOLOMON_ISLANDS: Pacific/Guadalcanal (UTC+11)
- NEW_ZEALAND: Pacific/Auckland (UTC+12)
The purpose of this update is to provide a comprehensive list of time zones for users to choose from when setting their time zone in the out-of-office feature.
* update
* fix
* remove comment
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: unknown <adhabal2002@gmail.com>
* feat: provide option to allow rescheduling with the same round-robin
host
* update
* fix type error
* fix and update
* fix type error
* update
* remove
* Update getEventTypesFromDB.ts
* add test
* small fix
* fix requested changes
Simplify the hover effect on the Card component by adding a transition to the transform property. This improves the user experience and makes the hover effect smoother.
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* fix: uncaught errors in PaymentService
* fix: uncaught errors in WebhookService
* fix: uncaught errors in sendPayload
* fix: uncaught PaymentService typings in payment utils
* fix: Remove missing users from assignment (#16115)
* remove missing users from assignment
* early return
* fix: use organization default fixedPrice if self-serve/default price is passed in (#15966)
* Use fixed price if default (selfserve) is used
* fix conditional
* use .env instead of hard coded values
* feedback
* fix: display skeleton loader (#16114)
* fix: display loader
* fix: updated skelton loader
* feat: create new markNoShow endpoint (#15738)
* feat: create new markNoShow endpoint
* chore: add schema
* chore: update name
* chore: save progress
* refactor: improve code and types
* fix: unit test
* chore: improvements
* chore: move query to booking repository
* fix: type error
* chore: Remove cal.ai email assistant (#16003)
* Delete apps/ai directory
* removed cal-ai app from app store
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* feat: Add upcoming bookings feature to GET /api/bookings endpoint (#16060)
* feat: Add upcoming bookings feature to GET /api/bookings endpoint
- Added support for filtering upcoming bookings by adding the `upcoming` query parameter to the GET /api/bookings endpoint.
- When `upcoming` is set to "true", only upcoming bookings are returned.
- Regular users can now retrieve only their upcoming bookings by setting `upcoming` to "true".
- System-wide admins and organization admins can also retrieve only upcoming bookings by setting `upcoming` to "true".
* feat: Add status filter to booking API endpoint
This commit adds a new `status` filter to the booking API endpoint. The `status` filter allows filtering bookings by their status, overriding the `dateFrom` and `dateTo` filters. The only valid value for the `status` filter is "upcoming".
* Update _get.ts
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* fix: Hide personal booking theme when in an organization (#16117)
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: uncaught errors in WebhookService
* fix: uncaught errors in sendPayload
---------
Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Imamuzzaki Abu Salam <imamuzzaki@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* refactor: have system and user booking fields schemas and united schema
* fix: event-types output service filter out system booking fields for response
* chore: v2 update platform-libraries to 0.0.25
* chore: platform-libraries export types and update changelog
* chore: add updated lock file
* option to cancel/reschedule in past bookings
* allows reschedule and cancellation on past bookings
* make headline checks readable
* --
* --
* review feedback
* update for location identifier
* for typecheck err
* Update packages/features/bookings/lib/handleNewBooking/getBookingData.ts
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
* update to use custom label for location, remove usage of hideWhenOneOption, remove string conversion of booking field
* nit
* nit
* nit
* Use the dataStore only instead of modifying bookingFields directly from outside the FormBuilder
* Dont unset the actual label, instead have a different property noLabel for this
---------
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
* feat: Add upcoming bookings feature to GET /api/bookings endpoint
- Added support for filtering upcoming bookings by adding the `upcoming` query parameter to the GET /api/bookings endpoint.
- When `upcoming` is set to "true", only upcoming bookings are returned.
- Regular users can now retrieve only their upcoming bookings by setting `upcoming` to "true".
- System-wide admins and organization admins can also retrieve only upcoming bookings by setting `upcoming` to "true".
* feat: Add status filter to booking API endpoint
This commit adds a new `status` filter to the booking API endpoint. The `status` filter allows filtering bookings by their status, overriding the `dateFrom` and `dateTo` filters. The only valid value for the `status` filter is "upcoming".
* Update _get.ts
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* test: Add tests for POST /api/event-types endpoint
* revert: undo last unintended change in yarn.lock
* revert: undo last unintended change in package.json
* managed by tooltip
* updated for team admin
* updated for typechecks and naming
* for multiple admins
* update to show team link when more than 2 admins
* nit/chore : variable naming
* improvement
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: unknown <adhabal2002@gmail.com>
The commit refactors the form submission logic in the CloseComSetup component to use the URLSearchParams API for constructing the URL and removes unnecessary code.
* add reassign host to edit dropdown
* add dialog to reassign rr host
* Design improvements
* add translations
* only show reassign for admin/owner
* add first version of email template
* Init rr assign endpoint
* Pass booking information to rr assign endpoint
* Only allow attendee of booking to reassign themselves
* Send email to reassigned and cancelled member
* On reassign change calendar events
* Add workflows for new host
* On reassign new host - rr
* Fix icon
* Abstract reassignment logic
* Update calendar invite
* Add tests
* Clean up
* Merge with `main`
* Type fixes
* Add back dialog and handle no available hosts
* Handle if rr host is not organizer
* Fix calendar invites when organizer doesn't change
* Clean up
* Clean up
* Type fixes
* Type fixes
* Type fixes
* Type fixes
* Type fix
* Type fixes
* Type fixes
* Add custom responses to evt object
* Type fixes
* Type fix
* Type fix
* Type fixes
* Type fixes
* Type fix
* Type fix
* Update tests
* Type fixes
* Fix tests
* Fix tests
* Add booking repository
* Fix tests
* Fix tests
* Add doesUserIdHaveAccessToBooking for user
* Add check if user is team admin
* Check user permission tRPC route
* Type fixes
* Correct Promise.all
* UI fixes
* UI fixes
* Remove unused assigned hosts prop
* Type fix
* Remove unused frontend code
* Include user priority
* Fallback to event type users for older event types
* Get booking workflow reminder
* Revert back to eventType.hosts
* Fix lint
* Handle changing workflows
* Type fixes
* Type fixes
* Type fix
* Fix tests
* Update new booking imports
* Fix imports
* Type fix
* Type fix
* Fix adding all members to reassignment emails
* Fix cancelled RR emails to show old host
* Ensure consistent event titles
* Send new event workflows to new host
* Change event name if organizer changed
* Fix query error
* Delete old booking reference when reassigning
* Type fixes
* Type fixes
* Fix test
* Rename func isAdminOfTeamOrParentOrg
* Select specific workflow fields
* Address workflow feedback
* Delete const
* Address feedback
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* feat: Make event duration a dynamic text variable
* Update common.json
* final update
* update
* fix type error
* fix unit test
* refactor and update
* For now log the situation when duration isnt a number
---------
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* fix/typoe
* use noop
* Update packages/features/ee/common/server/LicenseKeyService.ts
* wip - try unbork e2e
* update conditional
* use e2e value for NOOP resolve value
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* fix: meeting link is not updated
* fix: broken ui in edit location dialog
* Update editLocation.handler.ts
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* test: add VariableNode test suite
* test: add ToolbarPlugin test suite
* test: add AutoLinkPlugin test suite
* test: add AddVariablesDropdown test suite
* test: add Editor test suite
* chore: Remove unnecessary comments in ToolbarPlugin.test.tsx
---------
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
* chore: platform-libraries export updateNewTeamMemberEventTypes
* chore: platform-libraries export updateNewTeamMemberEventTypes
* chore: v2 api bump platform-libraries to 0.0.22
* fix: add created managed user to assignAllMembers: true team event-types
* fix: add created organizations user to assignAllMembers: true team event-types
* refactor: organization teams chose if team creator is auto-accepted
* refactor: managed users have only 2 default event types with video
* refactor: lowercase schedulingType for creating team event-types
* refactor: lowercase schedulingType for creating team event-types
* feat: separate platform teams by OAuth client
* swagger regenerate
* refactor: delete platform team when oauth client deleted
* revert: keep 4 default event-types
* fix: tests && merge of main into this branch
* fix: typecheck
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* fix: dont check OrganizationSettings.orgAutoAcceptEmail uniqueness for platform teams
* feat: display organizationId in OAuthClientCard
* feat: ApiAuthStrategy handle oauth credentials
* refactor: clean up ApiAuthStrategy test
* refactor: use ApiAuthGuard in OauthClientsUsersController and OAuthFlowController
* fix: copying org id
* refactor: more specific error message when api auth
* refactor: auto accept team creator membership
* feat: useTeamEventType and useTeamEventTypes hooks
* refactor: make team event-types public & searchable by eventSlug
* feat: include host name in team event-types hosts response
* fix: isFixed=true by default for COLLECTIVE event hosts
* fix: useTeamEventType eventSlug access
* feat: BookerPlatformWrapper enable team events by exposting orgId and teamId props
* refactor: provide orgId in atoms context
* refactor: use orgId from context in team event-types hooks
* refactor: return teams in useMe
* chore: examples app teams setup
* Revert "refactor: return teams in useMe"
This reverts commit de992ddc9af6ee9a2111938069f5b9c34cc2d8ea.
* Revert "chore: examples app teams setup"
This reverts commit 0766aa21acc25efa2361d38c3f87ddba773a0245.
* feat: useTeams hook
* chore: setup examples app with team event-type
* fix: small fixes
* swagger
* Revert "refactor: provide orgId in atoms context"
This reverts commit f053a498ee6f8fa8ece5ec8d8630c59eda8873e3.
* feat: orgId in atoms context
* feat: PlatformBilling guard
* chore: delete test of the deleted oauth-client-credentials.guard
* refactor: org event-types collective events isFixed always true and priority medium
* refactor: org event-types COLLECTIVE response ignore isFixed and priority as they are same
* fix: organizations event-types e2e
* fix: billing guard
* refactor: tests cleanup
* fix: platform plan guard spec
* refactor: e2e test cleanup
* seed error if not team
* refactor: rename authenticateApiKey to authenticateBearerToken
* refactor: transforming response hosts
* refactor: rename findUniqueByMatchingAutoAcceptEmail to findUniqueNonPlatformOrgsByMatchingAutoAcceptEmail
* refactor: rename findUniqueByMatchingAutoAcceptEmail to findUniqueNonPlatformOrgsByMatchingAutoAcceptEmail
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* Init
* Add mock trpc context
* Intro mockDatabaseClient
* Introduce mockDatabaseClient class
* Add delete video app test
* Add calendar test
* Remove unused func from bookingScenario
* Remove console.log
* Add app repository
* Add createMany method to event type repository
* Remove instance of MockDatabaseClient from video test
* Add destination calendar repository
* Remove instances of MockDatabaseClient
* abstract logic to own handler
* Remove dev dependency
* Clean up
* Type fix
* Pull yarn.lock from main
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* feat: No-show bookings - do not count towards a member's round robin assignment
* filter no show organizer
* remove logs
* fix: filter bookings where host attendee is no show
* fix: use not condition for noShow
* chore: test
* add default false for noShowHost
* Revert "chore: test"
This reverts commit c914a8fc4a14ca9c7d8c4a08ff8b0f463789171c.
* chore: integration test
* fix: noShowHost not working for null
* Update packages/lib/server/getLuckyUser.ts
* chore: update test description
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: gh0st91848 <gh0st91848@gmail.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* fix: Change minimum number of teams required for org self-serve
Signed-off-by: Souptik Datta <souptikdatta2001@gmail.com>
* refactor: Use a new constant for displaying org helper text dialogue
Signed-off-by: Souptik Datta <souptikdatta2001@gmail.com>
* Update packages/lib/constants.ts
* Update turbo.json
---------
Signed-off-by: Souptik Datta <souptikdatta2001@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* removed reduntand check on assignedusers
* update for managed eventtype
* formatted
* comments
* Updated comments
* extracted checkForEmptyAssignment and added tests
* updated comments
* updated to show dialog also when not yet saved
* update translations
* updated comments
* updated translation
* updated types
* chore: update naming and comments
* Delete apps/web/lib/checkForEmptyAssignment.ts
deleted since file was renamed
* Delete apps/web/test/lib/checkForEmptyAssignment.test.ts
deleted as the file is renamed to be more descriptive
* update to do teamcheck before
* chore: revert name to CheckForEmptyAssignment
* updated check conditions
* updated useEffect dependencies
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* WIP: UI created to see if it matches RFC idea
* Remove schema as we validate on the backend with old+new key schemas
* Add comment about proxy URL request when on older versions
* feat: create custom axios instance to use signature middleware
* fix: update form to respect new schema
* Add cal signature token to trubo env
* use backend mutation for creating license keys
* add loading state to creation button
* update form to have a success state
* fix type error for console.warning :')
* use api version v1
* Inital setup
* Fix verifyApi Key tests
* Implement tests for LicenseKeyService
* Restore old checkLicense code
* check license key first
* fix imports
* fix url in tests. Implement prisma extention to track creation
* Use data.status for licenseCheck
* extract fetch to class
* improve error
* [wip] per user tracking
* Remove new URL as it was breaking search params
* Use client extention in customPrismaClient
* Remove log
* Remove license required from creation form as itll fail
* Fix annual price calculation
* add api route to .env.example and constants
* re-word instructions in .env.example
* chore: feedback
* Update packages/features/ee/common/server/LicenseKeyService.ts
* Add IS_E2E_ENABLED constant + update tests
* Revert "Add IS_E2E_ENABLED constant + update tests"
This reverts commit d059b73f6272bc06fd2ab5ed505b6d52ea030a56.
* chore: tests fixes
* fixes: unit tests
Signed-off-by: zomars <zomars@me.com>
* chore: add missing instructions
---------
Signed-off-by: zomars <zomars@me.com>
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* feat: org members can fetch their teams apiv2
* fixup! feat: org members can fetch their teams apiv2
* feat: org members can fetch their teams apiv2
* fixup! feat: org members can fetch their teams apiv2
* fixup! fixup! feat: org members can fetch their teams apiv2
* fixup! fixup! fixup! feat: org members can fetch their teams apiv2
* fixup! fixup! fixup! fixup! feat: org members can fetch their teams apiv2
* chore: Remove unit tests from running after crowd in
* Update permissions on all workflows
* Updated pr permissions
* Added actions:write to top-level pr
* Update .github/workflows/unit-tests.yml
* Removed the linting annotation
* feat: Link to rescheduled booking from the old one
* add original comment
* use fromReschedule
* fix: type check
* review updates
* Update common.json
* change booking page text
* Delete packages/features/bookings/lib/getRescheduledToBooking.tsx
---------
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
* refactor: event-types CREATE, UPDATE accept scheduleId and return scheduleId
* chore: enable passing scheduleId to event-types create handler
* chore: use platform-libraries at version 0.0.20
* fix: remove team output schedule
* finish merge main into this branch
* fix: dont allow adding scheduleId to event-type if user does not own schedule
* Support automatically adding user to organization
* Use Repository
* Fix unit test
* Code Improvements
* Fix type error
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* bugfix - CAL4052 TimeZone select should show the selected timezone
* Pusheding the code for type - check failure
* Updating MenuPosition as absolute
---------
Co-authored-by: sumantha <sumantha-ullasa-prabhu@hpe.com>
* fix: event-types input service transform length property
* feat: create organizations event-types controller, service and repository
* feat: enable organizations event types
* fix: create team request user isOrgAdmin check
* refactor: hosts array required in team input and output
* chore: use platform-libraries at version 0.0.19
* tests: test organizations event-types
* feat: enable managed event-types
* chore: fix main merge into this branch
* feat: assign all team members for managed event-types
* refactor: gathering managed event-type users ids
* chore: include assignAllTeamMembers in team event response
* test: assign all team members db event
* chore: delete unused files
* docs: swagger create and update request body objects
* revert: event-types platform-libraries update
* refactor: organisations event-types endpoints accessible by TEAM_ADMIN and up
* fix: managed event types output hosts array empty
* fix: dont allow creating event-type for non-team member
* chore: delete unused variables
* tests: negative tests
* chore: finish main merge
* update documentation for proper hostile command
* add OrgBanner component and replace it in ee organization profile settings
* add width and height defaults, with option to override
* updated sizing with image loaded
* fix: add alt to OrgBanner in test
* fix: failing OrgBanner test, added neg test
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix#15787 created signoutbtn on onboarding screen
* fix: Add signout button on onboarding screen and changes done as per feedback
* small error removed
* update to display availability page as per weekstart setting
* update to accomodate any day
* update for AvailabilityTab
* reusable and tests added
* update test description
---------
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
* fix: filter admin_api if org is present
* remove admin_api from developers tab when org is present
---------
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
* fix: set conferencing apps as default
* fix in other oauth conferencing apps
* creating default event-types should set the user's default location
* Update getDefaultLocations.ts
* fix: unit test
* default install only for first oauth app
* fix: type-check
* update default on success
* fix: pass callback prop
* chore: code cleanup
* Fix condition
* no longer needed
- as we reverted https://github.com/calcom/cal.com/commit/20fdb50081ae684723a5af78436068c0b09509a4
---------
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
* fix: disable google-meet in user onboarding if google-calendar is not installed
* add tooltip
* fix: type check
* fix: type check for tooltip
- allowed `ReactNode` for tooltip content prop
---------
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* fix: wrong booking seats full error on collective event
* test: verify seat availability calculation based on booked seats, not total attendees
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
* fix: Update stripe customer email when a user updates cal.com email
* Only update email on stripe if stripe is enabled and if there is a stripeAccountId already associated with the user
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* add org to create workflow button
* add save button for testing in dev mode
* add select all to multi select dropdown
* fix select all
* pass isOrg to WorkflowDetailsPage
* add checkbox to apply to all including future
* fix count text on select
* WIP schema
* shows teams in dropdown
* add team option to UI
* [WIP] refactor for update handler
* filter out "all" from activeOn
* fix type error
* create more helper functions
* create reusable function for scheduling all booking reminders
* finish update workflows for orgs (without testing)
* fix isAuthorized check for orgs
* fix getting newActiveOn
* move all helper functions to util file
* more code clean up
* fix deleting reminders for org workflows
* fix adding and editing steps
* update form data when workflow is saved
* code clean up
* fixing creating/deleting reminders when user is member of several teams
* fix setting activeOn for teams in useffect
* add on delete cascade
* make multiSelectSchenbox searchable
* set activeOn correctly when checkbox true
* WIP
* fix type errors in MultiSelectCheckboxes
* implemented scheduling org-wide workfow notifications (not yet tested)
* fix type errors
* type error
* add missing changes from merge conflict
* remote not needed include statement
* fix type errors
* code clean up + some todo comments
* support org workflows for cancelled workflows
* delete reminders from removed members
* remove reminders if isActiveOnAll is turned off
* fix unti test and type error
* code clean up
* create basis for testing to book org team event
* create org workflow with active team
* fix getting active org workflows on team + test setup
* fix creating workflow step for tests
* fix first org test
* add test for user event type with org workflow active
* use deleteAllWorkflowReminders everywhere
* add test for deleteRemindersFromRemovedActiveOn
* fix type errors
* make all tests pass
* fix type error
* fix getSchedule test
* code clean up
* add missing import
* fix type error
* fix tests
* code clean up
* fix imports
* update reminders when trigger was changed
* check for teamId before userId in reminderScheduler
* move getOrgIdFromMemberOrTeamId to different folder
* code clean up
* fix tests
* test setup for scheduleBookingReminders
* fix typo
* add tests for scheduleBookingReminders
* fix prisma default import
* fix workflowStep type
* add scheduleBookingReminders test for sms
* return dummy sid for scheduleSMS testMode
* clean up + fixes
* add lost changes from merge
* get teamId and userId from incoming evt object
* removing not needed select
* add org support for scheduleMandatory email reminder
* add other teams to dropdown
* move getAllWorkflows to seperate file and call it in parent function
* include org wide workflows in createNewSeat
* some fixes + code clean up
* add new team to select text count when including future teams is checked
* fix upsert and remove sms reminder field
* correctly update activeOn if 'including future ...' is enabled
* list active Org workflows in event workflows settings
* fix sms reminder field in all handlers
* add helper function to check if step was edited
* fix active on badge on workflow
* fix type error
* fix double reminders
* add teamId: null for userWorkflow query
* fix activeOnAll with managed event types
* add missing teamId in getAllWorkflows
* add a dafaut to prisma param
* fix managed event types on select all user workflows
* code clean up
* better variable name
* small fixes in update handler
* fix test name to match function name
* add info badge
* fix workflow count in event type settings
* fix getting bookings from children manged event types
* delete reminders when user is not part of any time no more
* implement feedback
* fix disbale workflow in event type settings
* fix remove member
* create new function getAllWorkflowsFromEventType
* add some removed code
* use promise.allSettled when deleting workflow reminders
* create new function deleteWorkflowRemindersOfRemovedMember.ts
* fix userId param
* delete org worklfows when team is disbanded
* don't trigger active on all workflow if not part of any team
* fix active on count badge
* add test for deleteWorkflowRemidnersOfRemovedMember
* trigger workflow also if not member of any subteam
* fix failing test
* remove unused code
* use testId for go back button
* fixes for managed event types & activateEventTypeHandler
* code clean up
* don't activate workflow on locked managed event type
* fix type error
* type error
* more type fixes
* feedback
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* feat: RECORDING_TRANSCRIPTION_READY webhook
* refactor: split into diff files and restructuring
* feat: finish batch processor finished
* chore: types
* fix: type error
* chore: change name of triggger
* test: add unit test
* fix: type
* fix: type err
* chore: test
* feat: add booking reference repository and other imp
* chore: log
* fix: import
* chore: type error
* fix: update test
* fix: test
* fix: test
* fix: add timeout
* chore: move beforeEach
* Mock missing env variables to test. These vars are not set in CI
---------
Co-authored-by: Hariom <hariombalhara@gmail.com>
* chore: remove personal branding if in an org and use org branding
* fix: minor fix
* Update SettingsLayout.tsx
* Update SettingsLayout.tsx
* Update profile.tsx
* some fixes and e2e test
* fix: e2e test
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* chore: update formbricks-js to newest version
* fix: Regenerate yarn.lock with right deps
* update formbricks-js version to 2.1
* Update yarn.lock
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* fix(@cal.com/web): update debounce logic to work correctly and not show non-premium usernames as premium
- removes redundant useMemo hook from UsernameTextfield.tsx & PremiumTextField.tsx
- cancles the debounceAPICall on every unmount of UsernameTextfield.tsx & PremiumTextfield.tsx via useEffect cleanup function
Fixes#15628
* fix(@cal.com/web): update the debounce logic to use the pre-existing useDebounce hook
- update the debounce logic in UsernameTextField.tsx & PremiumTextField.tsx to use the pre-existing useDebounce hook instead of loadsh debounce
- update the debounce delay to 600ms to be consistent with the signup.tsx behavior
Fixes#15628
* fix: signup debounce not working properly
---------
Co-authored-by: Amit91848 <samit91848@gmail.com>
* feat: Support running webapp and embed-core playground on HTTPS. It allows to test SameSite attribute easily in embed
* Update yarn.lock
* feat: Support running webapp and embed-core playground on HTTPS. It allows to test SameSite attribute easily in embed
* Update yarn.lock
* Fix git-setup.sh
* Fix yarn.lock
* refactor: move functions to separate files
* chore: remove inline function
* chore: type error
* fix: type error
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* fix: getPublicEventType of NonOrgUser fetch OrgUser event-type with same username
* Fix the test that was supposed to verify the scenario
---------
Co-authored-by: Hariom <hariombalhara@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
* init apple calendar service
* update apple calendar service logic
* update typing for CalendarApp interface
* add id and type for apple calendar
* fixup: logic for apple calendar service
* update logic for checkIfCalendarConnected function
* add apple calendar service to calendars module
* fixup
* update calendars to include cases for apple calendar
* fix imports
* init frontend for apple calendar connect
* add apple connect atom to connect atom
* fixup
* fixup
* add alias for latest version of platform library
* fix import paths
* custom hook for saving apple calendar credentials
* add apple calendar to examples app
* add interface for credentials syncing calendars
* bring calendars controller to orginal state
* refactor
* update custom hook to sync credentials
* update atom
* resolve merge conflicts
* add endpoint for syncing calendar credentials
* fixup
* update atom
* update useCheck to invalidate queries onSubmit
* fix typo
* fixup
* remove unused tokens respository
* rename controller
* cleanup
* fix: reset react queryClient on access token change
---------
Co-authored-by: Rajiv Sahal <rajivsahal@Rajivs-MacBook-Pro.local>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
* fix: Error in team members migration during org onboarding
* Add invitationMemberHandler tests
* Add unit tests
* Improve tests and refactor
* Improve tests and refactor
* Fix type issue
* Fix createNewUsersConnectToOrgIfExists args
* fix: office#65Video expiry_date
* Revert "fix: office#65Video expiry_date"
This reverts commit 6142287805b5c6a40e746126735745a5617334c7.
* Change logger.debug to logger.error for better visibility of all log cases
* refactor: loadUsers and move to separate file
* fix: improvement
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* fix: Error thrown due to missing user
* chore: Remove unnecessary logs
* fix: Remove PageWrapper in order to prevent double signIn
* Change profile typing to optional
* further type fix
* further type fix..
* Added a log for pull_request
* Added labels logging
* Using labels straight from event PR object
* Converting to JSON
* Switching to use payload
* Fixed issue with undefined pr
* Fixed non-mapping issue
* Removed the types
* Added another cache key segment using the head commit sha
* Added separate workflow for labeled action
* Fixed syntax error
* Fixing payload issue
* Added log
* logging full object
* Put e2e back in the names to help find them
* Limited logging
* fix: v2 even-types versioning
* test: old v2 even-types request with VERSION_2024_06_11
* test: old v2 even-types request with VERSION_2024_04_15
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* Added a log for pull_request
* Added labels logging
* Using labels straight from event PR object
* Converting to JSON
* Switching to use payload
* Fixed issue with undefined pr
* Fixed non-mapping issue
* Removed the types
* Removed issue with run-jobs
* Put back the types
* chore: Make ready-for-e2e label check more robust
* fixed owner issue
* Try that again
* multi-step check for PR
* added catch
* Using the output from changes
* more fixes
* logging the sha
* Attemptig to fix the sha problem
* Cleanup
* Cleanup
* Testing with the same sha reference as checkout
* Reverted back
* cleanup
* chore: Improve CI workflow
* Made a new pre-merge flow that runs the builds and e2e
* Refactored back into 1 file
* Adding another condition for checking the ready-for-e2e
* syntax
* More syntax
* Change e2e-required to only run when ready so it doesn't fail
* A different attempt at getting the ready-for-e2e label
* Supporting PRs and workflow_dispatch
* logging the branch
* hardcoding to test
* Trying the rest call
* Added logging
* Check for the label in the same step
* More logging
* Added job-level output
* Reverted back to 'true'
* Moved the e2e required check into the main required check
* More logging
* Peeling the branch off of the ref
* Fix the ref
* Trying a separate workflow for labeling
* Updated name for the labeled file
* Checking label events to avoid unnecessary runs
* Got rid of the extra check to see if required should run
* Upgraded old actions running Node 16
* Updated the pre-reqs for running jobs
* Removed the dependency of API builds before starting E2E suites
* Removed extra production build used by analyze job
* Fixed the run-e2e check
* Using the pull request object when available
* Checking for null PR
* Added check for no event
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* refactor: UserAvatarGroupWithOrg.tsx remove unecessary profile prop
* chore: define event-type types in platform/types
* feat: event-type transformes in lib and re-exported through platform-libraries
* chore: define user types in platform/types
* chore: add users endpoint to platform-constants
* refactor: app-store use narrowed down booker event type
* chore: version old event-types module
* fix: old event-types e2e test
* fix: libraries add missing export
* fix: reset libraries version to 0
* feat: new event-types module and users endpoints
* feat: make booker atom work with v2 event-types
* updating event type
* refactor: remove guard for get event-types
* refactor: move private hook to public
* Revert "refactor: remove guard for get event-types"
This reverts commit d41204069f1d5bb1305b388ce53399f9175f4249.
* Revert "refactor: move private hook to public"
This reverts commit 09322e8fba102e57104959f79ed6bfa9a677dc9d.
* refactor: get by username and slug in /event-types
* remove console log
* feat: locations handle displayEventPublicly
* test e2e event-types
* revert: user output from types
* refactor: event-types hooks have private and public folders
* refactor: require event-type.slug in input
* refactor: demand that all labels of booking fields are unique
* refactor: remove unused import
* refactor: only have email and name by default in booker
* refactor: add booking field slug
* fix: display event-type location publicly / hide it in booker
* fix: display event-type location publicly / hide it in booker
* fix: packages/lib tests
* fix: typescript in e2e test
* fix: dynamic event types input
* refactor: use IsIn instead of IsEnum
* refactor: simplify getEventTypes
* fix: use ApiAuthGuard instead of AccessTokenGuard
* chore: export more stuff from libraries
* refactor: SchedulingTypeEnum and Type
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* your name translation fixed
* do translation outside Components as that is needed by all components. Allows the code to stay DRY
---------
Co-authored-by: Hariom <hariombalhara@gmail.com>
* chore: enable apiv2 auth with api keys
* chore: enable apiv2 auth with api keys
* chore: enable apiv2 auth with api keys
* chore: enable apiv2 auth with api keys
* chore: enable apiv2 auth with api keys
* fixup! chore: enable apiv2 auth with api keys
* fixup! Merge branch 'chore-apiv2-auth-api-key' of github.com:calcom/cal.com into chore-apiv2-auth-api-key
* fixup! fixup! Merge branch 'chore-apiv2-auth-api-key' of github.com:calcom/cal.com into chore-apiv2-auth-api-key
* fixup! fixup! fixup! Merge branch 'chore-apiv2-auth-api-key' of github.com:calcom/cal.com into chore-apiv2-auth-api-key
* set status code
* Add tests
* Update apps/api/v1/lib/helpers/rateLimitApiKey.test.ts
* Update apps/api/v1/lib/helpers/rateLimitApiKey.test.ts
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* remove console.log
* fixup: logic to convert overrides was not calling functions
* refactor handleSubmit function
* add portal to platform dialog component
* cleanup
* add props to enable and disable date overrides
* show date overrides for availability settings atom
* fix: date overrides formatting for api request
---------
Co-authored-by: Rajiv Sahal <rajivsahal@Rajivs-MacBook-Pro.local>
Co-authored-by: supalarry <laurisskraucis@gmail.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* fix: large padding on small screens for embedded booking widgets
* removed unused
* cssConflict - 'border-booker-width' applies the same CSS properties as 'border'.
---------
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* When rescheduling to new time slot don't trigger reschedule logic
* Add unique iCalUID when rescheduling to new slot
* Generating iCalUID use v4 uuid
* When moving an attendee to a new booking. Only move the attendee
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* chore: Upgrade Sentry in v1, v2 & web
* fix: Keep ./instrument to be the first line
* Remove eslint-plugin-import (fixed in prettier)
* Optimistic removal pending some feedback
* Simplified and fixed sentry wrapper
* Create instrumentation.ts also in APIv1
* sentry key in main nextConfig is deprecated
* fix booking via api not picking default location when unspecified
* test:add tests for default location of event for booking
* fix:failing tests
---------
Co-authored-by: Shaik-Sirajuddin <sirajudddinshaik30@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* fixed the padding at the footer in /signup
* reverted /auth/login Link style to original
* Update apps/web/pages/signup.tsx
---------
Co-authored-by: Peer Richelsen <peer@cal.com>
* refactor: platform-types schedule types
* refactor: lib add bidirectional schedule transformers api <-> atom
* refactor: trpc handlers use renamed lib transformers
* refactor: platform-libraries export new bi-directional transformers
* chore: v2 update platform-libraries
* chore: enable also old platform-libraries
* fix: platform-types support previous types
* refactor: versioning date
* chore: version old schedules as schedules_2024_04_15 module
* chore: version old schedules as schedules_2024_04_15 module
* feat: new 2024_06_11 schedules module
* feat: atoms use refactored schedule api
* refactor: remove ?for=atom in schedules hooks
* fix: unit test
* feat: go to Assignment tab after creation and warn if existing without assigning
* Update AssignmentWarningDialog.tsx
* fix: some changes
* fix: some updates
* Update EventTeamTab.tsx
* update
* update
* update test
* some fixes
* refactor one test and update
* Update managed-event-types.e2e.ts
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com>
* fix: Kbar component styles
Fix Kbar styles on active state
* refactor: Add transition to event type list item
The commit refactors the event type list item component by adding a transition effect to improve the user experience.
* refactor: Add transition effect to DatePicker component
Add transition effect to improve the user experience in the DatePicker component.
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* WIP: UI created to see if it matches RFC idea
* Remove schema as we validate on the backend with old+new key schemas
* Add comment about proxy URL request when on older versions
* feat: create custom axios instance to use signature middleware
* fix: update form to respect new schema
* Add cal signature token to trubo env
* use backend mutation for creating license keys
* add loading state to creation button
* update form to have a success state
* fix type error for console.warning :')
* use api version v1
* restore checkLicense from main
* Add env vars to example
* nit: rename page export
* use US spelling
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* chore: Remove deprecated logo/avatar/away fields
* Use right variables for accounts-step-card
* Remove more deprecated logo/avatar usage
* Dont drop the fields until all usages are gone
* Remove the avatar/logo drops for staggered release
* fix: Typescript blindspot (unvalidated include fields)
* fix: Further updates (mostly to API) typescript missed
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Bailey Pumfleet <bailey@pumfleet.co.uk>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* added dropdown for no-shows in past bookings
* added layout
* nit
* todo comment: figure out how to close dropdown
* more todo comments
* Adds TRPC route among other WIP
* functional update
* fixes type err
* fix type err
* fix: styles
* strikethrough in email
* NITs
* removed stale comment
* add tests
* err comment
---------
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* feat: API v2 subversioning
* Update app.ts
* Added multiple versions to existing controllers
* Updated the slots controller
* chore: version platform library package with npm package alias
* chore: use consts to version
* chore: use consts to version
* chore: version api for cal provider
* chore: remove timezone controller subversion poc
* fixup! Merge branch 'main' into feat/api-v2-subversioning
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
* init endpoints for office 365 syncing
* get web app url for oauth
* update typings
* nethods for office 365 calendar
* update office 365 connect endpoint
* update packages
* add calendar type and if office 365 calendar
* add SelectedCalendarsRepository and TokensModule
* add functions for getting oauth credentials, getting default calendars and redirect url for office 365 calendar
* update controllers
* e2e tests for office 365 calendar endpoints
* fixup! Merge branch 'main' into rajiv/cal-3544-outlookoffice365-integration-connect-atom
* fixup! fixup! Merge branch 'main' into rajiv/cal-3544-outlookoffice365-integration-connect-atom
* fix merge conflict
* update typings
* abstract microsoft outlook into its own module
* add one common interface for calendar apps
* make calendars dynamic
* abstract every calendar app into its own service
* cleanup
* make all calendar endpoints dynamic
* calendar app constants
* cleanup
* remove unused repositories
* rename microsoft calendar type
* fix typings
* add google and outlook calendar service to calendars module
* fixup
* some more e2e tests including google calendar
* chore: small type change and apple calendar not implemented yet
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
Co-authored-by: Rajiv Sahal <rajivsahal@Rajivs-MacBook-Pro.local>
* fix: Kbar component styles
Fix Kbar styles on active state
* refactor: Add transition to event type list item
The commit refactors the event type list item component by adding a transition effect to improve the user experience.
* feat: ability to assign people to round robin from org members
* fix: include schedulingtype in filter
* fix: type check
* rename to EventTypesList
* rename to teams, change icon to link, early return if no events or teamId
* filter scheduling type array, change filter name
* rename to bulkAddMembersToTeams and bulkAddMembersToEventTypes
* filter refactor
* remove bulk
* filter remove null return
* Revert "filter remove null return"
This reverts commit 8ae6296dac24e5081b5896bb9dfe0c000c0f7faf.
* show checked if user already host in event type
* check boxes if user is part of the team
* remove hosts on unchecking boxes
* fix isSelected condition
* remove selected members from teams
---------
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
* During signup, if the account already exists, we redirect the user to /event-types instead of onboarding. Adding this redirection logic to /event-types page as well to ensure the user is redirected to the correct redirectUrl.
* fix timezone display on booking page to reflect event availability timezone
* migrate fetching event owner's schedule to server side
* migrate fetching event owner's schedule to server side
* fix e2e test errors
* Add WEBAPP_URL_FOR_OAUTH to salesforce auth
* In event manager constructor include "_crm" credentials as calendar creds
* Change crm apps to type to end with `_crm`
* Move sendgrid out of CRM
* Add zoho bigin to CRM apps
* When getting apps, use slug
* Add `crm` variants
* Hubspot Oauth use `WEBAPP_URL_FOR_OAUTH`
* Refactor creating credentials
* Fix empty CRM page
* Use credentials with `_crm`
* Abstract getAppCategoryTitle
* Add integration.handler changes
* Init crmManager
* Change salesforce to CrmService
* Create crmManager
* Create contact on new event
* Create event
* Create new CRM reference
* - Fix create new contact for salesforce
- Add reschedule to crmManager
* Create deleteAllCRMEvents
* When searching for credential, look for current credentials in class
* On cancel, delete 3rd party events
* Add delete method
* Type fix
* Type fix
* Convert Close.com to CrmService
* Convert Close.com to CrmService
* Move hubspot to CrmService
* Convert Pipedrive to CrmService
* Rename classes to CrmService
* Move ZohoCrm to CrmService
* Move Bigin to CrmService
* Type return for CrmServices
* Fix type errors
* Close.com create leads and contacts
* Fix tests
* Type fix
* Zoho bug fixes
* Clean up
* Type fixes
* Remove apiDeletes
* Type fixes
* Specific typing
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* feat: Enable CRM apps on a per event type basis (#14450)
* Add Salesforce to be an event type app
* Handle new booking, only get enabled CRM credentials
* Abstract generating search params
* Add close.com to event type
* Clean up
* Move hubspot to event type
* Add pipedrive to event type
* Add zoho bigin to event type
* Add zoho crm to event type
* Remove console.log
* Add deleting CRM apps from event type
* Delete event type apps
* Fix deleting credentials
* Add CRM app data to event type metadata
* Backwards compatibility: add CRM credential if doesn't exist on event type
* Don't include user CRM credentials for backwards comp
* Backwards compatibility show CRM app is enabled and dirty field
* Clean up
* Type fixes
* Type fixes
* Type fix
* Type fix
* Remove console.log
* Test fix
* Upgrade embed-react vite version - dev
* Change build can't find error message
* Add back omni install prop
* Clean up
* Refactor `writeAppDataToEventType`
* Use eventType repository in writeAppDataToEventType
* Clean up old comments
* Add error logging
* createCRMEvents pass event uid as created event uid
* Use `getUid`
* Clean up props in create crm event
* Small changes to `crmManager`
* Fix zoho CRM
* refactor crmManager
* Undo vite config change
* Fix teamId query
* Fix bigin error
* Remove need for `writeAppDataToEventType`
* Add `getAllCredentials` test
* Add crmManager tests
* Type fixes
* Fix type errors
* Fix getAllCredentials test
* Fix tests
* Skip CRM manager tests for now
* feat: Skip RR Assignment if Contact Exists In Salesforce (#14556)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Update yarn.lock
* @zomars feedback - use new URL for state params
* fix: update hook to not produce enabled === undefined
* fix: update app card interfaces to use the new enabled from useIsAppEnabled
* fix: feedback for crm RR skip (#15160)
* code clean up
* fix type any
* test setup for RR lead skip
* code clean up
* simplify code
* type error
* finshed first test for RR lead skip
* add seconds test
* add test for handleNewBooking
* test if teamMember is set
* fix missing enabled key
* fix tests
* fix type error
* use setSystemTime instead of getDate
* remove nested if
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix type error
* fix: remove app metadata from all eventTypes on deleting the app
* fix: update hook to not produce enabled === undefined (default to false)
---------
Co-authored-by: Shaik-Sirajuddin <sirajuddinshaik30gmail.com>
Co-authored-by: Shaik-Sirajuddin <sirajudddinshaik30@gmail.com>
Co-authored-by: Shaik-Sirajuddin <89742297+Shaik-Sirajuddin@users.noreply.github.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
* feat(i18n): complete Simplified Chinese translation
* chore: check for missing translation items
* fix: put the prevent merge conflict line at the end
* feat: put new translations at the beginning
* Rename translate-locales.ts to check-missing-translations.ts
* Update package.json to use check-missing-translations
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
* fix: remove ts-ignore by converting to string[]
* chore: remove extra space
* chore: make word lower case
* Possible fix for endpoints.ts
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* chore: Removing E2E test sharding
* Added back 4 shards for main E2E
* Bump build machines to use 8vCPUs
* Downgrading builds to 2 vCPUs to see time difference
* Reduced shards to 2 to see if flakes are reduced
* Increased E2E vCPUs
* Put builds back to 4 vCPUs since they need it
* Updated E2E suite to use 16 vCPUs and no sharding
* Not running in parallel just to test
* Put back the parallelism
* Get rid of themeBasis warning in test suite
* Skipping another flaky test
* 2 shards
* Update e2e.yml
* fix: platform booker icons
* fix label not being shown for address
* fix type check
* PR feedback
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
* feat(appStore): add isOAuth config
* refactor(appStore): EventTypeAppSettngsInterface
* refactor(qr_code): split EventTypeAppCardInterface and EventTypeAppSettingsInterface
* feat(appStore): redirect to onboarding for stripe and basecam
* fix(ui/ScrollableArea): overflow indicator not working
* feat(apps): new install app flow
* fix(configureStep): get disabled props for settings
* fix: getAppInstallsBySlug now use teamIds
* chore: Alby to AppSettingsInterface
* chore: Giphy to appsettings interface
* chore: GTM migration
* chore: GT4 - migration
* chore: fathom migration
* chore: paypal
* feat: basecamp migration
* feat: metapixel migration
* feat:plausable
* feat:stripe
* fix merge issues
* fix merge issues in new app install flow steps
* wip: callback to onboarding
* fix: imports
* fix: more imports
* feat: use redirect to onboarding on install flow
* fix: redirect to event-type after oauth flow
* When clicking on install new app button, only redirect to the new app install flow if it is an oAuth app or an app that extends the EventType feature in it's config
* code refactor, skip event-type step
* removed extra consoles
* so that no one can change the eventTypeId in url
* theme support enabled
* only pass eventTypeId instead of whole evetType obj to OmniInstallAppButton
* fix: clicking on event-type gives error and redirects to /apps
* saved appOnboardingRedirectUrl to OAuth State
* fix: a user having no team breaks the onboarding flow
* add optional chaining to appMetadata.extendsFeature and appMetadata.isOAuth;
* encode appOnboardingRedirectUrl
* fix: dark theme ui issues
* skip configure step if no-event types
if user/team does not have event-type then skip configure step and goto apps/installed/[category]
* exclude calendars from apps- onboarding flow
* Update getAppOnboardingRedirectUrl.ts
* fix: On configure step, inputs aren't showing errors
* change route from `apps/onboarding` to `apps/installation`
* fix: flow not correctly working for teams
* should only allow team ADMIN or OWER to install an app to team
* Prevent two payment apps to be enabled
* removed loading state
* Fix type error
* undo new-app-flow from OmniInstallAppButton
* remove OAuth Step, handle step numbering
* fix: redirect url
* getAppOnboardingRedirectUrl refactor
* for debugging
* Revert "for debugging"
This reverts commit b9362c1a8f47f2280e684c213d7ec08d04a8ac4c.
* fix: added toaster
* feat: added support to select multiple events (almost)
* hide button
* Move inner form outside outer form using portal
Due to limitations with nested forms in React Hook Form, moved the inner form outside the outer form using a portal to ensure proper form handling.
* submit buttons refs madness
* removed configure step
we had to use query params to manage selected event-types, between routes which was causing 2 issues:
* each time we selected or unselected an event the whole page was reloaded including getserversideprops being called again and again
* the form was reloaded causing more issues
* removed extra unwanted code
* small fix
* fix: type error
* fix: types
* implemented suggested changes
* removed step footer
* fixed error.message
* removed commented styles
* removed step footer
* fix: Display team event types instead of user's on event types step when team selected
* fix: typo
* removed shouldLockDisableProps
* refactor setUpdatedEventTypesStatus, fix type
* removed extra code
* can't delete while saving
* added translations
* fix: loading in select account step, fix handle onSelect params type
* Fix typo
* feat: add skip button to event-types step
* use set-up-later button in tests
* added skip button to configure step as well
* feat: add test for analytics apps using the new app install flow
* feat: add test for stripe 1
* feat: add test for stripe 2
* Fix: Redirect only those apps that extend 'EventType' to the new app install flow (#14527)
* fix: type errors
* fix: failing tests
* fix: tests
* fix test flakiness
* better naming and code refactor for analytics apps tests
* run tests parallelly
* removed network idle, giving error
* another shot at test flakiness
* Fix: can't install apps without team selector dropdown on main app store page.
* fix: test flakiness
* fix: account select loading issue
* removed getPaymentCredential (unused)
* fix: only redirect after the app has been added to all the event-types
* remove overflowIndicatorStyles
* fixed failing test
* fix: exclude org team events
* undo some random merge changes
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Omar López <zomars@me.com>
* Fix seeder and update message to inform well about org deletion implication
* Cleanup tempOrgRedirect as well
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* chore: Skip flaky tests that have been failing often
* Update basic.e2e.ts
* Skipped another test
* Only run on legacy routes as a test
* Removing future routes from build
* Updated the remove script
* Fixing command
* Bring back the future routes
* Skipped another
---------
Co-authored-by: Omar López <zomars@me.com>
* fix: Use origin as provided in HeadSeo. origin would be different for Domain cases
* Add a test
* add more test
* Add tests
* Cleanup tests
* Add an e2e as well
* fix-test
* Reset mocks
* feat: Workflow — Send Email to Specific Email
* disable button when verifyEmail pending
* add verified emails table and routes
* fix: include teamId in verifyEmailCode
* fix: include email address in activate handler
* fix: check team before adding email
* feat: check verified email, add to team if only users
* remove logs
* fix: if statement
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* change email to verify your email
* fix: show error if saving unverified email
* fix: show email in subject
* verify email when editing steps
* remove double calls from same block
* verify email when creating new step
---------
Co-authored-by: v0ltZzie <161201747+v0ltZzie@users.noreply.github.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* wip
* wip
* wip
* Add tests
* Update getSchedule.test.ts
* Update types.ts
* Self review fixes
* Update text
* PR feedback from Carina
* Use utcoffset for range as well
* Remove logging from the function that runs on every timeslot
* Add one more test
* Show x days instead of x+1 days for both ROLLING and ROLLING_WINDOW
* refactor tests
* Move bookingScenario imports to the top as they import prismock mock that has to be imported very early
* More reordering of imports
* Fix accidental min update at wrong place
* Handle legacy value of zero for periodDays
* Range fix
* Fix isDateOutOfBound not being checked properly during booking. Also added a test for the case
* Fix duplicate element, how the hell it reached there
* Use today plus x days for ROLLING periodType
* Add disabled for Checkbox as well
* Revert logger.ts
* Formatting
Signed-off-by: zomars <zomars@me.com>
* Fix ordering of imports that is causing tests failure
---------
Signed-off-by: zomars <zomars@me.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* Added cache retrieval steps for api v1, v2 in production builds workflow run
* Removed .turbo and .next specific arguments as path in v2 API build
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* chore: Add test for booking cancelled webhook
* added unit test
* assertions to check booking created successfully
* remove booking cancelled e2e
* test: add webhook cancelled test
* chore: remove old test
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* disable emails for platform
* check for if user is platform and skip verification accordingly
* skip isPlatform check for verify email in create org handler
* use if instead of &&
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* api: createSchedule refactor - still need to handle overrides
* createSchedule: handle overrides
* createSchedule: default schedule e2e test fix and pad hours:minutes
* get default schedule, by id and all schedules
* update schedule
* refactor: update handler delete only if overrides or availabilities given
* remove comment
* refactor: move schedules inputs, outputs to platform-types + e2e tests refactor
* refactor e2e
* fix: overrides and test
* fix managed user create
* my brain is fried but refactor good
* WIP: transform api schedule for atom
* WIP: transform api schedule for atom
* WIP: transform api schedule for atom
* fix: re-export atom transformer from lib
* fix: format schedule for api from atom
* fix ts ignore
* refactor: move schedule hooks into hooks/schedules
* feat: useSchedules hook to get count of user schedules
* tests: setup atom tests & test transformScheduleForAtom
* rename transformers
* test transformAtomScheduleForApi
* reset scheduel update handler for trpc
* fix: import path
* refactor: transformers
* swagger docs fix
* get rid of unused availabilities module
* get rid of eslint-disable-next-line in schedules repository
* refactor: remove crypto from atoms vite rollupOptions
* refactor: comment schedules repository update logic
## What does this PR do?
<!-- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. -->
- Fixes#14977
<!-- Please provide a loom video for visual changes to speed up reviews
Loom Video: https://www.loom.com/
-->
## Mandatory Tasks (DO NOT REMOVE)
- [ ] I have self-reviewed the code (A decent size PR without self-review might be rejected)
- [ ] I have added a Docs issue [here](https://github.com/calcom/docs/issues/new) if this PR makes changes that would require a [documentation change](https://docs.cal.com)
- [ ] I have added or modified automated tests that prove my fix is effective or that my feature works (PRs might be rejected if logical changes are not properly tested)
## How should this be tested?
<!-- Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration. Write details that help to start the tests -->
- Are there environment variables that should be set?
- What are the minimal test data to have?
- What is expected (happy path) to have (input and output)?
- Any other important info that could help to test that PR
## Checklist
<!-- Remove bullet points below that don't apply to you -->
- I haven't read the [contributing guide](https://github.com/calcom/cal.com/blob/main/CONTRIBUTING.md)
- My code doesn't follow the style guidelines of this project
- I haven't commented my code, particularly in hard-to-understand areas
- I haven't checked if my changes generate no new warnings
* chore: open disableGuests for eventtypes apiv2
* fixup! chore: open disableGuests for eventtypes apiv2
* fixup! fixup! chore: open disableGuests for eventtypes apiv2
* chore: add disableGuests to create handler
* implement basic UI - WIP
* Add copy + open in tab + center correctly
* use paragraph for link
* fix button spacing and domain takes up w-full
* Add fade in to bar instead of framer motion
* Move truncate to block level element instead of p
* chore:fix tablet styles
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* add rewrites for platform dashboard
* fix loading checking
* add checks
* dont display banner for platform client
* custom hooks for pllatform
* add comment for better explanation
* get data from custom hook
* update returned user attributes
* get data from custom hook
* fix: save workflow button not visible on dev env
* refactor: use the CALCOM_ENV constant
* fix: ui fix for header on workspace pages
* refactor: remove unused variable
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* add endpoint to fetch managed user from client id
* update typings
* minor tweaks
* custom hook to fetch managed users from client id
* add translations for platform onboarding
* add isPlatformOrg boolean to figure out which is platform and which is not
* set isPlatform hook based on data obtained from org
* add limitWidth prop to control component width
* add props to shell to make sidebar display different tabs based on if the shell isPlattform or not
* platform related pages
* fix merge conflicts
* fix merge conflicts
* platform oauth client form and card
* remove everything related to platform from organization
* update oauth client card and form
* fixup
* fix imports and remove logs
* fixup
* update redirect url
* split oauth client form into separate update and create forms
* separate forms for create and edit oauth clients
* fixup
* fixup
* dynamic routes for oauth client edit page
* fixup fixup
* fix to not show error when redirect uri is empty
* refactor create handler for org
* cleaup comments
* add custom hook to check user billing
* export managed user type
* refactor platform index page
* refactor edit and create pages
* dashboard component containing oauth client list and managed user
* common oauth client form used for create and edit form
* platform pricing helper
* platform pricing component
* fix typing and data response for billing
* use custom hook to check team billing info
* fix type checks
* upgrade conditional rendering for upgrade to org banner
* add isLoading prop to check button loading state
* pass in button handler
* add custom hook to subscribe to stripe and typings
* update typings
* fix incorrect endpoint
* pass in team id as prop
* fix type check
* update stripe success and cancel redirect url
* add and pass redirect url param to custom hook
* custom hooks for platform
* cleanup
* update imports
* fix merge conflicts
* fixup
* fixup fixup
* fixup
* merge conflicts fixup
* merge conlficts battle :(
* minor fixes
* skip admin checks for a platform client
* fix typo
* append slug with _platform for a platform user
* PR feedback
* dashboard refactor
* bring back org form to its orginal state
* add platform folder to ee
* update typings
* use new create platform form
* fixup
* fix typo and update plans
* simplifying rendering
* remove managed users endpoint since it already exists
* url for endpoint
* rename tabs
* pr feedback
* managed users endpoint
* update endpoint
* remove form
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: exception <erik@erosemberg.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* get buffer busy time from bookings outside of start and end time
* add test for buffers
* fix typo
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* refactor: create, update user inputs use types instead of custom validators
* fix: save weekStart, timeFormat, timeZone when creating user
* fix: save weekStart, timeFormat, timeZone when creating user
* e2e: fix env variables and test weekStart, timeZone and timeFormat during user create
* feat: Redirect when event type does not match booking type
* Favour early return
* If multiple bookingUid/rescheduleUid given, use first
* rescheduleUid/bookingUid behaviour is required
* chore: Removed duplicate production build
* fix references
* Move env vars to top level of e2e
* job renaming
* Added env vars to top level of all e2e jobs
* Removed part of cache key that causes issues and is moot
* Using buildjet hardware so the caching works
* clean up
* feat: impersonate trigger when there is a URL param
* feat: update intercom sidebar
* fix: add to onOpen too
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* feat: setup usePublicEvent with orgSlug and duration
* feat: setup useAvailableSlots with eventTypeSlug and orgSlug
* fix & feat: fix TS issues and allow passing multiple users to Booker
* refactor: dont show [15min] [30min] [60min] [1h30min] picker
* fix: pass orgSlug to handleNewBooking -> loadUsers -> findUsersByUsername to not return empty users[]
* refactor: display attendees in booking confirmation screen
* fix: getting slots get orgSlug from props not event
* revert: Booker username use props instead of hardcoded values
* refactor: setup BookerStore org and use it for selectedTime + isDynamic logic
* refactor: hide 'what is this meeting about' input in final booking step
* fix: TS error
* revert: what is the meeting about field hiding
* revert: make org as org? in booker store
* revert: createNewBooking -> loadUsers -> get forced orgSlug from header not body
* refactor: useHandleBookEvent get orgSlug from booker store not props
* fix: if entity undefined dont access orgSlug
* refactor: add isDynamic prop as queryKey for usePublicEvent
* refactor: remove unused prop
* re-add docs
* fix: typescript error
* fix: force platform orgSlug in handleNewBooking.ts
* fix: remove duplicate setSelectedDuration declaration
* refactor: destructure properies from body instead of req.body
* fix: entity optional and hide event members
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
* fix: reschedule with google meet
* fix: type err
* test: add google meet test
* chore: save progress
* test: add individual event type
* chore: add one more check
* fix: type err
* chore: use updatedEvent before createdEvent
* refactor: update event
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* chore: Add build of API v2 to PR checks
* Actually added the v2 build to the pipeline...
* Added back the original yarn install
* Updated the main PR flow to require API builds before tests
* feat: Add an Override calendar starts with the day specified in general settings
* fix: types not matching
* fix: update edit calendar to use user's weekStart
* fix: weekstart defaults to 0 when not provided
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* centered cal video logo
* Update apps/web/modules/videos/views/videos-single-view.tsx
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* fix: include id information to be consistent with create/reschedule flows
* fix: include username as well
* function expectBookingCancelledWebhookToHaveBeenFired created
* chore: undo yarn.lock
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* fix: Support adding an non-existent email as the owner of the organization
* Remove dead code
* fixes
* add test
* self review changes
* Update packages/trpc/server/routers/viewer/organizations/create.handler.ts
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* Fix typo everywhere
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Install upstash redis again - base of noficationSender
* Setup email handler etc and use tasker
* Remove logs
* Sending emails and correct format and spacing in emails
* Update email styles
* Update email styles
* add switch to enable feature
* fix: reset tasker types - will fix in new PR
* WIP: test suite
* WIP: test suite
* Add redis service and add WIP mock test
* Add tests for redis service and fix lpush
* More working tests
* More working tests
* fix: type error + typo
* update export to match i18n next mock
* (debug) push for debug
* Fix: fixed hosting in mocks
* Add common.json i18n
* add better test descriptions
* reset mocks after each test to allow concurancy
* Remove redundant RedisService.test.ts
* Rename and remove redundant isAdmin check
* Rename to .d.ts
* Add key versioning to constructRedisKey
* Update packages/trpc/server/routers/viewer/slots/handleNotificationWhenNoSlots.ts
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Update packages/trpc/server/routers/viewer/slots/handleNotificationWhenNoSlots.ts
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* Add try/catch
* fix breaking when option === undefined
* Add missing await to Promise.all
* Rename data stored in redis to save space
* Include thrown error in logs
---------
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* chore: Billing Service
* chore: others
* chore: don't type
* chore: typo
* chore: use proper wh secret
* chore: updates
* chore: lockfile
* chore: docs and comment out
* chore: updates and include plan
* chore: config
* chore: bring back alias
* chore: update lockfile
* chore: refactor
* chore: default none plan in db
* chore: read from env vars
* chore: feedback
* chore: remove json config
* chore: proper type
* feat: Add linting rule to recursively check for Prisma includes using only 'true'
* Fixing linting errors
* More linting fixes
* Disabled linting for forms
* Update recommended.ts
* Removed ignores
* Fixed warning
* Type fix
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* feat: add DateRangePicker.tsx and Calendar.tsx to match DS
* chore:cleanup
* tests: remove as these are duplicate tests from the library themselves
* fix: mobile sizes
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* remove event type requires confirmation
* allow sms sending also for team (frontend)
* allow text to attendee for team (backend)
* add rate limiting for SMS (WIP)
* add functionality to lock and unlock SMS sending (+admin UI view)
* rename to smsLockState
* add ability to lock users and teams
* don't send sms if locked
* add missing imports
* fix rate limit namespace
* add translation
* fix type error
* remove prop from UsersTable
* add smsLockState to buildUser
* code clean up
* create seperate sms rate limit function
* fix type error
* add missing userId and teamId to sendSMS
* code improvements
* add User Team type
* fix marking as reviewed
* check monthly sms limit only for user
* don't lock orgs
* fix type error
* fix avatars
* fix type error
* fix type error
* fix type error
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* fix timezone display on booking page to reflect event availability timezone
* migrate fetching event owner's schedule to server side
* migrate fetching event owner's schedule to server side
* fix e2e test errors
* Add WEBAPP_URL_FOR_OAUTH to salesforce auth
* In event manager constructor include "_crm" credentials as calendar creds
* Change crm apps to type to end with `_crm`
* Move sendgrid out of CRM
* Add zoho bigin to CRM apps
* When getting apps, use slug
* Add `crm` variants
* Hubspot Oauth use `WEBAPP_URL_FOR_OAUTH`
* Refactor creating credentials
* Fix empty CRM page
* Use credentials with `_crm`
* Abstract getAppCategoryTitle
* Add integration.handler changes
* When searching for credential, look for current credentials in class
* On cancel, delete 3rd party events
* Fix tests
* Type fix
* Type fixes
* Remove apiDeletes
* Type fixes
* Specific typing
---------
Co-authored-by: Shaik-Sirajuddin <sirajuddinshaik30gmail.com>
Co-authored-by: Shaik-Sirajuddin <sirajudddinshaik30@gmail.com>
Co-authored-by: Shaik-Sirajuddin <89742297+Shaik-Sirajuddin@users.noreply.github.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Omar López <zomars@me.com>
## What does this PR do?
1. cal.com/sales page is a special case where embed-iframe exists in top as well as in iframe. This causes a looping of events somehow due to embed-iframe firing events and those being received by the top embed-iframe.
2. Added new `navigatedToBooker` event to know when the user lands on booker page.
Corresponding PR in website that uses `navigatedToBooker` event and has a demo as well https://github.com/calcom/website/pull/741
Earlier added `routed` event seems to happen too early
## Type of change
- Bug fix (non-breaking change which fixes an issue)
## How should this be tested?
- Simply navigate to booker and wait for the event.
## Mandatory Tasks
- [x] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
## Tests
- Didn't add any tests for this as the changed seems straightforward
## Checklist
- I haven't added tests that prove my fix is effective or that my feature works
* fix: invalid Cancelled / Rescheduled downstream calendar block
* Adjust test so no calendar is connected
* Remove the googleCalendar from multiple tests
* fix: team memebrs being hidden for admin when org is private and they are not org admin
* chore: remove console.loog
* chore: make permissionCheck more readable
* test: push e2e test for normal privacy banner in orgs
* test: add a few more edge cases
* chore: negate names
* feat: update func to make more sense
* Fix
---------
Co-authored-by: Hariom <hariombalhara@gmail.com>
* chore: Remove all avatar/logo references
* Updated user profile to only use avatarUrl
* fix: minor style issue
* chore: Remove redundant includeTeamLogo
* fix: Use right avatar default in event type list
* fix: placeholder avatar team profile, target
* chore: Add logoUrl/avatarUrl to JWT
* fix: Bunch of org avatar issues, fix members list
* Fix logoUrl on org pages
* More type fixes
* Hopefully final type fixes
* Another round of type fixes
* fix: UserForm ts
* fix: Handle as return types, not input types
* fix: Remove profile and add avatarUrl
* fix: notFound as const
* fix: Seeder avatarUrl params
* revert: Migration changes for easier recovery
* fix: Add explicit type to builder as avatar is now set
* Add logoUrl to unpublished entity
* Avatar test out of scope here
* fix: Use the new avatarUrl after save
* chore: Removed getOrgAvatarUrl/getTeamAvatarUrl
* fix: Update sidebar image immediately after change
* Unable to safe unnamed user, so default
* fix: Unpublished page, add organization test
* Add more tests
* frontend: handle booking locationUrl
* backend: pass booking locationUrl to handleNewBooking
* examples app: display booking location if provided
* fix: v2 not starting: contains -> includes
* backend: pass booking locationUrl to handleNewBooking
* swagger docs update
* examples app: dont display where of booking if does not start with http
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* Remove pushing team member destination calendars
* Only create the event on the first destination calendar
* Only create event on the first destination calendar
# - Acquire a commercial license to remove these terms by visiting: cal.com/sales
#
# To enable enterprise-only features, as an admin, go to /auth/setup to select your license and follow
# instructions. This environment variable is deprecated although still supported for backward compatibility.
# @see https://console.cal.com
# To enable enterprise-only features please add your envrionment variable to the .env file then make your way to /auth/setup to select your license and follow instructions.
CALCOM_LICENSE_KEY=
# Signature token for the Cal.com License API (used for self-hosted integrations)
# We will give you a token when we provide you with a license key this ensure you and only you can communicate with the Cal.com License API for your license key
- If this issue has a `🚨 needs approval` label, don't start coding yet. Wait until a core member approves feature request by removing this label, then you can start coding.
- For clarity: Non-core member issues automatically get the `🚨 needs approval` label.
- Your feature ideas are invaluable to us! However, they undergo review to ensure alignment with the product's direction.
- Follow Best Practices lined out in our [Contributor Docs](https://github.com/calcom/cal.com/blob/main/CONTRIBUTING.md)
<!-- Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context. List any dependencies that are required for this change. -->
Fixes # (issue)
-Fixes #XXXX (GitHub issue number)
- Fixes CAL-XXXX (Linear issue number - should be visible at the bottom of the GitHub issue description)
<!-- Please provide a loom video for visual changes to speed up reviews
Loom Video: https://www.loom.com/
-->
## Requirement/Documentation
## Mandatory Tasks (DO NOT REMOVE)
<!-- Please provide all documents that are important to understand the reason of that PR. -->
- If there is arequirement document, please, share it here.
- If there is a UI/UX design document, please, share it here.
## Type of change
<!-- Please delete bullets that are not relevant. -->
- Bug fix (non-breaking change which fixes an issue)
- New feature (non-breaking change which adds functionality)
- Breaking change (fix or feature that would cause existing functionality to not work as expected)
- Tests (Unit/Integration/E2E or any other test)
- This change requires a documentation update
- [ ] I have self-reviewed the code (A decent size PR without self-review might be rejected).
- [ ] I have added a Docs issue [here](https://github.com/calcom/docs/issues/new) if this PR makes changes that would require a [documentation change](https://docs.cal.com/docs). If N/A, write N/A here and check the checkbox.
- [ ] I confirm automated tests are in place that prove my fix is effective or that my feature works.
## How should this be tested?
@@ -35,10 +24,6 @@ Fixes # (issue)
- What is expected (happy path) to have (input and output)?
- Any other important info that could help to test that PR
## Mandatory Tasks
- [ ] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
## Checklist
<!-- Remove bullet points below that don't apply to you -->
@@ -46,7 +31,4 @@ Fixes # (issue)
- I haven't read the [contributing guide](https://github.com/calcom/cal.com/blob/main/CONTRIBUTING.md)
- My code doesn't follow the style guidelines of this project
- I haven't commented my code, particularly in hard-to-understand areas
- I haven't checked if my PR needs changes to the documentation
- I haven't checked if my changes generate no new warnings
- I haven't added tests that prove my fix is effective or that my feature works
- I haven't checked if new and existing unit tests pass locally with my changes
@@ -74,7 +74,7 @@ branch are tagged into a release monthly.
To develop locally:
1. [Fork](https://help.github.com/articles/fork-a-repo/) this repository to your
1. [Fork](https://github.com/calcom/cal.com/fork/) this repository to your
own GitHub account and then
[clone](https://help.github.com/articles/cloning-a-repository/) it to your local device.
2. Create a new branch:
@@ -99,7 +99,7 @@ To develop locally:
- Duplicate `.env.example` to `.env`.
- Use `openssl rand -base64 32` to generate a key and add it under `NEXTAUTH_SECRET` in the `.env` file.
- Use `openssl rand -base64 24` to generate a key and add it under `CALENDSO_ENCRYPTION_KEY` in the `.env` file.
- Use `openssl rand -base64 32` to generate a key and add it under `CALENDSO_ENCRYPTION_KEY` in the `.env` file.
6. Setup Node
If your Node version does not meet the project's requirements as instructed by the docs, "nvm" (Node Version Manager) allows using Node at the version required by the project:
@@ -177,24 +177,25 @@ Do not commit your `yarn.lock` unless you've made changes to the `package.json`.
If your last commit has the `yarn.lock` file alongside other files and you only wish to uncommit the `yarn.lock`:
```bash
git checkout HEAD~1 yarn.lock
git commit -m "Revert yarn.lock changes"
```
```bash
git checkout HEAD~1 yarn.lock
git commit -m "Revert yarn.lock changes"
```
_NB_: You may have to bypass the pre-commit hook with by appending `--no-verify` to the git commit
If you've pushed the commit with the `yarn.lock`:
1. Correct the commit locally using the above method.
2. Carefully force push:
1. Correct the commit locally using the above method.
2. Carefully force push:
```bash
git push origin <your-branch-name> --force
```
```bash
git push origin <your-branch-name> --force
```
If `yarn.lock` was committed a while ago and there have been several commits since, you can use the following steps to revert just the `yarn.lock` changes without impacting the subsequent changes:
1. **Checkout a Previous Version**:
- Find the commit hash before the `yarn.lock` was unintentionally committed. You can do this by viewing the Git log:
```bash
@@ -208,6 +209,7 @@ If `yarn.lock` was committed a while ago and there have been several commits sin
```
2. **Commit the Reverted Version**:
- After checking out the previous version of the `yarn.lock`, commit this change:
```bash
@@ -215,6 +217,7 @@ If `yarn.lock` was committed a while ago and there have been several commits sin
```
3. **Proceed with Caution**:
- If you need to push this change, first pull the latest changes from your remote branch to ensure you're not overwriting other recent changes:
This app lets you chat with your calendar via email:
- Turn informal emails into bookings eg. forward "wanna meet tmrw at 2pm?"
- List and rearrange your bookings eg. "clear my afternoon"
- Answer basic questions about your busiest times eg. "how does my Tuesday look?"
The core logic is contained in [agent/route.ts](/apps/ai/src/app/api/agent/route.ts). Here, a [LangChain Agent Executor](https://docs.langchain.com/docs/components/agents/agent-executor) is tasked with following your instructions. Given your last-known timezone, working hours, and busy times, it attempts to CRUD your bookings.
_The AI agent can only choose from a set of tools, without ever seeing your API key._
Emails are cleaned and routed in [receive/route.ts](/apps/ai/src/app/api/receive/route.ts) using [MailParser](https://nodemailer.com/extras/mailparser/).
Incoming emails are routed by email address. Addresses are verified by [DKIM record](https://support.google.com/a/answer/174124?hl=en), making them hard to spoof.
If you haven't yet, please run the [root setup](/README.md) steps.
Before running the app, please see [env.mjs](./src/env.mjs) for all required environment variables. Run `cp .env.example .env` in this folder to get started. You'll need:
- An [OpenAI API key](https://platform.openai.com/account/api-keys) with access to GPT-4
- A [SendGrid API key](https://app.sendgrid.com/settings/api_keys)
- A default sender email (for example, `me@dev.example.com`)
- The Cal.ai app's ID and URL (see [add.ts](/packages/app-store/cal-ai/api/index.ts))
- A unique value for `PARSE_KEY` with `openssl rand -hex 32`
To stand up the API and AI apps simultaneously, simply run `yarn dev:ai`.
### Agent Architecture
The scheduling agent in [agent/route.ts](/apps/ai/src/app/api/agent/route.ts) calls an LLM (in this case, GPT-4) in a loop to accomplish a multi-step task. We use an [OpenAI Functions agent](https://js.langchain.com/docs/modules/agents/agent_types/openai_functions_agent), which is fine-tuned to output text suited for passing to tools.
Tools (eg. [`createBooking`](/apps/ai/src/tools/createBooking.ts)) are simply JavaScript methods wrapped by Zod schemas, telling the agent what format to output.
To expose the AI app, you can use either [Tunnelmole](https://github.com/robbie-cahill/tunnelmole-client), an open source tunnelling tool; or [nGrok](https://ngrok.com/), a popular closed source tunnelling tool.
For Tunnelmole, run `tmole 3005` (or the AI app's port number) in a new terminal. Please replace `3005` with the port number if it is different. In the output, you'll see two URLs, one http and a https (we recommend using the https url for privacy and security). To install Tunnelmole, use `curl -O https://install.tunnelmole.com/8dPBw/install && sudo bash install`. (On Windows, download [tmole.exe](https://tunnelmole.com/downloads/tmole.exe))
For nGrok, run `ngrok http 3005` (or the AI app's port number) in a new terminal. You may need to install nGrok first.
To forward incoming emails to the serverless function at `/agent`, we use [SendGrid's Inbound Parse](https://docs.sendgrid.com/for-developers/parsing-email/setting-up-the-inbound-parse-webhook).
1. Ensure you have a [SendGrid account](https://signup.sendgrid.com/)
2. Ensure you have an authenticated domain. Go to Settings > Sender Authentication > Authenticate. For DNS host, select `I'm not sure`. Click Next and add your domain, eg. `example.com`. Choose Manual Setup. You'll be given three CNAME records to add to your DNS settings, eg. in [Vercel Domains](https://vercel.com/dashboard/domains). After adding those records, click Verify. To troubleshoot, see the [full instructions](https://docs.sendgrid.com/ui/account-and-settings/how-to-set-up-domain-authentication).
3. Authorize your domain for email with MX records: one with name `[your domain].com` and value `mx.sendgrid.net.`, and another with name `bounces.[your domain].com` and value `feedback-smtp.us-east-1.amazonses.com`. Set the priority to `10` if prompted.
4. Go to Settings > [Inbound Parse](https://app.sendgrid.com/settings/parse) > Add Host & URL. Choose your authenticated domain.
5. In the Destination URL field, use the Tunnelmole or ngrok URL from above along with the path, `/api/receive`, and one param, `parseKey`, which lives in [this app's .env](/apps/ai/.env.example) under `PARSE_KEY`. The full URL should look like `https://abc.tunnelmole.net/api/receive?parseKey=ABC-123` or `https://abc.ngrok.io/api/receive?parseKey=ABC-123`.
6. Activate "POST the raw, full MIME message".
7. Send an email to `[anyUsername]@example.com`. You should see a ping on the Tunnelmole or ngrok listener and server.
8. Adjust the logic in [receive/route.ts](/apps/ai/src/app/api/receive/route.ts), save to hot-reload, and send another email to test the behaviour.
Please feel free to improve any part of this architecture!
returnnewResponse("User not found",{status: 404});
}
awaitsendEmail({
subject:"Welcome to Cal AI",
to: user.email,
from:`${user.username}@${env.SENDER_DOMAIN}`,
text:`Hi ${
user.name||`@${user.username}`
},\n\nI'm Cal AI, your personal booking assistant! I'll be here, 24/7 to help manage your busy schedule and find times to meet with the people you care about.\n\nHere are some things you can ask me:\n\n- "Book a meeting with @someone" (The @ symbol lets you tag Cal.com users)\n- "What meetings do I have today?" (I'll show you your schedule)\n- "Find a time for coffee with someone@gmail.com" (I'll intro and send them some good times)\n\nI'm still learning, so if you have any feedback, please tweet it to @calcom!\n\nRemember, you can always reach me here, at ${
user.username
}@${
env.SENDER_DOMAIN
}.\n\nLooking forward to working together (:\n\n- Cal AI, Your personal booking assistant`,
html:`Hi ${
user.name||`@${user.username}`
},<br><br>I'm Cal AI, your personal booking assistant! I'll be here, 24/7 to help manage your busy schedule and find times to meet with the people you care about.<br><br>Here are some things you can ask me:<br><br>- "Book a meeting with @someone" (The @ symbol lets you tag Cal.com users)<br>- "What meetings do I have today?" (I'll show you your schedule)<br>- "Find a time for coffee with someone@gmail.com" (I'll intro and send them some good times)<br><br>I'm still learning, so if you have any feedback, please send it to <a href="https://twitter.com/calcom">@calcom</a> on X!<br><br>Remember, you can always reach me here, at ${
user.username
}@${env.SENDER_DOMAIN}.<br><br>Looking forward to working together (:<br><br>- Cal AI`,
// Why so long? the rate determining API call (getAvailability, getEventTypes) can take up to 15 seconds at peak times so we give it a little extra time to complete.
// User is not a cal.com user or is using an unverified email.
if(!signature||!user){
awaitsendEmail({
html:`Thanks for your interest in Cal.ai! To get started, Make sure you have a <a href="https://cal.com/signup" target="_blank">cal.com</a> account with this email address and then install Cal.ai here: <a href="https://go.cal.com/ai" target="_blank">go.cal.com/ai</a>.`,
subject:`Re: ${subject}`,
text:`Thanks for your interest in Cal.ai! To get started, Make sure you have a cal.com account with this email address. You can sign up for an account at: https://cal.com/signup`,
"Send a booking link via email. Useful for scheduling with non cal users. Be confident, suggesting a good date/time with a fallback to a link to select a date/time.",
"A polite and professional email with an intro and signature at the end. Specify you are the AI booking assistant of the primary user. Use [[[Slots]]] and a fallback [[[Link]]] to inject good times and 'see all times' into messages"
),
subject: z.string(),
to: z
.string()
.describe("email address to send the booking link to. Primary user is automatically CC'd"),
eventTypeSlug: z.string().describe("the slug of the event type to book"),
slots: z
.array(
z.object({
time: z.string().describe("YYYY-MM-DDTHH:mm in UTC"),
* Edits a booking for a user by booking ID with new times, title, description, or status.
*/
consteditBooking=async({
apiKey,
userId,
id,
startTime,// In the docs it says start, but it's startTime: https://cal.com/docs/enterprise-features/api/api-reference/bookings#edit-an-existing-booking.
endTime,// Same here: it says end but it's endTime.
* Core of the Cal.ai booking agent: a LangChain Agent Executor.
* Uses a toolchain to book meetings, list available slots, etc.
* Uses OpenAI functions to better enforce JSON-parsable output from the LLM.
*/
constagent=async(
input: string,
user: User,
users: UserList,
apiKey: string,
userId: number,
agentEmail: string
)=>{
consttools=[
// getEventTypes(apiKey),
getAvailability(apiKey),
getBookings(apiKey,userId),
createBookingIfAvailable(apiKey,userId,users),
updateBooking(apiKey,userId),
deleteBooking(apiKey),
sendBookingEmail(apiKey,user,users,agentEmail),
];
constmodel=newChatOpenAI({
modelName: gptModel,
openAIApiKey: env.OPENAI_API_KEY,
temperature: 0,
});
/**
* Initialize the agent executor with arguments.
*/
constprompt=
ChatPromptTemplate.fromTemplate(`You are Cal.ai - a bleeding edge scheduling assistant that interfaces via email.
Make sure your final answers are definitive, complete and well formatted.
Sometimes, tools return errors. In this case, try to handle the error intelligently or ask the user for more information.
Tools will always handle times in UTC, but times sent to users should be formatted per that user's timezone.
In responses to users, always summarize necessary context and open the door to follow ups. For example "I have booked your chat with @username for 3pm on Wednesday, December 20th, 2023 EST. Please let me know if you need to reschedule."
If you can't find a referenced user, ask the user for their email or @username. Make sure to specify that usernames require the @username format. Users don't know other users' userIds.
The primary user's id is: ${userId}
The primary user's username is: ${user.username}
The current time in the primary user's timezone is: ${now(user.timeZone,{
weekday:"long",
year:"numeric",
month:"long",
day:"numeric",
hour:"numeric",
minute:"numeric",
})}
The primary user's time zone is: ${user.timeZone}
The primary user's event types are: ${user.eventTypes
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.