Register MatrixService in BridgeModule with conditional loading #379

Closed
opened 2026-02-15 07:00:42 +00:00 by jason.woltje · 1 comment
Owner

Summary

Update BridgeModule to register MatrixService alongside DiscordService, with conditional loading based on environment variables.

Implementation

Update apps/api/src/bridge/bridge.module.ts

Both bridges should be optional — load only if configured:

@Module({
  imports: [StitcherModule],
  providers: [
    // Load Discord bridge if DISCORD_BOT_TOKEN is set
    ...(process.env.DISCORD_BOT_TOKEN ? [DiscordService] : []),
    // Load Matrix bridge if MATRIX_ACCESS_TOKEN is set
    ...(process.env.MATRIX_ACCESS_TOKEN ? [MatrixService] : []),
  ],
  exports: [
    ...(process.env.DISCORD_BOT_TOKEN ? [DiscordService] : []),
    ...(process.env.MATRIX_ACCESS_TOKEN ? [MatrixService] : []),
  ],
})
export class BridgeModule {}

Consider: Bridge registry pattern

If more bridges are planned, consider a BridgeRegistry service that discovers and manages all active IChatProvider implementations. Herald and Stitcher would interact with the registry rather than individual services.

Acceptance Criteria

  • MatrixService registered in BridgeModule
  • Conditional loading — no crash if Matrix env vars are missing
  • Both bridges can run simultaneously
  • Tests verify module compilation with/without env vars
  • Discord bridge behavior unchanged

Refs

## Summary Update `BridgeModule` to register `MatrixService` alongside `DiscordService`, with conditional loading based on environment variables. ## Implementation ### Update `apps/api/src/bridge/bridge.module.ts` Both bridges should be optional — load only if configured: ```typescript @Module({ imports: [StitcherModule], providers: [ // Load Discord bridge if DISCORD_BOT_TOKEN is set ...(process.env.DISCORD_BOT_TOKEN ? [DiscordService] : []), // Load Matrix bridge if MATRIX_ACCESS_TOKEN is set ...(process.env.MATRIX_ACCESS_TOKEN ? [MatrixService] : []), ], exports: [ ...(process.env.DISCORD_BOT_TOKEN ? [DiscordService] : []), ...(process.env.MATRIX_ACCESS_TOKEN ? [MatrixService] : []), ], }) export class BridgeModule {} ``` ### Consider: Bridge registry pattern If more bridges are planned, consider a `BridgeRegistry` service that discovers and manages all active `IChatProvider` implementations. Herald and Stitcher would interact with the registry rather than individual services. ## Acceptance Criteria - [ ] MatrixService registered in BridgeModule - [ ] Conditional loading — no crash if Matrix env vars are missing - [ ] Both bridges can run simultaneously - [ ] Tests verify module compilation with/without env vars - [ ] Discord bridge behavior unchanged ## Refs - Current module: `apps/api/src/bridge/bridge.module.ts` - EPIC: #377 - Depends on: #378
jason.woltje added the apiapi labels 2026-02-15 07:00:42 +00:00
jason.woltje added this to the M12-MatrixBridge (0.0.12) milestone 2026-02-15 07:01:51 +00:00
Author
Owner

Completed in commit 771ed48 on branch feature/m12-matrix-bridge.

  • CHAT_PROVIDERS injection token for bridge-agnostic provider array
  • Conditional loading: Discord loads if DISCORD_BOT_TOKEN set, Matrix loads if MATRIX_ACCESS_TOKEN set
  • Tests verify conditional registration behavior
Completed in commit 771ed48 on branch feature/m12-matrix-bridge. - CHAT_PROVIDERS injection token for bridge-agnostic provider array - Conditional loading: Discord loads if DISCORD_BOT_TOKEN set, Matrix loads if MATRIX_ACCESS_TOKEN set - Tests verify conditional registration behavior
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mosaic/stack#379