* feat: add build validation for SINGLE_ORG_SLUG and auto-enable organizations
- Add build-time validation to prevent SINGLE_ORG_SLUG from conflicting with RESERVED_SUBDOMAINS
- Auto-enable ORGANIZATIONS_ENABLED when SINGLE_ORG_SLUG is set
- Validation throws clear error message with list of reserved subdomains
- Follows existing environment validation patterns in next.config.js
Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com>
* refactor: change SINGLE_ORG_SLUG validation from error to warning
- Replace build-crashing error with clear warning message
- Ignore RESERVED_SUBDOMAINS when SINGLE_ORG_SLUG is set since they don't make sense together
- Keep auto-enabling ORGANIZATIONS_ENABLED functionality
- Build continues successfully instead of failing
Co-Authored-By: hariom@cal.com <hariombalhara@gmail.com>
* Update next.config.js
* Update next.config.js
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* refactor: replace i18n HTTP requests with build-time bundling
- Create translationBundler.ts for build-time translation loading
- Replace HTTP fetch in loadTranslations with file system reads
- Add CalComVersion cache invalidation to prevent stale translations
- Fix TypeScript errors in booking page components
- Eliminate 60s timeout issues by removing network dependency
Resolves translation timeout issues by bundling translations at build time
instead of making runtime HTTP requests to /static/locales/ endpoints.
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: move i18n files back to packages/lib/server with proper imports
- Move i18n.ts and translationBundler.ts back to packages/lib/server/
- Replace all relative imports with @calcom/lib/server/i18n pattern
- Fix LOCALES_PATH to point to correct directory
- Maintain optimized serverless-friendly translation loading
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* refactor: move locale files to packages/lib/server to eliminate circular deps
- Move all locale files from apps/web/public/static/locales to packages/lib/server/locales
- Create copy-locales-static.js script to copy files during build
- Update all references to use new location for build-time access
- Maintain public folder copying for Next.js runtime access
- Update platform atoms, scripts, and config files
- Fix copy script relative path issue
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: update test imports after locale refactor
- Fix import paths in test files updated by pre-commit hooks
- Ensure all tests use correct locale import paths
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: revert import paths from @calcom/web/lib/i18n to @calcom/lib/server/i18n
- Revert all test file imports back to @calcom/lib/server/i18n as requested
- Addresses GitHub comment feedback to stick with packages/lib/server location
- Fixes import paths in 6 test files that were incorrectly changed
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: update vite config alias to use new locale path
- Update @calcom/web/public/static/locales/en/common.json to @calcom/lib/server/locales/en/common.json
- Addresses GitHub comment about updating platform atoms vite config
- Maintains correct path resolution after locale files moved to packages/lib/server
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: update translationBundler path resolution for production builds
- Use process.cwd() instead of __dirname for locale file path resolution
- Ensures locale files can be found in both development and production environments
- Fixes E2E test failures caused by missing locale files in .next/server/chunks/
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: use relative path resolution for locale files in translationBundler
- Change from process.cwd() to __dirname with relative paths
- Ensures locale files can be found in both development and production environments
- Fixes E2E test failures caused by incorrect path resolution in Next.js builds
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: use process.cwd() for locale path resolution in production builds
- Change from __dirname to process.cwd() with relative paths
- Ensures locale files can be found when bundled into Next.js server chunks
- Fixes E2E test failures caused by incorrect path resolution in production environment
- Follows same pattern used in getStaticProps.tsx for cross-package file access
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: use path.resolve pattern from sendVerificationRequest for locale access
- Change from process.cwd() to path.resolve(process.cwd(), '..', '..', 'packages/lib/server/locales')
- Follows same pattern used in sendVerificationRequest.ts for cross-environment file access
- Should resolve E2E test failures by ensuring locale files can be found when bundled into Next.js server chunks
- Pattern navigates up from current working directory to reach packages directory consistently
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: use dynamic monorepo root detection for locale path resolution
- Replace relative path resolution with dynamic monorepo root finder
- Ensures locale files can be found from any working directory (root, apps/web, apps/api/v2)
- Update API v2 i18n config to use new locale path
- Fixes remaining E2E test failures in API v2 and E2E (1/4) test suites
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* fix: use require.resolve(__filename) for robust path resolution in all contexts
- Replace __dirname with require.resolve(__filename) in monorepo root detection
- Ensures locale files can be found when running from any working directory
- Fixes E2E API v2 test failures where __dirname resolves to '.' instead of actual file path
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* Revert "fix: use require.resolve(__filename) for robust path resolution in all contexts"
This reverts commit b37d8226000da8f7d5fb98b83dd0e95a53d45372.
* fix: update copied locale files after translationBundler path resolution fix
- Copy script updated all locale files in public directory
- Ensures E2E tests have access to latest locale files
- Fixes regression where all E2E tests were failing
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* feat: remove existing locale files to establish copy script as single source of truth
- Delete all common.json files from apps/web/public/static/locales/
- Eliminates developer confusion about which files are authoritative
- copy-locales-static.js script now clearly the only mechanism for populating public folder
- packages/lib/server/locales/ remains the definitive source of truth for translations
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* add comment
* refactor: simplify findMonorepoRoot by removing redundant fallback loop
- Remove unnecessary second while loop using process.cwd()
- The first loop from __dirname will always find the monorepo root
- Add clear error message for fail-fast behavior if repo structure is corrupted
- Improves code clarity and maintainability
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* feat: integrate updated translations from main branch
- Restore all common.json files from main branch to apps/web/public/static/locales/
- Overwrite packages/lib/server/locales/ with up-to-date translation content
- Resolve merge conflicts using Benny's safer 2-step approach
- Ensure translation source of truth remains in packages/lib/server/locales/
- Complete safer conflict resolution to eliminate merge conflicts on PR #22422
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* chore: update package.json and yarn.lock after translation integration
- Update dependencies after ts-node installation for pre-commit hooks
- Ensure yarn.lock reflects current dependency state
- Complete translation integration process
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
* feat: remove duplicate locale files from apps/web to establish single source of truth
- Delete all common.json files from apps/web/public/static/locales/
- Maintain packages/lib/server/locales/ as the single source of truth for translations
- copy-locales-static.js script will populate public folder during build process
- Complete Benny's safer 2-step approach: restore from main, then remove duplicates
- Resolve merge conflicts and eliminate developer confusion about translation file locations
Co-Authored-By: keith@cal.com <keithwillcode@gmail.com>
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: hbjORbj <sldisek783@gmail.com>
* fix: sentry builds
* Update yarn.lock
* Upgrade Sentry
* Breaking changes
* Discard changes to apps/web/modules/connect-and-join/connect-and-join-view.tsx
* Discard changes to apps/web/modules/signup-view.tsx
* Discard changes to packages/app-store/make/pages/setup/index.tsx
* Discard changes to packages/app-store/zapier/pages/setup/index.tsx
* Discard changes to packages/emails/src/templates/AdminOrganizationNotificationEmail.tsx
* Discard changes to packages/features/eventtypes/components/tabs/apps/EventAppsTab.tsx
* Discard changes to packages/features/eventtypes/components/tabs/assignment/EventTeamAssignmentTab.tsx
* Discard changes to packages/features/eventtypes/components/tabs/webhooks/EventWebhooksTab.tsx
* Discard changes to packages/features/eventtypes/components/tabs/advanced/DisableAllEmailsSetting.tsx
* Discard changes to packages/emails/src/templates/BrokenIntegrationEmail.tsx
* Discard changes to packages/emails/src/templates/OrganizationCreationEmail.tsx
* Discard changes to packages/emails/src/templates/SlugReplacementEmail.tsx
* Discard changes to packages/emails/src/templates/TeamInviteEmail.tsx
* Discard changes to packages/features/bookings/Booker/components/BookEventForm/BookEventForm.tsx
* Discard changes to packages/features/bookings/Booker/components/OutOfOfficeInSlots.tsx
* Discard changes to packages/features/ee/teams/components/MemberInvitationModal.tsx
* Discard changes to packages/features/eventtypes/components/EditWeightsForAllTeamMembers.tsx
* Discard changes to packages/features/eventtypes/components/Locations.tsx
* Discard changes to packages/features/eventtypes/components/dialogs/ManagedEventDialog.tsx
* Discard changes to packages/features/eventtypes/components/tabs/advanced/RequiresConfirmationController.tsx
* Discard changes to packages/features/eventtypes/components/tabs/workflows/EventWorkfowsTab.tsx
* Discard changes to packages/features/settings/BookerLayoutSelector.tsx
* Discard changes to packages/features/settings/outOfOffice/OutOfOfficeEntriesList.tsx
* chore: upgrade dependencies and improve Sentry configuration
- Upgrade @sentry/nextjs to 9.13.0
- Upgrade next.js to 15.3.0
- Upgrade sharp to 0.34.1
- Update Sentry configuration files
- Add Sentry example files for testing
* chore: upgrade dependencies
- Upgrade next.js to 15.3.0
- Upgrade sharp to 0.34.1
* Update next.config.js
* Discard changes to packages/platform/atoms/connect/apple/AppleConnect.tsx
* build(apps/web): enabled Sentry source maps uploading.
* Create sentry-sourcemaps.yml
* fix: buggy skeleton rendering for month view (#20744)
* fix: trigger lingo.dev by removing duplicate value
* fix: buggy skeleton monthly view
* fix: Wrong schedule ID set for child managed event (#20745)
* fix: wrong schule id set for managed event
* Update handleChildrenEventTypes.ts
* feat: v2 book team events using teamSlug & eventTypeSlug (#20585)
* feat: v2 book team events using teamSlug & eventTypeSlug
* fix: tests
* fix: failing e2e test (#20751)
* feat: filter users by assigned attribute options (#20659)
* feat: assigned attributes options base
* feat: assigned attributes options base e2e
* feat: filter assigned options by other assigned options
* feat: filter assigned options by other assigned options
* fixup! feat: filter assigned options by other assigned options
* feat: get org users by assigned attributes
* adding missing input file
* push generated docs
* feat: add filter org users by teamIds
* feat: add filter assigned attribute options by teamIds
* chore; update doc
* chore: remove console log
* chore: minor e2e fix
* chore: minor e2e fix
* chore: improve docs
* fix: assigned options by teamIds + optionIds
* fix: Admin/owner unable to confirm managed bookings (#20743)
* fix: Admin/owner can't confirm managed booking
* Update confirm.handler.ts
* fix: v2 automatic round robin reassign error message (#20755)
* fix: return react fragment from all layout.tsx
* feat: add guards to stripe teams controller (#20540)
* feat: add guards to stripe teams controller
* remove logs and comments
* fix return type status
* refactor: move PlatformSubscription to a dedicated module
* reroute to `organizations/stripe/save` for teams
* fix: type errors
* feat: fixed it for conferencing apps
* feat: Add error handling and fallback URL support in Stripe callback
* Refactor OAuth callback handling and move token validation to service layer
* Add documentation for OAuth callback proxying in conferencing and stripe controllers
* Move OAuthCallbackState type from organizations to stripe service module
* chore: release v5.2.2
* perf: slim down middleware matcher (#20735)
* wip
* wip
* refactor
* add pathname
* fix
* fix: manually construct pathname for metadata functions
Co-Authored-By: benny@cal.com <benny@cal.com>
* fix: add pathname parameter to all metadata functions
Co-Authored-By: benny@cal.com <benny@cal.com>
* fix: add pathname parameter to remaining metadata functions
Co-Authored-By: benny@cal.com <benny@cal.com>
* fix
* fix
* fix type checks
* Refactor
* fix
* fix
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: benny@cal.com <benny@cal.com>
* Skip flakey tests (#20761)
* Write UTM params to Salesforce (#20759)
* chore: Add consent message when SMS workflows are related (#20741)
* Add consent message
* Add consent message if using SMS workflow
* Skip flakey tests
* Revert "Skip flakey tests"
This reverts commit 3bd6f3fd71469df4dbd67b69b8e17011657df9d8.
* chore: Remove verbose logging (#20732)
* fix: offer seats broken (#20758)
* Remove trailing } from utm param (#20763)
* fix: only managed users assignable to managed team event (#20754)
* fix: only managed users assignable to managed team event
* chore: bump platform libraries
* feat: make skeleton for booking embed accurate (#20765)
* fix: trigger lingo.dev by removing duplicate value
* feat: make skeleton for booking embed accurate
* fix: calendar connect atoms (#20766)
* fix: header overlaps in month view on short viewport (#20749)
* fix: header overlaps in month view on short viewport
* refactor: Merge classes into same condition
* fix: Remove booker margin top if isEmbed
---------
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Tushar Bhatt <95581504+TusharBhatt1@users.noreply.github.com>
Co-authored-by: amrit <iamamrit27@gmail.com>
* fx 404 for embed (#20120)
* Update rateLimit.ts (#20785)
* fix: v2 Sentry errors (#20788)
* fix: Only Team Event Types are supported for Instant Meeting
* refactor: Cannot read properties of undefined (reading 'timeZone')
* fix: Cannot read properties of undefined (reading 'map')
* refactor: rearrange function order
* refactor: booking_seats_full_error
* fix: invalid_round_robin_host
* refactor: booking_time_out_of_bounds_error
* refactor: Attempting to book a meeting in the past.
* fix: obj.phoneNumber.trim is not a function
* fix: Cannot use 'in' operator to search for 'disabled' in 1
* fix: Org onboarding handle error due to platform team being moved to regular org (#20786)
* Add better error logs and handle platform team
* Add better error logs and handle platform team
* fix: Wrong text EmbedTheme -> Theme (#20790)
* refactor: replace timeZone string validation with timeZoneSchema (#20719)
* refactor: replace timeZone string validation with timeZoneSchema - Replace all instances of timeZone: z.string() with timeZoneSchema - Preserve modifiers (.optional(), .default(), .nullish()) where present - Fix VideoApiAdapter to use organizer's timezone value - Remove redundant isSupportedTimeZone import from booking.ts - Add timeZoneSchema import where needed
* Update index.ts
* fix: conflicts
Signed-off-by: Omar López <zomars@me.com>
* Update yarn.lock
* Discard changes to yarn.lock
* Update booking.ts
* Discard changes to packages/platform/types/me.ts
* Discard changes to packages/platform/types/me/outputs/me.ts
* Discard changes to packages/platform/types/schedules/schedules-2024-04-15/schedules.ts
* Discard changes to packages/features/ee/cal-ai-phone/zod-utils.ts
---------
Signed-off-by: Omar López <zomars@me.com>
* fix: improved 'use-identity-login' error message for users trying to signInn using different provider (#20582)
* improved 'use-identity-login' error message for users trying to signin using different provider
* passing original identity provider as query parameter
* Update packages/features/auth/lib/next-auth-options.ts
* passed different error names for different types of error
---------
Co-authored-by: romit <romitgabani1@gmail.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Tushar Bhatt <95581504+TusharBhatt1@users.noreply.github.com>
* fix: Location not changing when rescheduling (#20404)
* fix: location not chnging
* update
* update
* Update EventManager.ts
* update
* update
* Update reschedule.test.ts
---------
Co-authored-by: Tushar Bhatt <95581504+TusharBhatt1@users.noreply.github.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
* fix: sms workflow api v2 (#20795)
* fix: sms workflow api v2
* fixup! fix: sms workflow api v2
* fix: semi-colon in the bottom of layout UI (#20799)
* chore: Add layout.tsx to Foundation team CODEOWNERS (#20802)
* chore: remove swagger app and its dependencies (#20798)
* chore: release v5.2.3
* fix: Convert an error in webhook to info (#20806)
* Convert error to info
* Convert error to info
* feat: add "React (Atom)" to embed generator and rename rest (#20618)
* fix: trigger lingo.dev by removing duplicate value
* feat: add support for React Atom embed options
* fix: update locator for React code tab in embed code generator E2E tests
* fix: update embed tab names to clarify iframe usage
* fix failing test
* fix: indentation and installation commands for atoms
* fix: add note about iframe usage in Preview tab
* refactor: replace Cal component with BookerEmbed in EmbedCodes
* fix: Add EmbedConfig type import in Embed.tsx
- Added missing EmbedConfig type to the existing types import
- Resolves TypeScript error "Cannot find name 'EmbedConfig'"
* fix: update BookerEmbed usage in EmbedCodes component
* fix: enhance BookerEmbed implementation and update installation instructions in EmbedTabs
* fix: improve comments in EmbedCodes for clarity on layout options and styling references
* fix: streamline BookerEmbed usage in EmbedCodes with improved class handling and layout options
* fix: embed type selection
* fix: update layout selection in EmbedCodes to use dynamic configuration
* fix: update embed configuration to use theme instead of layout
* fix: conditionally render embed options based on if we are selecting atom
* fix: use simple props instead of embed specific logic to fix the active embed bug
* Fix double tabs activeness
* Revert isCurrent change
---------
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
* refactor: remove iframe usage note from Preview tab in EmbedTabs component (#20810)
* fix: trigger lingo.dev by removing duplicate value
* refactor: remove iframe usage note from Preview tab in EmbedTabs component
* fix: api v2 license check (#20813)
* fix: api v2 license check
* update cache key to avoid conflicts
* chore: Add more Foundation and Consumer team CODEOWNERS configuration (#20816)
* refactor: forbidden 403 v2 guard messages (#20794)
* refactor: delete unused proxy guard
* refactor: roles.guard.ts
* refactor: is-org.guard.ts
* refactor: permissions.guard.ts
* refactor: oauth-client-guard.ts
* refactor: is-user-event-type-webhook-guard.ts
* refactor: platform-plan.guard.ts
* refactor: roles.guard.ts
* refactor: cache guard result if canAccess=true
* refactor: is-admin-api-enabled.guard.ts
* refactor: is-team-in-org.guard.ts
* refactor: platform-plan.guard.ts
* refactor: is-webhook-in-org.guard.ts
* refactor: is-user-in-org.guard.ts
* refactor: is-user-webhook-guard.ts
* refactor: is-user-in-org-team.guard.ts
* refactor: is-membership-in-org.guard.ts
* refactor: is-oauth-client-webhook-guard.ts
* refactor: is-routing-form-in-team.guard.ts
* refactor: is-managed-org-in-manager-org.guard.ts
* fill the gaps
* refactor: api-auth.strategy.ts
* fix: test
* implement feedback
* fix: tests
* fix: refactor
* fix: test
* feat: update DeleteSegmentDialog to use ConfirmationDialogContent CAL-5399 (#20820)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: eunjae@cal.com <eunjae@cal.com>
* feat: open dropdown right after adding a filter (#20819)
* feat: open dropdown right after adding a filter
* clean up timeout
* fix: remove window usage in not-found client (#20822)
* remove window usage in not-found client
* fix
* fix: user is already part of a team (#20774)
* better error message
* redirect to login if no user session
* fixup
* remove callback url since the same function is used by org and platform both
* remove extra exclamation mark
* implement PR feedback
* refactor: Remove kysely as its unused (#20817)
* perf: Fetch data server-side for Api Keys page (#20677)
* server-side fetching for api keys page
* refactor billing page
* fix
* simplify metadata in /availability/[schedule] route (#20827)
* feat: Optout of SMS workflows (#20769)
* Do not call dub if API key isn't present
* Add `WorkflowOptOutContact` table
* Add `sendTo` column to `WorkflowReminder`
* Add `workflowOptOutContactRepository`
* Add `WorkflowReminderRepository`
* Write `sendTo` number when scheduling SMS messages
* Add `p-limit` package
* Add `determineOptOutType` to `TwilioProvider`
* Add `deleteMultipleScheduledSMS`
* Create `WorkflowOptOutService`
* Add endpoint handler for Twilio SMS responses
* Add `isOptedOut` method to `workflowOptOutContactRepository`
* Verify phone number is not opted out before scheduling SMS
* Use `smsReminderNumber` instead of `sendTo`
* Type fix
* Add .env variable if opt out is available
* Add opt out message to SMS
* Import `pLimit` directly in method
* Address select comment
* Guard against undefined phone number from form
* Add early return to `deleteWorkflowReminders`
* Add request validation from Twilio
* Add fallback message as i18N string
* Only delete SMS attendee scheduled reminders
* chore: release v5.2.4
* fix: caching for sprite.svg (#20832)
* update cache-control header for sprite.svg
* updated regex
* fix: platform org members cannot access their public booking page (#20821)
* fix: platform member event pages
* chore: update slots docs
* refactor: user repository call
* refactor: remove newline
* refactor: Returns 400 error for ZodErrors (#20831)
* fix: eventType filter on /insights (#20823)
* fix: eventType filter on /insights
* remove log
* feat: custom reply To Email (#20771)
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
* feat(insights): add progress indicator to download button on /insights and /insights/routing (CAL-5408) (#20631)
* feat(insights): add progress indicator to routing form responses download button (CAL-5408)
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: address PR feedback - remove initial progress update and ensure no decimal parts in percentage
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* feat(insights): add progress indicator to Download component
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* feat: paginate rawData endpoint and implement batch fetching in Download component
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* refactor: simplify pagination logic in trpc-router.ts
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* show progress on tooltip
* fix download for /insights
* fix download when there is no data
* feat: replace tooltip progress indicator with toast notification
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: remove duplicate ProgressToast component from showToast.tsx
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: export ProgressToast component from index.ts
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* fix: add missing translation for downloading_data
Co-Authored-By: eunjae@cal.com <eunjae@cal.com>
* update progress toast implementation
* fix error
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: eunjae@cal.com <eunjae@cal.com>
Co-authored-by: Eunjae Lee <hey@eunjae.dev>
* perf: SSR for /teams (#20824)
* finish
* improve
* refactor
* add revalidations
* /settings/teams is not needed
* refactor
* rename
* redundant type casting
* perf: SSR - /availablilty/[schedule] (#20829)
* ssr for schedule page
* improve skeleton
* improve skeleton
* improve skeleton
* fix: getBookings max 1 month in the past when no date filters specified (#20911)
* fix: getBookings max 1 month in the past
* bump platform libraries
* Pass customReplyTo as a managed event type prop (#20909)
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
* chore: release v5.2.5
* fix: Docs for deleting reserved slot (#20922)
* feat: ability to hide organizer email (#20782)
* feat: hide orgainzer email
* fix type error
* update
* update
* Update schema.prisma
* perf: Slim down trpc queries in Settings Layout (#20918)
* slim down settings layout by removing server queries
* add check method
* fix type check
* refactor
* perf: remove next.redirect by going straight to event-types (#20920)
* perf: ssr for /settings/organizations/teams/other (#20927)
* refactor: v2 automatic team slugs (#20897)
* refactor: automatic team slugs
* refactor: automatic organizations team slugs
* refactor: automatic managed organizations slugs
* docs
* refactor: test
* feat: add loading component for /apps main page (#20924)
* perf: server-side fetching for /availability (#20804)
* availability
* refactor
* add loader
* improve
* update
* fix loader
* rename
* satisfying types
* refactor
* remove log
* add CTA to skeleton
* refactor
* fix revalidations
* refactor
* update
* finish
* fix: Include ordered attendees in booking select query (#20935)
* fix: correct ordering
* another
* docs: global platform event types and custom booking flows (#20940)
* docs: global event types
* docs: custom booking flow
* chore: release v5.2.6
* fix: v2 sentry errors (#20902)
* refactor: no_available_users_found_error for team event
* fix: hosts_unavailable_for_booking
* fix: Cannot read properties of undefined (reading 'replace')
* fix: Cannot read properties of undefined (reading 'phoneNumber')
* fix: No SelectedCalendar found.
* fix: Cannot read properties of undefined (reading 'length')
* refactor: add bookings errors service
* feat: add membership creation date to Organization Member List table (CAL-5406) (#20595)
* feat: add membership creation date to Organization Member List table (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* feat: add migration for membership creation date (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* feat: make createdAt and updatedAt nullable (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* feat: add updatedAt column to Organization Member List table (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* fix: use type assertion to access createdAt and updatedAt fields (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* fix: display N/A for null date values (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* fix: use proper type assertions for createdAt and updatedAt fields (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* fix: add createdAt and updatedAt to UserTableUser mock in test (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* feat: add PostgreSQL trigger for membership timestamps (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* fix: use empty string instead of N/A and add translations for column headers (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* add i18n text
* clean up type issue
* feat: add translation keys for column headers (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* disable sort
* remove duplicated i18n texts
* feat: add filters for lastActiveAt, createdAt, and updatedAt (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* support date range filter
* fix date range for end date
* hide columns by default
* revert wrong change
* add missing selects
* fix e2e test
* fix: remove PostgreSQL trigger and let application handle timestamps (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* feat: add application-level timestamp handling for Membership model (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* add more timestamp handling
* refactor: use Prisma's built-in decorators for Membership timestamps (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* refactor: remove application-level timestamp handling in favor of Prisma decorators (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* refactor: remove more application-level timestamp handling in favor of Prisma decorators (CAL-5406)
Co-Authored-By: keith@cal.com <keith@cal.com>
* fix e2e test
---------
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: keith@cal.com <keith@cal.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Eunjae Lee <hey@eunjae.dev>
* fix: Offset is required but not passed everywhere, default to zero. (#20917)
* fix: exclude email from replyTo (#20953)
* fix: exclude email from replyTo
* update
* Update scheduleEmailReminders.ts
* fix: added order by (#20959)
* fix: double end-date parsing when saving availability (#20963)
* fix: double end-date parsing when saving availablity
Signed-off-by: Omar López <zomars@me.com>
* fix: cache hits in current and next month
* Update CalendarService.test.ts
---------
Signed-off-by: Omar López <zomars@me.com>
* fix: Don't delete Cal video room upon requesting reschedule (#20969)
* Update requestReschedule.handler.ts
* Update requestReschedule.handler.ts
* chore: leverage error.tsx in app router (#20955)
* chore: better code - migrate getServerSideProps file directly to RSC for /apps (#20926)
* migrate getServerSideProps file directly to RSC for /apps
* fix
* fix: dont persist last booking response, temporarily (#20975)
* dont persist last booking response
* remove dead code to fix ts error
* perf: Improve performance of period limits (#20974)
* perf: Improve performance of period limits
* Type fixes
* Fixed correct check for instanceof -> isDayjs
* revert: "feat: add membership creation date to Organization Member List table (CAL-5406) (#20595)" (#20978)
This reverts commit d21f7ccbc8.
* perf: Add credentialId index to selectedCalendar (#20979)
* docs: add JSDoc documentation to FeaturesRepository class and methods (#20980)
* chore: release v5.2.7
* Handle acme.cal.local root path (#20981)
* Update sms-manager.ts (#20985)
* Do not retrieve already persisted data as well (#20982)
* perf: workflows—remove data fetching for metadata (#20734)
* Remove 30 seats minimum text from organization setup page (#20983)
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: hariom@cal.com <hariom@cal.com>
* fix: few details not populate (#20987)
* fix: cancel platform subscription on dashboard (#20787)
* add new endpoint to cancel user subscription
* remove comments
* add delete button to frontend
* update correct request method
* fixup
* frontend for cancelling subscription
* better warning message
* better function name
* update locales
* better error handling in case stripe api call fails
* rename teamId to organizationId
---------
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
* feat: added `hideOrganizerEmail` to api/v2/event-types (#21005)
* feat: added `hideOrganizerEmail` to api/v2/event-types
* updated docs
* fix: Skip already completed org onboarding, as webhook request can come when invoice is paid again next month (#20984)
* there is nothing to do for repeat invoice payment
* there is nothing to do for repeat invoice payment
* fix: wrong translation value (#17923)
* feat: ability to remove attendees from booking page
* update
* fix
* fix: unable to create meeting with ms teams (#20993)
* fix: few details not populate
* fix: unable to create meeting with ms teams
* Update CrmService.ts
* update
* fix: encoding bug (#21004)
* fix: encoding bug
* fix: use escapeValue
* perf: SSR - /event-types and /event-types/[type] (#20952)
* add revalidation
* ssr for event-types
* wip
* wip
* fix types
* fix skeleton
* better error component
* make skeleton better
* no need to export
* call revalidations early
* remove revalidations if not needed
* address comments
* address
* fix: schedule unscheduled emails with tasker in cron job (#20748)
Co-authored-by: CarinaWolli <wollencarina@gmail.com>
* fix: hide orgnizer email in cal video sidebar (#21011)
* refactor: Use Salesforce GraphQL for account ownership routing (#20655)
Co-authored-by: Omar López <zomars@me.com>
* fix: Handle calendar-cache with Delegation Credentials
Fixes CAL-5372
# Delegation Credentials with CalendarCache.
Following content is a snapshot of the [internal document](https://calendso.slack.com/docs/T08B8KA2BNF/F08L5JYU3V3)
**Problem-1 :**
CalendarCache needs SelectedCalendar records to work but SelectedCalendar record is only created when a user connects their calendar and then enables some calendar for conflict checking. Because with Delegation, no manual connection is done by any of the members, we need a way to create SelectedCalendar records automatically.
**Problem-2**
CalendarCache connects to credential(regular credential) which doesn’t exist for Delegation Credential scenario. Also, DelegationCredential is common for all the members(different from Credential which is different for different members) of the organization and we need to identify to which user the CalendarCache belongs.
**Solution for both problems**
- Create credential records for Delegation Credentials as well - Through Cron(new - we could schedule it every 5mins)
- Now create SelectedCalendar records for those Credential records - Through another Cron(new - we could schedule it every 5mins)
- Now CalendarCache records will automatically be created for those SelectedCalendar records -existing cron
## Fixed some Delegation Credentials bugs unrelated to calendar-cache
- If DestinationCalendar wasn't set(which is possible only with Delegation Credentials), then Google Meet wasn't used as a conferencing app - [Added a test]
- If no SelectedCalendar is there but Google Calendar connection exists(possible only with Delegation Credential) then we were not doing conflict checking. It is expected to not do it for Regular Credentials, but for Delegation Credential we must check for conflict in that case too [Added a test]
- Earlier if a user has Regular Credential as well as Delegation Credential for the same external id which is the member email(say member1@acme.com) then availability were retrieved twice because we weren't deduplicating credentials as it wasn't a trivial thing to do. Now that is being done.
**Env Variables:**
Note this PR doesn't introduce any new env variable. The existing env variable has been added to .env.example. But if this env variable isn't already set, it must be set.
`CALCOM_SERVICE_ACCOUNT_ENCRYPTION_KEY={SAME_AS_SET_FOR_V2_API}`
**Deployment Plan:**
1. Add Observability for SelectedCalendar when _error_ field is set
2. Follow https://github.com/calcom/cal.com/blob/calendar-cache-dwd-support/apps/web/app/(use-page-wrapper)/settings/(settings-layout)/organizations/delegation-credential/delegation-credential.md#setting-up-delegation-credential-for-google-calendar-api to enable Delegation Credential for i.cal.com
3. Note that to be able to see the option to enable Delegation Credential for an organization, you need to enable `teamFeature` and `feature` for `delegation-credential`
## Automation Tests
- Introduced tests for calendar-cache.repository.ts
- Tests all methods of the repository
- Added more tests for handleNewBooking/delegation-credential flow.
- Added test to verify the bug fix when no DestinationCalendar exists and Google Meet should be used still
- Added more tests for Google Calendar/CalendarService targeting DelegationCredential
- Added more tests for getCalendarsEvents.
- To test the new logic of calling getAvailability still if there are no selectedCalendars in case of Delegation Credential
- Also introduced tests for `getAvailabitlityWithTimezones` which was an existing function but now has some new changes.
- Added tests for deduplication logic in CalendarManager.ts
## How to Test
Enable Calendar Cache and Delegation Credential feature for acme org through `features` and `teamFeatures` tables.
- Enable Delegation Credential for acme org
- Enable atleast 1 calendar for conflict checking for one of the users(say owner1)
- Ensure GOOGLE_WEBHOOK_TOKEN is set in .env file
- Ensure GOOGLE_WEBHOOK_URL is set to ngrok url of webapp in .env file
- Hit cron endpoint `curl http://localhost:3000/api/calendar-cache/cron\?apiKey\={API_KEY}` that would cache the freebusy result for the selected calendars
Followup
- https://github.com/calcom/cal.com/pull/20698
- https://github.com/calcom/cal.com/pull/18619/files#r2046795643
* fix: UI Bug - ToggleGroup (#20997)
* fix#20986: UI Bug - ToggleGroup
* some changes
* some changes
* feat: /skip trial for teams (#20753)
* skip team trials
* add loading state
* update mocks
* cleanup
* add import oops
* fix tests files
---------
Co-authored-by: Sean Brydon <sean@Seans-Mac-mini.local>
Co-authored-by: Carina Wollendorfer <30310907+CarinaWolli@users.noreply.github.com>
* fix: cleanup html reports when pr is merged/closed (#20089)
Co-authored-by: anik@cal.com <anik@cal.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
* fix: allow only platform organisation or non-platform organisation (#20972)
* fix: platform customers cant subscribe to organizations plan
* fix: organization customers cant subscribe to platform plan
* chore: format calendar events to remove oauthClientIds (#21040)
* fix: meeting link fails when host requests to reschedule (#20999)
* fix: meeting link fails when host requests to reschedule
* Update EventManager.ts
* fixes
* Incorportate prisma integration
* Update package.json
* Delete apps/web/app/sentry-example-page/page.tsx
* Discard changes to packages/features/insights/server/trpc-router.ts
* Delete .github/workflows/sentry-sourcemaps.yml
* Delete apps/web/app/api/sentry-example-api/route.ts
* Update turbo.json
* Delete sentry.client.config.ts
* Delete sentry.client.config.ts
* fix
* Update package.json
* Update next.config.js
* Update package.json
* Update yarn.lock
* Discard changes to .env.example
* Discard changes to packages/embeds/embed-react/package.json
* Discard changes to packages/platform/atoms/package.json
* Discard changes to packages/features/ee/teams/components/TeamsListing.tsx
* Update instrumentation-client.ts
* Update instrumentation-client.ts
* Update sentry.edge.config.ts
* Update next.config.js
---------
Signed-off-by: Omar López <zomars@me.com>
Co-authored-by: Yadong Zhang <zhyd007@gmail.com>
Co-authored-by: amrit <iamamrit27@gmail.com>
Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
Co-authored-by: Lauris Skraucis <lauris.skraucis@gmail.com>
Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com>
Co-authored-by: Benny Joo <sldisek783@gmail.com>
Co-authored-by: Somay Chauhan <somaychauhan98@gmail.com>
Co-authored-by: GitHub Actions <github-actions@github.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: benny@cal.com <benny@cal.com>
Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com>
Co-authored-by: Keith Williams <keithwillcode@gmail.com>
Co-authored-by: Evan Liu <evanliu.dev@gmail.com>
Co-authored-by: Tushar Bhatt <95581504+TusharBhatt1@users.noreply.github.com>
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
Co-authored-by: Ronit Raj <ronitrajofficial7@gmail.com>
Co-authored-by: Romit Gabani <85230081+romitg2@users.noreply.github.com>
Co-authored-by: romit <romitgabani1@gmail.com>
Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
Co-authored-by: Peer Richelsen <peeroke@gmail.com>
Co-authored-by: eunjae@cal.com <eunjae@cal.com>
Co-authored-by: Eunjae Lee <hey@eunjae.dev>
Co-authored-by: Rajiv Sahal <sahalrajiv-extc@atharvacoe.ac.in>
Co-authored-by: Alex van Andel <me@alexvanandel.com>
Co-authored-by: Vijay <vijayraghav22@gmail.com>
Co-authored-by: Joe Au-Yeung <j.auyeung419@gmail.com>
Co-authored-by: keith@cal.com <keith@cal.com>
Co-authored-by: Syed Ali Shahbaz <52925846+alishaz-polymath@users.noreply.github.com>
Co-authored-by: hariom@cal.com <hariom@cal.com>
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>
Co-authored-by: Sean Brydon <sean@Seans-Mac-mini.local>
Co-authored-by: anik@cal.com <anik@cal.com>
* Add akismet package to tasker
* Create scanWorkflowBody task
* Schedule workflow body scan
* Add AKISMET_API_KEY .env
* Auto lock user if spam is detected
* Uncommit key
* Add safe param to workflow step
* Migration for safe field
* Do not process workflow steps is `safe` is false
* Update migration to set previous records to true
* Address comments
* Refactor `scheduleWorkflowNotifications` to accept an object
* If new steps or editing old ones send to tasker
* Call `scheduleWorkflowNotifications` in task
* Fix `IS_SELF_HOSTED`
* Remove unused function
* Make `safe` optional in schema
* Type fix
* Revert "Make `safe` optional in schema"
This reverts commit d0964702affa87c35562300301473d25635c565b.
* Revert "Type fix"
This reverts commit d9a031303269a2994ae46f576ab2a3d31e4d977b.
* Type fixes
* Type fixes
* Address comments
* Fix tests
* Add tests
* Update tests
* Typo fix
* Update `safe` to `verifiedAt`
* feat: Compare workflow reminder bodies to default template (#19060)
* Add `getTemplateForAction` function
* Use `getTemplateForAction` when creating a new step
* Use `getTemplateForAction` when action changes
* Have `emailReminderTemplate` accept an object as a param
* Rename `getTemplateForAction` to `getTemplateBodyForAction`
* Simplify changing body when changing templates
* Create `compareReminderBodyToTemplate`
* In task, compare if reminderBody is a template
* Linting
* Add tests
* refactor: `emailReminderTemplate` to accept object as param (#19288)
* Add `getTemplateForAction` function
* Use `getTemplateForAction` when creating a new step
* Use `getTemplateForAction` when action changes
* Have `emailReminderTemplate` accept an object as a param
* Rename `getTemplateForAction` to `getTemplateBodyForAction`
* Simplify changing body when changing templates
* Create `compareReminderBodyToTemplate`
* In task, compare if reminderBody is a template
* Linting
* Add tests
* Refactor `scheduleEmailReminders`
* Refactor `create.handler` for new workflows
* Refactor `emailReminderManager`
* Refactor `getEmailTemplateText`
* Fix typo
* Type fix - whatsapp plain text template imports
* Type fix - no template found
* Type fix - add `isBrandingDisabled` to `emailReminderTemplate`
* Add workflow and user to prisma mock
* Fix imports for akismet dependencies
* Record user lock reason
* Undo linting changes
* Fix tests
* New workflow, at verify created step
* Handle if `SCANNING_WORKFLOW_STEPS` is toggled
* Move `verifiedAt` checks to specific schedule functions
- `scheduleWhatsappReminder`
- `scheduleEmailReminder`
- `scheduleSMSReminder`
* Update logic
* Do not fallback verifiedAt
* Add comment to next.config.js
* create seed for org upgrade
* migrate about/new pages
* pages refactor + use persistant zustand store
* invited members view + confirm button
* add check to org slug
* check reserved subdomain
* remove quotes from subdomain env var
* intro to creation + billing
* create price
* fix types
* createWithPaymentIntent + permission check on teams
* open stripe link in popup
* intro to tests
* organization price and seat override tests
* move permissions to a new permission service
* update env and permission check
* intro to paid invoice trigger
* dont use subId
* wip
* Get e2e working with migration of teams and members
* fix ts errors
* Get flow working again
* Fix various issues and refactor
* Some more fixes
* Fix wrong page route link
* Platform onboarding fix and moving members of team to org rix
* Platform onboarding fix and moving members of team to org rix
* Fix tests, found a bug
* Get custom price flow working
* Get admin impersonation flow working for a non-existent user
* Fix unit test
* Admin onboarding handover
* fix admin onboarding tests
* fix ts error
* Get updateQuantity working
* More fixes
* fix test
* fix schema name
* Add tests
* Add missing file
* More tests
* Add more tests
* fix mt-2 moving down input into overflow
* fix handover layout removing HOC
* Update PR_TODO.md
* fix ts error due to merge conflict
---------
Co-authored-by: Hariom Balhara <hariombalhara@gmgmail.com>
Co-authored-by: Hariom <hariombalhara@gmail.com>
Co-authored-by: Omar López <zomars@me.com>
- Introduced a new `DryRunMessage` component to inform users when in dry run mode.
- Implemented utility function `isBookingDryRun` to check for dry run status based on URL search parameters.
- Updated the `Booker` component to conditionally render the dry run message.
- Adjusted booking mutation input mapping to reuse the utility
Co-authored-by: Udit Takkar <53316345+Udit-takkar@users.noreply.github.com>
* chore: Remove Sentry source maps
* Using .env to control Sentry source maps
* Trying with sourcemaps property
* Turned silent off for testing
* Completely turned off devtool
* chore: Add Sentry perf tracing
* Just to build
* perf: Add Sentry perf tracing
* Removed the extra integrations tracing config
* Got spans working
* Now only tracing individual endpoints
* Removed check for booking event type
* Fixed types
* Added back for spans
* Consolidate sentry imports
* Added more traces
* Moved the start of the span
* chore: Add ./components/[name]/index.ts map to package.json
* fix: Clarify Popover exports
* fix: re-add dropdown to calcom/ui barrel
* chore: Add icon barrel file re-export
* Fix all calcom/ui imports of its own barrel
* Never say 'fix all remaining..' it's never true
* Some type fixeS
* Linking fixes
* Rename sheet.tsx to Sheet.tsx
Done through UI, console does NOT like this.
* Fixed some test failures
* feat: Support running webapp and embed-core playground on HTTPS. It allows to test SameSite attribute easily in embed
* Update yarn.lock
* feat: Support running webapp and embed-core playground on HTTPS. It allows to test SameSite attribute easily in embed
* Update yarn.lock
* Fix git-setup.sh
* Fix yarn.lock
* 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
* 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