Skip to content

Commit e8dbab9

Browse files
feat: replace window.todesktop with official @todesktop/client-core package (calcom#23354)
* feat: replace window.todesktop with official @todesktop/client-core package - Import platform from @todesktop/client-core in _document.tsx - Pass isDesktopApp result via window.calIsDesktopApp to stringified function - Update applyToDesktopClass to use passed-in value instead of window.todesktop - Maintains existing architecture while using official package API Co-Authored-By: peer@cal.com <peer@cal.com> * fix: move ToDesktop detection to client-side to resolve SSR issue - Remove server-side call to platform.todesktop.isDesktopApp() which always returns false - Move detection logic to client-side stringified script using same logic as official package - Maintain client-side detection while ensuring proper functionality in ToDesktop environment Co-Authored-By: peer@cal.com <peer@cal.com> * feat: use official platform.todesktop.isDesktopApp() function - Import platform from @todesktop/client-core in _document.tsx - Call platform.todesktop.isDesktopApp() directly in stringified script - Replace duplicated logic with official package function call - Maintain client-side detection while using official API Co-Authored-By: peer@cal.com <peer@cal.com> * feat: properly use official platform.todesktop.isDesktopApp() function - Call platform.todesktop.isDesktopApp() outside stringified context - Pass result as template variable to avoid SSR issues - Now actually uses the official @todesktop/client-core package - Eliminates duplicated detection logic as requested Co-Authored-By: peer@cal.com <peer@cal.com> * fix: add SSR safety guards around platform.todesktop.isDesktopApp() call - Wrap platform.todesktop.isDesktopApp() in try/catch to prevent SSR crashes - Return false as fallback if library touches browser globals during SSR - Addresses keithwillcode's comment about SSR safety concerns Co-Authored-By: peer@cal.com <peer@cal.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
1 parent cdcc04c commit e8dbab9

4 files changed

Lines changed: 75 additions & 1 deletion

File tree

apps/web/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@
7676
"@stripe/stripe-js": "^1.35.0",
7777
"@tanstack/react-query": "^5.17.15",
7878
"@team-plain/typescript-sdk": "^5.9.0",
79+
"@todesktop/client-core": "^1.20.0",
7980
"@types/turndown": "^5.0.1",
8081
"@upstash/redis": "^1.35.2",
8182
"@vercel/edge-config": "^0.1.1",

apps/web/pages/_applyThemeForDocument.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ export const applyTheme = function () {
6262
export const applyToDesktopClass = function () {
6363
try {
6464
const onReady = () => {
65-
if (typeof window !== "undefined" && window.todesktop && document.documentElement) {
65+
if (typeof window !== "undefined" && window.calIsDesktopApp && document.documentElement) {
6666
document.documentElement.classList.add("todesktop");
6767
} else if (document.documentElement) {
6868
return;

apps/web/pages/_document.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { platform } from "@todesktop/client-core";
12
import type { IncomingMessage } from "http";
23
import { dir } from "i18next";
34
import type { DocumentContext, DocumentProps } from "next/document";
@@ -37,6 +38,14 @@ class MyDocument extends Document<Props> {
3738
const newLocale = this.props.newLocale || "en";
3839
const newDir = dir(newLocale);
3940

41+
const isDesktopApp = (() => {
42+
try {
43+
return platform.todesktop.isDesktopApp();
44+
} catch {
45+
return false;
46+
}
47+
})();
48+
4049
return (
4150
<Html
4251
lang={newLocale}
@@ -49,6 +58,7 @@ class MyDocument extends Document<Props> {
4958
dangerouslySetInnerHTML={{
5059
__html: `
5160
window.calNewLocale = "${newLocale}";
61+
window.calIsDesktopApp = ${isDesktopApp};
5262
(${applyTheme.toString()})();
5363
(${applyToDesktopClass.toString()})();
5464
`,

yarn.lock

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4049,6 +4049,7 @@ __metadata:
40494049
"@tanstack/react-query": ^5.17.15
40504050
"@team-plain/typescript-sdk": ^5.9.0
40514051
"@testing-library/react": ^13.3.0
4052+
"@todesktop/client-core": ^1.20.0
40524053
"@types/accept-language-parser": 1.5.2
40534054
"@types/async": ^3.2.15
40544055
"@types/bcryptjs": ^2.4.2
@@ -16847,6 +16848,59 @@ __metadata:
1684716848
languageName: node
1684816849
linkType: hard
1684916850

16851+
"@todesktop/client-core@npm:^1.20.0":
16852+
version: 1.20.0
16853+
resolution: "@todesktop/client-core@npm:1.20.0"
16854+
dependencies:
16855+
"@todesktop/client-electron-types": ^28.0.0
16856+
"@todesktop/client-electron-updater-types": ^5.2.3
16857+
"@todesktop/client-todesktop-runtime-types": 1.5.7-beta.2
16858+
"@todesktop/client-util": ^1.4.0
16859+
"@types/node": ^18.11.8
16860+
checksum: ee1ba688266b5f88dc570943cae29254e49316a7068fd465d5d01a07ca6a98b1cbec18870fd1c6a8e0588d827b87f52401f088fefb1ab609206ed1496f47dcf2
16861+
languageName: node
16862+
linkType: hard
16863+
16864+
"@todesktop/client-electron-types@npm:^28.0.0":
16865+
version: 28.0.0
16866+
resolution: "@todesktop/client-electron-types@npm:28.0.0"
16867+
checksum: dfbac24ba0bd91c06e68467c6aa8cc173f6ee0a5bb4ce600f2978ac1740b12f78c51b320e91c41c524afd7fd0cd872b70d76a4ff4655fd2deae69478c751862f
16868+
languageName: node
16869+
linkType: hard
16870+
16871+
"@todesktop/client-electron-updater-types@npm:^5.2.3":
16872+
version: 5.3.0
16873+
resolution: "@todesktop/client-electron-updater-types@npm:5.3.0"
16874+
checksum: cc573d96d7450bcb0b1e3fd3c046fc99ffd994141185104c42527675f8833048488cc1488b6a93bc2c163f8c59a28837378d73dbb91028827e8819c5e9ca0a0a
16875+
languageName: node
16876+
linkType: hard
16877+
16878+
"@todesktop/client-todesktop-runtime-types@npm:1.5.7-beta.2":
16879+
version: 1.5.7-beta.2
16880+
resolution: "@todesktop/client-todesktop-runtime-types@npm:1.5.7-beta.2"
16881+
checksum: 063144cdb77788938aa64869825f385010d98041267e9bd5d2c2650e59603713c72f94368172080285185d82321c546aae5bbfa9808ab0682eace6c6e9c83837
16882+
languageName: node
16883+
linkType: hard
16884+
16885+
"@todesktop/client-todesktop-runtime-types@npm:^1.5.7":
16886+
version: 1.5.7
16887+
resolution: "@todesktop/client-todesktop-runtime-types@npm:1.5.7"
16888+
checksum: 826ad20608bc44d21c4ab20e6c57b5b57c9ac6cc270248652ce33a0741f4a6a8ee1dcfda06e674b51d4e2c1c25fec9bece0b09b0793969ec1407b874605d1cd9
16889+
languageName: node
16890+
linkType: hard
16891+
16892+
"@todesktop/client-util@npm:^1.4.0":
16893+
version: 1.4.0
16894+
resolution: "@todesktop/client-util@npm:1.4.0"
16895+
dependencies:
16896+
"@todesktop/client-electron-types": ^28.0.0
16897+
"@todesktop/client-electron-updater-types": ^5.2.3
16898+
"@todesktop/client-todesktop-runtime-types": ^1.5.7
16899+
nanoid: ^4.0.2
16900+
checksum: b0e81c3c2477eb382c88b692b9243b1e8674560fc483cbd4dc8ffed08090d559f335440d5d3d0132a2332d6d137514f80a39c52b82e058a6b83ae4dda25f6910
16901+
languageName: node
16902+
linkType: hard
16903+
1685016904
"@todesktop/tailwind-variants@npm:^1.0.0":
1685116905
version: 1.0.1
1685216906
resolution: "@todesktop/tailwind-variants@npm:1.0.1"
@@ -35439,6 +35493,15 @@ __metadata:
3543935493
languageName: node
3544035494
linkType: hard
3544135495

35496+
"nanoid@npm:^4.0.2":
35497+
version: 4.0.2
35498+
resolution: "nanoid@npm:4.0.2"
35499+
bin:
35500+
nanoid: bin/nanoid.js
35501+
checksum: 747c399cea4664dd0be1d0ec498ffd1ef8f1f5221676fc8b577e3f46f66d9afcddb9595d63d19a2e78d0bc6cc33984f65e66bf1682c850b9e26288883d96b53f
35502+
languageName: node
35503+
linkType: hard
35504+
3544235505
"napi-build-utils@npm:^2.0.0":
3544335506
version: 2.0.0
3544435507
resolution: "napi-build-utils@npm:2.0.0"

0 commit comments

Comments
 (0)