* 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
* refactor: rename event-types/:username/public to event-types/public/:username
* refactor: move /events/public to /event-types/public/:username/:eventSlug
* fix: remove EVENT_TYPE_READ permission from public GET event-types/public/:username
* docs: add response DTO to generate docs for /public/:username/:slug aka ex. events/public
* tests: public event types endpoints
* refactor: have /public at the end of event-types routes
* correct swagger doc
* chore: fix class type and bump version
* fixup! chore: fix class type and bump version
* fixup! fixup! chore: fix class type and bump version
* fixup! Merge branch 'main' into atoms-package-version-1.0.18
* fixup! fixup! Merge branch 'main' into atoms-package-version-1.0.18
* add Travel Schedule modal
* UI to list schedules
* set shouldDirty
* add backend to add new travelSchedule
* implement deleting a schedule
* check if schedule is overlapping
* WIP
* fix finding overlapping travel schedule
* only use travelSchedule when default availability is used
* adjust date overrides to timezone schedule
* first version of changeTimeZone cron job
* fix tests by adding travelSchedules
* fixes for cron job api call
* improve unit tests
* add migration
* fix type error
* fix collective-scheduling test
* clean up cron job
* code clean up
* code clean up
* show timezone from travel schedule for date override
* add date override tests
* show tz on date override only in default schedule
* fix deleting old schedules
* minor fixes in cron api handler
* code clean up
* code clean up from feedback
* fix asia/kalkota comment
* fix dark mode
* fix start and end date conversion to utc
* add first unit test for travel schedules
* Fix modal render issue
* show timezone city wtihout _
* fix dark more for datepicker
* reset values after closing dialog
* remove session from middleware
* exit loop early once schedule is found
* fix type error
* add getTravelSchedules handler
* clean up DatePicker
* fix type error
* code clean up
* code clean up
* add indexes
* use deleteMany
* fix icons
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* feat: Delete/Create WebhookScheduledTriggers for existing bookings
* fix: type check
* fix: early return, query status in prisma, unnecessary trigger type check
* feat: add/delete scheduled webhook triggers for team and user
---------
Co-authored-by: v0ltZzie <samit091848@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* fix: [CAL-3374] Says Number is not Verified, but it is Verified
* clearing error only when verified
* type-checks fixed
* chore: improvement
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* feat: always show intercom on desktop by default (hidden on mobile)
* Revert "feat: always show intercom on desktop by default (hidden on mobile)"
This reverts commit d14a7b0808a5c3b7f15de75d3a422c4ec5e14f2b.
* feat: always show intercom on desktop by default (hidden on mobile)
* fix: type error
* refactor
* saved showIntercom in localstorage instead of DB
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* update typings
* update prisma to include redirect uris for booking success, cancel and reschedule
* update migrations
* add input for uris and send them back in custom hook
* display new uris
* add type for enabling emails
* update prisma schema and add migrations
* chores
* fixup
* chore: fix style, remove console log, rewrite migration
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* Consider requestedSlug as well for instances that require payment
* fix
* Though we should add isTeamEvent to avoid duplicate /event request. But right now that is not breaking functionality
* fix small frontend issues with Booker
This commit fixes the following:
- The "location" icon is now visible in light move when using the "in person (Organizer Address)" option
- The language in which the date and length is shown in modals now corresponds to the language of the creator of the calendar (before this is was always in english)
- If the text is too large for the modal, they will adapt into a collumn
-
* correct small mistakes
* chore: getDurationFormatted
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.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
* feat: New app install flow 2 (#14077)
* 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
---------
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
* fix: type errors
* fix: failing tests
---------
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: Somay Chauhan <somaychauhan98@gmail.com>
* fix: view team bookings
* fix: edge case- common user across 2 different teams
* @SomayChauhan fix: edge case- common user across 2 different teams v2.0
* feat: added booking list test for collective event-types
* feat: added booking list test for round-robin event-types
* feat: added test for managed event types bookings
* feat: added test for individual events bookings
* refactor code
* added comments
* added isFixed to collective event hosts
* better function naming
* code refactor
* fix: assertBookingVisibleFor ignoring today's meetings
* fix: handling case for organizations
* fix: non org bookings-list test
* feat: added tests for organisations booking list
* added comments for better clarity
* booking-list in org tests
* uncommented doOnOrgDomain
* removed extra selectors
* fix: failing tests
* fix: db-load on bookings.get
* fix: only select the required fields
* followUp: Improve getUniqueBookings perf
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Omar López <zomars@me.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
* Fix tests
* Type fix
---------
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>
* Update README.md
Updating the description about POSTGRES DB port
* Update README.md
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Add minimum version number to PostgreSQL in 'Getting Started,' to help potential contributors successfully set up environment with local database.
I tried to set up local dev environment on Ubuntu 20.04 with PostgreSQL 12.18 which failed when running 'yarn workspace @calcom/prisma db-migrate'
PostgreSQL version 14.11 worked for me. I saw another dev say v. 13+ would work. Could save folks some troubleshooting time.
This is the error on PostgreSQL 12.18:
Error: P3006 Migration `20240321143215_move_avatars_cols_to_avatar_table` failed to apply cleanly to the shadow database. Error: ERROR: function gen_random_uuid() does not exist HINT: No function matches the given name and argument types. You might need to add explicit type casts. 0: sql_schema_connector::validate_migrations with namespaces=None at schema-engine/connectors/sql-schema-connector/src/lib.rs:324 1: schema_core::state::DevDiagnostic at schema-engine/core/src/state.rs:270
* chore: change timezone format
* chore: set guest email and guest company to null
* feat: also check states to get id
* chore: improve code
* chore: fix type erro
* chore: update zod schema
* feat: retell AI webhook url
* fix: type error
* chore
* chore: make company and email optional
* chore: remove logs
* chore: type error
* chore: type error
* fix: type err
* fix: pass guest email
* fix: type err
* chore: change date format
* chore: move advanced format
* fix: filter and listMember handler
* Update packages/trpc/server/routers/viewer/teams/listMembers.handler.ts
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* Update packages/features/bookings/components/PeopleFilter.tsx
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* added email and company form
* i18n
* feat: add guest email and company
* chore: update and format prompt
* chore: hint var
* chore: fix err message
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* make sure modal always appears
* separate event form wrappers into two components
* platform hook to fetch event type by id
* testing useGetEventTypeById hook
* add useGetEventTypeById to monorepo exports
* use platform hook for event type by id
* create event type: use createEventType from trpc handler
* create event type: simplify handler input and create e2e test
* update event type + test
* delete end point
* check if owner owns event type
* fix: starting v2
* fixes
* remove unused enum
* fix TS issue for update input
* docs refresh
* docs
* docs
* simplify event types docs
* docs refactor
* fix: check if user already has event type with existing slug
* refactor update into a service
* fix tests
* remove unused import
* update create event link
* refactor: create event handler process passed locations
* move input out of folder
* reuse eventtype location for inputs
* docs: example POST event-type return
---------
Co-authored-by: Rajiv Sahal <sahalrajiv-extc@atharvacoe.ac.in>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* chore: rewrite api.cal.com/v2 to api v2
* fixup! chore: rewrite api.cal.com/v2 to api v2
* fixup! fixup! chore: rewrite api.cal.com/v2 to api v2
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* fix: embed env var EnvrionmentPlugin config
* fixup! fix: embed env var EnvrionmentPlugin config
* fixup! fixup! fix: embed env var EnvrionmentPlugin config
* fix: auto switch to VERCEL_URL if WEBAPP_URL is undefined
* init bookings endpoint
* abstracting functions
* e2e tests for bookings
* hooks for bookings endpoint
* bookings respository fixtures
* typings for booking input
* fixup
* abstract booking info code and use it as handler
* import handlers for bookings endpoint
* add cancel booking input
* add handleCancelBooking handler in platform libraries
* cancel booking endpoint
* abstract call into its own separate fn
* cancel booking hook
* e2e test for cancel booking endpoint
* fix import
* export getBookings function
* move getAllUserBookings into lib
* add bookings folder to package exports
* use getAllUserBookings from lib
* fix import path
* fix: hooks, endpoint and example for cancel / reschedule / list / booking success page
* fix: unit test mock classNames import from lib
* fix: unit test mock classNames import from lib
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* feat: use unkey for global ratelimiting and identifier overrides
fixes#13672
* revert: make test pass
* chore: push timeout incase unkey ever dies
* chore: push timeout incase unkey ever dies
---------
Co-authored-by: sean-brydon <sean@cal.com>
* WIP
Adds the capability to add SSO setup in orgs
if you are an Admin or an Owner of the org
* remove sso setup from teams
* allows account creation on first login
* auto-add on login and dsync fixes
* allow SP & idP initiated login for SAML
* revert change to checkIfUserShouldbelongToOrg
* fixes SP initiated Login for first time
* removed stale comment
* code improvement
* --
* minor fixes
* more fix
* add description for non-admin sso settings page
* refactor: extract getEventTypeByViewer for private user dashboard event types
* refactor: extract getEventTypesPublic for public event types to book
* refactor: group event-types lib functions in single folder
* refactor: rename getEventTypeByViewer to getEventTypesByViewer
* feat: add event type helpers from lib to platform libraries
* feat: v2 endpoint for private event types
* driveby:fix: fixed date in docs instead of being re-generated
* feature: endpoint to fetch public endpoints
* fix: getting private event types
* tests: fetch private event types
* tests: fetch private event types
* feat: hooks for public and private events
* fix: yarn test
* tests: IMO better mocking
* refactor: track dynamic prop in react query
* fix: distinct query key for public events
* fix: username in query key and example app demo
* fix: swagger for endpoint get public event input
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* feat: add isPlatformManaged property to user
* do not allow deleting non managed users
* refactor: rename managed user create and update inputs
* refactor response code
* feat: add isPlatformManaged when creating managed user
* fix TS
* refactor: v2 api remove defaultScheduleId from create user input
* refactor: ensure user from test is deleted
* fix: oauth-client-users test and allow deleting oauth users
* feat: isPlatform flag for teams
* feat: create organizations service to check if org is platform
* feat: check if organization is platform in the OrganizationRolesGuard used by OAuthClientsController
* remove unused variable
* refactor: reduce nesting in create handler and abstract check in function
* feat: dont create domain for platform orgs
* fix: Attendee address and phone number field not shown in booking questions
* Address review comments
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* fix: getEnv not returning fallback API_URL breaking examples app
* refactor: use vite as the only way to build atoms
* refactor: web use atoms from web.ts and rest from dist
* refactor: update atoms version, description and set privacy to public
* fix: lib and ui import from web atoms
* refactor: rename @calcom/platform-atoms to @calcom/atoms
* feat: atoms as npm works with example app outside monorepo
* start atoms from v1.0.0
* refactor: monorepo atoms for internal use
* document atoms publishing
* refactor: remove unused import in v2
* fix: mistakes made during main merge
* refactor: move back examples app while still having it in atoms-examples repo
* refactor: monorepo examples readme
* feat: atoms yarn publish command
* refactor: atoms css file simplify
* fix: mocking atoms in ui unit test
* fix: mocking atoms in app-store unit test
* Add UI to select members to receive emails in routing form
* Add backend changes to support frontend to select team members to get routing form updates to
* Fix type error
* Fix all the members of all the teams the user is part of shown instead of only the current team where the routing form is created
* Fix type error
* Refactor components to a shared folder
* fix type error
* Fix review comment: only include emails
* Remove listMembers trpc call in frontend and get the data in formQuery.handler
* Address review comments
* Remove unrelated changes
* Update SingleForm.tsx
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* add reschedule link if event if type team
* fix type errors
* fix type errors
* change team.name to team.slug
* fix type_errors
* fix type-errors
* fix type-errors
* fetch team from db
* make rescheduleLink dynamic (temp_changes)
* fix type-error
* add org support
* fix type errors
* remove old org code
* use /reschedule/uid instead
* remove not needed changes
* implement feedback
* code clean up
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* add 15 and 5 to intervalsWithDefinedStartTimes
* change slot start time logic
* test if we run tests
* remove unwanted changes
* add tests
* remove console.log
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* add connect to cal atom
* add connect to cal to atoms package index
* shadcn setup
* update packages
* button component from shadcn
* dumb button component
* replace button with dumb button component
* update commenst and change url param
* chore: setting up monorepo packages for platforms (#12572)
* chore: init platform folders strucutre and api proxy
* fixup! chore: init platform folders strucutre and api proxy
* chore: init database oAuth platform client schema
* fixup! chore: init database oAuth platform client schema
* fix config path after move to folder /v1
* feat: scaffold v2 API (#12554)
* init nest project
* add kysely as a separate package
* add ee folder with license
* prettier: format v2 api same as mono repo
* migrate over Eriks nestjs poc
* schema generation script
* ee license file
* nest poc eslint file
* remove prisma-kysely from v2 api
* prepare for mergin platform: remove prisma-kysely because incorrect checksum
* add prisma-kysely to packages/prisma
* move to apps/api/v2
* rename v2 package
* readme update
* Update apps/api/v2/env.example
* env typo
* env typo
---------
Co-authored-by: Erik <erik@erosemberg.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
* chore: init platform packages (#12603)
* chore: init platform packages
* fixup! chore: init platform packages
* fixup! fixup! chore: init platform packages
* fix: type in package.json
* fixup! fixup! fixup! chore: init platform packages
* fixup! fixup! fixup! fixup! chore: init platform packages
* fixup! fixup! fixup! fixup! fixup! chore: init platform packages
* fixup! fixup! fixup! fixup! fixup! fixup! chore: init platform packages
---------
Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com>
* chore: platform more permissions utils and tests (#12613)
* chore: more permisions utils and tests
* chore: tests
* feat: validate `CalProvider` api keys (#12672)
* fix: signup nit (#12585)
* Disable submit on empty form
* Fix submit
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* New Crowdin translations by Github Action
* fix: Signup options are not disabled (#12610)
* fix: Signup options are not disabled
* fixes/signup disabling suggested changes done
* chore: signup and login improvements
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* fix: typo in @calcom/emails readme (#12615)
* fix: handle reschedule request for dynamic meetings (#12275)
* chore: [app-router-migration-1] migrate the pages in `settings/admin` to the app directory (#12561)
Co-authored-by: Dmytro Hryshyn <dev.dmytroh@gmail.com>
Co-authored-by: DmytroHryshyn <125881252+DmytroHryshyn@users.noreply.github.com>
Co-authored-by: zomars <zomars@me.com>
* chore: added cursor-pointer to img upload (#12624)
* added cursor-pointer to img upload
* nit
* feat: add clear filters option in bookings page (#12629)
* add clear filters option
* fix vscode settings.json
* use removeAllQueryParams()
* fix yarn lock
* remove toggleoption
* feat: display long durations in hours on booking (#12631)
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* New Crowdin translations by Github Action
* fix: workaround for future app dir routes
* feat: Allow only first slot to be booked (#12636)
Co-authored-by: Morgan Vernay <morgan@cal.com>
* New Crowdin translations by Github Action
* feat: add matomo analytics app (#12646)
* chore: Sentry Wrapper with Performance and Error Tracing (#12642)
* add wrapper for sentry and update functions in 'getUserAvailability'. Update tracesSampleRate to 1.0
* Make Sentry Wrapper utilize parent transaction, if it exists.
* Update wrapper for functions to inherit parameters from the child function
* add comment of when to use the wrapper
* check for sentry before wrapping, if not call unwrapped function
* refactored wrapper to have async and sync separate functions that utilize helpers for common behaviour
* update type of args to unknown
* fixed types of returns from wrapped functions
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* validate api keys to set error and key states for api keys
* organize error messages into one place
* set error messages from errors file instead of hardcoding value
* fix incorrect constant name
---------
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: Pratik Kumar <70286186+Pratik-Kumar-621@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
Co-authored-by: Samyabrata Maji <116789799+samyabrata-maji@users.noreply.github.com>
Co-authored-by: Manpreet Singh <manpoffc@gmail.com>
Co-authored-by: Benny Joo <sldisek783@gmail.com>
Co-authored-by: Dmytro Hryshyn <dev.dmytroh@gmail.com>
Co-authored-by: DmytroHryshyn <125881252+DmytroHryshyn@users.noreply.github.com>
Co-authored-by: zomars <zomars@me.com>
Co-authored-by: Varun Prahlad Balani <varunprahladbalani@gmail.com>
Co-authored-by: Mike Zhou <mikezhoudev@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Haran Rajkumar <haranrajkumar97@gmail.com>
Co-authored-by: Morgan Vernay <morgan@cal.com>
Co-authored-by: Harshith Pabbati <pabbatiharshith@gmail.com>
Co-authored-by: Brendan Woodward <73412688+bwoody13@users.noreply.github.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* fix: storybook atom import
* feat: oauth clients management (#12604)
* feat: oAuth create and update dtos
* feat: WIP oAuth repository
* feat: oAuth controller and module
* refactor: rename cal oAuth to simply oauth
* fix: controller update client
* add oAuth client module to endpoints module
* refactor: OAuthClientRepository
* refactor
* status codes for controller
* oauth create return
* fix: oAuth client only for v2 API
* remove repository as provider from its module
* fix: oAuth module, have repository in providers
* fix: make endpoints run
* comment out oauth prisma schema code: coming next
* refactor: remove api-key authguard (#12675)
* chore: Prisma exception filters (#12679)
* fix: get prisma schema from package @calcom/prisma (#12692)
* fix: get prisma schema from package @calcom/prisma
* fixup! fix: get prisma schema from package @calcom/prisma
* fixup! fixup! fix: get prisma schema from package @calcom/prisma
* fix: prettier config
* fixup! fix: prettier config
* chore: create authenticated user guard (#12677)
* chore: wip next-auth-guard for apiv2
* refactor: use NextAuthGuard on all OAuthClientController routes
* refactor: use passport to get next user
* exclude password from prisma read service
* Revert "exclude password from prisma read service"
This reverts commit 24b1f8ed59f6d99f0ecc589c691efb0ac1f2ac3b.
* fix: userRepo sanitize password
* refactor: function order in UserRepository
* implement user repository service
* refactor: strict null checks for TS
* refactor: fix strict null checks
* delete res locals type
* refactor: switch from zod to class-validator for oAuth client
* refactor: switch from zod to class-validator for booking
* refactor: rename dtos folder to input folder
* fix: create migration for prisma schema oauth clients table
* feature: post oAuth client
* refactor: rename oAuth client_secret to secret
* stricter ts config + oauth secret
* remove migrations
* fix: improve response type
* improve error code types
* fix: prettier by removing eslint as its not needed
* refactor: eslint fix files
* wip organization oauth_lcient
* fix import types
* fix team schema platformOAuthClient name
* fix: import packages transpiled
* feat: roles guard
* refactor: use organisationId instead of userId
* fix: jwt secret signing not having jwt_secret
* fix: stop importing input DTOs as types
* fix: jwt sign expecting plain object
* add sentry, routes logger, generic response type
* fix test config
* fixup! fix test config
* refactor: dont await async function return
* feat: fallback value for getEnv
* feat: add helmet for security
* feat: organization guard
* refactor: check if user set in RolesGuard
* refactor: remove roles requirement for oauth read
* chore: add exceptions filters
* fix: api key strategy throws errors
* chore: set e2e tests
* chore: centralize api type in package
* feat: user repository relations
* feat: user repository relations
* Revert "feat: user repository relations"
This reverts commit 1802b256b5a6e5c9b6a62138c8cb1b6f75ed401b.
* Revert "feat: user repository relations"
This reverts commit 4a8f52583d95ff15b6254694c976d8ec9ce0e546.
* test: mock next auth
* fixup! test: mock next auth
* test:oAuth authed user but no org
* refactor: remove unused type
* refactor: organisation guard based on Membership table
* refactor: folder and file structure
* fix: small changes exception filters
* refactor: merge organization and roles guards into one guard
* fix: remove old export
* fix: org roles guard
---------
Co-authored-by: supalarry <lauris.skraucis@gmail.com>
* chore: OAuth clients tests and fixes (#12762)
* chore: add tests and fixes
* fixup! chore: add tests and fixes
* fixup! fixup! chore: add tests and fixes
* fixup! fixup! fixup! chore: add tests and fixes
* fixup! fixup! fixup! fixup! chore: add tests and fixes
* fixup! fixup! fixup! fixup! fixup! chore: add tests and fixes
* fixup! fixup! fixup! fixup! fixup! fixup! chore: add tests and fixes
* fix: remove unused imports
* chore: move repos to feature folder (#12769)
* chore: rename repositories
* fix yarn.lock
* feat: oauth client guard (#12814)
* feat: oAuth client guard
* refactor test
* refactor: move oauth-client guard to oauth module
* refactor: separate jest config from package.json
* fix: resolving paths in jest tests
* fix: tests
* jest setup file
* fix: jest test warnings about .js platform constants imports
* refactor: test repository fixtures
* remove allowjs
* ignore js files in ts-jest
* make oauth client module global
* make oauth client module global
* feat: platform oAuth clients frontend (#12867)
* add oauth client to settings
* fix imports
* add react and axios
* oauth client form and card components
* hooks for oauth clients data
* index page for oauth clients
* oauth client list component
* oauth client form page
* shift atoms into platform
* init platform folder
* refactor handleSubmit functioin
* platform
* platform
* platform parts
* revert tsconfig constant platform
* fix: useOauthClients
* feat: create oauth client with api
* fix: add prettier to platform type package
* fixup! fix: add prettier to platform type package
* chore: class-validator types in platform package
* add types for delete oauth client iput
* add onSuccess and onError methods
* update oauth client card view with client id and secret
* cleanup comments
* split oauth persisit hook into create and delete hooks
* fix: oauth client creation / deletion / listing
* fixup! fix: oauth client creation / deletion / listing
* fix: comment logo for now
* fix: layout setting org keys
* cleanup comments
* minor style fixes, add logic for client permissions
* show toast after deleting client
* not passing clint logo at the moment
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
* chore(platform): OAuth Flow (#12798)
* fixup! chore(platform): OAuth Flow (#12798)
* feat: CRUD for oAuth users (#12853)
* user controller with oauth guard
* crud repository and controller operations
* add user controller to user module
* refactor: oauth guard
* connect user with oauth client upon creation
* fix: test
* wip: e2e test
* refactor: findUniqueOrThrow -> findUnique user
* test: POST user request
* feat: permissions guard
* e2e tests
* e2e
* e2e refactor
* e2e refactor
* reflector decorator check refactor
* refactor oauth guard
* remov unused imports
* log message
* delete permissions decorator and guard
* remove delete user endpoint
* remove delete user endpoint
* refactor: route structure
* remove get oauth client decorator
* delete unecessary e2e config changes
* remove set header in post test
* fix: oauth guard test on empty db
* revert: add previously removed constant to fulfill merge platform
* fix: import to satisfy platform branch merge
* use real implementation of access token guard
* generate access & refresh tokens and fix e2e
* fix: oauth client e2e test
* refactor: variable naming
* refactor
* rename test file
* remove oauth client from request
* refactor: v2 API (#12913)
* Use Boolean only instead of git add src/modules/auth/guard/organization-roles/organization-roles.guard.ts
* move tests next to files they test
* replace .. in import paths with absolute path
* camelCase instead of snake_case for access and refresh token variables
* user sanitize function Typescript friendly
* restructure oAuth clients folder: example for other folders
* restructure bookings module
* organize modules in auth, endpoints, repositories, services
* organize auth module
* organize repositories
* organize inputs
* rename OAuthClientGuard to OAuthClientCredentialsGuard
* add error messages
* add error messages
* clientId as param in oauth-flow & schema mapping
* camelCase instead of snake_case for clientId and clientSecret
* access token guard as passport strategy
* folder structure as features
* get rid of index files
* feat: endpoint for deleting oAuth users & oAuth users returned data (#12912)
* feat: delete oAuth users
* check if access token matches userId in parameter
* driveby: return only user id and email in oauth users endpoints
* refactor: access token errors (#12932)
* change error messages
* error message if access token does not exist in our database
* token expired 498
* access token expired message as constant
* store 498 status code as const
* fix: access token error less information given
* chore: invalid access token const
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
* feat: external gcal (#12954)
* wip connect gcal
* feat: add external google calendar
* fixup! feat: add external google calendar
* fix: google calendar oauth check invalid
* google cal check tests
* use zod
* fix: await validate access token service
* chore: e2e tests for oAuth flow (#13005)
* fix: accessing length of undefined
* refactor: GetUser throw error if no user provided
* fix: cascade delete PlatformAuthorizationToken if owner or client deleted
* test: POST /authorize
* refactor oauth-flow controller
* refactor oauth-flow controller
* new function to get authorization token by client user ids
* refactor token service
* fix: re-created access and refresh tokens having not unique secret
* oauth flow tests
* oauth flow tests
* feat: abstracted jwt service (#13016)
* remove unused JwtModule from the auth module
* feat: create abstracted jwt service
* refactor: tokens module and service use new jwt service
* refactor: oauth-client module and repository use new jwt service
* implement Morgans requests
* Basic atoms in barebone example platform apps (#13006)
* example app
* example app
* dev move
* fix: more entry points
* fixup! fix: more entry points
* refactor: v2 API (#12913)
* Use Boolean only instead of git add src/modules/auth/guard/organization-roles/organization-roles.guard.ts
* move tests next to files they test
* replace .. in import paths with absolute path
* camelCase instead of snake_case for access and refresh token variables
* user sanitize function Typescript friendly
* restructure oAuth clients folder: example for other folders
* restructure bookings module
* organize modules in auth, endpoints, repositories, services
* organize auth module
* organize repositories
* organize inputs
* rename OAuthClientGuard to OAuthClientCredentialsGuard
* add error messages
* add error messages
* clientId as param in oauth-flow & schema mapping
* camelCase instead of snake_case for clientId and clientSecret
* access token guard as passport strategy
* folder structure as features
* get rid of index files
* feat: endpoint for deleting oAuth users & oAuth users returned data (#12912)
* feat: delete oAuth users
* check if access token matches userId in parameter
* driveby: return only user id and email in oauth users endpoints
* Connect CalProvider and GCal
* Connect CalProvider and GCal
* return response interceptor to handle failed requests
* handle failed requests using axios intercepter
* cal provider refresh tokens, external gcal
* external gcal
* cal provider refresh and retries
* remove console.log
* refactor
* ignore built atoms css
* remove change to token repo
* refactor
* refactor
* downdgrade vite of unrelated packages
* move gcal endpoints to platform
* gcal service
* refactor: use atoms provider
---------
Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com>
Co-authored-by: Ryukemeister <sahalrajiv-extc@atharvacoe.ac.in>
* feat: user schedule management (#13053)
* platform-constants package: list of accepted schedule timezones
* feat: schedules endpoint to create schedule with default availability
* refactor: rename function
* refactor: store userId for availabilities
* feat: createSchedule endpoint
* feat: get schedules/default
* feat: getSchedule by id
* feat: get all schedules
* feat: delete schedule
* feat: update schedule
* check user owns schedule
* empty test
* define returned data on controller level not repository
* define returned data on controller level not repository
* Revert "define returned data on controller level not repository"
This reverts commit 4c292a0f0762f58bdcad0707ad8eef7408390800.
* use luxton
* put availabilities out of ee
* use guard on controller level
* refactor
* e2e test schedule creation
* remove log
* test
* default schedule get test
* update schedule test
* delete schedule test
* fix update test
* different email for schedules e2e
* driveby: fix yarn test
* schedule inputs availabilities as array
* re-use BaseStrategy class
* feat: me endpoint v2 api (#13274)
* feat: me endpoint v2 api
* simplify
* chore: NestJS throttling (#13011)
* fix: v2 throttling setup (#13402)
* fix: v2 throttling
* fix: setup redis locally
* move sentry files to api v1
* chore: calcom platform libraries (#13444)
* fixup! chore: calcom platform libraries (#13444)
* fix: fix managed users
* feat: user timezone management in `CalProvider` (#13361)
* hooks to fetch and update user timezone
* add react query package
* add logic to check for change in user timezone and update it
* hook to handle timezone changes
* shift timezone handling logic into separate custom hook
* rename variables
* rename hook to get a user
* call useTimezone hook inside of cal provider
* minor refactors
* add variables for api endpoints
* use URL constructor for creating endpoints
* key prop not needed
* use URL constructor for creating endpoints
* chore: package json scripts
* fix(atoms): fix import path of useUpdateUserTimezone
* fix(atoms): build constants and fix ENDPOINTS const
* feat: v2 api event type endpoints (#13449)
* build platform-libraries
* make getEventTypeById compatible with default PrismaClient
* feat: fetch event type endpoint
* handle event type not found
* e2e test for GET
* test
* determine is user org admin for getEventTypeId correctly
* prisma type like before
* add negative test
* POST event-type and return event-type for api and atom
* POST event-type and return event-type for api and atom
* feat: create default user event types when creating managed user
* feat: v2 api me PUT endpoint (#13486)
* add timeZone to me endpoint
* feat: me endpoint PUT
* reset package.json
* standardize creation and updating of user
* user creation: capitalize timezones and week start
* default event type constants in const file
* refactor: defaultTimezone Europe/London in response schema
* refactor: validators
* refactor: default schedule in schedules endpoints
* refactor: patch instead of put
* fix: getEventTypeById organizationId (#13554)
* chore: transpile more libraries functions
* feat: overlay calendar busy dates events (#13581)
* feat: overlay calendar busy times events
* fixup! feat: overlay calendar busy times events
* fixup! fixup! feat: overlay calendar busy times events
* fixup! fixup! fixup! feat: overlay calendar busy times events
* refactor: schedules for atom (#13585)
* schedules get.handler transformers as util functions
* export schedule transformers from platform-libraries package
* schedules for atom
* refactor: schedules response service format response
* remove unused injected dependency
* fix: prevent duplicate calendar account linking (#13310)
* fix: prevent signing up multiple times from same account
* revert: lark calendar changes
* credential clean up if duplicate
* fix code duplication and check before credential creation
* feat: useRouterQuery allow unset queryParam
* feat: showToast on account duplication attempt
* Small tweak to copy
* Updated other calendars not to use checkDuplicateCalendar
* Add account already linked to apps/installed/calendar
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* Revert event-type profile based querying (#13588)
* test: Bookings: Add more automated tests for organization (#13576)
* Avoid selecting unused props
* Add automated tests
* Add existing user invite and booking
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* fix: organization user shouldn't be asked for payment for a premium username (#13535)
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* chore: refactor handle new reccuring booking (#13597)
* chore: refactor handle new reccuring booking
* fixup! chore: refactor handle new reccuring booking
* fixup! fixup! chore: refactor handle new reccuring booking
* test: Create unit tests for the questions (teste2e-multiSelectQuestion) (#11569)
* Remove unnecessary changes
* add changes
* Requested changes
* Requested changes
* FIx failing tests
* FIx failing tests
* Update regularBookings.ts
* FIx failing tests
* Refactor
* add unit tests for all questions
---------
Co-authored-by: gitstart-calcom <gitstart-calcom@users.noreply.github.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* fix: update valid_for_secs (#13604)
* fix: Fixes teams UI load issue (#13593)
* fixes teams uiload issue
* revert: yarn.lock
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* chore: upgrades boxyhq jackson (#13477)
* chore: upgrades boxyhq jackson
* Update jackson.ts
reduces bundle size
* Update yarn.lock
* Update apps/web/next.config.js
* Upgrades again
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* upgrades copycat
* feat: PLA-47 Reserve Slots Handler (#13607)
* PLA-44 feat: Platform getPublicEvent (#13596)
* chore: getPublicEvent
* chore: fix
* feat: booker atom bookings platform endpoints (#13613)
* feat: handle new booking
* wip
* feat: handle recurring and instant booking
* fixup! feat: handle recurring and instant booking
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: v2 not running (#13636)
* fix: import from platform-libraries instead of lib
* fix: typescript error
* fix: provide EventTypesRepository to SlotsService
* fix: small change
* Merge branch 'main' into platform
* fix: make v2 run after user model changes (#13653)
* feat: event type atom user connected and destination calendars endpoint (#13559)
* extract connected calendars logic in re-usable platform-libraries function
* extract connected calendars logic in re-usable platform-libraries function
* extract connected calendars logic in re-usable platform-libraries function
* calendars endpoints
* enable calendars endpoint
* calendars type form platform-libraries instead of lib
* finish merging platform branch
* fix dbWrite
* fix: issue after merge platform
* fix: new abstracted function export
* change ee/overlay-calendars to ee/calendars endpoint
* refactor: merge overlay service with calendars service
* ts fix
* body -> query
* chore: Platform get schedule (#13696)
* chore: get available slots
* chore: infer event type isTeam
* chore: nit
* chore: Delete selected slot (#13692)
Co-authored-by: Morgan Vernay <morgan@cal.com>
* feat: v2 endpoint for availability atom timezones (#13687)
* refactor: move cityTimezones handler to lib
* test: incorrect timezone when creating oauth user
* refactor: standardize time zone validation
* feat: schedules/time-zones endpoint returning possible time zones
* refactor: @IsValidTimezone load allowed timezones dynamically
* chore: split timezones to its own trpc router
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
* fix after merge main
* feat: platform useGetPublicEvent (#13752)
* feat: platform useGetPublicEvent
* chore: move public event type to libraries
* chore: use const for query key
* fixup CalendarBusyTimesInput optional params
* feat: platform use get available slots (#13756)
* feat: platform use get available slots
* fixup! feat: platform use get available slots
* feat: platform use get connected calendars (#13757)
* chore: platform enable cors (#13774)
* chore: enable cors
* fixup! chore: enable cors
* feat: platform use get calendars busy times (#13759)
* fixup! feat: platform use get calendars busy times (#13759)
* feat: platform use slots hooks (#13785)
* feat: platform use slots hooks
* fixup! feat: platform use slots hooks
* fixup! fixup! feat: platform use slots hooks
* fixup! fixup! fixup! feat: platform use slots hooks
* fixup! fixup! fixup! fixup! feat: platform use slots hooks
* fixup! feat: platform use slots hooks (#13785)
* feat: platform use create boookings hooks (#13797)
* feat: `Availability Settings` atom (#13762)
* styling and updating the examples app
* add custom hooks for availability settings atom
* update default exports
* minor updates
* update cal provider to use react query
* availability settings atom
* dialog from shadcn
* navbar for examples app
* add select skeleton loader in calcom ui packages
* refactors
* define rtl for cal provider
* fox trpc call to avoid merge conflicts
* fix issues caused by merges
* revert changes for rtl
* hook to fetch every city timezones
* implement useGetCityTimezones into timezone component
* minor fix
* update hooks
* add props and intergrate into avaialibility component
* add missing await
* remove logs
* add comments
* invalidate queries after settled
* toaster from shadcn
* add toaster into cal provider
* implement toast on event handlers
* add classnames prop to accept custom styles
* passing custom styles
* update packages
* remove comments
* fix: styling
* fix: useUpdateSchedule
* fixup! fix: useUpdateSchedule
* wip
* feat: availability setting atom
* fixup! feat: availability setting atom
* fixup! fixup! feat: availability setting atom
* fixup! fixup! fixup! feat: availability setting atom
* fixup! fixup! fixup! fixup! feat: availability setting atom
---------
Co-authored-by: Morgan Vernay <morgan@cal.com>
* fix: atoms import
* chore: lock
* fix: types
* fixup! fix: types
* refactor: v2 user timezones (#13944)
* fix: OAuth client form improvements (#13837)
* rename app to apps
* fix type errors, validate redirect url and other fixes
* enable user to add multiple redirect uris
* add id to input to make labels clickable
* translations for oauth form
* improve styles, add translations and add select all button for permissions
* add permissions for profile read and write
* fixes
* nit
* use `useFieldArray` for dynamic fields
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* refactor: check organizationId primarily on user profile (#13969)
* refactor: attach movedToProfile to user
* refactor: check organizationId primarily on user profile
* fix: resolve TS errors to build v2 for prod (#13858)
* feat: atoms typescript build (#13864)
* fix: atoms typescript build
* refactor: dayjs
* refactor: meticulous
* refactor: use vite for type generation
* tsconfig
* feat: given user timezone update update default schedule timezone (#13981)
* refactor: standardize schedules api response
* fix: schedules e2e tests
* refactor: use IsTimeZone class-validator instead of custom built one
* feat: validate managed user timezone
* feat: update default schedule when me schedule updated
* refactor: standardize v2 api returned data (#13984)
* feat: V2 api swagger (#13804)
* feat: v2 API swagger docs
* fix: query param not showing up in docs
* latest swagger.json
* refactor: remove scaffolded sample endpoint
* separate internal endpoints
* oauth-clients and oauth flow docs only in dev
* oauth-clients and oauth flow docs only in dev
* create oauth client response doc
* responses for oauth-clients
* document development only endpoints
* chore: consume auth token on exchange (#13993)
* feat: docker build for v2 (#13918)
* fix: resolve TS errors to build v2 for prod
* WIP: api v2 docker
* arg env dockerfile
* wip
* Revert "wip"
This reverts commit 232adf5b969ef004ae907f3e85b12c2715d9b6bc.
* wip
* wip
* fix docker
* fix docker
* fix docker
* docker
* docker
* expose port 80
* feat: oauth client permissions guard (#14020)
* feat: Permissions guard
* feat: Permissions guard
* tests
* feat: use permissions guard for event types
* extra permissions test
* fix tests
* bokings, gcal, me and schedules permissions
* chore: use availability settings atom and fix useTimezone platform hook (#13934)
* replace availabiilty settings with atom component
* add more props for custom styles
* replace intl with dayjs
* review feedback fixes
* fix: v2 api typescript errors (#14059)
* fix: start:prod script
* fix: v2 me module dependencies (#14073)
* feat: check v2 request origin (#14074)
* feat: check v2 request origin
* drive by: remove console log in test
---------
Co-authored-by: Lauris <lauris@Lauriss-Laptop.local>
* fix date overrides typing issues (#14091)
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* fix: v2 e2e tests (#14088)
* fix: v2 e2e tests
* fix: yarn e2e tests run 1 after another
* fix gcal test
---------
Co-authored-by: Lauris <lauris@Lauriss-Laptop.local>
* fix: availability atom and access token origin strategy
* fix: availability atom get error from unknown
* feat: booker atom platform wrapper (#14036)
* feat: booker atom, fix hooks
* wip
* feat: booker atom platform wrapper
* fix conflicts
* fix: build v2 internal dependencies upon v2 build
* fix typing of useDeleteOAuth
* fix: isplatform timezone select improt booker event meta
* fixup! Merge branch 'platform' into feat-booker-atom-platform
* refactor
* add video call event types
* disable email and set managed user names
---------
Co-authored-by: supalarry <lauris.skraucis@gmail.com>
* update yarn.lock
* Update .prettierignore
* update post install
* fix: post install
* fix yarn lock
* fix: post install
* fix: types
* feat: enable user control over timezone changes and helpers for query params (#14049)
* helpers to get and set value of a query paramater
* add event handlers and props to figure out the timezone preference of a user
* make onTimeZoneChange handler optional
* fixup
* fix merge conflicts
* fixup
* revert changes
* fixup
* fixup
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* fix: usetimezone import
* fix: prisma client import
* fix: prisma client import
* fix: prisma client import
* remove post install using vite
* ts fix attempt: pin prisma to same version
* Revert "ts fix attempt: pin prisma to same version"
This reverts commit 2c309f52e3a881e2dbda4185f45e77967bef6925.
* resolve v2 prisma to calcom prisma
* sync v2 and typescript deps
* sync atoms package
* lock file updat
* fix: platform web components move out of pages folder
* ui: allow experimental decorators to fix ts ci error
* app-store: allow experimental decorators to fix ts ci error
* web: allow experimental decorators to fix ts ci error
* fix: github actions v2 api secrets
* add license
* mock useIsPlatform for tests
* fix timezone select tests
* mock useLocale
* fix tests
* fix tests
* fix tests
* fix github actions
* chore: temporarily disable redis (#14142)
* fix: only one migration file for platform
* fix api v1 files location
* fix: disable apiv2 test in ci
---------
Co-authored-by: Ryukemeister <sahalrajiv-extc@atharvacoe.ac.in>
Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com>
Co-authored-by: Erik <erik@erosemberg.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: Pratik Kumar <70286186+Pratik-Kumar-621@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
Co-authored-by: Samyabrata Maji <116789799+samyabrata-maji@users.noreply.github.com>
Co-authored-by: Manpreet Singh <manpoffc@gmail.com>
Co-authored-by: Benny Joo <sldisek783@gmail.com>
Co-authored-by: Dmytro Hryshyn <dev.dmytroh@gmail.com>
Co-authored-by: DmytroHryshyn <125881252+DmytroHryshyn@users.noreply.github.com>
Co-authored-by: zomars <zomars@me.com>
Co-authored-by: Varun Prahlad Balani <varunprahladbalani@gmail.com>
Co-authored-by: Mike Zhou <mikezhoudev@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Haran Rajkumar <haranrajkumar97@gmail.com>
Co-authored-by: Harshith Pabbati <pabbatiharshith@gmail.com>
Co-authored-by: Brendan Woodward <73412688+bwoody13@users.noreply.github.com>
Co-authored-by: Amit Sharma <74371312+Amit91848@users.noreply.github.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: gitstart-app[bot] <57568882+gitstart-app[bot]@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart-calcom@users.noreply.github.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Anant Jain <75206987+anantJjain@users.noreply.github.com>
Co-authored-by: Lauris <lauris@Lauriss-Laptop.local>
Co-authored-by: supalarry <laurisskraucis@gmail.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
---------
Co-authored-by: Shaik-Sirajuddin <sirajuddinshaik30gmail.com>
Co-authored-by: Shaik-Sirajuddin <sirajudddinshaik30@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* Update UserSettings.tsx
i am trying to solve Processing button
* chore: use loading property and undo changes
* chore: add in other pages
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* db migration
* adjusted ui to include `platform` in dropdown for admin webhooks
* adjusted webhook/create.handler for platform
* adjusted `edit.handler` so that only ADMIN can update `platform` webhooks
* update `getWebhooks` for platform wide webhooks
* list platform webhooks if admin
* createFunction refactor
* update subscriberUrlReserved for platform webhooks
* fix delete webhook handler
* fix: added readOnly to WebhookListItem
* fix: admin cannot delete its own webhooks
* fix: ts error
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* chroe: org settings schema
* wip: UI work + modal on toggle
* chore: update i18n
* fix: list handler
* fix: update handler on untoggle
* chore: extract
* feat: update handler for hide and delete logic
* chore: radio translations
* chore: fix modal state from flickering
* feat: update copy & add danger colour on delete focus
* chore: update copy
* design: remove modal icon
* chore: include more seeds
* fix: update handler
* feat: hide create for profile user
* feat: use readonly instead
* feat: hide personal event type header when read only
* chore: move away form readOnly as it was used in other ways
* chore: fix read-only bug
* fix: hide readonly create screen
* fix: show managed event types when events are locked
* fix: hide if not admin
* Update packages/trpc/server/routers/viewer/eventTypes/create.handler.ts
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* fix: feedback
* fix: lock eventtype single switch
* fix: empty state create button
* fix: more profileGroup check outside CTA to pass value to filter too
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Set unique tenant
* Rely on current DB for dsync data
* Fix rendering dsync config
* Remove console.log
* Address feedback
* Add relationship between dsync data and team group mapping
* Fix `dsyncData` and `organizationSetting` relationship
* add metadata to seats for workflows and webhooks
* add test
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* moved privacy setting to new tab
* i18n
* added more privacy switches
* fix: hide org teams and members
* fix: use i18n
* fix: privacy page
* feat: also hide team mebers when org is private
* chore: remove log
* fix type error
* chore: type err
* chore: feedback
* chore: type err
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* open reporting in new tab full screen
* nit
* fixed type
* Fix failing test
* Update packages/app-store/routing-forms/pages/reporting/[...appPages].tsx
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
* fix: view team bookings
* fix: edge case- common user across 2 different teams
* @SomayChauhan fix: edge case- common user across 2 different teams v2.0
* feat: added booking list test for collective event-types
* feat: added booking list test for round-robin event-types
* feat: added test for managed event types bookings
* feat: added test for individual events bookings
* refactor code
* added comments
* added isFixed to collective event hosts
* better function naming
* code refactor
* fix: assertBookingVisibleFor ignoring today's meetings
* fix: handling case for organizations
* fix: non org bookings-list test
* feat: added tests for organisations booking list
* added comments for better clarity
* booking-list in org tests
* uncommented doOnOrgDomain
* removed extra selectors
* fix: failing tests
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* init
* Fix event limit interlinked switches
* wip
* WIP
* fix bugs
* lock hashed link until further notice
* lock private url for managed type to stop confusion
* fix recurring
* prettier fix
* early review fixes ...
* --WIP to send only changed form fields in updateMutation
* WIP with some type fixes
* Revert "WIP with some type fixes"
This reverts commit 00f10b772d6d08af17e7c9bd2d3601d93035d9b3.
* post merge conflict resolution fixes
* further type fix
* fixed test
* fixing e2e tests
* fix test --WIP
* attempt fix test & type --WIP
* fix duplicate locale en entry
* fix locked state persistence
* adds private URL locked/unlocked functionality
* fix tests
* Fix issue where locked labels showed up in non-managed events
* adds e2e test step
* update new test
* minor fixes
* fix test
* address changes request Part 1
fixed width on the lock badge
members default location as default selection
bugfix for offset toggle duplicate within itself
* fixes locked/unlocked label for child event types
* enable choice of destination calendar for children
* Fixes width for simple lock badge
* fix type
* fixes workflows list and apps for managed event type
* restricts creation of managed event types to EE only
* further fixes --WIP
* fix unit test for handleChildrenEventTypes
* fix test --WIP
* fix type err --WIP
* fix type err in test
* fix childevent payload
* fixes hashedLink bug
* fix test step title
* lock workflow create button when workflow is locked
* fix workflow detail
* Don't rely on parameter ordering, use object instead
* Removed console.log
* Missed one
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* fix: Implement new avatars in insights
* fix: Exposed type errors, previously hidden by any,any type
---------
Co-authored-by: Omar López <zomars@me.com>
* added new .env for script tags
* Update turbo.json
* removed meticulous
* added body script .env
* nit
* fixed injection
* Update apps/web/app/layout.tsx
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Ensure NEXT_PUBLIC_BODY_SCRIPTS is casted to bool
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* add the X-Cal-Signature-256 header to MEETING_ENDED webhook requests
* take care of null value for appId
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* fix: team event when when no one is assigned
* chore: test
* chore: unfo
* chore: remove host while creating
* fix: unit tests
* fix: event in booking form
* chore: undo tests
* fix: type
* fix: move it inside
* Check for migrated username
* Add e2e for reserved username due to migration
* Add username change test
* Update username.ts
* fixed type checks
* Refactor to use isOrganization
* Typing
* Typing
* Removed the isOrganization function
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* Rename .env variables
* Remove instances of old variable names
* Add credential sync secret to request for new token
* Update invalid secret message
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* Implement secondary email
* Fix already existing tests failing
* Added tests for secondary email feature
* Skip email verification if user is changing the primary email to a verified secondary email
* Fix type errors in tests
* Fix email becoming unverified when switched between primary and secondary email
* Added a check to prevent prisma error from throwing up due to duplicate records
* Improved error handling when adding a secondary email
* Add test for resend verification email flow for secondary emails and validation of invite link
* Add a new column to link secondary emails with verification tokens
* Fix failing to update email to an unverified secondary email of the same user
* Fix failing tests
* Change text of resend verification email
* Add ability to use the verified secondary emails to get the event details to
* Fix type errors
* Fix failing e2e tests
* Fix failing unit tests
* Fix failing type checks
* Fix secondary verification email subject
* Fix failing e2e tests
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: Test flakiness due to unfilled name/email
* Better toast-success checks
* Revert "test: Create E2E tests for bookings with custom/required Phone + other questions (#11502)"
This reverts commit 614741d207.
* Revert "test: Create E2E tests for bookings with custom/required Multiple Emails + other questions (teste2e-multipleEmailQuestion) (#11565)"
This reverts commit d1d50b0d91.
* Revert "test: Create E2E tests for bookings with custom/required Long Text + other questions (teste2e-longTextQuestion) (#11559)"
This reverts commit 96810b5ba1.
* Revert "test: Check the webhook event tab and your funtionalities (#12433)"
This reverts commit 9db9204088.
* Re-instate regularBookings
* Fixtures used by other tests
* Removed dead code from regularBookings.ts
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* Fix calendar event included in the workflow, doesn't show the meeting link
* Fix type error
* fix public video call url
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix: Prevent duplicate bookings with idempotency key
* Add idempotencyKey to builder.ts type fix
* Add tests for new idempotency key (booking create)
* Add endTime to idempotency key, it should be possible to book different durations
* Move reschedule before the create so the idempotency key is unset
* feat:redirect - if signup url has url to goto
* fix: dont throw if url is invalid - just dont set
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* feat(db): add new col: user appTheme
* feat(event-types page): apply appTheme color
* add appTheme for trpc
* feat: mutate main page theme
* feat: add english translation for app theme update section
* modify keys in common (en)
* add woring
* Revert yarn.lock to its state before unintended changes
* feat(i18n): add back the i18n string (for dark/light mode switching)
* refactor: refactor ThemeLabel
* fix: add new user field "appTheme" to test files
* chore: modify TODO comment
* chore: update common.json (en) for "theme"
since we had appTheme now, I think it's better to update the wording here to avoid confusion
* fix: update button's data-testid to fix e2e test error
* chore: remove comment
* fix: fix brand-color-not-apply bug
* solve type error
* fix: fix type error
* fix: use correct storageKey for booker / dashboard
* fix: tidy up
* fix: skeleton
---------
Co-authored-by: swh00tw <a6140000@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* fix: No available users found
* Update getUserAvailability.ts
* Update getUserAvailability.ts
* Update handleNewBooking.ts
* Reusing the parsed dates throughout the full stack
* Fixed typo
* Added unit tests for stringToDayjs
* Fixing types
* Reverted the getSchedule utc change since that endpoint takes in UTC formatted dates but with a given timezone
* chore: Add test replicating 'no available users' error
* Test is passing
* Name clarifications
* Test clean up
* Update packages/features/bookings/lib/handleNewBooking.ts
Co-authored-by: Omar López <zomars@me.com>
* Update handleNewBooking.ts
* Fixed issue where date overrides ending at midnight don't allow bookings
* Removed comment
---------
Co-authored-by: Omar López <zomars@me.com>
* feat: Implement orgs/teams logoUrls
* Use getAvatarUrl in team/[slug]
* Extract uploadLogo to standalone file for reuse
* Allow removing the team/organisation logo
* fix: API build fail due to server-only, removed
* init
* typefix maybe
* fix type
* fix e2e
* Extract delete dialog to its own function to optimise rerender
* wip
* Delete isEqual
* adds eslint tsignore comment
* only update changed fields
* fix type err
* --WIP
* fix type err isLoading—>isPending
* isLoading—>isPending
* post conflict resoution fix
* shouldDirty minimumBookingNotice
* adds shouldDirty to setValues
* reset form to ensure updated default values
* shouldDirty changes and fixed deep check of dirty
* --WIP
* should dirty recurring
* shouldDirty team tab
* multiple-fixes
* adding console log to test something in e2e
* shouldDirty apps tab
* fixes managed event type children association
* fixed managed events update
* dirty managed fix
* fixes some onChange versus setValue and periodCountCalendarDays
* Seeing different behaviour explicitly unwrapping formState
* only mutate if at least 1 field dirty
* fix type error
* bunch of fixes
* --WIP
* update only dirtyFields for Managed Events existing children
* Fixes update old managed event type tests --WIP
* Fix unit tests
A bunch of unit test fixes which started failing
due to update fields only requiring actual updated
fields. some other small fixes also included
* type fix
* remove unnecessary comment
* Adds dirtyField to instant event
* fix: add shouldDirty
* fixes availability and team tabs, and disable save button unless dirty
* fix for hosts and bookerLayout
* add shouldDirty when resetting hosts after changing schedulingType
* add missing shouldDirty to useEventTypeDestinationCalendarEmail
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Updated useTypedQuery to store values to localstorage
* removed the redundant function params
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* rule for Prisma that includes using only "true" and not a field selector
* Removed Skiff from the app store
* Apply suggestions from code review
* Delete packages/eslint-plugin/src/rules/disallow-prisma-include-only-true-not-field-selector.ts
---------
Co-authored-by: Peer Richelsen <peer@cal.com>
* set the selectedDuration in store to duration passed in query
* Pass durationConfig prop to Booker component in /team/[slig]/[type] pages
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: prevent signing up multiple times from same account
* revert: lark calendar changes
* credential clean up if duplicate
* fix code duplication and check before credential creation
* feat: useRouterQuery allow unset queryParam
* feat: showToast on account duplication attempt
* Small tweak to copy
* Updated other calendars not to use checkDuplicateCalendar
* Add account already linked to apps/installed/calendar
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* fix: filtering events bug in bookings page
* fix: handle edge case if we change hosts in event-settings/assignment
* update: handled edge case
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* fix: Ensure event type duplication respects private link setting
* chode refactor
* Fix: Handler throwing error on creating duplicate of a collective event having private-link switched on.
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* perf: Don't process date overrides outside of requested boundaries
* Added ability to skip override calculations when not used
* Only instantiating utc date for overrides once
* Removed performance tracing
* Cleanup
* Fixed broken tests
* Fix type
* In process of fixing types
* Types
* Fixed types
* Removed unnecessary performance.now() call
* Changed override date check to use isBetween
* Attempting to fix availability test
* Put code back to test availability
* Put back isBetween because confirmed it wasn't triggering the new test failures
* Removed date check to see if this is breaking it
* Put the code back since the test failed without it too
* Skipping test to unblock pipeline unless research is done
* Removed steps to test
* Removing the piece around the troubleshooter
* 1 more try
* Adding an extra wait
* Took out the boolean check to see if that's the issue
* Put back the check
* Trying to isolate the problem
* Changed how the test loads the troubleshooter
* Changed to OR to capture range better
* Using the proper date instead of 1/1/1970
* Update availability.e2e.ts
* use same lucky user + check availability
* add tests for recurring round robin events
* only use luckyUsers for recurring bookings
* don't check availability for all recurring dates
* code clean up
* pass schedulingType
* fix type error
* add availability check for fixed hosts + test
* fix type error
* implement feedback
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* fix#13507 'Invalid event length' when creating dynamic events with a 1 hour duration
* Fix failing e2e tests by dynamically injecting lengths for dynamic events
--amend 1: misc indentation cleanup
--amend 2: Added condition to only update event metadata when slug is dynamic and multipleDuration is empty
* Override the multipleDuration property while constructing the dynamicEvent object itself
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* fix: payload cleanup
* Update eventType.ts
* Send whitelisted fields everywhere
* Removed a user select
* Removed extra usage of users
* Put back user field with fewer selects
* Added user pick
* Removed more users selects
* Another select removal
---------
Co-authored-by: Hariom <hariombalhara@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* fix: don't display setup page icon for these apps
* chore: make it optional
* chore: feedback
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* Fix event-type listing not working
* Automatic reload of the app when being added to a different organization
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* chore: uses safeGet to be more explicit
* Update apps/web/middleware.ts
* Update apps/web/middleware.ts
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* Fix routing-form access restrictions
* Update packages/app-store/routing-forms/pages/routing-link/[...appPages].tsx
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* Fix routing form access issue for users who are never migrated
* Improve comment
* wip
* Fix event-type listing not working
* Automatic reload of the app when being added to a different organization
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Add profile table
Copy to profile table
Update schema
Migrations
* wip
* Get switcher working
* Add organization seeder
* wip
* Remove dead code
* Fix unit tests
* relevantProfile -> profile
* cache bust
* One more comment
* Squash migrations
* Copy to profile table
* Update schema
* Fix existing user invite flow
* Add profile table
* Copy to profile table
* Update schema
* Format
* Add profile table
Copy to profile table
Update schema
Migrations
* Format
* wip
Get switcher working
Add organization seeder
wip
Remove dead code
Fix unit tests
relevantProfile -> profile
cache bust
One more comment
Squash migrations
Copy to profile table
Update schema
Fix existing user invite flow
Add profile table
Copy to profile table
Update schema
chore: small improvements to signup (#13227)
* removed features on mobile, better background color
* nit
* dark mode nits
New Crowdin translations by Github Action
fix: event reschedule workflow trigger (#13122)
* fix event reschedule workflow trigger
* uncomment previously failed test
* review fix
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
chore: added community support to help (#13213)
refactor: Abstract `handleSeats` from `handleNewBooking` (#12062)
* Refactor createBooking
* Type fix
* Abstract handleSeats
* Create Invitee type
* Create OrganizerUser type
* Abstract addVideoCallDataToEvt
* Abstract createLoggerWithEventDetails
* Abstract `handleAppStatus` from handler
* Create ReqAppsStatus type
* Move `deleteMeeting` and `getCalendar`
* Set parameters for `handleSeats`
* Typescript refactor
* Change function params from req
* Type fix
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Erik <erik@erosemberg.com>
fix: Dynamic group booking org-migration redirect (#13223)
* fix: Dynamic group booking redirect
* Fix flaky private team test
test: Check availability tab and all your functions (teste2e-availability) (#12434)
* add changes
* add changes
* add changes
* add changes
* Requested changes
* Change way to grab element
---------
Co-authored-by: gitstart-calcom <gitstart-calcom@users.noreply.github.com>
Co-authored-by: gitstart-calcom <gitstart@users.noreply.github.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
fix: Reschedule a cancelled booking (#13170)
* fix: Reschedule a cancelled booking
* canceled instead of cancelled
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
v3.7.0
test: In Team Event type when location is Organizer Default App and U… (#12939)
* test: In Team Event type when location is Organizer Default App and User Metadata is emoty
* chore: use variable
* fix: type error
test: add test for invalid cal video (#13103)
* test: add test for invalid cal video
* chore: add confirm
* chore: fix type error
* chore: update code
* test: add unit test
* chore: type error
* chore
* chore: type
* chore: fix test
* chore
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
chore: add error message for no availability (#13230)
* chore: add error message for no default user availability
* chore: check only availability
* chore: change message
* chore: add eventType
fix: Team revert with members (#13228)
refactor: Refactor seats logic (#12905)
* Refactor createBooking
* Type fix
* Abstract handleSeats
* Create Invitee type
* Create OrganizerUser type
* Abstract addVideoCallDataToEvt
* Abstract createLoggerWithEventDetails
* Abstract `handleAppStatus` from handler
* Create ReqAppsStatus type
* Move `deleteMeeting` and `getCalendar`
* Set parameters for `handleSeats`
* Typescript refactor
* Change function params from req
* Type fix
* Move handleSeats
* Abstract lastAttendeeDeleteBooking
* Create function for rescheduling seated events
* Fix imports on reschedule seats function
* Fix imports
* Import handleSeats function
* Fix rescheduleUid type
* Refactor owner reschedule to new time slot
* Refactor combine two booking times together
* Reschedule as an attendee
* Refactor createNewSeat
* Remove old handleSeats
* Remove lastAttendeeDeleteBooking from handleNewBooking
* Test for new attendee right params are passed
* Unit test params for reschedule
* Typo fix
* Clean up
* Create new seat test
* Test when attendee already signs up for booking
* Type fix
* Test reschedule move attendee to existing booking
* On reschedule create new booking
* Test on last attendee cancel booking
* Owner reschedule to new time slot
* Owner rescheduling, merge two bookings together
* Test: when merging more than available seats, then fail
* Test: fail when event is full
* Remove duplicate E2E tests
* Clean up
* Rename `addVideoCallDataToEvt` to `addVideoCallDataToEvent`
* Refactor `calcAppsStatus`
* Assign `evt` to resutl of `addVideoCallDataToEvent`
* Use prisma.transaction when moving attendees
* Clean create seat call
* Use ErrorCode enum
* Use attendeeRescheduledSeatedBooking function
* Await function
* Prevent double triggering of workflows
* Use inviteeToAdd in createNewSeat
* Remove unused error code
* Remove old handleSeats file
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Erik <erik@erosemberg.com>
feat: Allow admins to filter bookings only by attendee emails (#13236)
* chore: Allow admins to filter bookings only by attendee emails
* Fix type error
Fixed [CAL-2930] Org branding isnt centered in shell #13225 (#13237)
Add profile table
Copy to profile table
Update schema
Migrations
Format
* wip
* Add profile relation everywhere
* Fix schema
* Fix invite handler
* Add profileId during eventTypec reation
* Get dashboard working with profile relatioon
* Add workflow create repository
* Add profileId to host
* Add profileId to credential table
* Add destinationCalendar repository
* Add profileId to membership
* Revert all profile related changes
* Add acme and dunder
* Fix membership profileId usgae
* Various fixes
* Some renaming
* Fix failing tests
* Debugging next-aut
* Consolidate migrations
* Testing fixes
* Fix unit tests
* Self review feedback
* PR feedback
* Fix orgMigration as well
* Add profile schema and copy users to it
* Remove migrations from here
* Fix type issues
* Fix type error after main merge
* Remove movedFromUserId
* Add missing migration file
* Self review addressed
* Joe's review addressed
* Fix profile switcher
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
* Get `onErrorReturnTo` URL
* If no code return to previous page
* On invalid permissions, return to previous page
* When not enough permissions given, invalidate the credential created
* Type fix
* Stripe go back to previous page on cancel
* Clean up console.logs
* Add early returns when redirecting
---------
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* feat: Disallow next month prefetching in booker
* renamed to include NEXT_PUBLIC
* fixed boolean expression
* Now using a variable length of days to load
* Type fixes
* Now opening all dates to be clickable
* Added turbo.json var and updated example env
* Fixed issue with selectedDate being null when first loading the page
* Updated description of variable
* Made constant for the booking days
* Type fix
* Setting the days to load for weekly view to 7
* feat: add ui and ability to fetch more on click
* feat: add ui and ability to fetch more on click
* fix: loader
* fix: banner detection
* Update packages/features/bookings/Booker/Booker.tsx
* fix: types
* Not showing HavingTroubleFindingTime component when the schedule is loading
* Only enabled on monthly view
* Correctly load initial date
* Type fix
* Fixed bugs around triggering multiple requests
* Added case for when there is no selectedDate but the month has been specified
* Types
* More types
* Check for undefined
* More typing
* More typing
---------
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* add tests for responsive layout
* test: Create E2E tests to check the responsive design for a regular booking and edit a regular event type
* test: Create E2E tests to check the responsive design for a regular booking and edit a regular event type
* test: Create E2E tests to check the responsive design for a regular booking and edit a regular event type
* Create tests
* Create tests
* Create tests
* add changes
---------
Co-authored-by: gitstart-calcom <gitstart-calcom@users.noreply.github.com>
Co-authored-by: GitStart-Cal.com <121884634+gitstart-calcom@users.noreply.github.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* feat: make org members list private
* fix: add isOrg to MakeTeamPrivateSwitch in other-team-members-view
---------
Co-authored-by: supalarry <lauris.skraucis@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: event api accepts invalid start & end values
* fix: unit tests
* test: added 'event length check during booking'
* test: fix unit test
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* fixed some of the terms language
* minor changes
* Update apps/web/pages/settings/organizations/[id]/onboard-admins.tsx
* fixed yarn
* nit
* fix: trans
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
## What does this PR do?
- This PR migrates the `/auth/sso/*` page group to the app directory (which runs under the App Router).
- The migrated page exists under `/future/auth/sso/*` and is accessible at all times.
## Requirement/Documentation
- If there is a requirement document, please, share it here.
- If there is ab UI/UX design document, please, share it here.
## Type of change
- [x] Chore (refactoring code, technical debt, workflow improvements)
- [x] New feature (non-breaking change which adds functionality)
## How should this be tested?
There should be no changes between the old sso and new sso routes in terms of content and no downgrading in terms of performance.
The pages were not tested due to being unable to reproduce the flow locally.
## Mandatory Tasks
- [x] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
## What does this PR do?
- This PR migrates the `/auth/logout` and `/auth/signin` pages to the app directory (which runs under the App Router).
- Using `/future/auth/logout` is available at all times and is supposed to log the user out as `/auth/logout` page does.
- However `signin` page (or fragment) was used before should behave the same using the `/future/auth/signin` route.
## Requirement/Documentation
- If there is a requirement document, please, share it here.
- If there is ab UI/UX design document, please, share it here.
## Type of change
- [x] Chore (refactoring code, technical debt, workflow improvements)
- [x] New feature (non-breaking change which adds functionality)
## How should this be tested?
- Using `/future/auth/logout` is available at all times and is supposed to log the user out as `/auth/logout` page does.
- However `signin` page (or fragment) was used before should behave the same using the `/future/auth/signin` route. It was not tested locally.
## Mandatory Tasks
- [x] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
## What does this PR do?
- This PR migrates the `/auth/verify` and `/auth/verify-email` pages to the app directory (which runs under the App Router).
- The migrated pages exist under `/future/auth/verify` and `/future/auth/verify-email` and are accessible at all times.
## Requirement/Documentation
- If there is a requirement document, please, share it here.
- If there is ab UI/UX design document, please, share it here.
## Type of change
- [x] Chore (refactoring code, technical debt, workflow improvements)
- [x] New feature (non-breaking change which adds functionality)
## How should this be tested?
There should be no changes between the old verify and new verify routes in terms of content and no downgrading in terms of performance.
The pages were not tested due to being unable to reproduce the flow locally.
## Mandatory Tasks
- [x] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
> I'm in the core Team of inlang
## Fix inlang's configuration file
We changed the `project.inlang.json` to a `settings.json` in a `project.inlang` dir. This enables the inlang project to store app information or metadata in a dir that is not relevant to you as an end user.
#### Old
```tree
├── project.inlang.json
```
#### New
```tree
├── project.inlang
│ ├── settings.json
```
* add impersonation in the dropdown menu
* add logo
* fix another minor issue
* Update UsersTable.tsx
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
This adds tests for the following utils found in `core`:
- event utils
- getAggregateWorkingHours
- getCalendarsEvents
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
## 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 # (issue)
<!-- Please provide a loom video for visual changes to speed up reviews
Loom Video: https://www.loom.com/
-->
## Requirement/Documentation
<!-- Please provide all documents that are important to understand the reason of that PR. -->
- If there is a requirement document, please, share it here.
- If there is ab 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)
- Chore (refactoring code, technical debt, workflow improvements)
- 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
## 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
## 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 -->
- 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
* Refactor createBooking
* Type fix
* Abstract handleSeats
* Create Invitee type
* Create OrganizerUser type
* Abstract addVideoCallDataToEvt
* Abstract createLoggerWithEventDetails
* Abstract `handleAppStatus` from handler
* Create ReqAppsStatus type
* Move `deleteMeeting` and `getCalendar`
* Set parameters for `handleSeats`
* Typescript refactor
* Change function params from req
* Type fix
* Move handleSeats
* Abstract lastAttendeeDeleteBooking
* Create function for rescheduling seated events
* Fix imports on reschedule seats function
* Fix imports
* Import handleSeats function
* Fix rescheduleUid type
* Refactor owner reschedule to new time slot
* Refactor combine two booking times together
* Reschedule as an attendee
* Refactor createNewSeat
* Remove old handleSeats
* Remove lastAttendeeDeleteBooking from handleNewBooking
* Test for new attendee right params are passed
* Unit test params for reschedule
* Typo fix
* Clean up
* Create new seat test
* Test when attendee already signs up for booking
* Type fix
* Test reschedule move attendee to existing booking
* On reschedule create new booking
* Test on last attendee cancel booking
* Owner reschedule to new time slot
* Owner rescheduling, merge two bookings together
* Test: when merging more than available seats, then fail
* Test: fail when event is full
* Remove duplicate E2E tests
* Clean up
* Rename `addVideoCallDataToEvt` to `addVideoCallDataToEvent`
* Refactor `calcAppsStatus`
* Assign `evt` to resutl of `addVideoCallDataToEvent`
* Use prisma.transaction when moving attendees
* Clean create seat call
* Use ErrorCode enum
* Use attendeeRescheduledSeatedBooking function
* Await function
* Prevent double triggering of workflows
* Use inviteeToAdd in createNewSeat
* Remove unused error code
* Remove old handleSeats file
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
* Type fix
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Erik <erik@erosemberg.com>
* test: add test for invalid cal video
* chore: add confirm
* chore: fix type error
* chore: update code
* test: add unit test
* chore: type error
* chore
* chore: type
* chore: fix test
* chore
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* Refactor createBooking
* Type fix
* Abstract handleSeats
* Create Invitee type
* Create OrganizerUser type
* Abstract addVideoCallDataToEvt
* Abstract createLoggerWithEventDetails
* Abstract `handleAppStatus` from handler
* Create ReqAppsStatus type
* Move `deleteMeeting` and `getCalendar`
* Set parameters for `handleSeats`
* Typescript refactor
* Change function params from req
* Type fix
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Erik <erik@erosemberg.com>
* don't allow uid update in bookings update api
* omit uid from schemaBookingEditBodyParams instead of updating schemaBookingBaseBodyParams
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* manual: app-directory-boilerplate-calcom
* manual: import components directly
* manual: move files to correct route groups and add metadata
* manual: Change structure & Refactor to make code up to date
* manual: refactors
* Fix
* manual: fix type of arg of getData
* manual: fix type error
* fix type bugs
* fix
* fixing the build
* wip
---------
Co-authored-by: Greg Pabian <35925521+grzpab@users.noreply.github.com>
* add check for already used slug
* Update _patch.ts
Removed comment that added no value based on the code. Renamed const
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* fix the fluctuations in sidebar when we scroll main content
* fix: reduced vertical padding instead of
TOP_BANNER_HEIGHT
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* add utcOffset in webhook
* add utcOffset in webhook
* fix type
* fix type
* fix function error
* fix: UTCOffset DST
* getUTCOffsetByTimezone support date param
* add startTime in `getUTCOffsetByTimezone` func
---------
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* intuita codemod: remove-get-static-props
* intuita codemod: app-directory-boilerplate-calcom
* manual: refactor and add metadata title/description
* manual: Change structure & Refactor to make code up to date
* intuita codemod: app-directory-boilerplate-calcom
* manual: move folders to (settings-layout) route group
* manual: add title/description metadata
* manual: Change structure & Refactor to make code up to date
* intuita codemod: app-directory-boilerplate-codemod
* manual: move to (settings-layout) route group
* manual: add title/description metadata
* manual: Change structure & Refactor to make code up to date
* feat-profile-forwarding
* fix for promises of handling
* fix badge success color
* clean up
* fix suggested changes
* Changed design on booking-forward pages and moar test
* taking care of suggested changes, trpc errors and code cleaning
* improve text
* fix conflicting data-testid
* fix unique data-testid
* fix error css-global, email button styles, error conditional
* rename files to match functionality, remove away ui
* Add translations and migration
* remove log
* small fixes + improvements
* fix styles to match new design
* merge fixes
* Fix styles dark mode
* Solving merge conflicts from earlier
* Fix/change test to match new elements
* use trash icon button insted of dots (design issues)
* only send email if toUserId is set
* Fix date picker dark mode
* merge with remote
* removed status field from table and email its now for notify
* small text improvement in email
* check for team plan not paid plan
* fixes and clean up due to removing status
* fix old send request name to new behaviour
* more naming improvements and text
* remove status from handle-type
* code clean up
* fix type error
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix: Button re-enables on sluggish networks whilst re-direct is happening
* Add explanatory comment
* fix: Booking form validation can take a while
---------
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* intuita codemod: app-directory-boilerplate-calcom
* manual: add title and description metadata for each page
* manual: move between folders
* manual: finalize migration
* manual: fix client components
* manual: Change structure & Refactor to make code up to date
---------
Co-authored-by: Benny Joo <sldisek783@gmail.com>
* Update UserAvatar and remove org avatar
* Update Imports
* Fix imports to use calcom/ui
* type: fix imports
* fix: use testId on profile
* test: use image src instead of innerHTML
* fix: Allow alt on useravatar
* test: add testId to org profile
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* Move orgMigration routes to app to allow them to be tested as they are here to stay for longer tim
* move to Form everywhere and fix session reading
---------
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* fix: Ensure generated Cal Video link matches expected pattern on booking confirmation
* fix: missing Google Meet videoCallUrl in webhooks on booking confirmation
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* chore: Inherit secrets for assigning team labels
* Added workflow_call for testing
* Added this branch for testing
* Moved secrets label
* Trying to set permissions differently
* Removed testing branch
* feat: integrate formbricks in help feedback box
* Update yarn.lock
* Update yarn.lock
* fix: use formbricks/api@v1.1 & set user with userId linked to feedback
* fix: use separate env vars as suggested
* test: Add more orgs tests (#12241)
* feat: integrate formbricks in help feedback box
* Update yarn.lock
* fix: yarn lockfile
* fix: yarn lockfile again
* feat: link cal and formbricks user.id and add attributes of email and username to formbricks person object
* Update yarn.lock
* Update yarn.lock
* fix: type safety in enums
---------
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* doc: Add Tunnelmole as an open source alternative to ngrok plus minor grammar fixes
* Update README.md
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
* add workflows to bookingScenario
* activate sandbox mode for unit/integreation tests
* add sendgrid specific code to SendgridProvider
* Refactor WIP
* remove duplicate sendgridProvider file
* first implementation for testing workflows
* revert unintended changes
* comment out Workflow trigger tests
* move sendgrid check after test mode
* Update signup.tsx
* fix esLint
* test webhooks on all tests in fresh-booking.test.ts
* fix subjectPattern as title can be different
* add workflow tests to reschedule.test.ts
* code clean up
* code clean up
* fix sendgrid credentials missing message
* code clean up
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix: managed event type string
* Update EventTypeSingleLayout.tsx
Updated the translation string with the right value.
* Update EventTypeSingleLayout.tsx
Bring back formMethods variable.
---------
Co-authored-by: Alex van Andel <me@alexvanandel.com>
This reverts commit 0d3baee593.
Revert "fix: temp renamed app dir to prevent OOM"
This reverts commit 0d3baee593.
Revert "fix: temp renamed app dir to prevent OOM"
This reverts commit 0d3baee593.
Revert "fix: temp renamed app dir to prevent OOM"
This reverts commit 0d3baee593.
* fix: join subteam as their respective organization role
* refactor code
* fix: join subteam as their respective organization role
* fix: join subteam as their respective organization role for pending members
* fix: Set subteam role to admin when updating organization role to admin
* refactor: suggested changes and fix type error
* fix: type error
* chore: Moved e2e suite to run on pushes to main
* Update yarn.lock
* Small cleanup
* Moved production build without database to pre-release
* Added name to script
* Added changes, lint and build dependencies
* Add metadata to bookingMinimalSelect
* add: Show link location in /bookings
* Refactor: Update variable declaration and conditional rendering in booking metadata
- Remove explicit type declaration in locationVideoCallUrl assignment
- Use conditional rendering for provider icon based on iconUrl existence
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* Display URL location exclusively, omitting addresses
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: type error
* chore
* Dont run future tests
* Skip more tests
* Fix 404 text
* Fix more tests
---------
Co-authored-by: Hariom <hariombalhara@gmail.com>
* fix: allow API access to creating a team that you are a member of
* update roles allowed to create event types
* add back comment
* revert yarn.lock
---------
Co-authored-by: Omar López <zomars@me.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Fix toolbar
* Slide animation
* Animate out and fix selection model
* Disable on mobile - fix tablet position
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: change booking page filter ui to match figma
* fix: style change for filters in mobile
* made all changes requested by reviewers
* fix: add clear filter
---------
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* test: booking and frequency limits e2e
* test: refactor limit e2e and check multiple
* test: move limits e2e to separate file
* fix: blocked day assertions
* chore: rename to booking-limits
* fix: use todo test util
* chore: un-DRY tests
* feat: create user with limits helper
* chore: move user limit helper to utils
* fix: multiple limits test
* feat: fail faster
* chore: event url helper
* fix: prismock count date comparisons
* chore: improve booking limit types in test utils
* test: add typed weekStart to getOrganizer helper
* test: add custom fromDate to getDate helper
* fix: correctly handle negative date increments
* test: add helper for partial weeks
* test: booking limits edge cases
* chore: remove booking limit e2e todos
* chore: normalize getDate return type and skip test
* Fix imports paths that are changes after main merge
* Fix failing types
* Skip failing test
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
* refactor booking details api middleware to use team member booking join
Signed-off-by: titanventura <aswath7862001@gmail.com>
* fix. security issue in previous commit. check for booking against current user. then check for team booking
Signed-off-by: titanventura <aswath7862001@gmail.com>
---------
Signed-off-by: titanventura <aswath7862001@gmail.com>
* fix: adding team members from organization tab that alredy exist
* changed organizations.listOtherTeamMembers from useQuery to useInfiniteQuery
* undo yarn.lock
* fix: invalidate the organizations.getMembers query on removeMember and inviteMember Mutation
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
* fix divider border for addOnLeading
* fix primary button in dark mode and password input border
* signup dark mode and corner fix
* onboarding dark mode
* fix css var issue and use inline vars for light and dark mode
* Invert google icon on dark mode
* Fix typo
* fix eslint errors with yarn lint:fix
* use css vars on login page as well
* running lint manually
* Fix subtle
* Fix
* Fix
* linting
* linting
* chore: restore main yarn.lock
* fix: lint error
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: Sean Brydon <sean@brydon.io>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: sean-brydon <sean@cal.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
* add wrapper for sentry and update functions in 'getUserAvailability'. Update tracesSampleRate to 1.0
* Make Sentry Wrapper utilize parent transaction, if it exists.
* Update wrapper for functions to inherit parameters from the child function
* add comment of when to use the wrapper
* check for sentry before wrapping, if not call unwrapped function
* refactored wrapper to have async and sync separate functions that utilize helpers for common behaviour
* update type of args to unknown
* fixed types of returns from wrapped functions
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* improved team upgrade screen to also show unpublished teams
* Update TeamsListing.tsx
* bunch of stuff
---------
Co-authored-by: Omar López <zomars@me.com>
## 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. -->
In anticipation of refactoring `handleSeats` we need to abstract `createBooking` in order to get the return type. This PR is purposely aiming to do one thing so nothing is missed while refactoring `handleNewBooking`
Fixes # (issue)
<!-- Please provide a loom video for visual changes to speed up reviews
Loom Video: https://www.loom.com/
-->
## Requirement/Documentation
<!-- Please provide all documents that are important to understand the reason of that PR. -->
- If there is a requirement document, please, share it here.
- If there is ab UI/UX design document, please, share it here.
## Type of change
<!-- Please delete bullets that are not relevant. -->
- [x] Chore (refactoring code, technical debt, workflow improvements)
## 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
## Mandatory Tasks
- [ ] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
## Checklist
<!-- Please remove all the irrelevant bullets to your PR -->
- 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
* docs:add google credentials in example env
* docs: add a space after #
* chore: update .env.example
---------
Co-authored-by: Udit Takkar <udit222001@gmail.com>
* feat: Base implementation of v2 of avatars
* Make avatarUrl and logoUrl entirely optional
* Made necessary backwards compat changes
* fix: type errors
* Fix: OG image
* fix types
* Consistency with other behaviour, ux tweak
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Inital UI + layout setup
* use booker approach of grid
* event-select - sidebar + store work
* adds get schedule by event-type-slug
* Calendar toggle
* Load schedule from event slug
* Add busy events to calendar
* useschedule
* Store more event info than just slug
* Add date override to calendar
* Changes sizes on smaller screens
* add event title as a tooltip
* Ensure header navigation works
* Stop navigator throwing errors on inital render
* Correct br
* Event duration fixes
* Add getMoreInfo if user is authed with current request.username
* Add calendar color map wip
* Add WIP comments for coloured outlines
* Revert more info changes
* Calculate date override correctly
* Add description option
* Fix inital schedule data not being populated
* Nudge overlap over to make it clearer
* Fix disabled state
* WIP on math logic
* Event list overlapping events logic
* NIT about width
* i18n + manage calendars link
* Delete old troubleshooter
* Update packages/features/calendars/weeklyview/components/event/EventList.tsx
* Remove t-slots
* Fix i18n & install calendar action
* sm:imrovments
* NITS
* Fix types
* fix: back button
* Month prop null as we control from query param
* Add head SEO
* Fix headseo import
* Fix date override tests
## 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. -->
This PR adds the `credentialId` to payment app data. This fixes a bug where team installed payment apps were not working with team events.
Fixes # (issue)
<!-- Please provide a loom video for visual changes to speed up reviews
Loom Video: https://www.loom.com/
-->
## Requirement/Documentation
<!-- Please provide all documents that are important to understand the reason of that PR. -->
- If there is a requirement document, please, share it here.
- If there is ab UI/UX design document, please, share it here.
## Type of change
<!-- Please delete bullets that are not relevant. -->
- [x] Bug fix (non-breaking change which fixes an issue)
## 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 -->
- Install Stripe for the individual user
- Enable it for the individual's event type
- The `credentialId` should be saved to the metadata
- Install Stripe to the user's team
- Enable it in the team's event type
- The `credentialId` should be saved to the metadata
## 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 -->
- I haven't checked if new and existing unit tests pass locally with my changes
Fixes: https://github.com/calcom/cal.com/issues/12297
Fixes https://github.com/calcom/cal.com/issues/11234
- Displaying error message and X-Vercel-Id( Unique Request Id ) to user on book event form
- Improve error logging
- Add Error codes
Few things to discuss
1) How to handle calendar integration failures ?
Currently if for example google integration is broken and someone is trying to book that person then we log the error but don't inform the user that the google calendar is broken and the meeting goes through.
Should I throw error when integration is broken ?
<img width="758" alt="Screenshot 2023-11-12 at 12 52 36 AM" src="https://github.com/calcom/cal.com/assets/53316345/c4d921c4-9c8a-4b9b-82a2-bbe0fdbcb3d4">
2) How to handle conferencing app failures?
We just default to Cal Video as location if we are unable to generated conferencing url and log the error and not inform the user(organizer).
## What does this PR do?
Fixes that it can happen that Round Robin host is booked outside of availability.
I found and fixed the following two scenarios where this can happen:
- when host has a date override
- when host is available for only a part the event time (for example, booking time 9:00-11:00 and user is only available between 10:00-11:00)
Fixes#10315Fixes#11690
It also fixes that it can happen that round robin doesn't correctly pick the luck user (least recently booked). This happened when a user was an attendee of a booking before, then we always compared this booking and never the actual last booking of this user.
## Type of change
- [x] Bug fix (non-breaking change which fixes an issue)
## How should this be tested?
#### Booked outside of availability:
1.
- Create Round Robin event and assign user1 and user2 as round robin hosts
- event duration: 120 minutes
- user 1 availability:
- Monday to Friday 9:00-17:00
- user2 availability:
- Monday to Friday 10:00-17:00
- Book event at a 9:00 slot -> check if i user1 is booked
- Book event again at a 9:00 slot -> check if user1 is booked again (user2 is not available at that time)
2.
- Change availability of user2
- Mark Monday as unavailable
- Add date override on any day this month
- Book any Monday this month -> see that user 1 is booked
- Again Book any Monday this month -> see that user 1 is booked again
#### Wrong lucky user
- Book event and add user1's email as the attendee email address
- Book several slots where both users should be available, and see that it alternates between user1 and user2 (before it ended up always booking user1)
## Mandatory Tasks
- [ ] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
## What does this PR do?
- Adds AB tests middleware that redirects users to the app-dir pages with probability that is defined by env var
<!-- 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)
<!-- Please provide a loom video for visual changes to speed up reviews
Loom Video: https://www.loom.com/
-->
## Requirement/Documentation
<!-- Please provide all documents that are important to understand the reason of that PR. -->
This PR requires new env variables:
`APP_ROUTER_EVENT_TYPES_ENABLED` - boolean that defines if app dir event-types page redirect is enabled
`AB_TEST_BUCKET_PROBABILITY` - number [0, 100] that defines the percentage of users getting redirected to the app dir pages
## Type of change
<!-- Please delete bullets that are not relevant. -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [x] Chore (refactoring code, technical debt, workflow improvements)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] This change requires a documentation update
## 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 -->
Does not requires testing, implements middleware as a dead code
## Mandatory Tasks
- [x] Make sure you have self-reviewed the code. A decent size PR without self-review might be rejected.
* chore: Reduce API serverless memory configuration
* Only limit to slots for now
* Moved the vercel.json file to root
* More fun with vercel.json files
* Trying new pattern
* Using a pattern that matches the Vercel deployment summary function name
* Trying to set the memory directly in the handler file
* Trying it on all functions
* Changed glob
* Moved vercel.json file to root
* Trying a new glob
* Give me all functions
* Trying just * for all functions
* Trying again...
* Putting the config on the defaultResponder
* Seeing if web app takes setings
* Changed .js to .ts
* Changed root path
* Added back vercel.json now that the path is changed
* Reduced API slots memory to 512
* Removed unneeded code changes'
* Update defaultResponder.ts
* fix: getTeamOrThrow ran on every request
This creates unnecessary strain on the DB when someone is hitting the endpoint a lot.
* Add rate limit
* Update packages/trpc/server/routers/viewer/teams/inviteMember/inviteMember.handler.ts
---------
Co-authored-by: Sean Brydon <sean@cal.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
* GCal set primary calendar on install
* Outlook set default calendar as selected cal
* Zoho create selected calendar on install
* Lark create selected cal on install
* added initial app
* created basic functionality for Shimmer Video app with tracking of Daily rooms
* changed the type config value in the shimmer video config.json
* re-fixed update to shimmer-video config type
* updated static images for shimmer video app
* fixed tracking Shimmer video event parameter
* Add zod files
* Allow query for "conferencing" apps
* Move to shimmer video
* Redirect to shimmer app
* Remove console.logs
* Remove legacy use of seed-app-store.
---------
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: Vik <vsreed@stanford.edu>
Co-authored-by: pathaksarvesh <sarvesh@incrediblevisibility.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: Hariom <hariombalhara@gmail.com>
Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
## 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. -->
Fix wrong import introduced in this pr: #11187
<!-- Please provide a loom video for visual changes to speed up reviews
Loom Video: https://www.loom.com/
-->
## Requirement/Documentation
<!-- Please provide all documents that are important to understand the reason of that PR. -->
- If there is a requirement document, please, share it here.
- If there is ab 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)
- [ ] Chore (refactoring code, technical debt, workflow improvements)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] This change requires a documentation update
## 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
## 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 -->
- 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
* fix: Infinite loop in timezones on the negative side of UTC
* Update packages/features/calendars/lib/getAvailableDatesInMonth.test.ts
* Revert back to real system time after test
* Handle all dates as local time, given this all happens in the browser
* fix: allow dots in username
* test: added unit tests for slugify
* test: add test for username change
* tests: add test for username and dynamic booking
* fix: type error
---------
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* Date add 1 day adds 24 hours, not 1 day, causing the last date to be lost on dst change
* Alternate fix with tests
* Extract logic so test file doesnt register tsx
* bump nextjs version in ai
* lowercase username and email
* onboarding email
* direct user to install app if not installed
* multiple suggested times for link flow
* summary of context prompt engineering
* specify the @username nuance and discourage Ids
* v1.2.0
* Update README
* Change title
* simplify and improve booking link flow
* add build:ai to package.json
* better onboarding copy
* onboarding touches
* remove console logs and temp hacks
* remove env vars in app store and token in AI app
* invited user id should be string
---------
Co-authored-by: tedspare <ted.spare@gmail.com>
## What does this PR do?
- Fix that the last day in Oktober was always shown as unavailable
This happened when availability was in Europe/London timezone
- Fix that the last day of November was always shown as unavailable
This happened also for other timezones
## Type of change
- [x] Bug fix (non-breaking change which fixes an issue)
## How should this be tested?
I recommend testing it in staging instead of local, as I experienced some different behaviors on local
- Reproduce the 2 bugs as described before my fix
- If you were able to reproduce it, see if it is fixed with my fixes in this PR (last day of octber and November should be shown as available)
- Check if availability starts and ends at the correct time on days were DST happens
* Init header + login modal component
* Add calendar settings for authed user
* Local storage and using query params for toggle
* Toggle connect screen if query param present and no session
* Local storage + store + way more than that should be in single commit
* Display busy events on weekly view
* Confirm booking slot of overlap exists
* use chevron right when on column view
* Show hover card - overlapping date times
* Invalidate on switch
* FIx clearing local storage when you login to another account
* Force re-render on url state (atom quirks)
* Add loading screen
* Add dialog close
* Remove extra grid config
* Translations
* [WIP] - tests
* fix: google calendar busy times (#11696)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* New Crowdin translations by Github Action
* fix: rescheduled value DB update on reschedule and insights view cancelleds (#11474)
* v3.3.5
* fix minutes string (#11703)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* Regenerated yarn.lock
* Add error component + loader
* await tests
* disable tests - add note
* Refactor to include selected time
* use no-scrollbar
* Fix i18n
* Fix tablet toolbar
* overflow + i18n
* Export empty object as test is TODO
* Uses booker timezone
* Fix hiding switch too early
* Handle selected timezone
* Fix timezone issues
* Fix timezone issues
---------
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: alannnc <alannnc@gmail.com>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Peer Richelsen <peer@cal.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* add parentId
* Allow POST parentId
* adds eventtypeid of children
* add doc
* adds userId in children
* adds validations
* adds docstring
* fix status codes
* check fix for owners
* new logo for cal video
* fixed cal video and other inverted icons
* Discard changes to apps/web/components/eventtype/EventAdvancedTab.tsx
* moved function to lib
* For dynamic search users based on org
* Type fix
---------
Co-authored-by: alannnc <alannnc@gmail.com>
Co-authored-by: Leo Giovanetti <hello@leog.me>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* add orgs upgrade badge to select
* don't allow updating to if no teams or orgs plan
* make sure only paying users can request verification codes
* add new action helper function
* remove kyc code
* code clean up
* fix verify button UI
* fix type errors
* add eventTypeRequiresConfirmation everywhere
* address feedback
---------
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
# instructions. This environment variable is deprecated although still supported for backward compatibility.
# @see https://console.cal.com
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
# Enable Organizations non-prod domain setup, works in combination with organizations feature flag
@@ -224,22 +271,43 @@ PROJECT_ID_VERCEL=
TEAM_ID_VERCEL=
# Get it from: https://vercel.com/account/tokens
AUTH_BEARER_TOKEN_VERCEL=
# Add the main domain that you want to use for testing vercel domain management for organizations. This is necessary because WEBAPP_URL of local isn't a valid public domain
# Would create org1.example.com for an org with slug org1
# LOCAL_TESTING_DOMAIN_VERCEL="example.com"
## Set it to 1 if you use cloudflare to manage your DNS and would like us to manage the DNS for you for organizations
# CLOUDFLARE_DNS=1
## Get it from: https://dash.cloudflare.com/profile/api-tokens. Select Edit Zone template and choose a zone(your domain)
# AUTH_BEARER_TOKEN_CLOUDFLARE=
## Zone ID can be found in the Overview tab of your domain in Cloudflare
# CLOUDFLARE_ZONE_ID=
## It should usually work with the default value. This is the DNS CNAME record content to point to Vercel domain
# CLOUDFLARE_VERCEL_CNAME=cname.vercel-dns.com
# - APPLE CALENDAR
# Used for E2E tests on Apple Calendar
E2E_TEST_APPLE_CALENDAR_EMAIL=""
E2E_TEST_APPLE_CALENDAR_PASSWORD=""
# - CALCOM QA ACCOUNT
# Used for E2E tests on Cal.com that require 3rd party integrations
- 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.
<!-- 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 a requirement document, please, share it here.
- If there is ab 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)
- [ ] 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)
- [ ] 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?
@@ -34,18 +24,11 @@ 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
<!-- Please remove all the irrelevant bullets to your PR -->
<!-- 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 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
Contributions are what makes the open source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**.
- Before jumping into a PR be sure to search [existing PRs](https://github.com/calcom/cal.com/pulls) or [issues](https://github.com/calcom/cal.com/issues) for an open or closed item that relates to your submission.
## House rules
- Before submitting a new issue or PR, check if it already exists in [issues](https://github.com/calcom/cal.com/issues) or [PRs](https://github.com/calcom/cal.com/pulls).
- GitHub issues: take note of the `🚨 needs approval` label.
- **For Contributors**:
- Feature Requests: Wait for a core member to approve and remove the `🚨 needs approval` label before you start coding or submit a PR.
- Bugs, Security, Performance, Documentation, etc.: You can start coding immediately, even if the `🚨 needs approval` label is present. This label mainly concerns feature requests.
- **Our Process**:
- Issues from non-core members automatically receive the `🚨 needs approval` label.
- We greatly value new feature ideas. To ensure consistency in the product's direction, they undergo review and approval.
## Priorities
@@ -90,9 +99,24 @@ 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. Start developing and watch for code changes:
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:
```sh
nvm use
```
You first might need to install the specific version and then use it:
```sh
nvm install && nvm use
```
You can install nvm from [here](https://github.com/nvm-sh/nvm).
7. Start developing and watch for code changes:
```sh
yarn dev
@@ -120,6 +144,16 @@ This will run and test all flows in multiple Chromium windows to verify that no
yarn test-e2e
```
#### Resolving issues
##### E2E test browsers not installed
Run `npx playwright install` to download test browsers and resolve the error below when running `yarn test-e2e`:
```
Executable doesn't exist at /Users/alice/Library/Caches/ms-playwright/chromium-1048/chrome-mac/Chromium.app/Contents/MacOS/Chromium
```
## Linting
To check the formatting of your code:
@@ -135,4 +169,62 @@ If you get errors, be sure to fix them before committing.
- Be sure to [check the "Allow edits from maintainers" option](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/working-with-forks/allowing-changes-to-a-pull-request-branch-created-from-a-fork) while creating your PR.
- If your PR refers to or fixes an issue, be sure to add `refs #XXX` or `fixes #XXX` to the PR description. Replacing `XXX` with the respective issue number. See more about [Linking a pull request to an issue](https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue).
- Be sure to fill the PR Template accordingly.
- Review [App Contribution Guidelines](./packages/app-store/CONTRIBUTING.md) when building integrations
- Review [App Contribution Guidelines](./packages/app-store/CONTRIBUTING.md) when building integrations
## Guidelines for committing yarn lockfile
Do not commit your `yarn.lock` unless you've made changes to the `package.json`. If you've already committed `yarn.lock` unintentionally, follow these steps to undo:
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"
```
_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:
```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
git log yarn.lock
```
- Once you have identified the commit hash, use it to checkout the previous version of `yarn.lock`:
```bash
git checkout <commit_hash> yarn.lock
```
2. **Commit the Reverted Version**:
- After checking out the previous version of the `yarn.lock`, commit this change:
```bash
git commit -m "Revert yarn.lock to its state before unintended changes"
```
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:
```bash
git pull origin <your-branch-name>
```
- Then push the updated branch:
```bash
git push origin <your-branch-name>
```
Lastly, make sure to keep the branches updated (e.g. click the `Update branch` button on GitHub PR).
@@ -2,7 +2,8 @@ Copyright (c) 2020-present Cal.com, Inc.
Portions of this software are licensed as follows:
* All content that resides under https://github.com/calcom/cal.com/tree/main/packages/features/ee and https://github.com/calcom/cal.com/tree/main/apps/api/ directory of this repository (Commercial License) is licensed under the license defined in "ee/LICENSE".
* All content that resides under https://github.com/calcom/cal.com/tree/main/packages/features/ee and
https://github.com/calcom/cal.com/tree/main/apps/api/v2/src/ee directory of this repository (Commercial License) is licensed under the license defined in "ee/LICENSE".
* All third party components incorporated into the Cal.com Software are licensed under the original license provided by the owner of the applicable component.
* Content outside of the above mentioned directories or restrictions above is available under the "AGPLv3" license as defined below.
# Scheduling infrastructure for absolutely everyone
The open source Calendly alternative. You are in charge
The open source Calendly successor. You are in charge
of your own data, workflow, and appearance.
Calendly and other scheduling tools are awesome. It made our lives massively easier. We're using it for business meetings, seminars, yoga classes, and even calls with our families. However, most tools are very limited in terms of control and customization.
@@ -113,7 +113,7 @@ To get a local copy up and running, please follow these simple steps.
Here is what you need to be able to run Cal.com.
- Node.js (Version: >=18.x)
- PostgreSQL
- PostgreSQL (Version: >=13.x)
- Yarn _(recommended)_
> If you want to enable any of the available integrations, you may want to obtain additional credentials for each one. More details on this can be found below under the [integrations section](#integrations).
@@ -122,7 +122,7 @@ Here is what you need to be able to run Cal.com.
### Setup
1. Clone the repo into a public GitHub repository (or fork https://github.com/calcom/cal.com/fork). If you plan to distribute the code, keep the source code public to comply with [AGPLv3](https://github.com/calcom/cal.com/blob/main/LICENSE). To clone in a private repository, [acquire a commercial license](https://cal.com/sales))
1. Clone the repo into a public GitHub repository (or fork https://github.com/calcom/cal.com/fork). If you plan to distribute the code, keep the source code public to comply with [AGPLv3](https://github.com/calcom/cal.com/blob/main/LICENSE). To clone in a private repository, [acquire a commercial license](https://cal.com/sales)
```sh
git clone https://github.com/calcom/cal.com.git
@@ -131,22 +131,38 @@ Here is what you need to be able to run Cal.com.
> If you are on Windows, run the following command on `gitbash` with admin privileges: <br> > `git clone -c core.symlinks=true https://github.com/calcom/cal.com.git` <br>
> See [docs](https://cal.com/docs/how-to-guides/how-to-troubleshoot-symbolic-link-issues-on-windows#enable-symbolic-links) for more details.
1. Go to the project folder
2. Go to the project folder
```sh
cd cal.com
```
1. Install packages with yarn
3. Install packages with yarn
```sh
yarn
```
1. Set up your `.env` file
4. Set up your `.env` file
- 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.
5. 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:
```sh
nvm use
```
You first might need to install the specific version and then use it:
```sh
nvm install && nvm use
```
You can install nvm from [here](https://github.com/nvm-sh/nvm).
`postgresql://postgres:postgres@localhost:5432/Your-DB-Name`. The port is configurable and does not have to be 5432.
</details>
If you don't want to create a local DB. Then you can also consider using services like railway.app or render.
- [Setup postgres DB with railway.app](https://arctype.com/postgres/setup/railway-postgres)
- [Setup postgres DB with railway.app](https://docs.railway.app/guides/postgresql)
- [Setup postgres DB with render](https://render.com/docs/databases)
1. Copy and paste your `DATABASE_URL` from `.env` to `.env.appStore`.
1. Set a 32 character random string in your `.env` file for the `CALENDSO_ENCRYPTION_KEY` (You can use a command like `openssl rand -base64 24` to generate one).
1. Set up the database using the Prisma schema (found in `packages/prisma/schema.prisma`)
> New users are set on a `TRIAL` plan by default. You might want to adjust this behavior to your needs in the `packages/prisma/schema.prisma` file.
1. Open a browser to [http://localhost:3000](http://localhost:3000) and login with your just created, first user.
##### Approach 2
Seed the local db by running
```sh
cd packages/prisma
yarn db-seed
```
The above command will populate the local db with dummy users.
### E2E-Testing
Be sure to set the environment variable `NEXTAUTH_URL` to the correct value. If you are running locally, as the documentation within `.env.example` mentions, the value should be `http://localhost:3000`.
Run `npx playwright install` to download test browsers and resolve the error below when running `yarn test-e2e`:
```
Executable doesn't exist at /Users/alice/Library/Caches/ms-playwright/chromium-1048/chrome-mac/Chromium.app/Contents/MacOS/Chromium
```
### Upgrading from earlier versions
1. Pull the current version:
@@ -341,6 +380,10 @@ Currently Vercel Pro Plan is required to be able to Deploy this application with
[](https://render.com/deploy?repo=https://github.com/calcom/docker)
### Elestio
[](https://elest.io/open-source/cal.com)
<!-- ROADMAP -->
## Roadmap
@@ -405,7 +448,7 @@ Don't code but still want to contribute? Join our [discord](https://go.cal.com/d
3. Enable the selected API.
4. Next, go to the [OAuth consent screen](https://console.cloud.google.com/apis/credentials/consent) from the side pane. Select the app type (Internal or External) and enter the basic app details on the first page.
5. In the second page on Scopes, select Add or Remove Scopes. Search for Calendar.event and select the scope with scope value `.../auth/calendar.events`, `.../auth/calendar.readonly` and select Update.
6. In the third page (Test Users), add the Google account(s) you'll using. Make sure the details are correct on the last page of the wizard and your consent screen will be configured.
6. In the third page (Test Users), add the Google account(s) you'll be using. Make sure the details are correct on the last page of the wizard and your consent screen will be configured.
7. Now select [Credentials](https://console.cloud.google.com/apis/credentials) from the side pane and then select Create Credentials. Select the OAuth Client ID option.
8. Select Web Application as the Application Type.
9. Under Authorized redirect URI's, select Add URI and then add the URI `<Cal.com URL>/api/integrations/googlecalendar/callback` and `<Cal.com URL>/api/auth/callback/google` replacing Cal.com URL with the URI at which your application runs.
@@ -470,9 +513,8 @@ following
4. Select Basecamp 4 as the product to integrate with.
5. Set the Redirect URL for OAuth `<Cal.com URL>/api/integrations/basecamp3/callback` replacing Cal.com URL with the URI at which your application runs.
6. Click on done and copy the Client ID and secret into the `BASECAMP3_CLIENT_ID` and `BASECAMP3_CLIENT_SECRET` fields.
7. Set the `BASECAMP3_CLIENT_SECRET` env variable to `{your_domain} ({support_email})`.
For example, `Cal.com (support@cal.com)`.
7. Set the `BASECAMP3_CLIENT_SECRET` env variable to `{your_domain} ({support_email})`.
For example, `Cal.com (support@cal.com)`.
### Obtaining HubSpot Client ID and Secret
@@ -504,10 +546,18 @@ For example, `Cal.com (support@cal.com)`.
9. Click the "Save"/ "UPDATE" button at the bottom footer.
10. You're good to go. Now you can easily add your ZohoCRM integration in the Cal.com settings.
### Obtaining Zoho Calendar Client ID and Secret
[Follow these steps](./packages/app-store/zohocalendar/)
### Obtaining Zoho Bigin Client ID and Secret
[Follow these steps](./packages/app-store/zoho-bigin/)
### Obtaining Pipedrive Client ID and Secret
[Follow these steps](./packages/app-store/pipedrive-crm/)
## Workflows
### Setting up SendGrid for Email reminders
@@ -550,8 +600,6 @@ Distributed under the [AGPLv3 License](https://github.com/calcom/cal.com/blob/ma
Special thanks to these amazing projects which help power Cal.com:
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. "Cancel my next meeting"
- Answer basic questions about your busiest times eg. "How does my Tuesday look?"
- 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.
@@ -14,7 +14,11 @@ _The AI agent can only choose from a set of tools, without ever seeing your API
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 it hard to spoof them.
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.
@@ -22,27 +26,43 @@ Incoming emails are routed by email address. Addresses are verified by [DKIM rec
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. You'll need:
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, `ai@cal.dev`)
- The Cal AI's app ID and URL (see [add.ts](/packages/app-store/cal-ai/api/index.ts))
- 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, run `ngrok http 3000` (or the AI app's port number) in a new terminal. You may need to install [nGrok](https://ngrok.com/).
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.
To forward incoming emails to the Node.js server, one option is to use [SendGrid's Inbound Parse Webhook](https://docs.sendgrid.com/for-developers/parsing-email/setting-up-the-inbound-parse-webhook).
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))
1. [Sign up for an account](https://signup.sendgrid.com/)
2. Go to Settings > [Inbound Parse](https://app.sendgrid.com/settings/parse) > Add Host & URL.
3. For subdomain, use `<sub>.<domain>.com` for now, where `sub` can be any subdomain but `domain.com` will need to be verified via MX records in your environment variables, eg. on [Vercel](https://vercel.com/guides/how-to-add-vercel-environment-variables).
4. Use the nGrok URL from above as the **Destination URL**.
5. Activate "POST the raw, full MIME message".
6. Send an email to `<anyone>@ai.example.com`. You should see a ping on the nGrok listener and Node.js server.
7. 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.
For nGrok, run `ngrok http 3005` (or the AI app's port number) in a new terminal. You may need to install nGrok first.
Please feel free to improve any part of this architecture.
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.`,
subject:`Re: ${body.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`,
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`,
"Tries to create a booking. If the user is unavailable, it will return availability that day, allowing you to avoid the getAvailability step in many cases.",
"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"),
prefix:`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 the user should be formatted per that user's timezone.
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.