You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.6 KiB

STEP 02 Replace local auth wiring with swissoid-back loaders

Integrated the shared swissoidAuthLoadDict and express middleware handles, rebuilding the DI container so the service mounts SwissOID routes through express-knifey. This removes the bespoke loaders and ensures session/cookie services are injected into the Apollo context.

Loader rewrite (biblio-stats-graphql/src/loaders/index.ts)

import 'dotenv/config';

import statModel from './statsModel';
import statService from './statsService';
import userModel from './userModel';
import userService from './userService';
import localAppConfigMap from '../config/appConfig';
import { mysqlReqLoader as mysqlReq, mysqlMultipleReqLoader as mysqlMultipleReq } from 'mysql-oh-wait-utils';
import resolvers from '../graphql/resolvers';
import graphqlSchema from '../graphql/schema';
import coreToDomain from './coreToDomain';
import logger from './logger';

import DiContainer, { addMergeableConfigMap, AppConfigNamespace, LoadDict, mergeLDs } from 'di-why';
import { apolloContextLDEGen, apolloStandaloneServerModularLDGen, createGraphqlMiddlewareConfig } from 'graphql-knifey';
import { swissoidAuthLoadDict, SWISSOID_MIDDLEWARE } from 'swissoid-back';

const appConfigMapNamespace: AppConfigNamespace = {
  namespace: 'biblioStatsAppConfigMap',
  priority: 61,
};

const middlewareConfig = createGraphqlMiddlewareConfig({
  global: [SWISSOID_MIDDLEWARE.oidcStandardRoutes],
});

const loadDict: LoadDict = mergeLDs(
  swissoidAuthLoadDict,
  apolloStandaloneServerModularLDGen({
    resolvers,
    typeDefs: graphqlSchema,
    middlewareConfig,
  }),
  {
    mysqlReq,
    mysqlMultipleReq,
    logger,
    statModel,
    statService,
    coreToDomain,
    userModel,
    userService,
    apolloContext: apolloContextLDEGen({
      statService: 'statService',
      userService: 'userService',
      coreToDomain: 'coreToDomain',
      sessionService: 'sessionService',
      cookieManager: 'cookieManager',
      appConfig: 'appConfig',
      logger: 'logger',
    }),
    ...addMergeableConfigMap(localAppConfigMap, appConfigMapNamespace),
  }
);

const diContainer = new DiContainer({ load: loadDict });

export default diContainer;

Express launcher (biblio-stats-graphql/src/index.ts)

await di.load('expressLauncher');

Deleted the redundant SwissOID stubs (src/loaders/tokenAuthService.ts, src/loaders/swissoidAuthMiddleware.ts, src/loaders/swissoidOidcRoutes.ts, src/loaders/apolloContextWithSwissoidAuth.ts, src/middleware/swissoidAuth.ts, src/setupAuth.ts) since the shared package now owns the flow.