Skip to content

Commit a8e7319

Browse files
authored
Merge pull request #1606 from Adyen/sdk-automation/balanceplatform
[balanceplatform] Code generation: update services and models
2 parents 3ee4cb2 + 9aa69e3 commit a8e7319

34 files changed

+1325
-136
lines changed

src/__tests__/balancePlatform.spec.ts

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,5 +1444,190 @@ describe("Balance Platform", (): void => {
14441444
});
14451445
});
14461446

1447+
describe("SCAAssociationManagementApi", (): void => {
1448+
it("should support PATCH /scaAssociations", async (): Promise<void> => {
1449+
scope.patch("/scaAssociations")
1450+
.reply(200, {
1451+
"scaAssociations": [
1452+
{
1453+
"scaDeviceId": "BSDR42XV3223223S5N6CDQDGH53M8H",
1454+
"entityType": "accountHolder",
1455+
"entityId": "AH00000000000000000000001",
1456+
"status": "active"
1457+
}
1458+
]
1459+
});
1460+
1461+
const request: Types.balancePlatform.ApproveAssociationRequest = {
1462+
"status": Types.balancePlatform.AssociationStatus.Active,
1463+
"entityType": Types.balancePlatform.ScaEntityType.AccountHolder,
1464+
"entityId": "AH00000000000000000000001",
1465+
"scaDeviceIds": [
1466+
"BSDR42XV3223223S5N6CDQDGH53M8H"
1467+
]
1468+
};
1469+
1470+
const response: Types.balancePlatform.ApproveAssociationResponse = await balancePlatformService.SCAAssociationManagementApi.approveAssociation(request);
1471+
1472+
expect(response.scaAssociations).toBeTruthy();
1473+
expect(response.scaAssociations?.length).toBe(1);
1474+
expect(response.scaAssociations![0].scaDeviceId).toBe("BSDR42XV3223223S5N6CDQDGH53M8H");
1475+
expect(response.scaAssociations![0].entityType).toBe("accountHolder");
1476+
expect(response.scaAssociations![0].entityId).toBe("AH00000000000000000000001");
1477+
expect(response.scaAssociations![0].status).toBe("active");
1478+
});
1479+
1480+
it("should support GET /scaAssociations", async (): Promise<void> => {
1481+
const entityType = Types.balancePlatform.ScaEntityType.AccountHolder;
1482+
const entityId = "AH3227J223222D5HHM4779X6X";
1483+
const pageSize = 10;
1484+
const pageNumber = 0;
1485+
1486+
scope.get(`/scaAssociations?entityType=${entityType}&entityId=${entityId}&pageSize=${pageSize}`)
1487+
.reply(200, {
1488+
"_links": {
1489+
"self": {
1490+
"href": `https://exampledomain.com/bcl/api/v2/scaAssociations?pageNumber=${pageNumber}&entityType=${entityType}&pageSize=${pageSize}&entityId=${entityId}`
1491+
}
1492+
},
1493+
"itemsTotal": 2,
1494+
"pagesTotal": 1,
1495+
"data": [
1496+
{
1497+
"scaDeviceId": "BSDR11111111111A1AAA1AAAAA1AA1",
1498+
"scaDeviceName": "Device 1",
1499+
"scaDeviceType": "ios",
1500+
"entityType": "accountHolder",
1501+
"entityId": "AH00000000000000000000001",
1502+
"status": "active",
1503+
"createdAt": "2025-09-02T14:39:17.232Z"
1504+
},
1505+
{
1506+
"scaDeviceId": "BSDR22222222222B2BBB2BBBBB2BB2",
1507+
"scaDeviceName": "Device 2",
1508+
"scaDeviceType": "ios",
1509+
"entityType": "accountHolder",
1510+
"entityId": "AH00000000000000000000001",
1511+
"status": "pendingApproval",
1512+
"createdAt": "2025-09-02T14:39:17.232Z"
1513+
}
1514+
]
1515+
});
1516+
1517+
const response: Types.balancePlatform.ListAssociationsResponse = await balancePlatformService.SCAAssociationManagementApi.listAssociations(entityType, entityId, pageSize, pageNumber);
1518+
1519+
expect(response).toBeTruthy();
1520+
expect(response.itemsTotal).toBe(2);
1521+
expect(response.pagesTotal).toBe(1);
1522+
expect(response.data).toBeTruthy();
1523+
expect(response.data?.length).toBe(2);
1524+
expect(response.data![0].scaDeviceId).toBe("BSDR11111111111A1AAA1AAAAA1AA1");
1525+
expect(response.data![0].scaDeviceName).toBe("Device 1");
1526+
expect(response.data![0].status).toBe("active");
1527+
expect(response.data![1].scaDeviceId).toBe("BSDR22222222222B2BBB2BBBBB2BB2");
1528+
expect(response.data![1].status).toBe("pendingApproval");
1529+
});
1530+
1531+
it("should support DELETE /scaAssociations", async (): Promise<void> => {
1532+
scope.delete("/scaAssociations")
1533+
.reply(204);
1534+
1535+
const request: Types.balancePlatform.RemoveAssociationRequest = {
1536+
"entityType": Types.balancePlatform.ScaEntityType.AccountHolder,
1537+
"entityId": "AH00000000000000000000001",
1538+
"scaDeviceIds": ["BSDR11111111111A1AAA1AAAAA1AA1"]
1539+
};
1540+
1541+
await balancePlatformService.SCAAssociationManagementApi.removeAssociation(request);
1542+
1543+
expect(scope.isDone()).toBeTruthy();
1544+
});
1545+
});
1546+
1547+
describe("SCADeviceManagementApi", (): void => {
1548+
it("should support POST /scaDevices", async (): Promise<void> => {
1549+
scope.post("/scaDevices")
1550+
.reply(200, {
1551+
"scaDevice": {
1552+
"id": "BSDR42XV3223223S5N6CDQDGH53M8H",
1553+
"name": "My Device",
1554+
"type": "ios"
1555+
},
1556+
"sdkInput": "eyJjaGFsbGVuZ2UiOiJVWEZaTURONGNXWjZUVFExUlhWV2JuaEJPVzVzTm05cVVEUktUbFZtZGtrPSJ9"
1557+
});
1558+
1559+
const request: Types.balancePlatform.BeginScaDeviceRegistrationRequest = {
1560+
"name": "My Device",
1561+
"sdkOutput": "eyJjaGFsbGVuZ2UiOiJVWEZaTURONGNXWjZUVFExUlhWV2JuaEJPVzVzTm05cVVEUktUbFZtZGtrPSJ9"
1562+
};
1563+
1564+
const response: Types.balancePlatform.BeginScaDeviceRegistrationResponse = await balancePlatformService.SCADeviceManagementApi.beginScaDeviceRegistration(request);
1565+
1566+
expect(response).toBeTruthy();
1567+
expect(response.scaDevice).toBeTruthy();
1568+
expect(response.scaDevice?.id).toBe("BSDR42XV3223223S5N6CDQDGH53M8H");
1569+
expect(response.scaDevice?.name).toBe("My Device");
1570+
expect(response.scaDevice?.type).toBe("ios");
1571+
expect(response.sdkInput).toBe("eyJjaGFsbGVuZ2UiOiJVWEZaTURONGNXWjZUVFExUlhWV2JuaEJPVzVzTm05cVVEUktUbFZtZGtrPSJ9");
1572+
});
1573+
1574+
it("should support PATCH /scaDevices/{deviceId}", async (): Promise<void> => {
1575+
const deviceId = "BSDR42XV3223223S5N6CDQDGH53M8H";
1576+
scope.patch(`/scaDevices/${deviceId}`)
1577+
.reply(200, {
1578+
"scaDevice": {
1579+
"id": "BSDR42XV3223223S5N6CDQDGH53M8H",
1580+
"name": "Device",
1581+
"type": "ios"
1582+
}
1583+
});
1584+
1585+
const request: Types.balancePlatform.FinishScaDeviceRegistrationRequest = {
1586+
"sdkOutput": "eyJjaGFsbGVuZ2UiOiJVWEZaTURONGNXWjZUVFExUlhWV2JuaEJPVzVzTm05cVVEUktUbFZtZGtrPSJ9"
1587+
};
1588+
1589+
const response: Types.balancePlatform.FinishScaDeviceRegistrationResponse = await balancePlatformService.SCADeviceManagementApi.finishScaDeviceRegistration(deviceId, request);
1590+
1591+
expect(response).toBeTruthy();
1592+
expect(response.scaDevice).toBeTruthy();
1593+
expect(response.scaDevice?.id).toBe("BSDR42XV3223223S5N6CDQDGH53M8H");
1594+
expect(response.scaDevice?.name).toBe("Device");
1595+
expect(response.scaDevice?.type).toBe("ios");
1596+
});
1597+
1598+
it("should support POST /scaDevices/{deviceId}/scaAssociations", async (): Promise<void> => {
1599+
const deviceId = "BSDR42XV3223223S5N6CDQDGH53M8H";
1600+
scope.post(`/scaDevices/${deviceId}/scaAssociations`)
1601+
.reply(200, {
1602+
"scaAssociations": [
1603+
{
1604+
"scaDeviceId": "BSDR11111111111A1AAA1AAAAA1AA1",
1605+
"entityType": "accountHolder",
1606+
"entityId": "AH00000000000000000000001",
1607+
"status": "pendingApproval"
1608+
}
1609+
]
1610+
});
1611+
1612+
const request: Types.balancePlatform.SubmitScaAssociationRequest = {
1613+
"entities": [
1614+
{
1615+
"type": Types.balancePlatform.ScaEntityType.AccountHolder,
1616+
"id": "AH00000000000000000000001"
1617+
}
1618+
]
1619+
};
1620+
1621+
const response: Types.balancePlatform.SubmitScaAssociationResponse = await balancePlatformService.SCADeviceManagementApi.submitScaAssociation(deviceId, request);
1622+
1623+
expect(response).toBeTruthy();
1624+
expect(response.scaAssociations).toBeTruthy();
1625+
expect(response.scaAssociations?.length).toBe(1);
1626+
expect(response.scaAssociations![0].scaDeviceId).toBe("BSDR11111111111A1AAA1AAAAA1AA1");
1627+
expect(response.scaAssociations![0].entityType).toBe("accountHolder");
1628+
expect(response.scaAssociations![0].entityId).toBe("AH00000000000000000000001");
1629+
expect(response.scaAssociations![0].status).toBe("pendingApproval");
1630+
});
1631+
});
14471632

14481633
});

src/services/balancePlatform/index.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ import { NetworkTokensApi } from "./networkTokensApi";
2121
import { PaymentInstrumentGroupsApi } from "./paymentInstrumentGroupsApi";
2222
import { PaymentInstrumentsApi } from "./paymentInstrumentsApi";
2323
import { PlatformApi } from "./platformApi";
24+
import { SCAAssociationManagementApi } from "./sCAAssociationManagementApi";
25+
import { SCADeviceManagementApi } from "./sCADeviceManagementApi";
2426
import { TransactionRulesApi } from "./transactionRulesApi";
2527
import { TransferLimitsBalanceAccountLevelApi } from "./transferLimitsBalanceAccountLevelApi";
2628
import { TransferLimitsBalancePlatformLevelApi } from "./transferLimitsBalancePlatformLevelApi";
@@ -91,6 +93,14 @@ export default class BalancePlatformAPI extends Service {
9193
return new PlatformApi(this.client);
9294
}
9395

96+
public get SCAAssociationManagementApi() {
97+
return new SCAAssociationManagementApi(this.client);
98+
}
99+
100+
public get SCADeviceManagementApi() {
101+
return new SCADeviceManagementApi(this.client);
102+
}
103+
94104
public get TransactionRulesApi() {
95105
return new TransactionRulesApi(this.client);
96106
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
/*
2+
* The version of the OpenAPI document: v2
3+
*
4+
*
5+
* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
6+
* https://openapi-generator.tech
7+
* Do not edit this class manually.
8+
*/
9+
10+
11+
import getJsonResponse from "../../helpers/getJsonResponse";
12+
import Service from "../../service";
13+
import Client from "../../client";
14+
import { IRequest } from "../../typings/requestOptions";
15+
import Resource from "../resource";
16+
17+
import { ObjectSerializer } from "../../typings/balancePlatform/objectSerializer";
18+
import { ApproveAssociationRequest } from "../../typings/balancePlatform/models";
19+
import { ApproveAssociationResponse } from "../../typings/balancePlatform/models";
20+
import { ListAssociationsResponse } from "../../typings/balancePlatform/models";
21+
import { RemoveAssociationRequest } from "../../typings/balancePlatform/models";
22+
import { ScaEntityType } from "../../typings/balancePlatform/models";
23+
24+
/**
25+
* API handler for SCAAssociationManagementApi
26+
*/
27+
export class SCAAssociationManagementApi extends Service {
28+
29+
private readonly API_BASEPATH: string = "https://balanceplatform-api-test.adyen.com/bcl/v2";
30+
private baseUrl: string;
31+
32+
public constructor(client: Client){
33+
super(client);
34+
this.baseUrl = this.createBaseUrl(this.API_BASEPATH);
35+
}
36+
37+
/**
38+
* @summary Approve a pending approval association
39+
* @param approveAssociationRequest {@link ApproveAssociationRequest }
40+
* @param requestOptions {@link IRequest.Options }
41+
* @return {@link ApproveAssociationResponse }
42+
*/
43+
public async approveAssociation(approveAssociationRequest: ApproveAssociationRequest, requestOptions?: IRequest.Options): Promise<ApproveAssociationResponse> {
44+
const endpoint = `${this.baseUrl}/scaAssociations`;
45+
const resource = new Resource(this, endpoint);
46+
47+
const request: ApproveAssociationRequest = ObjectSerializer.serialize(approveAssociationRequest, "ApproveAssociationRequest");
48+
const response = await getJsonResponse<ApproveAssociationRequest, ApproveAssociationResponse>(
49+
resource,
50+
request,
51+
{ ...requestOptions, method: "PATCH" }
52+
);
53+
54+
return ObjectSerializer.deserialize(response, "ApproveAssociationResponse");
55+
}
56+
57+
/**
58+
* @summary Get a list of devices associated with an entity
59+
* @param requestOptions {@link IRequest.Options }
60+
* @param entityType {@link ScaEntityType } (Required) The type of entity you want to retrieve a list of associations for. Possible values: **accountHolder** or **paymentInstrument**.
61+
* @param entityId {@link string } (Required) The unique identifier of the entity.
62+
* @param pageSize {@link number } (Required) The number of items to have on a page. Default: **5**.
63+
* @param pageNumber {@link number } (Required) The index of the page to retrieve. The index of the first page is **0** (zero). Default: **0**.
64+
* @return {@link ListAssociationsResponse }
65+
*/
66+
public async listAssociations(entityType: ScaEntityType, entityId: string, pageSize: number, pageNumber: number, requestOptions?: IRequest.Options): Promise<ListAssociationsResponse> {
67+
const endpoint = `${this.baseUrl}/scaAssociations`;
68+
const resource = new Resource(this, endpoint);
69+
70+
const hasDefinedQueryParams = entityType ?? entityId ?? pageSize ?? pageNumber;
71+
if(hasDefinedQueryParams) {
72+
if(!requestOptions) requestOptions = {};
73+
if(!requestOptions.params) requestOptions.params = {};
74+
if(entityType) requestOptions.params["entityType"] = entityType;
75+
if(entityId) requestOptions.params["entityId"] = entityId;
76+
if(pageSize) requestOptions.params["pageSize"] = pageSize;
77+
if(pageNumber) requestOptions.params["pageNumber"] = pageNumber;
78+
}
79+
const response = await getJsonResponse<string, ListAssociationsResponse>(
80+
resource,
81+
"",
82+
{ ...requestOptions, method: "GET" }
83+
);
84+
85+
return ObjectSerializer.deserialize(response, "ListAssociationsResponse");
86+
}
87+
88+
/**
89+
* @summary Delete association to devices
90+
* @param removeAssociationRequest {@link RemoveAssociationRequest }
91+
* @param requestOptions {@link IRequest.Options }
92+
* @return {@link void }
93+
*/
94+
public async removeAssociation(removeAssociationRequest: RemoveAssociationRequest, requestOptions?: IRequest.Options): Promise<void> {
95+
const endpoint = `${this.baseUrl}/scaAssociations`;
96+
const resource = new Resource(this, endpoint);
97+
98+
const request: RemoveAssociationRequest = ObjectSerializer.serialize(removeAssociationRequest, "RemoveAssociationRequest");
99+
await getJsonResponse<RemoveAssociationRequest, void>(
100+
resource,
101+
request,
102+
{ ...requestOptions, method: "DELETE" }
103+
);
104+
}
105+
106+
}

0 commit comments

Comments
 (0)