Skip to content

fix: dynamic adapter imports not working in self-hosted instances#23784

Merged
anikdhabal merged 5 commits intocalcom:mainfrom
nehaaprasad:fix/dyn-video
Sep 12, 2025
Merged

fix: dynamic adapter imports not working in self-hosted instances#23784
anikdhabal merged 5 commits intocalcom:mainfrom
nehaaprasad:fix/dyn-video

Conversation

@nehaaprasad
Copy link
Copy Markdown
Contributor

@nehaaprasad nehaaprasad commented Sep 12, 2025

fixes: #23760

Root Cause

The issue was in three generated service maps that were being disabled in production environments:

  • VideoApiAdapterMap - for video integrations (NextCloud Talk, Zoom, etc.)

  • CalendarServiceMap - for calendar integrations (Google, Outlook, etc.)

  • AnalyticsServiceMap - for analytics services

  • The condition process.env.NEXT_PUBLIC_IS_E2E was evaluating as truthy in Docker environments (when set to "true" or other values), causing all integrations to be disabled instead of only during E2E tests.

Changes Made

  • Fixed condition from process.env.NEXT_PUBLIC_IS_E2E to process.env.NEXT_PUBLIC_IS_E2E === "1"
  • Updated build template to prevent future regressions
  • Fixed pre-commit hook to use npx turbo instead of yarn

Before Fix:

VideoApiAdapterMap: {}  // Empty in Docker environments
CalendarServiceMap: {}  // Empty in Docker environments  
AnalyticsServiceMap: {} // Empty in Docker environments

After Fix:

VideoApiAdapterMap: { nextcloudtalk: import(...), zoomvideo: import(...), ... }
CalendarServiceMap: { googlecalendar: import(...), outlook: import(...), ... }
AnalyticsServiceMap: { dub: import(...) }

Files Changed

  • packages/app-store/video.adapters.generated.ts
  • packages/app-store/calendar.services.generated.ts
  • packages/app-store/analytics.services.generated.ts
  • packages/app-store-cli/src/build.ts
  • .husky/pre-commit

@vercel
Copy link
Copy Markdown

vercel bot commented Sep 12, 2025

@naaa760 is attempting to deploy a commit to the cal Team on Vercel.

A member of the Team first needs to authorize it.

@graphite-app graphite-app bot added the community Created by Linear-GitHub Sync label Sep 12, 2025
@graphite-app graphite-app bot requested a review from a team September 12, 2025 08:28
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Sep 12, 2025

Walkthrough

  • .husky/pre-commit: replaced the chained yarn app-store:build && git add packages/app-store/*.generated.* with two separate steps: npx turbo build --filter=@calcom/app-store-cli and git add packages/app-store/*.generated.*; lint-staged is unchanged.
  • packages/app-store-cli/src/build.ts and generated files under packages/app-store/*.(analytics|calendar|video).generated.ts: changed the E2E gate from a truthiness check of process.env.NEXT_PUBLIC_IS_E2E to an explicit string comparison process.env.NEXT_PUBLIC_IS_E2E === '1' for initializing CalendarServiceMap, AnalyticsServiceMap, and VideoApiAdapterMap.
  • packages/app-store/_utils/getCalendar.ts and packages/lib/videoClient.ts: replaced manual key-derivation (split("_").join("")) with deriveAppDictKeyFromType(..., Map) and adjusted related imports and uses (including adding DailyLocationType/getDailyAppKeys in video client).

Possibly related PRs

Pre-merge checks (5 passed)

✅ Passed checks (5 passed)
Check name Status Explanation
Title Check ✅ Passed The title succinctly describes the primary fix (restoring dynamic adapter imports for self-hosted/Docker instances) and matches the changes in the diffs; it is concise, specific, and actionable for reviewers scanning history.
Linked Issues Check ✅ Passed The changes narrow the E2E gating to process.env.NEXT_PUBLIC_IS_E2E === "1", which ensures the generated VideoApiAdapterMap, CalendarServiceMap, and AnalyticsServiceMap are populated in Docker/self-hosted environments; videoClient key-derivation and build-template updates fix adapter lookup and regeneration, and the pre-commit hook change reduces risk of stale generated files. These code-level fixes map directly to the linked issue objectives to restore dynamic adapter imports, identify and correct the empty-map condition, and prevent regressions. Overall the PR satisfies the coding requirements from the linked issue [#23760].
Out of Scope Changes Check ✅ Passed I found no substantial out-of-scope changes: edits focus on tightening the NEXT_PUBLIC_IS_E2E check, regenerating the three service maps, adjusting key-derivation logic in videoClient/getCalendar, and a pre-commit hook update to ensure regenerated files; removed internal helper/type artifacts appear to be local refactors without API surface changes. These changes are aligned with the linked-issue objectives and do not introduce unrelated functionality.
Description Check ✅ Passed The description directly explains the root cause, the code changes made, and lists affected files and before/after behavior; it is clearly related to the changeset and provides sufficient context for reviewers.
Docstring Coverage ✅ Passed No functions found in the changes. Docstring coverage check skipped.

Tip

👮 Agentic pre-merge checks are now available in preview!

Pro plan users can now enable pre-merge checks in their settings to enforce checklists before merging PRs.

  • Built-in checks – Quickly apply ready-made checks to enforce title conventions, require pull request descriptions that follow templates, validate linked issues for compliance, and more.
  • Custom agentic checks – Define your own rules using CodeRabbit’s advanced agentic capabilities to enforce organization-specific policies and workflows. For example, you can instruct CodeRabbit’s agent to verify that API documentation is updated whenever API schema files are modified in a PR. Note: Upto 5 custom checks are currently allowed during the preview period. Pricing for this feature will be announced in a few weeks.

Please see the documentation for more information.

Example:

reviews:
  pre_merge_checks:
    custom_checks:
      - name: "Undocumented Breaking Changes"
        mode: "warning"
        instructions: |
          Pass/fail criteria: All breaking changes to public APIs, CLI flags, environment variables, configuration keys, database schemas, or HTTP/GraphQL endpoints must be documented in the "Breaking Change" section of the PR description and in CHANGELOG.md. Exclude purely internal or private changes (e.g., code not exported from package entry points or explicitly marked as internal).

Please share your feedback with us on this Discord post.

✨ Finishing touches
  • 📝 Generate Docstrings
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@dosubot dosubot bot added app-store area: app store, apps, calendar integrations, google calendar, outlook, lark, apple calendar 🐛 bug Something isn't working labels Sep 12, 2025
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
packages/app-store-cli/src/build.ts (1)

380-381: Avoid brittle string replace; centralize the E2E gating wrapper.

The three ad-hoc replace calls are easy to drift. Factor a tiny helper to generate the gated export header once and reuse.

Apply this minimal refactor:

@@
-  // Find the export line and wrap it with E2E conditional
+  // Find the export line and wrap it with E2E conditional
+  const gateExportHeader = (name: string) =>
+    `export const ${name} = process.env.NEXT_PUBLIC_IS_E2E === '1' ? {} : {`;
@@
-      exportLine.replace(
-        "export const CalendarServiceMap = {",
-        "export const CalendarServiceMap = process.env.NEXT_PUBLIC_IS_E2E === '1' ? {} : {"
-      ),
+      exportLine.replace(`export const CalendarServiceMap = {`, gateExportHeader("CalendarServiceMap")),
@@
-      exportLine.replace(
-        "export const AnalyticsServiceMap = {",
-        "export const AnalyticsServiceMap = process.env.NEXT_PUBLIC_IS_E2E === '1' ? {} : {"
-      ),
+      exportLine.replace(`export const AnalyticsServiceMap = {`, gateExportHeader("AnalyticsServiceMap")),
@@
-      exportLine.replace(
-        "export const VideoApiAdapterMap = {",
-        "export const VideoApiAdapterMap = process.env.NEXT_PUBLIC_IS_E2E === '1' ? {} : {"
-      ),
+      exportLine.replace(`export const VideoApiAdapterMap = {`, gateExportHeader("VideoApiAdapterMap")),

Also applies to: 417-418, 469-470

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 94a5008 and 24957ae.

📒 Files selected for processing (5)
  • .husky/pre-commit (1 hunks)
  • packages/app-store-cli/src/build.ts (3 hunks)
  • packages/app-store/analytics.services.generated.ts (1 hunks)
  • packages/app-store/calendar.services.generated.ts (1 hunks)
  • packages/app-store/video.adapters.generated.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.ts

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

**/*.ts: For Prisma queries, only select data you need; never use include, always use select
Ensure the credential.key field is never returned from tRPC endpoints or APIs

Files:

  • packages/app-store-cli/src/build.ts
  • packages/app-store/video.adapters.generated.ts
  • packages/app-store/analytics.services.generated.ts
  • packages/app-store/calendar.services.generated.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js .utc() in hot paths like loops

Files:

  • packages/app-store-cli/src/build.ts
  • packages/app-store/video.adapters.generated.ts
  • packages/app-store/analytics.services.generated.ts
  • packages/app-store/calendar.services.generated.ts
**/*.{ts,tsx,js,jsx}

⚙️ CodeRabbit configuration file

Flag default exports and encourage named exports. Named exports provide better tree-shaking, easier refactoring, and clearer imports. Exempt main components like pages, layouts, and components that serve as the primary export of a module.

Files:

  • packages/app-store-cli/src/build.ts
  • packages/app-store/video.adapters.generated.ts
  • packages/app-store/analytics.services.generated.ts
  • packages/app-store/calendar.services.generated.ts
🧠 Learnings (3)
📚 Learning: 2025-09-02T12:29:32.592Z
Learnt from: CR
PR: calcom/cal.com#0
File: AGENTS.md:0-0
Timestamp: 2025-09-02T12:29:32.592Z
Learning: Use `yarn build` to build all packages

Applied to files:

  • .husky/pre-commit
📚 Learning: 2025-08-30T00:30:44.247Z
Learnt from: saurabhraghuvanshii
PR: calcom/cal.com#23460
File: packages/app-store/paypal/components/PaypalPaymentComponent.tsx:55-55
Timestamp: 2025-08-30T00:30:44.247Z
Learning: Cal.com uses a build-time script `apps/web/scripts/copy-app-store-static.js` that automatically copies static assets from `packages/app-store/**/static/**/*` to `apps/web/public/app-store/` during both development and build processes.

Applied to files:

  • .husky/pre-commit
📚 Learning: 2025-08-05T12:04:29.037Z
Learnt from: din-prajapati
PR: calcom/cal.com#21854
File: packages/app-store/office365calendar/__tests__/unit_tests/SubscriptionManager.test.ts:0-0
Timestamp: 2025-08-05T12:04:29.037Z
Learning: In packages/app-store/office365calendar/lib/CalendarService.ts, the fetcher method in Office365CalendarService class is public, not private. It was specifically changed from private to public in this PR to support proper testing and external access patterns.

Applied to files:

  • packages/app-store/calendar.services.generated.ts
⏰ Context from checks skipped due to timeout of 180000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Install dependencies / Yarn install & cache
  • GitHub Check: Codacy Static Code Analysis
  • GitHub Check: Detect changes
🔇 Additional comments (4)
.husky/pre-commit (1)

6-7: Do not add an explicit generator call — the build already runs the generator

Root package script runs yarn turbo build --filter=@calcom/app-store-cli and packages/app-store-cli's build/generate scripts execute ts-node --transpile-only src/build.ts (the generator); packages/app-store/.generated. were updated on 2025-09-12, so adding node packages/app-store-cli/dist/build.js is unnecessary.

Likely an incorrect or invalid review comment.

packages/app-store/analytics.services.generated.ts (1)

5-10: LGTM: strict E2E gate fixes false positives in Docker.

Explicit process.env.NEXT_PUBLIC_IS_E2E === "1" avoids accidental disabling when set to arbitrary non-empty strings.

packages/app-store/video.adapters.generated.ts (1)

5-20: LGTM: adapters now load outside explicit E2E.

The tightened check restores dynamic imports (e.g., nextcloudtalk, zoomvideo) in self-hosted/prod.

packages/app-store/calendar.services.generated.ts (1)

5-20: LGTM: calendar integrations are no longer gated by any truthy value.

This should re-enable Google/Outlook/etc. in Docker unless NEXT_PUBLIC_IS_E2E="1".

Comment on lines +6 to +7
npx turbo build --filter=@calcom/app-store-cli
git add packages/app-store/*.generated.*
Copy link
Copy Markdown
Contributor

@anikdhabal anikdhabal Sep 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you explain this change? I don't think it's needed here. Others look good

@nehaaprasad
Copy link
Copy Markdown
Contributor Author

@anikdhabal

it was failing with Couldn't find a script named turbo' error whenever someone tried to commit changes. I fixed it by using npx turbo directly instead of the yarn script, which was causing commits to fail and preventing the generated files from being properly updated.

@github-actions github-actions bot added Low priority Created by Linear-GitHub Sync self-hosting labels Sep 12, 2025
anikdhabal
anikdhabal previously approved these changes Sep 12, 2025
Copy link
Copy Markdown
Contributor

@anikdhabal anikdhabal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good

@anikdhabal anikdhabal enabled auto-merge (squash) September 12, 2025 13:42
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Sep 12, 2025

E2E results are ready!

- Remove unused isCalendarService function
- Fix any type usage in getCalendar
- Add eslint-disable for necessary app-store imports in videoClient
- Maintain architectural separation while fixing core functionality
auto-merge was automatically disabled September 12, 2025 16:46

Head branch was pushed to by a user without write access

@pull-request-size pull-request-size bot added size/L and removed size/M labels Sep 12, 2025
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (3)
packages/lib/videoClient.ts (3)

97-114: Bug: success=true even when no adapter or createMeeting returns undefined.

If firstVideoAdapter is missing, or returns undefined, this path still marks success true. Force failure to trigger fallback.

     if (!enabledApp?.enabled)
       throw `Location app ${credential.appId} is either disabled or not seeded at all`;

-    createdMeeting = await firstVideoAdapter?.createMeeting(calEvent);
-
-    returnObject = { ...returnObject, createdEvent: createdMeeting, success: true };
+    if (!firstVideoAdapter) {
+      throw new Error(`No video adapter available for type ${credential.type}`);
+    }
+    createdMeeting = await firstVideoAdapter.createMeeting(calEvent);
+    if (!createdMeeting) {
+      throw new Error(`Video adapter ${credential.appId} returned no meeting`);
+    }
+    returnObject = { ...returnObject, createdEvent: createdMeeting, success: true };

145-147: Sanitize logs: avoid PII leakage in updateMeeting error path.

Log PII-free event data, consistent with createMeeting.

-        log.error("updateMeeting failed", e, calEvent);
+        log.error(
+          "updateMeeting failed",
+          safeStringify(e),
+          safeStringify({ calEvent: getPiiFreeCalendarEvent(calEvent) })
+        );

140-151: Require an adapter and fail the update path when updateMeeting didn't run/succeed

Include adapter presence in canCallUpdateMeeting and force success = false when updatedMeeting is falsy.

-  const [firstVideoAdapter] = await getVideoAdapters([credential]);
-  const canCallUpdateMeeting = !!(credential && bookingRef);
+  const [firstVideoAdapter] = await getVideoAdapters([credential]);
+  const canCallUpdateMeeting = !!(credential && bookingRef && firstVideoAdapter);
@@
-  if (!updatedMeeting) {
+  if (!updatedMeeting) {
@@
-    return {
+    return {
@@
-      success,
+      success: false,

Add an E2E test (E2E="1") where the adapter map is empty and assert updateMeeting returns success:false.

Also applies to: packages/lib/videoClient.ts lines 152-164.

🧹 Nitpick comments (3)
packages/lib/videoClient.ts (3)

4-9: Avoid bypassing no-restricted-imports; prefer a safe re-export boundary.

Importing from app-store in lib breaks layering. Create a shared, allowed module (e.g., @calcom/video-shared) that re-exports DailyLocationType and getDailyAppKeys, or whitelist this file via ESLint config instead of inline disables.


31-36: Tighten typing on map access.

Remove the second cast by casting the derived key once; improves readability and type safety.

-    const appName = deriveAppDictKeyFromType(cred.type, VideoApiAdapterMap);
-    const videoAdapterImport = VideoApiAdapterMap[appName as keyof typeof VideoApiAdapterMap];
+    const appName = deriveAppDictKeyFromType(cred.type, VideoApiAdapterMap) as keyof typeof VideoApiAdapterMap;
+    const videoAdapterImport = VideoApiAdapterMap[appName];

Consider adding unit cases for tricky types (e.g., "nextcloud_talk_video", "office365_video", "webex_video") to ensure the derived key matches VideoApiAdapterMap keys.


37-41: Downgrade log severity under E2E gating to avoid noisy errors.

When NEXT_PUBLIC_IS_E2E === "1", the map is empty by design. Use debug in that context.

-    if (!videoAdapterImport) {
-      log.error(`Couldn't get adapter for ${appName}`);
+    if (!videoAdapterImport) {
+      const isE2E = process.env.NEXT_PUBLIC_IS_E2E === "1";
+      (isE2E ? log.debug : log.error)(`Couldn't get adapter for ${String(appName)}`);
       continue;
     }

Please confirm CI/E2E sets NEXT_PUBLIC_IS_E2E="1" (string), not "true".

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 24957ae and 609ad74.

📒 Files selected for processing (3)
  • .husky/pre-commit (1 hunks)
  • packages/app-store/_utils/getCalendar.ts (3 hunks)
  • packages/lib/videoClient.ts (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • .husky/pre-commit
🧰 Additional context used
📓 Path-based instructions (3)
**/*.ts

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

**/*.ts: For Prisma queries, only select data you need; never use include, always use select
Ensure the credential.key field is never returned from tRPC endpoints or APIs

Files:

  • packages/app-store/_utils/getCalendar.ts
  • packages/lib/videoClient.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.cursor/rules/review.mdc)

Flag excessive Day.js use in performance-critical code; prefer native Date or Day.js .utc() in hot paths like loops

Files:

  • packages/app-store/_utils/getCalendar.ts
  • packages/lib/videoClient.ts
**/*.{ts,tsx,js,jsx}

⚙️ CodeRabbit configuration file

Flag default exports and encourage named exports. Named exports provide better tree-shaking, easier refactoring, and clearer imports. Exempt main components like pages, layouts, and components that serve as the primary export of a module.

Files:

  • packages/app-store/_utils/getCalendar.ts
  • packages/lib/videoClient.ts
🧠 Learnings (4)
📓 Common learnings
Learnt from: nangelina
PR: calcom/cal.com#23486
File: packages/app-store/kyzon-space/config.json:5-5
Timestamp: 2025-09-01T07:31:00.963Z
Learning: In Cal.com's video integration system, credential types (e.g., "kyzon-space_video") are transformed to app names by removing underscores using `cred.type.split("_").join("")` in videoClient.ts line 28. This means the key in packages/app-store/index.ts should match the underscore-removed version (e.g., "kyzon-spacevideo") rather than the original type name. This same pattern is used in other parts of the system like getCalendar.ts.
Learnt from: nangelina
PR: calcom/cal.com#23486
File: packages/app-store/kyzon-space/config.json:5-5
Timestamp: 2025-09-01T07:31:00.963Z
Learning: In Cal.com's video integration system, credential types (e.g., "kyzon-space_video") are transformed to app names by removing underscores using `cred.type.split("_").join("")` in videoClient.ts line 28. This means the key in packages/app-store/index.ts should match the underscore-removed version (e.g., "kyzon-spacevideo") rather than the original type name.
📚 Learning: 2025-09-01T07:31:00.963Z
Learnt from: nangelina
PR: calcom/cal.com#23486
File: packages/app-store/kyzon-space/config.json:5-5
Timestamp: 2025-09-01T07:31:00.963Z
Learning: In Cal.com's video integration system, credential types (e.g., "kyzon-space_video") are transformed to app names by removing underscores using `cred.type.split("_").join("")` in videoClient.ts line 28. This means the key in packages/app-store/index.ts should match the underscore-removed version (e.g., "kyzon-spacevideo") rather than the original type name. This same pattern is used in other parts of the system like getCalendar.ts.

Applied to files:

  • packages/app-store/_utils/getCalendar.ts
  • packages/lib/videoClient.ts
📚 Learning: 2025-08-05T12:04:29.037Z
Learnt from: din-prajapati
PR: calcom/cal.com#21854
File: packages/app-store/office365calendar/__tests__/unit_tests/SubscriptionManager.test.ts:0-0
Timestamp: 2025-08-05T12:04:29.037Z
Learning: In packages/app-store/office365calendar/lib/CalendarService.ts, the fetcher method in Office365CalendarService class is public, not private. It was specifically changed from private to public in this PR to support proper testing and external access patterns.

Applied to files:

  • packages/app-store/_utils/getCalendar.ts
📚 Learning: 2025-09-01T07:31:00.963Z
Learnt from: nangelina
PR: calcom/cal.com#23486
File: packages/app-store/kyzon-space/config.json:5-5
Timestamp: 2025-09-01T07:31:00.963Z
Learning: In Cal.com's video integration system, credential types (e.g., "kyzon-space_video") are transformed to app names by removing underscores using `cred.type.split("_").join("")` in videoClient.ts line 28. This means the key in packages/app-store/index.ts should match the underscore-removed version (e.g., "kyzon-spacevideo") rather than the original type name.

Applied to files:

  • packages/app-store/_utils/getCalendar.ts
  • packages/lib/videoClient.ts
🧬 Code graph analysis (2)
packages/app-store/_utils/getCalendar.ts (1)
packages/app-store/calendar.services.generated.ts (1)
  • CalendarServiceMap (5-20)
packages/lib/videoClient.ts (1)
packages/app-store/video.adapters.generated.ts (1)
  • VideoApiAdapterMap (5-20)
🔇 Additional comments (4)
packages/lib/videoClient.ts (1)

12-12: Good move: centralized key derivation.

Switching to deriveAppDictKeyFromType aligns lookups with generated map keys and prevents drift.

packages/app-store/_utils/getCalendar.ts (3)

1-1: Good change: unify key derivation.

Using deriveAppDictKeyFromType keeps lookups consistent with generated map keys.


23-25: LGTM; ensure edge-case mappings are covered by tests.

Please add/confirm cases like "ics_feed_calendar" → "ics-feedcalendar" and “exchange2016_calendar” → “exchange2016calendar”.


40-40: Constructor typing: verify all CalendarService implementations accept CredentialForCalendarService.

Previously this was cast; passing the typed credential is preferable but may surface type mismatches in some services.

Run a typecheck locally to confirm no CalendarService constructors require a different shape.

@pull-request-size pull-request-size bot added size/M and removed size/L labels Sep 12, 2025
@anikdhabal anikdhabal enabled auto-merge (squash) September 12, 2025 18:38
@anikdhabal anikdhabal merged commit 5230694 into calcom:main Sep 12, 2025
31 of 35 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app-store area: app store, apps, calendar integrations, google calendar, outlook, lark, apple calendar 🐛 bug Something isn't working community Created by Linear-GitHub Sync Low priority Created by Linear-GitHub Sync ready-for-e2e self-hosting size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

dynamic video adapter import does not work for nextcloudtalk app

2 participants