// @effect-diagnostics strictBooleanExpressions:off import { collectEffectEndpoints, type EffectApiModule, extractHttpApiFromModule, toOperationContractSources, } from '@modern-js/bff-effect/effect'; import type { ServerPluginAPI } from '@modern-js/server-core'; import type { resolveOperationProducer } from '@modern-js/server-runtime-extensions/bff-policy/node'; import { logger } from '@modern-js/utils'; import { HttpApi } from 'effect/http-api'; import { resolveAdapterCrossProjectPolicy } from '../cross-project-policy'; import type { ResolvedCrossProjectPolicy } from '../cross-project-policy/evaluation'; export function resolveEffectServerCrossProjectPolicy( api: ServerPluginAPI, prefix: string, mod: EffectApiModule | null, producer?: ReturnType, ): Promise { const contractSourcesPromise = mod === null ? Promise.resolve([]) : Promise.resolve() .then(() => extractHttpApiFromModule(mod, HttpApi.isHttpApi)) .then(effectApi => { if (effectApi === null) { return []; } const reflect: Parameters[0] = ( apiValue, handlers, ) => { if (!HttpApi.isHttpApi(apiValue)) { throw new Error( '[BFF][Effect] Endpoint reflection received a non-HttpApi value.', ); } HttpApi.reflect(apiValue, { onGroup: handlers.onGroup ?? (() => {}), onEndpoint: handlers.onEndpoint, }); }; return toOperationContractSources( collectEffectEndpoints(reflect, effectApi, prefix), ); }) .catch(error => { logger.warn( `[BFF][Effect] Failed reflect HttpApi endpoints cross-project policy: ${String(error)}`, ); return []; }); return contractSourcesPromise.then(contractSources => { const policy = resolveAdapterCrossProjectPolicy( api, contractSources, producer, ); if (policy?.enabled === true && contractSources.length === 0) { logger.warn( '[BFF][Effect] Cross-project policy enabled but no HttpApi endpoints could be reflected; requests fail operation-contract matching unless allowUnknownOperations is enabled.', ); } return policy; }); }