import type { GeneratorPlugin } from '@open-mercato/shared/modules/generators' function buildMfaProvidersOutput({ importSection, entriesLiteral }: { importSection: string; entriesLiteral: string }): string { return `// AUTO-GENERATED by mercato generate registry ${importSection ? `${importSection}\n` : ''}type SecurityMfaProviderEntry = { moduleId: string; providers: unknown[] } export const securityMfaProviderEntries: SecurityMfaProviderEntry[] = [ ${entriesLiteral ? ` ${entriesLiteral}\n` : ''}] ` } function buildSudoOutput({ importSection, entriesLiteral }: { importSection: string; entriesLiteral: string }): string { return `// AUTO-GENERATED by mercato generate registry import type { SecuritySudoTarget, SecuritySudoTargetEntry } from '@open-mercato/enterprise/modules/security' ${importSection ? `\n${importSection}\n` : '\n'} type SecuritySudoTargetEntryRaw = { moduleId: string; targets: Array> } const entriesRaw: SecuritySudoTargetEntryRaw[] = [ ${entriesLiteral ? ` ${entriesLiteral}\n` : ''}] export const securitySudoTargetEntries: SecuritySudoTargetEntry[] = entriesRaw.map((entry) => ({ moduleId: entry.moduleId, targets: entry.targets as SecuritySudoTarget[], })) ` } const mfaProvidersPlugin: GeneratorPlugin = { id: 'security.mfa-providers', conventionFile: 'security.mfa-providers.ts', importPrefix: 'SECURITY_MFA_PROVIDERS', configExpr: (importName: string, moduleId: string) => `{ moduleId: '${moduleId}', providers: ((${importName}.default ?? ${importName}.mfaProviders ?? []) as unknown[]) }`, outputFileName: 'security-mfa-providers.generated.ts', buildOutput: buildMfaProvidersOutput, bootstrapRegistration: { entriesExportName: 'securityMfaProviderEntries', registrationImports: [ `import { registerSecurityMfaProviderEntries } from '@open-mercato/enterprise/modules/security/lib/module-security-registry'`, ], buildCall: (name: string) => `registerSecurityMfaProviderEntries(${name})`, }, } const sudoPlugin: GeneratorPlugin = { id: 'security.sudo', conventionFile: 'security.sudo.ts', importPrefix: 'SECURITY_SUDO', configExpr: (importName: string, moduleId: string) => `{ moduleId: '${moduleId}', targets: ((${importName}.default ?? ${importName}.sudoTargets ?? []) as Array>) }`, outputFileName: 'security-sudo.generated.ts', buildOutput: buildSudoOutput, bootstrapRegistration: { entriesExportName: 'securitySudoTargetEntries', registrationImports: [ `import { registerSecuritySudoTargetEntries } from '@open-mercato/enterprise/modules/security/lib/module-security-registry'`, ], buildCall: (name: string) => `registerSecuritySudoTargetEntries(${name})`, }, } export const generatorPlugins: GeneratorPlugin[] = [mfaProvidersPlugin, sudoPlugin] export default generatorPlugins