fix(server): realtime module not loaded (#14952)

#### PR Dependency Tree


* **PR #14952** 👈

This tree was auto-generated by
[Charcoal](https://github.com/danerwilliams/charcoal)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Refactor**
* Optimized workspace invite link fetching by separating it from general
workspace configuration queries for improved performance.
* Reorganized transcription-related backend modules to better separate
concerns and enable real-time functionality.

* **Chores**
* Updated generated GraphQL types and iOS query definitions to reflect
API changes.

[![Review Change
Stack](https://storage.googleapis.com/coderabbit_public_assets/review-stack-in-coderabbit-ui.svg)](https://app.coderabbit.ai/change-stack/toeverything/AFFiNE/pull/14952)

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
DarkSky
2026-05-12 18:54:42 +08:00
committed by GitHub
parent ac6d0d35af
commit a1d150a748
18 changed files with 246 additions and 104 deletions
@@ -52,7 +52,6 @@ export class WorkspaceShareSetting extends Entity {
this.enableAi$.next(value.enableAi);
this.enableSharing$.next(value.enableSharing);
this.enableUrlPreview$.next(value.enableUrlPreview);
this.inviteLink$.next(value.inviteLink);
}
}),
catchErrorInto(this.error$, error => {
@@ -64,6 +63,22 @@ export class WorkspaceShareSetting extends Entity {
})
);
revalidateInviteLink = effect(
exhaustMap(() => {
return fromPromise(signal =>
this.store.fetchInviteLink(this.workspaceService.workspace.id, signal)
).pipe(
smartRetry(),
tap(value => {
this.inviteLink$.next(value);
}),
catchErrorInto(this.error$, error => {
logger.error('Failed to fetch workspace invite link', error);
})
);
})
);
async waitForRevalidation(signal?: AbortSignal) {
this.revalidate();
await this.isLoading$.waitFor(isLoading => !isLoading, signal);
@@ -95,5 +110,6 @@ export class WorkspaceShareSetting extends Entity {
override dispose(): void {
this.revalidate.unsubscribe();
this.revalidateInviteLink.unsubscribe();
}
}
@@ -1,6 +1,7 @@
import type { WorkspaceServerService } from '@affine/core/modules/cloud';
import {
getWorkspaceConfigQuery,
getWorkspaceInviteLinkQuery,
setEnableAiMutation,
setEnableSharingMutation,
setEnableUrlPreviewMutation,
@@ -28,6 +29,22 @@ export class WorkspaceShareSettingStore extends Store {
return data.workspace;
}
async fetchInviteLink(workspaceId: string, signal?: AbortSignal) {
if (!this.workspaceServerService.server) {
throw new Error('No Server');
}
const data = await this.workspaceServerService.server.gql({
query: getWorkspaceInviteLinkQuery,
variables: {
id: workspaceId,
},
context: {
signal,
},
});
return data.workspace.inviteLink;
}
async updateWorkspaceEnableAi(
workspaceId: string,
enableAi: boolean,