import { HttpModule } from "@nestjs/axios"; import { Module } from "@nestjs/common"; import { TypeOrmModule } from "@nestjs/typeorm"; import { Invoice } from "../billing/entities/invoice.entity"; import { DocumentsModule } from "../billing/documents/documents.module"; import { CompaniesModule } from "../companies/companies.module"; import { NotificationInboxModule } from "../notification-inbox/notification-inbox.module"; import { NotificationsModule } from "../notifications/notifications.module"; import { EimsAuthService } from "./eims-auth.service"; import { EimsAutoSubmitService } from "./eims-auto-submit.service"; import { EimsBulkRegistrationService } from "./eims-bulk-registration.service"; import { EimsCancellationService } from "./eims-cancellation.service"; import { EimsClientService } from "./eims-client.service"; import { EimsCredentialsProvider } from "./eims-credentials.provider"; import { EimsInvoiceController } from "./eims-invoice.controller"; import { EimsInvoiceRegistrationService } from "./eims-invoice-registration.service"; import { EimsReceiptService } from "./eims-receipt.service"; import { EimsSellerCacheService } from "./eims-seller-cache.service"; import { EimsSignerService } from "./eims-signer.service"; import { EimsWebhookController } from "./eims-webhook.controller"; import { EimsReceipt } from "./entities/eims-receipt.entity"; import { EimsSystemState } from "./entities/eims-system-state.entity"; /** * MoR EIMS e-invoicing: signed transport, authentication, and manual single-invoice registration. * * Exports only what other modules will consume; the credential loader and signer stay internal so * the private key has exactly one user. Nothing here is called from invoice creation. */ @Module({ imports: [ HttpModule.register({ timeout: Number(process.env.EIMS_HTTP_TIMEOUT_MS) || 30_000 }), TypeOrmModule.forFeature([EimsSystemState, Invoice, EimsReceipt]), NotificationInboxModule, NotificationsModule, // For EimsReceiptService.document() — the shared sealed invoice/receipt PDF layout. No domain // deps of its own (StampSettingsService/LogoSettingsService are both @Global), so no cycle. DocumentsModule, // For EimsSellerCacheService's ETradeService — CompaniesModule has a forwardRef cycle with // ShippingLineCompaniesModule -> BillingModule, but nothing in that chain imports EimsModule, // so this stays a plain one-directional import, not a new cycle. CompaniesModule, ], controllers: [EimsInvoiceController, EimsWebhookController], providers: [ EimsCredentialsProvider, EimsSignerService, EimsAuthService, EimsClientService, EimsInvoiceRegistrationService, EimsBulkRegistrationService, EimsAutoSubmitService, EimsCancellationService, EimsReceiptService, EimsSellerCacheService, ], exports: [ EimsAuthService, EimsClientService, EimsInvoiceRegistrationService, EimsBulkRegistrationService, EimsCancellationService, EimsReceiptService, ], }) export class EimsModule {}