diff --git a/.changeset/tough-students-remain.md b/.changeset/tough-students-remain.md new file mode 100644 index 0000000000000..af9051a4a2822 --- /dev/null +++ b/.changeset/tough-students-remain.md @@ -0,0 +1,5 @@ +--- +'@rocket.chat/desktop-api': major +--- + +Adds a new package (`@rocket.chat/desktop-api`) to interface the desktop app's injected context diff --git a/apps/meteor/client/definitions/global.d.ts b/apps/meteor/client/definitions/global.d.ts index 58e383ee58d8b..b19bfe2db3b06 100644 --- a/apps/meteor/client/definitions/global.d.ts +++ b/apps/meteor/client/definitions/global.d.ts @@ -1,4 +1,4 @@ -import type { IRocketChatDesktop } from './IRocketChatDesktop'; +import type { IRocketChatDesktop } from '@rocket.chat/desktop-api'; declare global { // eslint-disable-next-line @typescript-eslint/naming-convention diff --git a/apps/meteor/package.json b/apps/meteor/package.json index 020480133e41b..e6c75859e4314 100644 --- a/apps/meteor/package.json +++ b/apps/meteor/package.json @@ -73,6 +73,7 @@ "@babel/register": "~7.25.9", "@faker-js/faker": "~8.0.2", "@playwright/test": "^1.52.0", + "@rocket.chat/desktop-api": "workspace:~", "@rocket.chat/eslint-config": "workspace:^", "@rocket.chat/jest-presets": "workspace:~", "@rocket.chat/livechat": "workspace:^", diff --git a/packages/desktop-api/.eslintrc.json b/packages/desktop-api/.eslintrc.json new file mode 100644 index 0000000000000..a83aeda48e66d --- /dev/null +++ b/packages/desktop-api/.eslintrc.json @@ -0,0 +1,4 @@ +{ + "extends": ["@rocket.chat/eslint-config"], + "ignorePatterns": ["**/dist"] +} diff --git a/packages/desktop-api/package.json b/packages/desktop-api/package.json new file mode 100644 index 0000000000000..62a95b6f218d0 --- /dev/null +++ b/packages/desktop-api/package.json @@ -0,0 +1,27 @@ +{ + "$schema": "https://www.schemastore.org/package", + "name": "@rocket.chat/desktop-api", + "version": "0.0.1", + "type": "module", + "exports": { + ".": { + "default": "./dist/index.js", + "types": "./dist/index.d.ts" + } + }, + "types": "./dist/index.d.ts", + "scripts": { + "build": "rimraf dist && tsc -p tsconfig.json", + "lint": "eslint", + "typecheck": "tsc -p tsconfig.json --noEmit" + }, + "devDependencies": { + "@rocket.chat/eslint-config": "workspace:~", + "eslint": "~8.45.0", + "rimraf": "~6.0.1", + "typescript": "~5.9.2" + }, + "volta": { + "extends": "../../package.json" + } +} diff --git a/apps/meteor/client/definitions/IRocketChatDesktop.ts b/packages/desktop-api/src/index.ts similarity index 82% rename from apps/meteor/client/definitions/IRocketChatDesktop.ts rename to packages/desktop-api/src/index.ts index b91a23ac1124f..7a3269c2da37d 100644 --- a/apps/meteor/client/definitions/IRocketChatDesktop.ts +++ b/packages/desktop-api/src/index.ts @@ -1,16 +1,18 @@ -type ServerInfo = { +export type ServerInfo = { version: string; }; -type Badge = '•' | number; +export type Badge = '•' | number; -type ThemeAppearance = 'dark' | 'light' | 'auto' | 'high-contrast' | undefined; +export type ThemeAppearance = 'dark' | 'light' | 'auto' | 'high-contrast' | undefined; -type VideoCallWindowOptions = { +export type VideoChatWindowOptions = { providerName?: string | undefined; }; -type OutlookEventsResponse = { status: 'success' | 'canceled' }; +export type OutlookEventsResponse = { + status: 'success' | 'canceled'; +}; export interface IRocketChatDesktop { onReady: (cb: (serverInfo: ServerInfo) => void) => void; @@ -37,7 +39,7 @@ export interface IRocketChatDesktop { ) => Promise; destroyNotification: (id: unknown) => void; getInternalVideoChatWindowEnabled: () => boolean; - openInternalVideoChatWindow: (url: string, options: VideoCallWindowOptions) => void; + openInternalVideoChatWindow: (url: string, options: VideoChatWindowOptions) => void; setGitCommitHash: (gitCommitHash: string) => void; writeTextToClipboard: (text: string) => void; getOutlookEvents: (date: Date) => Promise; diff --git a/packages/desktop-api/tsconfig.json b/packages/desktop-api/tsconfig.json new file mode 100644 index 0000000000000..edf9448839107 --- /dev/null +++ b/packages/desktop-api/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "@rocket.chat/tsconfig/client.json", + "compilerOptions": { + "target": "es2024", + "module": "node20", + "moduleResolution": "node16", + "rootDir": "./src", + "outDir": "./dist", + "declarationMap": false, + "sourceMap": false + }, + "include": ["src"] +} diff --git a/yarn.lock b/yarn.lock index 7d89359f433ee..4ffdf689acb6b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7250,6 +7250,17 @@ __metadata: languageName: unknown linkType: soft +"@rocket.chat/desktop-api@workspace:packages/desktop-api, @rocket.chat/desktop-api@workspace:~": + version: 0.0.0-use.local + resolution: "@rocket.chat/desktop-api@workspace:packages/desktop-api" + dependencies: + "@rocket.chat/eslint-config": "workspace:~" + eslint: "npm:~8.45.0" + rimraf: "npm:~6.0.1" + typescript: "npm:~5.9.2" + languageName: unknown + linkType: soft + "@rocket.chat/emitter@npm:~0.31.25": version: 0.31.25 resolution: "@rocket.chat/emitter@npm:0.31.25" @@ -7885,6 +7896,7 @@ __metadata: "@rocket.chat/core-typings": "workspace:^" "@rocket.chat/cron": "workspace:^" "@rocket.chat/css-in-js": "npm:~0.31.25" + "@rocket.chat/desktop-api": "workspace:~" "@rocket.chat/emitter": "npm:~0.31.25" "@rocket.chat/eslint-config": "workspace:^" "@rocket.chat/favicon": "workspace:^"