dutchman-bridge 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/README.md +212 -0
  2. package/dist/client/client.gen.d.ts +2 -0
  3. package/dist/client/client.gen.js +220 -0
  4. package/dist/client/index.d.ts +10 -0
  5. package/dist/client/index.js +17 -0
  6. package/dist/client/types.gen.d.ts +120 -0
  7. package/dist/client/types.gen.js +3 -0
  8. package/dist/client/utils.gen.d.ts +37 -0
  9. package/dist/client/utils.gen.js +241 -0
  10. package/dist/client.gen.d.ts +12 -0
  11. package/dist/client.gen.js +6 -0
  12. package/dist/core/auth.gen.d.ts +25 -0
  13. package/dist/core/auth.gen.js +18 -0
  14. package/dist/core/bodySerializer.gen.d.ts +25 -0
  15. package/dist/core/bodySerializer.gen.js +60 -0
  16. package/dist/core/params.gen.d.ts +43 -0
  17. package/dist/core/params.gen.js +112 -0
  18. package/dist/core/pathSerializer.gen.d.ts +33 -0
  19. package/dist/core/pathSerializer.gen.js +115 -0
  20. package/dist/core/queryKeySerializer.gen.d.ts +18 -0
  21. package/dist/core/queryKeySerializer.gen.js +98 -0
  22. package/dist/core/serverSentEvents.gen.d.ts +71 -0
  23. package/dist/core/serverSentEvents.gen.js +135 -0
  24. package/dist/core/types.gen.d.ts +83 -0
  25. package/dist/core/types.gen.js +3 -0
  26. package/dist/core/utils.gen.d.ts +19 -0
  27. package/dist/core/utils.gen.js +93 -0
  28. package/dist/index.d.ts +3 -0
  29. package/dist/index.js +20 -0
  30. package/dist/sdk.gen.d.ts +339 -0
  31. package/dist/sdk.gen.js +794 -0
  32. package/dist/types.gen.d.ts +1935 -0
  33. package/dist/types.gen.js +3 -0
  34. package/package.json +32 -0
  35. package/src/client/client.gen.ts +277 -0
  36. package/src/client/index.ts +27 -0
  37. package/src/client/types.gen.ts +218 -0
  38. package/src/client/utils.gen.ts +316 -0
  39. package/src/client.gen.ts +16 -0
  40. package/src/core/auth.gen.ts +48 -0
  41. package/src/core/bodySerializer.gen.ts +82 -0
  42. package/src/core/params.gen.ts +178 -0
  43. package/src/core/pathSerializer.gen.ts +171 -0
  44. package/src/core/queryKeySerializer.gen.ts +117 -0
  45. package/src/core/serverSentEvents.gen.ts +242 -0
  46. package/src/core/types.gen.ts +110 -0
  47. package/src/core/utils.gen.ts +140 -0
  48. package/src/index.ts +5 -0
  49. package/src/sdk.gen.ts +887 -0
  50. package/src/types.gen.ts +2178 -0
package/src/sdk.gen.ts ADDED
@@ -0,0 +1,887 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+
3
+ import { type Client, type ClientMeta, formDataBodySerializer, type Options as Options2, type RequestResult, type TDataShape } from './client';
4
+ import { client } from './client.gen';
5
+ import type { BankAddAccountData, BankAddAccountResponses, BankBanksData, BankBanksResponses, BankDeleteAccountData, BankDeleteAccountResponses, BankGetAccountsData, BankGetAccountsResponses, BankSetDefaultAccountData, BankSetDefaultAccountResponses, BankVerifyAccountData, BankVerifyAccountResponses, CountriesListData, CountriesListResponses, CustomersFullData, CustomersFullResponses, CustomersGetData, CustomersGetResponses, CustomersRegisterData, CustomersRegisterResponses, FeaturesListData, FeaturesListResponses, GlobalSendCorridorsData, GlobalSendCorridorsResponses, GlobalSendInitiateData, GlobalSendInitiateResponses, GlobalSendQuoteData, GlobalSendQuoteResponses, GlobalSendVerificationStatusData, GlobalSendVerificationStatusResponses, KycDocumentData, KycDocumentResponses, KycReverificationData, KycReverificationResponses, KycSelfieCheckRouteData, KycSelfieCheckRouteResponses, KycStatusData, KycStatusResponses, KycTier1Data, KycTier1Responses, KycTier2Data, KycTier2Responses, KycTier3Data, KycTier3Responses, ProfileChangePasswordData, ProfileChangePasswordResponses, ProfileDeleteAccountData, ProfileDeleteAccountResponses, ProfileGetSettlementModeData, ProfileGetSettlementModeResponses, ProfileProfileData, ProfileProfileResponses, ProfileSetSettlementModeData, ProfileSetSettlementModeResponses, ProfileUpdateProfileData, ProfileUpdateProfileResponses, ProfileWithdrawalsData, ProfileWithdrawalsResponses, RampBuyData, RampBuyQuoteData, RampBuyQuoteResponses, RampBuyResponses, RampRateData, RampRateResponses, RampSellData, RampSellNetworksData, RampSellNetworksResponses, RampSellQuoteData, RampSellQuoteResponses, RampSellResponses, ReceivingActivityData, ReceivingActivityResponses, ReceivingCurrenciesData, ReceivingCurrenciesResponses, ReceivingListData, ReceivingListResponses, ReceivingOpenData, ReceivingOpenResponses, ReceivingRefreshData, ReceivingRefreshResponses, SendNetworksData, SendNetworksResponses, SendQuoteData, SendQuoteResponses, SendSubmitData, SendSubmitResponses, WalletAddressesData, WalletAddressesResponses, WalletBalanceData, WalletBalanceResponses, WalletFundingChargesData, WalletFundingChargesResponses, WalletInitiateFundingChargeData, WalletInitiateFundingChargeResponses, WalletStreamBalanceData, WalletStreamBalanceResponses, WalletTransactionsData, WalletTransactionsResponses, WalletVirtualAccountForData, WalletVirtualAccountForResponses, WalletWithdrawData, WalletWithdrawResponses, WebhookConfigData, WebhookConfigResponses, WebhookDeliveriesData, WebhookDeliveriesResponses, WebhookDeliveryData, WebhookDeliveryResponses, WebhookReplayData, WebhookReplayResponses, WebhookRotateSecretData, WebhookRotateSecretResponses, WebhookSetUrlData, WebhookSetUrlResponses } from './types.gen';
6
+
7
+ export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean, TResponse = unknown> = Options2<TData, ThrowOnError, TResponse> & {
8
+ /**
9
+ * You can provide a client instance returned by `createClient()` instead of
10
+ * individual options. This might be also useful if you want to implement a
11
+ * custom client.
12
+ */
13
+ client?: Client;
14
+ /**
15
+ * You can pass arbitrary values through the `meta` object. This can be
16
+ * used to access values that aren't defined as part of the SDK function.
17
+ */
18
+ meta?: keyof ClientMeta extends never ? Record<string, unknown> : ClientMeta;
19
+ };
20
+
21
+ class HeyApiClient {
22
+ protected client: Client;
23
+
24
+ constructor(args?: {
25
+ client?: Client;
26
+ }) {
27
+ this.client = args?.client ?? client;
28
+ }
29
+ }
30
+
31
+ class HeyApiRegistry<T> {
32
+ private readonly defaultKey = 'default';
33
+
34
+ private readonly instances: Map<string, T> = new Map();
35
+
36
+ get(key?: string): T {
37
+ const instance = this.instances.get(key ?? this.defaultKey);
38
+ if (!instance) {
39
+ throw new Error(`No SDK client found. Create one with "new DutchmanBridge()" to fix this error.`);
40
+ }
41
+ return instance;
42
+ }
43
+
44
+ set(value: T, key?: string): void {
45
+ this.instances.set(key ?? this.defaultKey, value);
46
+ }
47
+ }
48
+
49
+ export class Customers extends HeyApiClient {
50
+ /**
51
+ * Register a customer under your account
52
+ *
53
+ * The customer never authenticates with Dutchman Bridge directly -- that's entirely yours to manage. This just attributes a new customer id to your account so every other Partner API call can reference it.
54
+ */
55
+ public register<ThrowOnError extends boolean = false>(options: Options<CustomersRegisterData, ThrowOnError>): RequestResult<CustomersRegisterResponses, unknown, ThrowOnError> {
56
+ return (options.client ?? this.client).post<CustomersRegisterResponses, unknown, ThrowOnError>({
57
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
58
+ url: '/api/v1/partner/v1/customers',
59
+ ...options,
60
+ headers: {
61
+ 'Content-Type': 'application/json',
62
+ ...options.headers
63
+ }
64
+ });
65
+ }
66
+
67
+ /**
68
+ * Read one of your customer's profile
69
+ */
70
+ public get<ThrowOnError extends boolean = false>(options: Options<CustomersGetData, ThrowOnError>): RequestResult<CustomersGetResponses, unknown, ThrowOnError> {
71
+ return (options.client ?? this.client).get<CustomersGetResponses, unknown, ThrowOnError>({
72
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
73
+ url: '/api/v1/partner/v1/customers/{customerId}',
74
+ ...options
75
+ });
76
+ }
77
+
78
+ /**
79
+ * A customer's full snapshot -- profile, KYC, and wallet -- in one call
80
+ *
81
+ * Replaces separately calling profile/kyc/wallet routes when you just need a customer's current state, e.g. right after registration or to reconcile after a webhook. Not a substitute for the wallet routes' live balance -- fetch this fresh rather than caching it indefinitely, since a crypto deposit or fiat funding event has no webhook of its own yet.
82
+ */
83
+ public full<ThrowOnError extends boolean = false>(options: Options<CustomersFullData, ThrowOnError>): RequestResult<CustomersFullResponses, unknown, ThrowOnError> {
84
+ return (options.client ?? this.client).get<CustomersFullResponses, unknown, ThrowOnError>({
85
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
86
+ url: '/api/v1/partner/v1/customers/{customerId}/full',
87
+ ...options
88
+ });
89
+ }
90
+ }
91
+
92
+ export class Profile extends HeyApiClient {
93
+ /**
94
+ * Delete the customer's account
95
+ *
96
+ * Refused (409) while the customer still holds a balance or has a transfer in flight. Deleting twice is not an error.
97
+ */
98
+ public deleteAccount<ThrowOnError extends boolean = false>(options: Options<ProfileDeleteAccountData, ThrowOnError>): RequestResult<ProfileDeleteAccountResponses, unknown, ThrowOnError> {
99
+ return (options.client ?? this.client).delete<ProfileDeleteAccountResponses, unknown, ThrowOnError>({
100
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
101
+ url: '/api/v1/partner/v1/customers/{customerId}',
102
+ ...options
103
+ });
104
+ }
105
+
106
+ /**
107
+ * The customer's profile
108
+ */
109
+ public profile<ThrowOnError extends boolean = false>(options: Options<ProfileProfileData, ThrowOnError>): RequestResult<ProfileProfileResponses, unknown, ThrowOnError> {
110
+ return (options.client ?? this.client).get<ProfileProfileResponses, unknown, ThrowOnError>({
111
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
112
+ url: '/api/v1/partner/v1/customers/{customerId}/profile',
113
+ ...options
114
+ });
115
+ }
116
+
117
+ /**
118
+ * Update the customer's profile
119
+ *
120
+ * Identity fields can be filled in while empty; once KYC is approved they lock, and only an admin re-verification request reopens them.
121
+ */
122
+ public updateProfile<ThrowOnError extends boolean = false>(options: Options<ProfileUpdateProfileData, ThrowOnError>): RequestResult<ProfileUpdateProfileResponses, unknown, ThrowOnError> {
123
+ return (options.client ?? this.client).patch<ProfileUpdateProfileResponses, unknown, ThrowOnError>({
124
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
125
+ url: '/api/v1/partner/v1/customers/{customerId}/profile',
126
+ ...options,
127
+ headers: {
128
+ 'Content-Type': 'application/json',
129
+ ...options.headers
130
+ }
131
+ });
132
+ }
133
+
134
+ /**
135
+ * Change the customer's password
136
+ */
137
+ public changePassword<ThrowOnError extends boolean = false>(options: Options<ProfileChangePasswordData, ThrowOnError>): RequestResult<ProfileChangePasswordResponses, unknown, ThrowOnError> {
138
+ return (options.client ?? this.client).patch<ProfileChangePasswordResponses, unknown, ThrowOnError>({
139
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
140
+ url: '/api/v1/partner/v1/customers/{customerId}/change-password',
141
+ ...options,
142
+ headers: {
143
+ 'Content-Type': 'application/json',
144
+ ...options.headers
145
+ }
146
+ });
147
+ }
148
+
149
+ /**
150
+ * Read the customer's settlement preference (AUTO to default bank vs MANUAL hold)
151
+ */
152
+ public getSettlementMode<ThrowOnError extends boolean = false>(options: Options<ProfileGetSettlementModeData, ThrowOnError>): RequestResult<ProfileGetSettlementModeResponses, unknown, ThrowOnError> {
153
+ return (options.client ?? this.client).get<ProfileGetSettlementModeResponses, unknown, ThrowOnError>({
154
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
155
+ url: '/api/v1/partner/v1/customers/{customerId}/settlement-mode',
156
+ ...options
157
+ });
158
+ }
159
+
160
+ /**
161
+ * Update how the customer's sale proceeds settle
162
+ */
163
+ public setSettlementMode<ThrowOnError extends boolean = false>(options: Options<ProfileSetSettlementModeData, ThrowOnError>): RequestResult<ProfileSetSettlementModeResponses, unknown, ThrowOnError> {
164
+ return (options.client ?? this.client).patch<ProfileSetSettlementModeResponses, unknown, ThrowOnError>({
165
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
166
+ url: '/api/v1/partner/v1/customers/{customerId}/settlement-mode',
167
+ ...options,
168
+ headers: {
169
+ 'Content-Type': 'application/json',
170
+ ...options.headers
171
+ }
172
+ });
173
+ }
174
+
175
+ /**
176
+ * The customer's withdrawal / global payout history, newest first
177
+ */
178
+ public withdrawals<ThrowOnError extends boolean = false>(options: Options<ProfileWithdrawalsData, ThrowOnError>): RequestResult<ProfileWithdrawalsResponses, unknown, ThrowOnError> {
179
+ return (options.client ?? this.client).get<ProfileWithdrawalsResponses, unknown, ThrowOnError>({
180
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
181
+ url: '/api/v1/partner/v1/customers/{customerId}/withdrawals',
182
+ ...options
183
+ });
184
+ }
185
+ }
186
+
187
+ export class Kyc extends HeyApiClient {
188
+ /**
189
+ * A customer's KYC records, newest first
190
+ */
191
+ public status<ThrowOnError extends boolean = false>(options: Options<KycStatusData, ThrowOnError>): RequestResult<KycStatusResponses, unknown, ThrowOnError> {
192
+ return (options.client ?? this.client).get<KycStatusResponses, unknown, ThrowOnError>({
193
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
194
+ url: '/api/v1/partner/v1/customers/{customerId}/kyc',
195
+ ...options
196
+ });
197
+ }
198
+
199
+ /**
200
+ * Any open re-verification request an admin has raised for the customer
201
+ *
202
+ * The items to re-provide plus the message, or null when there is nothing to re-verify.
203
+ */
204
+ public reverification<ThrowOnError extends boolean = false>(options: Options<KycReverificationData, ThrowOnError>): RequestResult<KycReverificationResponses, unknown, ThrowOnError> {
205
+ return (options.client ?? this.client).get<KycReverificationResponses, unknown, ThrowOnError>({
206
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
207
+ url: '/api/v1/partner/v1/customers/{customerId}/kyc/reverification',
208
+ ...options
209
+ });
210
+ }
211
+
212
+ /**
213
+ * Submit Tier 1 (BVN + NIN)
214
+ */
215
+ public tier1<ThrowOnError extends boolean = false>(options: Options<KycTier1Data, ThrowOnError>): RequestResult<KycTier1Responses, unknown, ThrowOnError> {
216
+ return (options.client ?? this.client).post<KycTier1Responses, unknown, ThrowOnError>({
217
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
218
+ url: '/api/v1/partner/v1/customers/{customerId}/kyc/tier1',
219
+ ...options,
220
+ headers: {
221
+ 'Content-Type': 'application/json',
222
+ ...options.headers
223
+ }
224
+ });
225
+ }
226
+
227
+ /**
228
+ * Submit Tier 2 (ID document, from a prior /kyc/documents upload)
229
+ */
230
+ public tier2<ThrowOnError extends boolean = false>(options: Options<KycTier2Data, ThrowOnError>): RequestResult<KycTier2Responses, unknown, ThrowOnError> {
231
+ return (options.client ?? this.client).post<KycTier2Responses, unknown, ThrowOnError>({
232
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
233
+ url: '/api/v1/partner/v1/customers/{customerId}/kyc/tier2',
234
+ ...options,
235
+ headers: {
236
+ 'Content-Type': 'application/json',
237
+ ...options.headers
238
+ }
239
+ });
240
+ }
241
+
242
+ /**
243
+ * Submit Tier 3 (date of birth + address, for cross-border corridors)
244
+ */
245
+ public tier3<ThrowOnError extends boolean = false>(options: Options<KycTier3Data, ThrowOnError>): RequestResult<KycTier3Responses, unknown, ThrowOnError> {
246
+ return (options.client ?? this.client).post<KycTier3Responses, unknown, ThrowOnError>({
247
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
248
+ url: '/api/v1/partner/v1/customers/{customerId}/kyc/tier3',
249
+ ...options,
250
+ headers: {
251
+ 'Content-Type': 'application/json',
252
+ ...options.headers
253
+ }
254
+ });
255
+ }
256
+
257
+ /**
258
+ * Check a customer's selfie before submitting it
259
+ *
260
+ * Returns what to change -- too dark, blurry, sunglasses, more than one face -- so it can be retaken now rather than rejected by a reviewer days later. Advisory only: a submission is never blocked on this.
261
+ */
262
+ public selfieCheckRoute<ThrowOnError extends boolean = false>(options: Options<KycSelfieCheckRouteData, ThrowOnError>): RequestResult<KycSelfieCheckRouteResponses, unknown, ThrowOnError> {
263
+ return (options.client ?? this.client).post<KycSelfieCheckRouteResponses, unknown, ThrowOnError>({
264
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
265
+ url: '/api/v1/partner/v1/customers/{customerId}/kyc/selfie-check',
266
+ ...options,
267
+ headers: {
268
+ 'Content-Type': 'application/json',
269
+ ...options.headers
270
+ }
271
+ });
272
+ }
273
+
274
+ /**
275
+ * Upload a customer's ID document or selfie ahead of Tier 2
276
+ */
277
+ public document<ThrowOnError extends boolean = false>(options: Options<KycDocumentData, ThrowOnError>): RequestResult<KycDocumentResponses, unknown, ThrowOnError> {
278
+ return (options.client ?? this.client).post<KycDocumentResponses, unknown, ThrowOnError>({
279
+ ...formDataBodySerializer,
280
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
281
+ url: '/api/v1/partner/v1/customers/{customerId}/kyc/documents',
282
+ ...options,
283
+ headers: {
284
+ 'Content-Type': null,
285
+ ...options.headers
286
+ }
287
+ });
288
+ }
289
+ }
290
+
291
+ export class Wallet extends HeyApiClient {
292
+ /**
293
+ * USDT + local fiat balance
294
+ */
295
+ public balance<ThrowOnError extends boolean = false>(options: Options<WalletBalanceData, ThrowOnError>): RequestResult<WalletBalanceResponses, unknown, ThrowOnError> {
296
+ return (options.client ?? this.client).get<WalletBalanceResponses, unknown, ThrowOnError>({
297
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
298
+ url: '/api/v1/partner/v1/customers/{customerId}/balance',
299
+ ...options
300
+ });
301
+ }
302
+
303
+ /**
304
+ * Live updates: re-emits the customer's balance on every credit/debit
305
+ *
306
+ * Mirrors Dutchman Bridge's own consumer /user/balance/stream, scoped to the customer instead of the caller's own JWT. Long-lived --keep the connection open rather than reconnecting per update.
307
+ */
308
+ public streamBalance<ThrowOnError extends boolean = false>(options: Options<WalletStreamBalanceData, ThrowOnError>): RequestResult<WalletStreamBalanceResponses, unknown, ThrowOnError> {
309
+ return (options.client ?? this.client).get<WalletStreamBalanceResponses, unknown, ThrowOnError>({
310
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
311
+ url: '/api/v1/partner/v1/customers/{customerId}/balance/stream',
312
+ ...options
313
+ });
314
+ }
315
+
316
+ /**
317
+ * Recent balance movements, cursor-paginated
318
+ */
319
+ public transactions<ThrowOnError extends boolean = false>(options: Options<WalletTransactionsData, ThrowOnError>): RequestResult<WalletTransactionsResponses, unknown, ThrowOnError> {
320
+ return (options.client ?? this.client).get<WalletTransactionsResponses, unknown, ThrowOnError>({
321
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
322
+ url: '/api/v1/partner/v1/customers/{customerId}/transactions',
323
+ ...options
324
+ });
325
+ }
326
+
327
+ /**
328
+ * The customer's per-network USDT deposit addresses
329
+ */
330
+ public addresses<ThrowOnError extends boolean = false>(options: Options<WalletAddressesData, ThrowOnError>): RequestResult<WalletAddressesResponses, unknown, ThrowOnError> {
331
+ return (options.client ?? this.client).get<WalletAddressesResponses, unknown, ThrowOnError>({
332
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
333
+ url: '/api/v1/partner/v1/customers/{customerId}/addresses',
334
+ ...options
335
+ });
336
+ }
337
+
338
+ /**
339
+ * Local-currency virtual account for fiat funding
340
+ *
341
+ * Issued on first read in the customer's own fiat (NGN needs an approved BVN first); the same account is returned on every read after.
342
+ */
343
+ public virtualAccountFor<ThrowOnError extends boolean = false>(options: Options<WalletVirtualAccountForData, ThrowOnError>): RequestResult<WalletVirtualAccountForResponses, unknown, ThrowOnError> {
344
+ return (options.client ?? this.client).get<WalletVirtualAccountForResponses, unknown, ThrowOnError>({
345
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
346
+ url: '/api/v1/partner/v1/customers/{customerId}/virtual-account',
347
+ ...options
348
+ });
349
+ }
350
+
351
+ /**
352
+ * Pay a held balance out to the customer's default bank account
353
+ */
354
+ public withdraw<ThrowOnError extends boolean = false>(options: Options<WalletWithdrawData, ThrowOnError>): RequestResult<WalletWithdrawResponses, unknown, ThrowOnError> {
355
+ return (options.client ?? this.client).post<WalletWithdrawResponses, unknown, ThrowOnError>({
356
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
357
+ url: '/api/v1/partner/v1/customers/{customerId}/withdraw',
358
+ ...options,
359
+ headers: {
360
+ 'Content-Type': 'application/json',
361
+ ...options.headers
362
+ }
363
+ });
364
+ }
365
+
366
+ /**
367
+ * Start a fund-by-charge: a one-off bank account (bank_transfer) or a redirect URL to authorise (eft, ZAR)
368
+ */
369
+ public initiateFundingCharge<ThrowOnError extends boolean = false>(options: Options<WalletInitiateFundingChargeData, ThrowOnError>): RequestResult<WalletInitiateFundingChargeResponses, unknown, ThrowOnError> {
370
+ return (options.client ?? this.client).post<WalletInitiateFundingChargeResponses, unknown, ThrowOnError>({
371
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
372
+ url: '/api/v1/partner/v1/customers/{customerId}/funding/charge',
373
+ ...options,
374
+ headers: {
375
+ 'Content-Type': 'application/json',
376
+ ...options.headers
377
+ }
378
+ });
379
+ }
380
+
381
+ /**
382
+ * The customer's funding charges, newest first
383
+ */
384
+ public fundingCharges<ThrowOnError extends boolean = false>(options: Options<WalletFundingChargesData, ThrowOnError>): RequestResult<WalletFundingChargesResponses, unknown, ThrowOnError> {
385
+ return (options.client ?? this.client).get<WalletFundingChargesResponses, unknown, ThrowOnError>({
386
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
387
+ url: '/api/v1/partner/v1/customers/{customerId}/funding/charges',
388
+ ...options
389
+ });
390
+ }
391
+ }
392
+
393
+ export class Send extends HeyApiClient {
394
+ /**
395
+ * Networks the customer can send USDT/USDC on, with fee and minimum
396
+ */
397
+ public networks<ThrowOnError extends boolean = false>(options: Options<SendNetworksData, ThrowOnError>): RequestResult<SendNetworksResponses, unknown, ThrowOnError> {
398
+ return (options.client ?? this.client).get<SendNetworksResponses, unknown, ThrowOnError>({
399
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
400
+ url: '/api/v1/partner/v1/customers/{customerId}/send/networks',
401
+ ...options
402
+ });
403
+ }
404
+
405
+ /**
406
+ * Quote a send before submitting it
407
+ */
408
+ public quote<ThrowOnError extends boolean = false>(options: Options<SendQuoteData, ThrowOnError>): RequestResult<SendQuoteResponses, unknown, ThrowOnError> {
409
+ return (options.client ?? this.client).post<SendQuoteResponses, unknown, ThrowOnError>({
410
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
411
+ url: '/api/v1/partner/v1/customers/{customerId}/send/quote',
412
+ ...options,
413
+ headers: {
414
+ 'Content-Type': 'application/json',
415
+ ...options.headers
416
+ }
417
+ });
418
+ }
419
+
420
+ /**
421
+ * Send USDT on-chain to the given address
422
+ */
423
+ public submit<ThrowOnError extends boolean = false>(options: Options<SendSubmitData, ThrowOnError>): RequestResult<SendSubmitResponses, unknown, ThrowOnError> {
424
+ return (options.client ?? this.client).post<SendSubmitResponses, unknown, ThrowOnError>({
425
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
426
+ url: '/api/v1/partner/v1/customers/{customerId}/send',
427
+ ...options,
428
+ headers: {
429
+ 'Content-Type': 'application/json',
430
+ ...options.headers
431
+ }
432
+ });
433
+ }
434
+ }
435
+
436
+ export class GlobalSend extends HeyApiClient {
437
+ /**
438
+ * Re-check the customer's level 3 verification status with the partner
439
+ */
440
+ public verificationStatus<ThrowOnError extends boolean = false>(options: Options<GlobalSendVerificationStatusData, ThrowOnError>): RequestResult<GlobalSendVerificationStatusResponses, unknown, ThrowOnError> {
441
+ return (options.client ?? this.client).get<GlobalSendVerificationStatusResponses, unknown, ThrowOnError>({
442
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
443
+ url: '/api/v1/partner/v1/customers/{customerId}/global-send/verification',
444
+ ...options
445
+ });
446
+ }
447
+
448
+ /**
449
+ * Countries the customer can send to, with their currency and rails
450
+ */
451
+ public corridors<ThrowOnError extends boolean = false>(options: Options<GlobalSendCorridorsData, ThrowOnError>): RequestResult<GlobalSendCorridorsResponses, unknown, ThrowOnError> {
452
+ return (options.client ?? this.client).get<GlobalSendCorridorsResponses, unknown, ThrowOnError>({
453
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
454
+ url: '/api/v1/partner/v1/customers/{customerId}/global-send/corridors',
455
+ ...options
456
+ });
457
+ }
458
+
459
+ /**
460
+ * Price a cross-border send for the customer
461
+ */
462
+ public quote<ThrowOnError extends boolean = false>(options: Options<GlobalSendQuoteData, ThrowOnError>): RequestResult<GlobalSendQuoteResponses, unknown, ThrowOnError> {
463
+ return (options.client ?? this.client).post<GlobalSendQuoteResponses, unknown, ThrowOnError>({
464
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
465
+ url: '/api/v1/partner/v1/customers/{customerId}/global-send/quote',
466
+ ...options,
467
+ headers: {
468
+ 'Content-Type': 'application/json',
469
+ ...options.headers
470
+ }
471
+ });
472
+ }
473
+
474
+ /**
475
+ * Initiate a cross-border send for the customer
476
+ */
477
+ public initiate<ThrowOnError extends boolean = false>(options: Options<GlobalSendInitiateData, ThrowOnError>): RequestResult<GlobalSendInitiateResponses, unknown, ThrowOnError> {
478
+ return (options.client ?? this.client).post<GlobalSendInitiateResponses, unknown, ThrowOnError>({
479
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
480
+ url: '/api/v1/partner/v1/customers/{customerId}/global-send/initiate',
481
+ ...options,
482
+ headers: {
483
+ 'Content-Type': 'application/json',
484
+ ...options.headers
485
+ }
486
+ });
487
+ }
488
+ }
489
+
490
+ export class Ramp extends HeyApiClient {
491
+ /**
492
+ * Price a buy (fiat -> USDT) against the customer's fiat balance
493
+ */
494
+ public buyQuote<ThrowOnError extends boolean = false>(options: Options<RampBuyQuoteData, ThrowOnError>): RequestResult<RampBuyQuoteResponses, unknown, ThrowOnError> {
495
+ return (options.client ?? this.client).post<RampBuyQuoteResponses, unknown, ThrowOnError>({
496
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
497
+ url: '/api/v1/partner/v1/customers/{customerId}/buy/quote',
498
+ ...options,
499
+ headers: {
500
+ 'Content-Type': 'application/json',
501
+ ...options.headers
502
+ }
503
+ });
504
+ }
505
+
506
+ /**
507
+ * Execute a buy from the customer's fiat balance
508
+ */
509
+ public buy<ThrowOnError extends boolean = false>(options: Options<RampBuyData, ThrowOnError>): RequestResult<RampBuyResponses, unknown, ThrowOnError> {
510
+ return (options.client ?? this.client).post<RampBuyResponses, unknown, ThrowOnError>({
511
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
512
+ url: '/api/v1/partner/v1/customers/{customerId}/buy/execute',
513
+ ...options,
514
+ headers: {
515
+ 'Content-Type': 'application/json',
516
+ ...options.headers
517
+ }
518
+ });
519
+ }
520
+
521
+ /**
522
+ * Networks the customer can sell USDT on
523
+ */
524
+ public sellNetworks<ThrowOnError extends boolean = false>(options: Options<RampSellNetworksData, ThrowOnError>): RequestResult<RampSellNetworksResponses, unknown, ThrowOnError> {
525
+ return (options.client ?? this.client).get<RampSellNetworksResponses, unknown, ThrowOnError>({
526
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
527
+ url: '/api/v1/partner/v1/customers/{customerId}/sell/networks',
528
+ ...options
529
+ });
530
+ }
531
+
532
+ /**
533
+ * Live USDT rates in the customer's local fiat, for previewing a conversion
534
+ *
535
+ * Does not lock a rate -- checkout still goes through the quote routes.
536
+ */
537
+ public rate<ThrowOnError extends boolean = false>(options: Options<RampRateData, ThrowOnError>): RequestResult<RampRateResponses, unknown, ThrowOnError> {
538
+ return (options.client ?? this.client).get<RampRateResponses, unknown, ThrowOnError>({
539
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
540
+ url: '/api/v1/partner/v1/customers/{customerId}/rate',
541
+ ...options
542
+ });
543
+ }
544
+
545
+ /**
546
+ * Price a sell (USDT -> fiat) against the customer's USDT balance
547
+ */
548
+ public sellQuote<ThrowOnError extends boolean = false>(options: Options<RampSellQuoteData, ThrowOnError>): RequestResult<RampSellQuoteResponses, unknown, ThrowOnError> {
549
+ return (options.client ?? this.client).post<RampSellQuoteResponses, unknown, ThrowOnError>({
550
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
551
+ url: '/api/v1/partner/v1/customers/{customerId}/sell/quote',
552
+ ...options,
553
+ headers: {
554
+ 'Content-Type': 'application/json',
555
+ ...options.headers
556
+ }
557
+ });
558
+ }
559
+
560
+ /**
561
+ * Execute a sell from the customer's USDT balance
562
+ */
563
+ public sell<ThrowOnError extends boolean = false>(options: Options<RampSellData, ThrowOnError>): RequestResult<RampSellResponses, unknown, ThrowOnError> {
564
+ return (options.client ?? this.client).post<RampSellResponses, unknown, ThrowOnError>({
565
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
566
+ url: '/api/v1/partner/v1/customers/{customerId}/sell/execute',
567
+ ...options,
568
+ headers: {
569
+ 'Content-Type': 'application/json',
570
+ ...options.headers
571
+ }
572
+ });
573
+ }
574
+ }
575
+
576
+ export class Bank extends HeyApiClient {
577
+ /**
578
+ * Banks for the given (or the customer's own) country/currency
579
+ */
580
+ public banks<ThrowOnError extends boolean = false>(options: Options<BankBanksData, ThrowOnError>): RequestResult<BankBanksResponses, unknown, ThrowOnError> {
581
+ return (options.client ?? this.client).get<BankBanksResponses, unknown, ThrowOnError>({
582
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
583
+ url: '/api/v1/partner/v1/customers/{customerId}/banks',
584
+ ...options
585
+ });
586
+ }
587
+
588
+ /**
589
+ * Resolve an account number to its account name
590
+ */
591
+ public verifyAccount<ThrowOnError extends boolean = false>(options: Options<BankVerifyAccountData, ThrowOnError>): RequestResult<BankVerifyAccountResponses, unknown, ThrowOnError> {
592
+ return (options.client ?? this.client).post<BankVerifyAccountResponses, unknown, ThrowOnError>({
593
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
594
+ url: '/api/v1/partner/v1/customers/{customerId}/bank/verify-account',
595
+ ...options,
596
+ headers: {
597
+ 'Content-Type': 'application/json',
598
+ ...options.headers
599
+ }
600
+ });
601
+ }
602
+
603
+ /**
604
+ * List the customer's linked payout accounts, default first
605
+ */
606
+ public getAccounts<ThrowOnError extends boolean = false>(options: Options<BankGetAccountsData, ThrowOnError>): RequestResult<BankGetAccountsResponses, unknown, ThrowOnError> {
607
+ return (options.client ?? this.client).get<BankGetAccountsResponses, unknown, ThrowOnError>({
608
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
609
+ url: '/api/v1/partner/v1/customers/{customerId}/accounts',
610
+ ...options
611
+ });
612
+ }
613
+
614
+ /**
615
+ * Link a payout bank account to the customer
616
+ */
617
+ public addAccount<ThrowOnError extends boolean = false>(options: Options<BankAddAccountData, ThrowOnError>): RequestResult<BankAddAccountResponses, unknown, ThrowOnError> {
618
+ return (options.client ?? this.client).post<BankAddAccountResponses, unknown, ThrowOnError>({
619
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
620
+ url: '/api/v1/partner/v1/customers/{customerId}/accounts',
621
+ ...options,
622
+ headers: {
623
+ 'Content-Type': 'application/json',
624
+ ...options.headers
625
+ }
626
+ });
627
+ }
628
+
629
+ /**
630
+ * Make a linked account the customer's default payout destination
631
+ */
632
+ public setDefaultAccount<ThrowOnError extends boolean = false>(options: Options<BankSetDefaultAccountData, ThrowOnError>): RequestResult<BankSetDefaultAccountResponses, unknown, ThrowOnError> {
633
+ return (options.client ?? this.client).patch<BankSetDefaultAccountResponses, unknown, ThrowOnError>({
634
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
635
+ url: '/api/v1/partner/v1/customers/{customerId}/accounts/{accountId}/default',
636
+ ...options
637
+ });
638
+ }
639
+
640
+ /**
641
+ * Remove a customer's linked payout account
642
+ */
643
+ public deleteAccount<ThrowOnError extends boolean = false>(options: Options<BankDeleteAccountData, ThrowOnError>): RequestResult<BankDeleteAccountResponses, unknown, ThrowOnError> {
644
+ return (options.client ?? this.client).delete<BankDeleteAccountResponses, unknown, ThrowOnError>({
645
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
646
+ url: '/api/v1/partner/v1/customers/{customerId}/accounts/{accountId}',
647
+ ...options
648
+ });
649
+ }
650
+ }
651
+
652
+ export class Receiving extends HeyApiClient {
653
+ /**
654
+ * Foreign currencies the customer can be paid in
655
+ */
656
+ public currencies<ThrowOnError extends boolean = false>(options: Options<ReceivingCurrenciesData, ThrowOnError>): RequestResult<ReceivingCurrenciesResponses, unknown, ThrowOnError> {
657
+ return (options.client ?? this.client).get<ReceivingCurrenciesResponses, unknown, ThrowOnError>({
658
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
659
+ url: '/api/v1/partner/v1/customers/{customerId}/receiving-accounts/currencies',
660
+ ...options
661
+ });
662
+ }
663
+
664
+ /**
665
+ * Every foreign-currency account the customer holds
666
+ */
667
+ public list<ThrowOnError extends boolean = false>(options: Options<ReceivingListData, ThrowOnError>): RequestResult<ReceivingListResponses, unknown, ThrowOnError> {
668
+ return (options.client ?? this.client).get<ReceivingListResponses, unknown, ThrowOnError>({
669
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
670
+ url: '/api/v1/partner/v1/customers/{customerId}/receiving-accounts',
671
+ ...options
672
+ });
673
+ }
674
+
675
+ /**
676
+ * Payments seen on the customer's receiving accounts, including ones still in flight
677
+ */
678
+ public activity<ThrowOnError extends boolean = false>(options: Options<ReceivingActivityData, ThrowOnError>): RequestResult<ReceivingActivityResponses, unknown, ThrowOnError> {
679
+ return (options.client ?? this.client).get<ReceivingActivityResponses, unknown, ThrowOnError>({
680
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
681
+ url: '/api/v1/partner/v1/customers/{customerId}/receiving-accounts/activity',
682
+ ...options
683
+ });
684
+ }
685
+
686
+ /**
687
+ * Open (or return) the customer's account for one currency
688
+ *
689
+ * Idempotent per currency -- calling twice returns the same account rather than opening a second one.
690
+ */
691
+ public open<ThrowOnError extends boolean = false>(options: Options<ReceivingOpenData, ThrowOnError>): RequestResult<ReceivingOpenResponses, unknown, ThrowOnError> {
692
+ return (options.client ?? this.client).post<ReceivingOpenResponses, unknown, ThrowOnError>({
693
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
694
+ url: '/api/v1/partner/v1/customers/{customerId}/receiving-accounts/{currency}',
695
+ ...options
696
+ });
697
+ }
698
+
699
+ /**
700
+ * Re-read one of the customer's accounts from the partner
701
+ *
702
+ * An account is often issued pending and activated shortly after, and nothing pushes a notification for that transition.
703
+ */
704
+ public refresh<ThrowOnError extends boolean = false>(options: Options<ReceivingRefreshData, ThrowOnError>): RequestResult<ReceivingRefreshResponses, unknown, ThrowOnError> {
705
+ return (options.client ?? this.client).post<ReceivingRefreshResponses, unknown, ThrowOnError>({
706
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
707
+ url: '/api/v1/partner/v1/customers/{customerId}/receiving-accounts/{currency}/refresh',
708
+ ...options
709
+ });
710
+ }
711
+ }
712
+
713
+ export class Countries extends HeyApiClient {
714
+ /**
715
+ * Countries currently enabled for onboarding
716
+ */
717
+ public list<ThrowOnError extends boolean = false>(options?: Options<CountriesListData, ThrowOnError>): RequestResult<CountriesListResponses, unknown, ThrowOnError> {
718
+ return (options?.client ?? this.client).get<CountriesListResponses, unknown, ThrowOnError>({
719
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
720
+ url: '/api/v1/partner/v1/countries',
721
+ ...options
722
+ });
723
+ }
724
+ }
725
+
726
+ export class Features extends HeyApiClient {
727
+ /**
728
+ * Every switchable capability and its current state
729
+ */
730
+ public list<ThrowOnError extends boolean = false>(options?: Options<FeaturesListData, ThrowOnError>): RequestResult<FeaturesListResponses, unknown, ThrowOnError> {
731
+ return (options?.client ?? this.client).get<FeaturesListResponses, unknown, ThrowOnError>({
732
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
733
+ url: '/api/v1/partner/v1/features',
734
+ ...options
735
+ });
736
+ }
737
+ }
738
+
739
+ export class Webhook extends HeyApiClient {
740
+ /**
741
+ * Your current webhook URL and whether a secret is set
742
+ */
743
+ public config<ThrowOnError extends boolean = false>(options?: Options<WebhookConfigData, ThrowOnError>): RequestResult<WebhookConfigResponses, unknown, ThrowOnError> {
744
+ return (options?.client ?? this.client).get<WebhookConfigResponses, unknown, ThrowOnError>({
745
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
746
+ url: '/api/v1/partner/v1/webhook',
747
+ ...options
748
+ });
749
+ }
750
+
751
+ /**
752
+ * Set your webhook URL and receive a new signing secret
753
+ *
754
+ * Validates the URL, mints a fresh secret (the old one stops working), stores it encrypted, and immediately POSTs a signed `webhook.test` event to the URL. The secret is returned here and nowhere else.
755
+ */
756
+ public setUrl<ThrowOnError extends boolean = false>(options: Options<WebhookSetUrlData, ThrowOnError>): RequestResult<WebhookSetUrlResponses, unknown, ThrowOnError> {
757
+ return (options.client ?? this.client).put<WebhookSetUrlResponses, unknown, ThrowOnError>({
758
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
759
+ url: '/api/v1/partner/v1/webhook',
760
+ ...options,
761
+ headers: {
762
+ 'Content-Type': 'application/json',
763
+ ...options.headers
764
+ }
765
+ });
766
+ }
767
+
768
+ /**
769
+ * Rotate the signing secret
770
+ *
771
+ * The previous secret stops working immediately; queued deliveries are signed with the new one. A `webhook.test` ping is sent, as on PUT.
772
+ */
773
+ public rotateSecret<ThrowOnError extends boolean = false>(options?: Options<WebhookRotateSecretData, ThrowOnError>): RequestResult<WebhookRotateSecretResponses, unknown, ThrowOnError> {
774
+ return (options?.client ?? this.client).post<WebhookRotateSecretResponses, unknown, ThrowOnError>({
775
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
776
+ url: '/api/v1/partner/v1/webhook/rotate-secret',
777
+ ...options
778
+ });
779
+ }
780
+
781
+ /**
782
+ * Your delivery log, newest first
783
+ */
784
+ public deliveries<ThrowOnError extends boolean = false>(options?: Options<WebhookDeliveriesData, ThrowOnError>): RequestResult<WebhookDeliveriesResponses, unknown, ThrowOnError> {
785
+ return (options?.client ?? this.client).get<WebhookDeliveriesResponses, unknown, ThrowOnError>({
786
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
787
+ url: '/api/v1/partner/v1/webhook/deliveries',
788
+ ...options
789
+ });
790
+ }
791
+
792
+ /**
793
+ * One delivery, including the payload that was sent
794
+ */
795
+ public delivery<ThrowOnError extends boolean = false>(options: Options<WebhookDeliveryData, ThrowOnError>): RequestResult<WebhookDeliveryResponses, unknown, ThrowOnError> {
796
+ return (options.client ?? this.client).get<WebhookDeliveryResponses, unknown, ThrowOnError>({
797
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
798
+ url: '/api/v1/partner/v1/webhook/deliveries/{id}',
799
+ ...options
800
+ });
801
+ }
802
+
803
+ /**
804
+ * Send a delivery again
805
+ *
806
+ * Queues it for immediate re-delivery with the SAME event id, so your handler can recognise it as a duplicate if the original did land.
807
+ */
808
+ public replay<ThrowOnError extends boolean = false>(options: Options<WebhookReplayData, ThrowOnError>): RequestResult<WebhookReplayResponses, unknown, ThrowOnError> {
809
+ return (options.client ?? this.client).post<WebhookReplayResponses, unknown, ThrowOnError>({
810
+ security: [{ name: 'x-api-key', type: 'apiKey' }],
811
+ url: '/api/v1/partner/v1/webhook/deliveries/{id}/replay',
812
+ ...options
813
+ });
814
+ }
815
+ }
816
+
817
+ export class DutchmanBridge extends HeyApiClient {
818
+ public static readonly __registry: HeyApiRegistry<DutchmanBridge> = new HeyApiRegistry<DutchmanBridge>();
819
+
820
+ constructor(args?: {
821
+ client?: Client;
822
+ key?: string;
823
+ }) {
824
+ super(args);
825
+ DutchmanBridge.__registry.set(this, args?.key);
826
+ }
827
+
828
+ private _customers?: Customers;
829
+ get customers(): Customers {
830
+ return this._customers ??= new Customers({ client: this.client });
831
+ }
832
+
833
+ private _profile?: Profile;
834
+ get profile(): Profile {
835
+ return this._profile ??= new Profile({ client: this.client });
836
+ }
837
+
838
+ private _kyc?: Kyc;
839
+ get kyc(): Kyc {
840
+ return this._kyc ??= new Kyc({ client: this.client });
841
+ }
842
+
843
+ private _wallet?: Wallet;
844
+ get wallet(): Wallet {
845
+ return this._wallet ??= new Wallet({ client: this.client });
846
+ }
847
+
848
+ private _send?: Send;
849
+ get send(): Send {
850
+ return this._send ??= new Send({ client: this.client });
851
+ }
852
+
853
+ private _globalSend?: GlobalSend;
854
+ get globalSend(): GlobalSend {
855
+ return this._globalSend ??= new GlobalSend({ client: this.client });
856
+ }
857
+
858
+ private _ramp?: Ramp;
859
+ get ramp(): Ramp {
860
+ return this._ramp ??= new Ramp({ client: this.client });
861
+ }
862
+
863
+ private _bank?: Bank;
864
+ get bank(): Bank {
865
+ return this._bank ??= new Bank({ client: this.client });
866
+ }
867
+
868
+ private _receiving?: Receiving;
869
+ get receiving(): Receiving {
870
+ return this._receiving ??= new Receiving({ client: this.client });
871
+ }
872
+
873
+ private _countries?: Countries;
874
+ get countries(): Countries {
875
+ return this._countries ??= new Countries({ client: this.client });
876
+ }
877
+
878
+ private _features?: Features;
879
+ get features(): Features {
880
+ return this._features ??= new Features({ client: this.client });
881
+ }
882
+
883
+ private _webhook?: Webhook;
884
+ get webhook(): Webhook {
885
+ return this._webhook ??= new Webhook({ client: this.client });
886
+ }
887
+ }