@cfxlabsinc/b2b-services
    Preparing search index...
    CUSTOMER_EMAIL_EVENT_TEMPLATES: {
        "account.ledgerAccount.created": "LEDGER_ACCOUNT";
        "card.cardTransaction.statusUpdated": "CARD_TRANSACTION";
        "deposit.deposit.created": "DEPOSIT";
        "deposit.deposit.statusUpdated": "DEPOSIT";
        "deposit.manualMint.created": "DEPOSIT";
        "deposit.manualMint.statusUpdated": "DEPOSIT";
        "identity.identity.statusUpdated": "IDENTITY";
        "ledger.account.transfer.statusUpdated": "TRANSFER";
        "organization.organization.created": "ORGANIZATION";
        "organization.organization.statusUpdated": "ORGANIZATION";
        "paymentInstrument.swiftWire.statusUpdated": "PAYMENT_INSTRUMENT";
        "paymentInstrument.usAch.statusUpdated": "PAYMENT_INSTRUMENT";
        "paymentInstrument.usWire.statusUpdated": "PAYMENT_INSTRUMENT";
        "withdrawal.withdrawal.statusUpdated": "WITHDRAW";
    } = ...

    Event → template-key map: which customer events trigger an email, and which template key each one renders. Ported from the <Domain>Notification- Service classes, which pass exactly these event names to CustomerNotificationService.notify().

    Keys are checked against the registry's CustomerEventName union, so a typo or a registry rename fails typecheck here instead of becoming an email that silently never sends.

    Deliberately absent:

    • redemption.transfer.statusUpdated — dual-published byte-identical alongside ledger.account.transfer.statusUpdated (see the registry); mapping both would send every TRANSFER email twice.
    • paymentInstrument.* beyond swiftWire/usAch/usWire — only those three types notify today (PaymentInstrumentNotificationService's NotifiablePaymentInstrumentEvent).
    • account.ledgerAccount.statusUpdated / .balanceUpdated — only account creation notifies (LedgerAccountNotificationService).

    This is the single source of truth for event → template mapping — the subscription carries no SNS filter policy (like every other consumer of the topic), so nothing else has to stay in sync with it. A new template key requires a new entry here or in INTERNAL_EMAIL_EVENT_TEMPLATES.

    Type Declaration

    • Readonlyaccount.ledgerAccount.created: "LEDGER_ACCOUNT"
    • Readonlycard.cardTransaction.statusUpdated: "CARD_TRANSACTION"
    • Readonlydeposit.deposit.created: "DEPOSIT"
    • Readonlydeposit.deposit.statusUpdated: "DEPOSIT"
    • Readonlydeposit.manualMint.created: "DEPOSIT"
    • Readonlydeposit.manualMint.statusUpdated: "DEPOSIT"
    • Readonlyidentity.identity.statusUpdated: "IDENTITY"
    • Readonlyledger.account.transfer.statusUpdated: "TRANSFER"
    • Readonlyorganization.organization.created: "ORGANIZATION"
    • Readonlyorganization.organization.statusUpdated: "ORGANIZATION"
    • ReadonlypaymentInstrument.swiftWire.statusUpdated: "PAYMENT_INSTRUMENT"
    • ReadonlypaymentInstrument.usAch.statusUpdated: "PAYMENT_INSTRUMENT"
    • ReadonlypaymentInstrument.usWire.statusUpdated: "PAYMENT_INSTRUMENT"
    • Readonlywithdrawal.withdrawal.statusUpdated: "WITHDRAW"