Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@blindpay/node",
"version": "3.2.0",
"version": "4.0.0",
"description": "Official Node.js SDK for Blindpay API - Stablecoin API for global payments",
"keywords": [
"blindpay",
Expand Down
15 changes: 15 additions & 0 deletions src/client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { BlindPayError } from "./internal/blindpay-error";
import { createApiKeysResource } from "./resources/api-keys";
import { createAvailableResource } from "./resources/available";
import { createBankAccountsResource } from "./resources/bank-accounts";
import { createFeesResource } from "./resources/fees";
import { createInstancesResource } from "./resources/instances";
import { createPartnerFeesResource } from "./resources/partner-fees";
import { createPayinsResource } from "./resources/payins";
Expand All @@ -14,8 +15,11 @@ import { createPayoutsResource } from "./resources/payouts";
import { createQuotesResource } from "./resources/quotes";
import { createReceiversResource } from "./resources/receivers";
import { createTermsOfServiceResource } from "./resources/terms-of-service";
import { createTransfersResource } from "./resources/transfers";
import { createUploadResource } from "./resources/upload";
import { createVirtualAccountsResource } from "./resources/virtual-accounts";
import { createBlockchainWalletsResource } from "./resources/wallets/blockchain";
import { createCustodialWalletsResource } from "./resources/wallets/custodial";
import { createOfframpWalletsResource } from "./resources/wallets/offramp";
import { createWebhookEndpointsResource } from "./resources/webhooks";

Expand All @@ -35,6 +39,9 @@ export class BlindPay {
};
readonly quotes: ReturnType<typeof createQuotesResource>;
readonly payouts: ReturnType<typeof createPayoutsResource>;
readonly transfers: ReturnType<typeof createTransfersResource>;
readonly fees: ReturnType<typeof createFeesResource>;
readonly upload: ReturnType<typeof createUploadResource>;
readonly virtualAccounts: ReturnType<typeof createVirtualAccountsResource>;
readonly receivers: ReturnType<typeof createReceiversResource> & {
bankAccounts: ReturnType<typeof createBankAccountsResource>;
Expand All @@ -47,6 +54,7 @@ export class BlindPay {
readonly wallets: {
blockchain: ReturnType<typeof createBlockchainWalletsResource>;
offramp: ReturnType<typeof createOfframpWalletsResource>;
custodial: ReturnType<typeof createCustodialWalletsResource>;
};

constructor({
Expand Down Expand Up @@ -105,6 +113,12 @@ export class BlindPay {

this.payouts = createPayoutsResource(this.instanceId, this.api);

this.transfers = createTransfersResource(this.instanceId, this.api);

this.fees = createFeesResource(this.instanceId, this.api);

this.upload = createUploadResource(this.baseUrl, this.headers);

this.receivers = {
...createReceiversResource(this.instanceId, this.api),
bankAccounts: createBankAccountsResource(this.instanceId, this.api),
Expand All @@ -115,6 +129,7 @@ export class BlindPay {
this.wallets = {
blockchain: createBlockchainWalletsResource(this.instanceId, this.api),
offramp: createOfframpWalletsResource(this.instanceId, this.api),
custodial: createCustodialWalletsResource(this.instanceId, this.api),
};
}

Expand Down
4 changes: 4 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,18 @@ export * from "./client";
export * from "./resources/api-keys";
export * from "./resources/available";
export * from "./resources/bank-accounts";
export * from "./resources/fees";
export * from "./resources/instances";
export * from "./resources/partner-fees";
export * from "./resources/payins";
export * from "./resources/payins/quotes";
export * from "./resources/payouts";
export * from "./resources/quotes";
export * from "./resources/receivers";
export * from "./resources/transfers";
export * from "./resources/upload";
export * from "./resources/virtual-accounts";
export * from "./resources/wallets/blockchain";
export * from "./resources/wallets/custodial";
export * from "./resources/wallets/offramp";
export * from "./resources/webhooks";
35 changes: 34 additions & 1 deletion src/resources/available/available.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
import { afterEach, describe, expect, it } from "vitest";
import { BlindPay } from "../../client";
import type { GetBankDetailsResponse, GetRailsResponse, GetSwiftCodeBankDetailsResponse } from ".";
import type {
GetBankDetailsResponse,
GetNaicsCodesResponse,
GetRailsResponse,
GetSwiftCodeBankDetailsResponse,
} from ".";

describe("Available", () => {
afterEach(() => fetchMock.resetMocks());
Expand Down Expand Up @@ -95,6 +100,34 @@ describe("Available", () => {
});
});

describe("Get NAICS codes", () => {
it("should get available NAICS codes", async () => {
const mockedNaicsCodes: GetNaicsCodesResponse = [
{
label: "Software Publishers",
value: "511210",
},
{
label: "Computer Systems Design Services",
value: "541512",
},
{
label: "Data Processing, Hosting, and Related Services",
value: "518210",
},
];

fetchMock.mockResponseOnce(JSON.stringify(mockedNaicsCodes), {
headers: { "Content-Type": "application/json" },
});

const { data, error } = await blindpay.available.getNaicsCodes();

expect(error).toBeNull();
expect(data).toEqual(mockedNaicsCodes);
});
});

describe("Get swift code bank details", () => {
it("should get bank details of a swift code", async () => {
const mockedBankDetails: GetSwiftCodeBankDetailsResponse = [
Expand Down
8 changes: 8 additions & 0 deletions src/resources/available/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,11 @@ export type GetRailsResponse = Array<{
country: string;
}>;

export type GetNaicsCodesResponse = Array<{
label: string;
value: string;
}>;

export type GetSwiftCodeBankDetailsInput = string;

export type GetSwiftCodeBankDetailsResponse = Array<{
Expand All @@ -90,6 +95,9 @@ export function createAvailableResource(client: InternalApiClient) {
getRails(): Promise<BlindpayApiResponse<GetRailsResponse>> {
return client.get("/available/rails");
},
getNaicsCodes(): Promise<BlindpayApiResponse<GetNaicsCodesResponse>> {
return client.get("/available/naics");
},
getSwiftCodeBankDetails(
swift: GetSwiftCodeBankDetailsInput
): Promise<BlindpayApiResponse<GetSwiftCodeBankDetailsResponse>> {
Expand Down
60 changes: 59 additions & 1 deletion src/resources/bank-accounts/bank-accounts.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import type {
CreateColombiaAchResponse,
CreateInternationalSwiftResponse,
CreatePixResponse,
CreatePixSafeResponse,
CreateRtpResponse,
CreateSpeiResponse,
CreateWireResponse,
Expand Down Expand Up @@ -153,6 +154,7 @@ describe("Bank accounts", () => {
account_number: "1001001234",
account_type: "checking",
account_class: "individual",
recipient_relationship: "first_party",
address_line_1: null,
address_line_2: null,
city: null,
Expand Down Expand Up @@ -181,6 +183,12 @@ describe("Bank accounts", () => {
account_type: "checking",
beneficiary_name: "Individual full name or business name",
routing_number: "012345678",
recipient_relationship: "first_party",
address_line_1: "123 Main St",
city: "New York",
state_province_region: "NY",
country: "US",
postal_code: "10001",
});

expect(error).toBeNull();
Expand All @@ -197,6 +205,8 @@ describe("Bank accounts", () => {
beneficiary_name: "Individual full name or business name",
routing_number: "012345678",
account_number: "1001001234",
account_class: "individual",
recipient_relationship: "first_party",
address_line_1: "Address line 1",
address_line_2: "Address line 2",
city: "City",
Expand All @@ -213,9 +223,11 @@ describe("Bank accounts", () => {
const { data, error } = await blindpay.receivers.bankAccounts.createWire({
receiver_id: "re_000000000000",
name: "Wire Account",
account_class: "individual",
account_number: "1001001234",
beneficiary_name: "Individual full name or business name",
routing_number: "012345678",
recipient_relationship: "first_party",
address_line_1: "Address line 1",
address_line_2: "Address line 2",
city: "City",
Expand All @@ -236,6 +248,8 @@ describe("Bank accounts", () => {
type: "international_swift",
name: "International Swift Account",
beneficiary_name: null,
account_class: "individual",
recipient_relationship: "first_party",
address_line_1: null,
address_line_2: null,
city: null,
Expand Down Expand Up @@ -264,6 +278,7 @@ describe("Bank accounts", () => {
swift_intermediary_bank_account_number_iban: null,
swift_intermediary_bank_name: null,
swift_intermediary_bank_country: null,
swift_payment_code: null,
created_at: "2021-01-01T00:00:00Z",
};

Expand All @@ -274,6 +289,8 @@ describe("Bank accounts", () => {
const { data, error } = await blindpay.receivers.bankAccounts.createInternationalSwift({
receiver_id: "re_000000000000",
name: "International Swift Account",
account_class: "individual",
recipient_relationship: "first_party",
swift_account_holder_name: "John Doe",
swift_account_number_iban: "123456789",
swift_bank_address_line_1:
Expand Down Expand Up @@ -310,6 +327,8 @@ describe("Bank accounts", () => {
beneficiary_name: "John Doe",
routing_number: "121000358",
account_number: "325203027578",
account_class: "individual",
recipient_relationship: "first_party",
address_line_1: "Street of the fools",
address_line_2: null,
city: "Fools City",
Expand All @@ -326,9 +345,11 @@ describe("Bank accounts", () => {
const { data, error } = await blindpay.receivers.bankAccounts.createRtp({
receiver_id: "re_000000000000",
name: "John Doe RTP",
account_class: "individual",
beneficiary_name: "John Doe",
routing_number: "121000358",
account_number: "325203027578",
recipient_relationship: "first_party",
address_line_1: "Street of the fools",
city: "Fools City",
state_province_region: "FL",
Expand Down Expand Up @@ -446,13 +467,50 @@ describe("Bank accounts", () => {
headers: { "Content-Type": "application/json" },
});

const { data, error } = await blindpay.receivers.bankAccounts.list("re_000000000000");
const { data, error } = await blindpay.receivers.bankAccounts.list({
receiver_id: "re_000000000000",
});

expect(error).toBeNull();
expect(data).toEqual(mockedBankAccounts);
});
});

describe("Create pix safe bank account", () => {
it("should create a pix safe bank account", async () => {
const mockedPixSafeAccount: CreatePixSafeResponse = {
id: "ba_000000000000",
type: "pix_safe",
name: "PIX Safe Account",
beneficiary_name: "Maria Silva",
account_number: "123456789",
account_type: "checking",
pix_safe_bank_code: "001",
pix_safe_branch_code: "0001",
pix_safe_cpf_cnpj: "12345678901",
created_at: "2021-01-01T00:00:00Z",
};

fetchMock.mockResponseOnce(JSON.stringify(mockedPixSafeAccount), {
headers: { "Content-Type": "application/json" },
});

const { data, error } = await blindpay.receivers.bankAccounts.createPixSafe({
receiver_id: "re_000000000000",
name: "PIX Safe Account",
beneficiary_name: "Maria Silva",
account_number: "123456789",
account_type: "checking",
pix_safe_bank_code: "001",
pix_safe_branch_code: "0001",
pix_safe_cpf_cnpj: "12345678901",
});

expect(error).toBeNull();
expect(data).toEqual(mockedPixSafeAccount);
});
});

describe("Delete bank account", () => {
it("should delete a bank account", async () => {
fetchMock.mockResponseOnce(JSON.stringify({ data: null }), {
Expand Down
Loading
Loading