@cfxlabsinc/b2b-services
    Preparing search index...

    Variable internalEventsConst

    internalEvents: {
        "backoffice.achBatch.created": { data: TObject<{ id: TString }> };
        "backoffice.achBatch.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [
                            TLiteral<"CREATED">,
                            TLiteral<"PROCESSING">,
                            TLiteral<"PROCESSED">,
                            TLiteral<"DELETED">,
                        ],
                    >;
                },
            >;
        };
        "backoffice.achFile.created": { data: TObject<{ id: TString }> };
        "backoffice.achFile.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [TLiteral<"CREATED">, TLiteral<"SUBMITTED">, TLiteral<"ARCHIVED">],
                    >;
                },
            >;
        };
        "backoffice.bankInternalTransfer.created": {
            data: TObject<{ id: TString }>;
        };
        "backoffice.bankInternalTransfer.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [TLiteral<"PENDING">, TLiteral<"COMPLETED">, TLiteral<"FAILED">],
                    >;
                },
            >;
        };
        "backoffice.bankTransaction.created": {
            data: TObject<
                {
                    amount: TString;
                    bankId: TString;
                    description: TString;
                    id: TString;
                    type: TUnion<[TLiteral<"CREDIT">, TLiteral<"DEBIT">]>;
                },
            >;
        };
        "backoffice.manualMint.created": { data: TObject<{ id: TString }> };
        "backoffice.manualMint.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [
                            TLiteral<"CREATED">,
                            TLiteral<"PROCESSING">,
                            TLiteral<"COMPLETED">,
                            TLiteral<"FAILED">,
                        ],
                    >;
                },
            >;
        };
        "backoffice.wireBatch.created": { data: TObject<{ id: TString }> };
        "backoffice.wireBatch.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [
                            TLiteral<"CREATED">,
                            TLiteral<"PROCESSING">,
                            TLiteral<"SUBMITTED">,
                            TLiteral<"DELETED">,
                        ],
                    >;
                },
            >;
        };
        "backoffice.wireEmail.reconciled": {
            data: TObject<
                {
                    bankTransactionId: TString;
                    ffcMemo: TOptional<TString>;
                    wireEmailId: TString;
                },
            >;
        };
        "backoffice.wireFile.created": { data: TObject<{ id: TString }> };
        "backoffice.wireFile.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [TLiteral<"CREATED">, TLiteral<"SUBMITTED">, TLiteral<"ARCHIVED">],
                    >;
                },
            >;
        };
        "customer.feeTransfer.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [
                            TLiteral<"PENDING">,
                            TLiteral<"SUCCEEDED">,
                            TLiteral<"FAILED">,
                            TLiteral<"CANCELLED">,
                        ],
                    >;
                },
            >;
        };
        "ledger.account.withdrawal.created": { data: TObject<{ id: TString }> };
        "ledger.account.withdrawal.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [
                            TLiteral<"CREATED">,
                            TLiteral<"PENDING">,
                            TLiteral<"COMMITTED">,
                            TLiteral<"VOIDED">,
                        ],
                    >;
                },
            >;
        };
        "redemption.redemption.created": { data: TObject<{ id: TString }> };
        "redemption.redemption.statusUpdated": {
            data: TObject<
                {
                    id: TString;
                    status: TUnion<
                        [
                            TLiteral<"PENDING">,
                            TLiteral<"COMMITTED">,
                            TLiteral<"VOIDED">,
                            TLiteral<"FAILED">,
                        ],
                    >;
                },
            >;
        };
        "slack.customerSlackBotInstallation.created": {
            data: TObject<{ id: TString }>;
        };
        "slack.customerSlackBotInstallation.deleted": {
            data: TObject<{ id: TString }>;
        };
        "slack.slackBotInstallation.created": { data: TObject<{ id: TString }> };
        "slack.slackBotInstallation.deleted": { data: TObject<{ id: TString }> };
    } = ...

    The internal event bus taxonomy, assembled from both directions per §8.4: every adminEventPublisher.publish(...) call site, and the consumer union in backoffice-api/src/controllers/InternalEventSlackConsumer.ts.

    Two things this deliberately does NOT copy from the consumer union:

    • Payloads are what publishers emit. backoffice.bankTransaction.created sends five fields against a declared {id}, and backoffice.metcapWireTransaction.updated sends two. TypeBox T.Object is open and pick() returns a non-fresh object, so neither drift was visible.
    • Status unions are the domain's, not the consumer's. Four events could already carry a value the consumer schema rejects; narrowing here would encode a latent validation failure.

    See docs/proposals/EVENT_BUS.md §8.20.4.

    Type Declaration

    • backoffice.achBatch.created: { data: TObject<{ id: TString }> }
    • backoffice.achBatch.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [
                          TLiteral<"CREATED">,
                          TLiteral<"PROCESSING">,
                          TLiteral<"PROCESSED">,
                          TLiteral<"DELETED">,
                      ],
                  >;
              },
          >;
      }
    • backoffice.achFile.created: { data: TObject<{ id: TString }> }
    • backoffice.achFile.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [TLiteral<"CREATED">, TLiteral<"SUBMITTED">, TLiteral<"ARCHIVED">],
                  >;
              },
          >;
      }
    • backoffice.bankInternalTransfer.created: { data: TObject<{ id: TString }> }
    • backoffice.bankInternalTransfer.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [TLiteral<"PENDING">, TLiteral<"COMPLETED">, TLiteral<"FAILED">],
                  >;
              },
          >;
      }
    • backoffice.bankTransaction.created: {
          data: TObject<
              {
                  amount: TString;
                  bankId: TString;
                  description: TString;
                  id: TString;
                  type: TUnion<[TLiteral<"CREDIT">, TLiteral<"DEBIT">]>;
              },
          >;
      }
    • backoffice.manualMint.created: { data: TObject<{ id: TString }> }
    • backoffice.manualMint.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [
                          TLiteral<"CREATED">,
                          TLiteral<"PROCESSING">,
                          TLiteral<"COMPLETED">,
                          TLiteral<"FAILED">,
                      ],
                  >;
              },
          >;
      }
    • backoffice.wireBatch.created: { data: TObject<{ id: TString }> }
    • backoffice.wireBatch.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [
                          TLiteral<"CREATED">,
                          TLiteral<"PROCESSING">,
                          TLiteral<"SUBMITTED">,
                          TLiteral<"DELETED">,
                      ],
                  >;
              },
          >;
      }
    • backoffice.wireEmail.reconciled: {
          data: TObject<
              {
                  bankTransactionId: TString;
                  ffcMemo: TOptional<TString>;
                  wireEmailId: TString;
              },
          >;
      }

      A stored wire_email has been attached to a bank transaction — created, matched or enriched, the caller does not care which. Replaces backoffice.metcapWireTransaction.created / .updated, which were published by the Hookdeck-fed metcap wire-email path that no longer exists.

      ffcMemo rides on the event rather than being re-read from the bank transaction because it is the reason the event exists: the consumer's whole job is memo → deposit_bank_memo → deposit quote. Optional, since plenty of wires quote no memo and still deserve the event.

    • backoffice.wireFile.created: { data: TObject<{ id: TString }> }
    • backoffice.wireFile.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [TLiteral<"CREATED">, TLiteral<"SUBMITTED">, TLiteral<"ARCHIVED">],
                  >;
              },
          >;
      }
    • customer.feeTransfer.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [
                          TLiteral<"PENDING">,
                          TLiteral<"SUCCEEDED">,
                          TLiteral<"FAILED">,
                          TLiteral<"CANCELLED">,
                      ],
                  >;
              },
          >;
      }
    • ledger.account.withdrawal.created: { data: TObject<{ id: TString }> }
    • ledger.account.withdrawal.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [
                          TLiteral<"CREATED">,
                          TLiteral<"PENDING">,
                          TLiteral<"COMMITTED">,
                          TLiteral<"VOIDED">,
                      ],
                  >;
              },
          >;
      }
    • redemption.redemption.created: { data: TObject<{ id: TString }> }
    • redemption.redemption.statusUpdated: {
          data: TObject<
              {
                  id: TString;
                  status: TUnion<
                      [
                          TLiteral<"PENDING">,
                          TLiteral<"COMMITTED">,
                          TLiteral<"VOIDED">,
                          TLiteral<"FAILED">,
                      ],
                  >;
              },
          >;
      }
    • slack.customerSlackBotInstallation.created: { data: TObject<{ id: TString }> }
    • slack.customerSlackBotInstallation.deleted: { data: TObject<{ id: TString }> }
    • slack.slackBotInstallation.created: { data: TObject<{ id: TString }> }
    • slack.slackBotInstallation.deleted: { data: TObject<{ id: TString }> }