diff --git a/packages/backend/server/src/__tests__/e2e/apps/flavors.spec.ts b/packages/backend/server/src/__tests__/e2e/apps/flavors.spec.ts index cf1394c8983d7..8c970c9a22f66 100644 --- a/packages/backend/server/src/__tests__/e2e/apps/flavors.spec.ts +++ b/packages/backend/server/src/__tests__/e2e/apps/flavors.spec.ts @@ -3,6 +3,7 @@ import { getCurrentUserQuery } from '@affine/graphql'; import { JobExecutor } from '../../../base/job/queue/executor'; import { JobHandlerScanner } from '../../../base/job/queue/scanner'; import { DatabaseDocReader, DocReader } from '../../../core/doc'; +import { RealtimeGateway } from '../../../core/realtime/gateway'; import { createApp } from '../create-app'; import { e2e } from '../test'; @@ -43,6 +44,7 @@ e2e('should init worker service', async t => { const res = await app.GET('/info').expect(200); t.is(res.body.flavor, 'worker'); t.truthy(app.get(JobHandlerScanner).getHandler('indexer.indexDoc')); + t.throws(() => app.get(RealtimeGateway)); await t.throwsAsync(app.gql({ query: getCurrentUserQuery })); await app.PUT('/api/storage/upload').expect(404); @@ -65,6 +67,7 @@ e2e('should init graphql service', async t => { const user = await app.gql({ query: getCurrentUserQuery }); t.is(user.currentUser, null); + t.truthy(app.get(RealtimeGateway)); }); }); diff --git a/packages/backend/server/src/app.module.ts b/packages/backend/server/src/app.module.ts index 7bd8bf2d83fba..5db32bcff4b16 100644 --- a/packages/backend/server/src/app.module.ts +++ b/packages/backend/server/src/app.module.ts @@ -45,7 +45,7 @@ import { NotificationModule } from './core/notification'; import { PermissionModule } from './core/permission'; import { QueueDashboardModule } from './core/queue-dashboard'; import { QuotaModule } from './core/quota'; -import { RealtimeModule } from './core/realtime'; +import { RealtimeGatewayModule, RealtimeModule } from './core/realtime'; import { SelfhostModule } from './core/selfhost'; import { StaticFileModule } from './core/static-files'; import { StorageApiModule, StorageWorkerModule } from './core/storage'; @@ -167,6 +167,7 @@ export function buildAppModule(env: Env) { factor // basic .use(...FunctionalityModules) + .useIf(() => !workerOnly, RealtimeGatewayModule) // online roles publish indexer events; only the worker registers consumers .useIf(() => env.isApi || env.isFrontend, IndexerModule) diff --git a/packages/backend/server/src/core/realtime/index.ts b/packages/backend/server/src/core/realtime/index.ts index 667c2bd8bdd95..d227cb707cbf7 100644 --- a/packages/backend/server/src/core/realtime/index.ts +++ b/packages/backend/server/src/core/realtime/index.ts @@ -7,16 +7,17 @@ import { RealtimeRegistry } from './registry'; @Global() @Module({ - providers: [ - RealtimeRegistry, - RealtimePublisher, - RealtimeGateway, - RealtimeRegistryCompletenessChecker, - ], + providers: [RealtimeRegistry, RealtimePublisher], exports: [RealtimeRegistry, RealtimePublisher], }) export class RealtimeModule {} +@Module({ + imports: [RealtimeModule], + providers: [RealtimeGateway, RealtimeRegistryCompletenessChecker], +}) +export class RealtimeGatewayModule {} + export { RealtimeRegistryCompletenessChecker } from './completeness'; export { registerRealtimeLiveQuery } from './provider'; export { RealtimePublisher } from './publisher';