fix: export guard dependencies so cross-module @UseGuards resolves

NestJS resolves a guard referenced via @UseGuards(SomeGuard) using the
consuming module's injector, not the guard's own declaring module's
injector. OidcAuthGuard and TripMembershipGuard are shared across
several feature modules, so every constructor dependency they need
(UsersRepository/UsersService, TripMembersRepository, etc.) must be
re-exported by AuthModule/TripsLibModule/UsersLibModule, not just the
guard classes themselves. Found via the Phase 02 end-to-end smoke test
against a mocked IdP, which failed to boot the API before this fix.
This commit is contained in:
Bastian Wagner
2026-08-17 16:10:27 +02:00
parent 60e09d5050
commit 854df5bb2d
3 changed files with 17 additions and 4 deletions

View File

@@ -1,11 +1,12 @@
import { Module } from '@nestjs/common'; import { Global, Module } from '@nestjs/common';
import { UsersLibModule } from '../../users/src'; import { UsersLibModule } from '../../users/src';
import { OidcDiscoveryService } from './oidc-discovery.service'; import { OidcDiscoveryService } from './oidc-discovery.service';
import { OidcAuthGuard } from './oidc-auth.guard'; import { OidcAuthGuard } from './oidc-auth.guard';
@Global()
@Module({ @Module({
imports: [UsersLibModule], imports: [UsersLibModule],
providers: [OidcDiscoveryService, OidcAuthGuard], providers: [OidcDiscoveryService, OidcAuthGuard],
exports: [OidcDiscoveryService, OidcAuthGuard], exports: [OidcDiscoveryService, OidcAuthGuard, UsersLibModule],
}) })
export class AuthModule {} export class AuthModule {}

View File

@@ -1,4 +1,4 @@
import { Module } from '@nestjs/common'; import { Global, Module } from '@nestjs/common';
import { DatabaseModule } from '../../database/src'; import { DatabaseModule } from '../../database/src';
import { TripsRepository } from './trips.repository'; import { TripsRepository } from './trips.repository';
import { TripsService } from './trips.service'; import { TripsService } from './trips.service';
@@ -14,6 +14,7 @@ import { TravelersService } from './travelers.service';
import { TripPreferenceOverridesRepository } from './trip-preference-overrides.repository'; import { TripPreferenceOverridesRepository } from './trip-preference-overrides.repository';
import { TripPreferenceOverridesService } from './trip-preference-overrides.service'; import { TripPreferenceOverridesService } from './trip-preference-overrides.service';
@Global()
@Module({ @Module({
imports: [DatabaseModule], imports: [DatabaseModule],
providers: [ providers: [
@@ -32,12 +33,18 @@ import { TripPreferenceOverridesService } from './trip-preference-overrides.serv
TripPreferenceOverridesService, TripPreferenceOverridesService,
], ],
exports: [ exports: [
TripsRepository,
TripsService, TripsService,
TripSettingsRepository,
TripSettingsService, TripSettingsService,
TripMembersRepository,
TripMembersService, TripMembersService,
TripMembershipGuard, TripMembershipGuard,
TripInvitationsRepository,
TripInvitationsService, TripInvitationsService,
TravelersRepository,
TravelersService, TravelersService,
TripPreferenceOverridesRepository,
TripPreferenceOverridesService, TripPreferenceOverridesService,
], ],
}) })

View File

@@ -13,6 +13,11 @@ import { UserPreferencesService } from './user-preferences.service';
UserPreferencesRepository, UserPreferencesRepository,
UserPreferencesService, UserPreferencesService,
], ],
exports: [UsersService, UserPreferencesService], exports: [
UsersRepository,
UsersService,
UserPreferencesRepository,
UserPreferencesService,
],
}) })
export class UsersLibModule {} export class UsersLibModule {}