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

    Hierarchy (View Summary)

    Index

    Constructors

    Properties

    dbHelper: DbHelper

    Methods

    • Handles Solana transaction creation for card transaction clearing

      Parameters

      • id: { id: string; idempotencyKey: string }

        The ID of the card transaction

      Returns Promise<
          | {
              ok: true;
              value: { lastValidBlockHeight: number; transaction: VersionedTransaction };
          }
          | {
              error: | ServiceError<"GIRASOL_CARD_TRANSACTION_NOT_FOUND">
              | ServiceError<"CUSTOMER_CARD_NOT_FOUND">
              | ServiceError<"CUSTOMER_CARD_ACCOUNT_NOT_FOUND">
              | ServiceError<"GIRASOL_CUSTOMER_WALLET_NOT_FOUND">
              | ServiceError<"GIRASOL_MASTERCARD_WALLET_NOT_FOUND">
              | ServiceError<
                  "INSUFFICIENT_FUNDS",
                  { balance: { amount: BigNumber; currency: string } },
              >
              | ServiceError<
                  "INSUFFICIENT_FUNDS",
                  { balance: { amount: BigNumber; currency: string } },
              >
              | ServiceError<"UNSUPPORTED_TRANSACTION_TYPE">
              | ServiceError<"CARD_TRANSACTION_CLEARING_NOT_FOUND">;
              ok: false;
          },
      >

      Solana transaction and last valid block height for the transaction

    • Handles Solana transaction creation for card transactions

      Parameters

      • id: { id: string }

        The ID of the card transaction

      Returns Promise<
          | {
              ok: true;
              value: { lastValidBlockHeight: number; transaction: VersionedTransaction };
          }
          | {
              error: | ServiceError<"GIRASOL_CARD_TRANSACTION_NOT_FOUND">
              | ServiceError<"CUSTOMER_CARD_NOT_FOUND">
              | ServiceError<"CUSTOMER_CARD_ACCOUNT_NOT_FOUND">
              | ServiceError<"GIRASOL_CUSTOMER_WALLET_NOT_FOUND">
              | ServiceError<"GIRASOL_MASTERCARD_WALLET_NOT_FOUND">
              | ServiceError<
                  "INSUFFICIENT_FUNDS",
                  { balance: { amount: BigNumber; currency: string } },
              >
              | ServiceError<
                  "INSUFFICIENT_FUNDS",
                  { balance: { amount: BigNumber; currency: string } },
              >
              | ServiceError<"UNSUPPORTED_TRANSACTION_TYPE">;
              ok: false;
          },
      >

      Solana transaction and last valid block height for the transaction

    • Create card transaction entry for the Girasol transaction event we receive. For auth transactions, this will initiate the transfer of funds from the customer account to the Girasol mastercard account.

      Parameters

      • args: Omit<
            {
                amount: BigNumber;
                clearing?: {
                    amountAdjusted: string;
                    amountCleared: string;
                    receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                    type: "OVER_CLEARED" | "UNDER_CLEARED" | "MATCH";
                };
                createdAt: Date;
                currency: string;
                girasolTransactionId: string;
                id: string;
                merchant?: {
                    categoryCode?: string;
                    city?: string;
                    country?: string;
                    mcc: string;
                    name: string;
                };
                originalGirasolTransactionId: string
                | null;
                reason: string | null;
                receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                status:
                    | "PENDING"
                    | "COMPLETED"
                    | "FAILED"
                    | "DECLINED"
                    | "CANCELLED"
                    | "AUTHORIZED"
                    | "CLEARED"
                    | "REVERSED";
                type: "authorization"
                | "notification"
                | "reversal";
                updatedAt: Date;
            },
            "id"
            | "createdAt"
            | "updatedAt",
        > & {
            cardId: string;
            customerId: string;
            girasolEvent?: {
                payload: {
                    amount: { cardholder: { amount: string } };
                    card: { card_id: string };
                    merchant?: {
                        category_code?: string;
                        city?: string;
                        country?: string;
                        mcc: string;
                        name: string;
                    };
                    original_transaction?: { transaction_id: string };
                    transaction_id: string;
                    transaction_type: string;
                };
                reason: string;
                request_type: "authorization"
                | "notification"
                | "reversal";
                status: "declined" | "approved";
                statusDescription?: string;
            };
        }

      Returns Promise<
          {
              ok: true;
              value: {
                  amount: BigNumber;
                  clearing?: {
                      amountAdjusted: string;
                      amountCleared: string;
                      receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                      type: "OVER_CLEARED" | "UNDER_CLEARED" | "MATCH";
                  };
                  createdAt: Date;
                  currency: string;
                  girasolTransactionId: string;
                  id: string;
                  merchant?: {
                      categoryCode?: string;
                      city?: string;
                      country?: string;
                      mcc: string;
                      name: string;
                  };
                  originalGirasolTransactionId: string
                  | null;
                  reason: string | null;
                  receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                  status:
                      | "PENDING"
                      | "COMPLETED"
                      | "FAILED"
                      | "DECLINED"
                      | "CANCELLED"
                      | "AUTHORIZED"
                      | "CLEARED"
                      | "REVERSED";
                  type: "authorization"
                  | "notification"
                  | "reversal";
                  updatedAt: Date;
              };
          },
      >

    • Parameters

      • __namedParameters: {
            amountAdjusted: BigNumber;
            amountCleared: BigNumber;
            id: string;
            type: "OVER_CLEARED" | "UNDER_CLEARED" | "MATCH";
        }

      Returns Promise<
          | {
              error: | ServiceError<"GIRASOL_CARD_TRANSACTION_NOT_FOUND">
              | ServiceError<"GIRASOL_CARD_NOT_FOUND">;
              ok: false;
          }
          | {
              ok: true;
              value: {
                  amount: BigNumber;
                  clearing?: {
                      amountAdjusted: string;
                      amountCleared: string;
                      receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                      type: "OVER_CLEARED" | "UNDER_CLEARED" | "MATCH";
                  };
                  createdAt: Date;
                  currency: string;
                  girasolTransactionId: string;
                  id: string;
                  merchant?: {
                      categoryCode?: string;
                      city?: string;
                      country?: string;
                      mcc: string;
                      name: string;
                  };
                  originalGirasolTransactionId: string
                  | null;
                  reason: string | null;
                  receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                  status:
                      | "PENDING"
                      | "COMPLETED"
                      | "FAILED"
                      | "DECLINED"
                      | "CANCELLED"
                      | "AUTHORIZED"
                      | "CLEARED"
                      | "REVERSED";
                  type: "authorization"
                  | "notification"
                  | "reversal";
                  updatedAt: Date;
              };
          },
      >

      Card transaction with clearing data

      Add clearing data to a girasol card transaction

    • Parameters

      • __namedParameters: { id: string }

      Returns Promise<
          {
              ok: true;
              value: | {
                  amount: BigNumber;
                  clearing?: {
                      amountAdjusted: string;
                      amountCleared: string;
                      receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                      type: "OVER_CLEARED" | "UNDER_CLEARED" | "MATCH";
                  };
                  createdAt: Date;
                  currency: string;
                  girasolTransactionId: string;
                  id: string;
                  merchant?: {
                      categoryCode?: string;
                      city?: string;
                      country?: string;
                      mcc: string;
                      name: string;
                  };
                  originalGirasolTransactionId: string
                  | null;
                  reason: string | null;
                  receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                  status:
                      | "PENDING"
                      | "COMPLETED"
                      | "FAILED"
                      | "DECLINED"
                      | "CANCELLED"
                      | "AUTHORIZED"
                      | "CLEARED"
                      | "REVERSED";
                  type: "authorization"
                  | "notification"
                  | "reversal";
                  updatedAt: Date;
              } & { cardId: string; customerId: string; targetWalletId: string }
              | null;
          },
      >

    • Parameters

      • __namedParameters: {
            cardIds?: string[];
            customerId?: string;
            fromDate?: Date;
            girasolCardTransactionIds?: string[];
            ids?: string[];
            orderBy?: DbOrderByCriterion<
                Omit<
                    PgTableWithColumns<
                        {
                            columns: {
                                amount: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgNumeric";
                                        data: string;
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "amount";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                clearingData: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgJsonb";
                                        data: {
                                            amountAdjusted: ...;
                                            amountCleared: ...;
                                            receipt?: ...;
                                            type: ...;
                                        };
                                        dataType: "json";
                                        driverParam: unknown;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "clearingData";
                                        notNull: false;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {
                                        $type: {
                                            amountAdjusted: ...;
                                            amountCleared: ...;
                                            receipt?: ...;
                                            type: ...;
                                        };
                                    },
                                >;
                                createdAt: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgTimestamp";
                                        data: Date;
                                        dataType: "date";
                                        driverParam: string;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: true;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "createdAt";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                currency: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgText";
                                        data: string;
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: [(...), ...(...)[]];
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "currency";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                customerId: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgInteger";
                                        data: number;
                                        dataType: "number";
                                        driverParam: (...)
                                        | (...);
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "customerId";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                data: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgJsonb";
                                        data: { girasolEvent?: ...; merchant?: ... };
                                        dataType: "json";
                                        driverParam: unknown;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "data";
                                        notNull: false;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    { $type: { girasolEvent?: ...; merchant?: ... } },
                                >;
                                externalId: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgText";
                                        data: string;
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: [(...), ...(...)[]];
                                        generated: undefined;
                                        hasDefault: true;
                                        hasRuntimeDefault: true;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "externalId";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                girasolCardId: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgInteger";
                                        data: number;
                                        dataType: "number";
                                        driverParam: (...)
                                        | (...);
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "girasolCardId";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                girasolTransactionId: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgText";
                                        data: string;
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: [(...), ...(...)[]];
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "girasolTransactionId";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                id: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgInteger";
                                        data: number;
                                        dataType: "number";
                                        driverParam: (...)
                                        | (...);
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: true;
                                        hasRuntimeDefault: false;
                                        identity: "byDefault";
                                        isAutoincrement: false;
                                        isPrimaryKey: true;
                                        name: "id";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                originalGirasolTransactionId: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgText";
                                        data: string;
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: [(...), ...(...)[]];
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "originalGirasolTransactionId";
                                        notNull: false;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                reason: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgText";
                                        data: string;
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: [(...), ...(...)[]];
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "reason";
                                        notNull: false;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                receipt: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgJsonb";
                                        data: { id: ...; type: ... };
                                        dataType: "json";
                                        driverParam: unknown;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "receipt";
                                        notNull: false;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    { $type: { id: ...; type: ... } },
                                >;
                                settlementWalletId: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgInteger";
                                        data: number;
                                        dataType: "number";
                                        driverParam: (...)
                                        | (...);
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "settlementWalletId";
                                        notNull: false;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                                status: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgText";
                                        data: (...)
                                        | (...)
                                        | (...)
                                        | (...)
                                        | (...)
                                        | (...)
                                        | (...)
                                        | (...);
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: [(...), ...(...)[]];
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "status";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {
                                        $type: | (...)
                                        | (...)
                                        | (...)
                                        | (...)
                                        | (...)
                                        | (...)
                                        | (...)
                                        | (...);
                                    },
                                >;
                                type: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgText";
                                        data: (...)
                                        | (...)
                                        | (...);
                                        dataType: "string";
                                        driverParam: string;
                                        enumValues: [(...), ...(...)[]];
                                        generated: undefined;
                                        hasDefault: false;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "type";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    { $type: (...)
                                    | (...)
                                    | (...) },
                                >;
                                updatedAt: PgColumn<
                                    {
                                        baseColumn: never;
                                        columnType: "PgTimestamp";
                                        data: Date;
                                        dataType: "date";
                                        driverParam: string;
                                        enumValues: undefined;
                                        generated: undefined;
                                        hasDefault: true;
                                        hasRuntimeDefault: false;
                                        identity: undefined;
                                        isAutoincrement: false;
                                        isPrimaryKey: false;
                                        name: "updatedAt";
                                        notNull: true;
                                        tableName: "girasol_card_transaction";
                                    },
                                    {},
                                    {},
                                >;
                            };
                            dialect: "pg";
                            name: "girasol_card_transaction";
                            schema: "b2b";
                        },
                    >,
                    "enableRLS",
                >,
                "createdAt"
                | "updatedAt",
            >[];
            originalGirasolCardTransactionIds?: string[];
            page?: number;
            pageSize?: number;
            statuses?: (
                | "PENDING"
                | "COMPLETED"
                | "FAILED"
                | "DECLINED"
                | "CANCELLED"
                | "AUTHORIZED"
                | "CLEARED"
                | "REVERSED"
            )[];
            toDate?: Date;
        }

      Returns Promise<
          {
              ok: true;
              value: {
                  hasNext: boolean;
                  items: (
                      {
                          amount: BigNumber;
                          clearing?: {
                              amountAdjusted: string;
                              amountCleared: string;
                              receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                              type: "OVER_CLEARED" | "UNDER_CLEARED" | "MATCH";
                          };
                          createdAt: Date;
                          currency: string;
                          girasolTransactionId: string;
                          id: string;
                          merchant?: {
                              categoryCode?: string;
                              city?: string;
                              country?: string;
                              mcc: string;
                              name: string;
                          };
                          originalGirasolTransactionId: string
                          | null;
                          reason: string | null;
                          receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                          status:
                              | "PENDING"
                              | "COMPLETED"
                              | "FAILED"
                              | "DECLINED"
                              | "CANCELLED"
                              | "AUTHORIZED"
                              | "CLEARED"
                              | "REVERSED";
                          type: "authorization"
                          | "notification"
                          | "reversal";
                          updatedAt: Date;
                      } & { cardId: string; customerId: string; targetWalletId: string }
                  )[];
              };
          },
      >

    • Parameters

      • __namedParameters: {
            data: Partial<
                Pick<GirasolCardTransaction, "status" | "receipt"> & {
                    clearingReceipt: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                },
            >;
            id: string;
        }

      Returns Promise<
          | {
              ok: true;
              value: {
                  amount: BigNumber;
                  clearing?: {
                      amountAdjusted: string;
                      amountCleared: string;
                      receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                      type: "OVER_CLEARED" | "UNDER_CLEARED" | "MATCH";
                  };
                  createdAt: Date;
                  currency: string;
                  girasolTransactionId: string;
                  id: string;
                  merchant?: {
                      categoryCode?: string;
                      city?: string;
                      country?: string;
                      mcc: string;
                      name: string;
                  };
                  originalGirasolTransactionId: string
                  | null;
                  reason: string | null;
                  receipt?: { id: string; type: "SOLANA_TRANSACTION_SIGNATURE" };
                  status:
                      | "PENDING"
                      | "COMPLETED"
                      | "FAILED"
                      | "DECLINED"
                      | "CANCELLED"
                      | "AUTHORIZED"
                      | "CLEARED"
                      | "REVERSED";
                  type: "authorization"
                  | "notification"
                  | "reversal";
                  updatedAt: Date;
              };
          }
          | {
              error: | ServiceError<"GIRASOL_CARD_TRANSACTION_NOT_FOUND">
              | ServiceError<"GIRASOL_CARD_NOT_FOUND">;
              ok: false;
          },
      >

      Update the girasol card transaction and publish an event if required