@arbiwallet/contracts 1.0.49 → 1.0.50
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.
- package/gen/card.ts +505 -0
- package/gen/ledger.ts +26 -0
- package/package.json +1 -1
- package/proto/card.proto +360 -0
- package/proto/ledger.proto +16 -0
package/gen/card.ts
ADDED
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
|
|
2
|
+
// versions:
|
|
3
|
+
// protoc-gen-ts_proto v2.11.4
|
|
4
|
+
// protoc v7.34.0
|
|
5
|
+
// source: card.proto
|
|
6
|
+
|
|
7
|
+
/* eslint-disable */
|
|
8
|
+
import { GrpcMethod, GrpcStreamMethod } from "@nestjs/microservices";
|
|
9
|
+
import { Observable } from "rxjs";
|
|
10
|
+
|
|
11
|
+
export const protobufPackage = "card.v1";
|
|
12
|
+
|
|
13
|
+
export enum CardStatus {
|
|
14
|
+
CARD_STATUS_UNSPECIFIED = 0,
|
|
15
|
+
CARD_STATUS_CREATED = 1,
|
|
16
|
+
CARD_STATUS_ACTIVE = 2,
|
|
17
|
+
CARD_STATUS_FROZEN = 3,
|
|
18
|
+
CARD_STATUS_BLOCKED = 4,
|
|
19
|
+
CARD_STATUS_DELETED = 5,
|
|
20
|
+
CARD_STATUS_ERROR = 6,
|
|
21
|
+
UNRECOGNIZED = -1,
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface GetCardProvidersInfoRequest {
|
|
25
|
+
accountId: number;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export interface CardProviderInfo {
|
|
29
|
+
id: number;
|
|
30
|
+
cardType: string;
|
|
31
|
+
currency: string;
|
|
32
|
+
bin: string;
|
|
33
|
+
cardFormFactor: string;
|
|
34
|
+
kycRequired: boolean;
|
|
35
|
+
initBalance: string;
|
|
36
|
+
regions: string[];
|
|
37
|
+
phonePrefixes: string[];
|
|
38
|
+
cardRegion: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export interface GetCardProvidersInfoResponse {
|
|
42
|
+
providers: CardProviderInfo[];
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface CreateCardRequest {
|
|
46
|
+
accountId: number;
|
|
47
|
+
name: string;
|
|
48
|
+
currency: string;
|
|
49
|
+
cardType: string;
|
|
50
|
+
isVirtual: boolean;
|
|
51
|
+
bin: string;
|
|
52
|
+
cardHolderName: string;
|
|
53
|
+
phone: string;
|
|
54
|
+
email: string;
|
|
55
|
+
externalUuid: string;
|
|
56
|
+
otpCode: string;
|
|
57
|
+
isAutoTopup: boolean;
|
|
58
|
+
autoTopAmount: string;
|
|
59
|
+
autoTopupLimit: string;
|
|
60
|
+
cardBalanceThreshold: string;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export interface CreateCardsBatchRequest {
|
|
64
|
+
template: CreateCardRequest | undefined;
|
|
65
|
+
numberOfCards: number;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface CreateCardsBatchResponse {
|
|
69
|
+
cards: CardResponse[];
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export interface TopupCardRequest {
|
|
73
|
+
accountId: number;
|
|
74
|
+
cardId: number;
|
|
75
|
+
amount: string;
|
|
76
|
+
cardCryptoCurrency: string;
|
|
77
|
+
otpCode: string;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface TopupCardResponse {
|
|
81
|
+
cardId: number;
|
|
82
|
+
currencyCredit: string;
|
|
83
|
+
amountCredit: string;
|
|
84
|
+
amountDebit: string;
|
|
85
|
+
currencyDebit: string;
|
|
86
|
+
fee: string;
|
|
87
|
+
totalAmount: string;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
export interface GetTopupFeeRequest {
|
|
91
|
+
accountId: number;
|
|
92
|
+
cardId: number;
|
|
93
|
+
amount: string;
|
|
94
|
+
cardCryptoCurrency: string;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export interface GetTopupFeeResponse {
|
|
98
|
+
cardId: number;
|
|
99
|
+
amount: string;
|
|
100
|
+
cardCryptoCurrency: string;
|
|
101
|
+
feeAmount: string;
|
|
102
|
+
feeCurrency: string;
|
|
103
|
+
cardCurrency: string;
|
|
104
|
+
amountToCard: string;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export interface UpdateAutoTopupRequest {
|
|
108
|
+
accountId: number;
|
|
109
|
+
cardId: number;
|
|
110
|
+
isAutoTopup: boolean;
|
|
111
|
+
autoTopAmount: string;
|
|
112
|
+
autoTopupLimit: string;
|
|
113
|
+
currentAutoTopupAmount: string;
|
|
114
|
+
cardBalanceThreshold: string;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
export interface GetAutoTopupRequest {
|
|
118
|
+
accountId: number;
|
|
119
|
+
cardId: number;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export interface AutoTopupResponse {
|
|
123
|
+
cardId: number;
|
|
124
|
+
isAutoTopup: boolean;
|
|
125
|
+
autoTopAmount: string;
|
|
126
|
+
autoTopupLimit: string;
|
|
127
|
+
currentAutoTopupAmount: string;
|
|
128
|
+
cardBalanceThreshold: string;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export interface ListCardsRequest {
|
|
132
|
+
accountId: number;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
export interface ListCardsResponse {
|
|
136
|
+
cards: CardResponse[];
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export interface ListCardsPaginatedRequest {
|
|
140
|
+
accountId: number;
|
|
141
|
+
page: number;
|
|
142
|
+
size: number;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export interface ListCardsPaginatedResponse {
|
|
146
|
+
items: CardResponse[];
|
|
147
|
+
total: number;
|
|
148
|
+
page: number;
|
|
149
|
+
size: number;
|
|
150
|
+
pages: number;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
export interface GetCardRequest {
|
|
154
|
+
accountId: number;
|
|
155
|
+
cardId: number;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export interface CardResponse {
|
|
159
|
+
id: number;
|
|
160
|
+
name: string;
|
|
161
|
+
accountId: number;
|
|
162
|
+
balance: string;
|
|
163
|
+
currency: string;
|
|
164
|
+
cardNumber: string;
|
|
165
|
+
issuerId: number;
|
|
166
|
+
cardType: string;
|
|
167
|
+
cvv: string;
|
|
168
|
+
status: CardStatus;
|
|
169
|
+
isVirtual: boolean;
|
|
170
|
+
createdAt: string;
|
|
171
|
+
expiresAt: string;
|
|
172
|
+
phone: string;
|
|
173
|
+
email: string;
|
|
174
|
+
cardHolderName: string;
|
|
175
|
+
externalUuid: string;
|
|
176
|
+
isAutoTopup: boolean;
|
|
177
|
+
autoTopAmount: string;
|
|
178
|
+
autoTopupLimit: string;
|
|
179
|
+
currentAutoTopupAmount: string;
|
|
180
|
+
cardBalanceThreshold: string;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export interface GetCardBalanceRequest {
|
|
184
|
+
accountId: number;
|
|
185
|
+
cardId: number;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
export interface GetCardBalanceResponse {
|
|
189
|
+
cardId: number;
|
|
190
|
+
balance: string;
|
|
191
|
+
currency: string;
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
export interface GetCardTransactionsRequest {
|
|
195
|
+
accountId: number;
|
|
196
|
+
cardId: number;
|
|
197
|
+
pagerOffset: number;
|
|
198
|
+
pagerSize: number;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export interface CardTransaction {
|
|
202
|
+
paymentId: number;
|
|
203
|
+
cardId: number;
|
|
204
|
+
cardNumber: string;
|
|
205
|
+
amount: string;
|
|
206
|
+
cardCurrency: string;
|
|
207
|
+
operationType: string;
|
|
208
|
+
status: string;
|
|
209
|
+
createdAt: string;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
export interface Edge {
|
|
213
|
+
offset: number;
|
|
214
|
+
size: number;
|
|
215
|
+
total: number;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
export interface GetCardTransactionsResponse {
|
|
219
|
+
payments: CardTransaction[];
|
|
220
|
+
edge: Edge | undefined;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
export interface GetCardAuthTransactionsRequest {
|
|
224
|
+
accountId: number;
|
|
225
|
+
cardId: number;
|
|
226
|
+
pagerOffset: number;
|
|
227
|
+
pagerSize: number;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
export interface CardAuthTransaction {
|
|
231
|
+
id: number;
|
|
232
|
+
cardId: number;
|
|
233
|
+
currency: string;
|
|
234
|
+
amount: string;
|
|
235
|
+
authorizedAmount: string;
|
|
236
|
+
authorizedCurrency: string;
|
|
237
|
+
merchantName: string;
|
|
238
|
+
type: string;
|
|
239
|
+
status: string;
|
|
240
|
+
description: string;
|
|
241
|
+
transactionTime: string;
|
|
242
|
+
settleDate: string;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
export interface GetCardAuthTransactionsResponse {
|
|
246
|
+
transactions: CardAuthTransaction[];
|
|
247
|
+
edge: Edge | undefined;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
export interface GetCard3dsCodesRequest {
|
|
251
|
+
accountId: number;
|
|
252
|
+
cardId: number;
|
|
253
|
+
pagerOffset: number;
|
|
254
|
+
pagerSize: number;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export interface Card3dsInfo {
|
|
258
|
+
id: number;
|
|
259
|
+
cardId: number;
|
|
260
|
+
currency: string;
|
|
261
|
+
amount: string;
|
|
262
|
+
merchantName: string;
|
|
263
|
+
type: string;
|
|
264
|
+
values: string;
|
|
265
|
+
description: string;
|
|
266
|
+
transactionTime: string;
|
|
267
|
+
expirationTime: string;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
export interface GetCard3dsCodesResponse {
|
|
271
|
+
card3dsInfo: Card3dsInfo[];
|
|
272
|
+
edge: Edge | undefined;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
export interface UpdateCardStatusRequest {
|
|
276
|
+
accountId: number;
|
|
277
|
+
cardId: number;
|
|
278
|
+
status: CardStatus;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
export interface CardActionRequest {
|
|
282
|
+
accountId: number;
|
|
283
|
+
cardId: number;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
export interface DeleteCardResponse {
|
|
287
|
+
ok: boolean;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
export interface GetBinsRequest {
|
|
291
|
+
accountId: number;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export interface GetBinRequest {
|
|
295
|
+
accountId: number;
|
|
296
|
+
bin: string;
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
export interface GetBinsExistsRequest {
|
|
300
|
+
accountId: number;
|
|
301
|
+
}
|
|
302
|
+
|
|
303
|
+
export interface GetAreaCodesRequest {
|
|
304
|
+
accountId: number;
|
|
305
|
+
bin: string;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
export interface GetRegionsRequest {
|
|
309
|
+
accountId: number;
|
|
310
|
+
bin: string;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export interface BinResponse {
|
|
314
|
+
bin: string;
|
|
315
|
+
cardType: string;
|
|
316
|
+
currency: string;
|
|
317
|
+
provider: string;
|
|
318
|
+
kycRequired: boolean;
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export interface GetBinsResponse {
|
|
322
|
+
bins: BinResponse[];
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
export interface GetBinsExistsResponse {
|
|
326
|
+
bins: string[];
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
export interface GetAreaCodesResponse {
|
|
330
|
+
areaCodes: string[];
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
export interface GetRegionsResponse {
|
|
334
|
+
regions: string[];
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
export const CARD_V1_PACKAGE_NAME = "card.v1";
|
|
338
|
+
|
|
339
|
+
export interface CardServiceClient {
|
|
340
|
+
getCardProvidersInfo(request: GetCardProvidersInfoRequest): Observable<GetCardProvidersInfoResponse>;
|
|
341
|
+
|
|
342
|
+
createCard(request: CreateCardRequest): Observable<CardResponse>;
|
|
343
|
+
|
|
344
|
+
createCardsBatch(request: CreateCardsBatchRequest): Observable<CreateCardsBatchResponse>;
|
|
345
|
+
|
|
346
|
+
topupCard(request: TopupCardRequest): Observable<TopupCardResponse>;
|
|
347
|
+
|
|
348
|
+
getTopupFee(request: GetTopupFeeRequest): Observable<GetTopupFeeResponse>;
|
|
349
|
+
|
|
350
|
+
updateAutoTopup(request: UpdateAutoTopupRequest): Observable<AutoTopupResponse>;
|
|
351
|
+
|
|
352
|
+
getAutoTopup(request: GetAutoTopupRequest): Observable<AutoTopupResponse>;
|
|
353
|
+
|
|
354
|
+
listCards(request: ListCardsRequest): Observable<ListCardsResponse>;
|
|
355
|
+
|
|
356
|
+
listCardsPaginated(request: ListCardsPaginatedRequest): Observable<ListCardsPaginatedResponse>;
|
|
357
|
+
|
|
358
|
+
getCard(request: GetCardRequest): Observable<CardResponse>;
|
|
359
|
+
|
|
360
|
+
getCardBalance(request: GetCardBalanceRequest): Observable<GetCardBalanceResponse>;
|
|
361
|
+
|
|
362
|
+
getCardTransactions(request: GetCardTransactionsRequest): Observable<GetCardTransactionsResponse>;
|
|
363
|
+
|
|
364
|
+
getCardAuthTransactions(request: GetCardAuthTransactionsRequest): Observable<GetCardAuthTransactionsResponse>;
|
|
365
|
+
|
|
366
|
+
getCard3DsCodes(request: GetCard3dsCodesRequest): Observable<GetCard3dsCodesResponse>;
|
|
367
|
+
|
|
368
|
+
updateCardStatus(request: UpdateCardStatusRequest): Observable<CardResponse>;
|
|
369
|
+
|
|
370
|
+
freezeCard(request: CardActionRequest): Observable<CardResponse>;
|
|
371
|
+
|
|
372
|
+
unfreezeCard(request: CardActionRequest): Observable<CardResponse>;
|
|
373
|
+
|
|
374
|
+
deleteCard(request: CardActionRequest): Observable<DeleteCardResponse>;
|
|
375
|
+
|
|
376
|
+
getBins(request: GetBinsRequest): Observable<GetBinsResponse>;
|
|
377
|
+
|
|
378
|
+
getBin(request: GetBinRequest): Observable<BinResponse>;
|
|
379
|
+
|
|
380
|
+
getBinsExists(request: GetBinsExistsRequest): Observable<GetBinsExistsResponse>;
|
|
381
|
+
|
|
382
|
+
getAreaCodes(request: GetAreaCodesRequest): Observable<GetAreaCodesResponse>;
|
|
383
|
+
|
|
384
|
+
getRegions(request: GetRegionsRequest): Observable<GetRegionsResponse>;
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
export interface CardServiceController {
|
|
388
|
+
getCardProvidersInfo(
|
|
389
|
+
request: GetCardProvidersInfoRequest,
|
|
390
|
+
): Promise<GetCardProvidersInfoResponse> | Observable<GetCardProvidersInfoResponse> | GetCardProvidersInfoResponse;
|
|
391
|
+
|
|
392
|
+
createCard(request: CreateCardRequest): Promise<CardResponse> | Observable<CardResponse> | CardResponse;
|
|
393
|
+
|
|
394
|
+
createCardsBatch(
|
|
395
|
+
request: CreateCardsBatchRequest,
|
|
396
|
+
): Promise<CreateCardsBatchResponse> | Observable<CreateCardsBatchResponse> | CreateCardsBatchResponse;
|
|
397
|
+
|
|
398
|
+
topupCard(request: TopupCardRequest): Promise<TopupCardResponse> | Observable<TopupCardResponse> | TopupCardResponse;
|
|
399
|
+
|
|
400
|
+
getTopupFee(
|
|
401
|
+
request: GetTopupFeeRequest,
|
|
402
|
+
): Promise<GetTopupFeeResponse> | Observable<GetTopupFeeResponse> | GetTopupFeeResponse;
|
|
403
|
+
|
|
404
|
+
updateAutoTopup(
|
|
405
|
+
request: UpdateAutoTopupRequest,
|
|
406
|
+
): Promise<AutoTopupResponse> | Observable<AutoTopupResponse> | AutoTopupResponse;
|
|
407
|
+
|
|
408
|
+
getAutoTopup(
|
|
409
|
+
request: GetAutoTopupRequest,
|
|
410
|
+
): Promise<AutoTopupResponse> | Observable<AutoTopupResponse> | AutoTopupResponse;
|
|
411
|
+
|
|
412
|
+
listCards(request: ListCardsRequest): Promise<ListCardsResponse> | Observable<ListCardsResponse> | ListCardsResponse;
|
|
413
|
+
|
|
414
|
+
listCardsPaginated(
|
|
415
|
+
request: ListCardsPaginatedRequest,
|
|
416
|
+
): Promise<ListCardsPaginatedResponse> | Observable<ListCardsPaginatedResponse> | ListCardsPaginatedResponse;
|
|
417
|
+
|
|
418
|
+
getCard(request: GetCardRequest): Promise<CardResponse> | Observable<CardResponse> | CardResponse;
|
|
419
|
+
|
|
420
|
+
getCardBalance(
|
|
421
|
+
request: GetCardBalanceRequest,
|
|
422
|
+
): Promise<GetCardBalanceResponse> | Observable<GetCardBalanceResponse> | GetCardBalanceResponse;
|
|
423
|
+
|
|
424
|
+
getCardTransactions(
|
|
425
|
+
request: GetCardTransactionsRequest,
|
|
426
|
+
): Promise<GetCardTransactionsResponse> | Observable<GetCardTransactionsResponse> | GetCardTransactionsResponse;
|
|
427
|
+
|
|
428
|
+
getCardAuthTransactions(
|
|
429
|
+
request: GetCardAuthTransactionsRequest,
|
|
430
|
+
):
|
|
431
|
+
| Promise<GetCardAuthTransactionsResponse>
|
|
432
|
+
| Observable<GetCardAuthTransactionsResponse>
|
|
433
|
+
| GetCardAuthTransactionsResponse;
|
|
434
|
+
|
|
435
|
+
getCard3DsCodes(
|
|
436
|
+
request: GetCard3dsCodesRequest,
|
|
437
|
+
): Promise<GetCard3dsCodesResponse> | Observable<GetCard3dsCodesResponse> | GetCard3dsCodesResponse;
|
|
438
|
+
|
|
439
|
+
updateCardStatus(request: UpdateCardStatusRequest): Promise<CardResponse> | Observable<CardResponse> | CardResponse;
|
|
440
|
+
|
|
441
|
+
freezeCard(request: CardActionRequest): Promise<CardResponse> | Observable<CardResponse> | CardResponse;
|
|
442
|
+
|
|
443
|
+
unfreezeCard(request: CardActionRequest): Promise<CardResponse> | Observable<CardResponse> | CardResponse;
|
|
444
|
+
|
|
445
|
+
deleteCard(
|
|
446
|
+
request: CardActionRequest,
|
|
447
|
+
): Promise<DeleteCardResponse> | Observable<DeleteCardResponse> | DeleteCardResponse;
|
|
448
|
+
|
|
449
|
+
getBins(request: GetBinsRequest): Promise<GetBinsResponse> | Observable<GetBinsResponse> | GetBinsResponse;
|
|
450
|
+
|
|
451
|
+
getBin(request: GetBinRequest): Promise<BinResponse> | Observable<BinResponse> | BinResponse;
|
|
452
|
+
|
|
453
|
+
getBinsExists(
|
|
454
|
+
request: GetBinsExistsRequest,
|
|
455
|
+
): Promise<GetBinsExistsResponse> | Observable<GetBinsExistsResponse> | GetBinsExistsResponse;
|
|
456
|
+
|
|
457
|
+
getAreaCodes(
|
|
458
|
+
request: GetAreaCodesRequest,
|
|
459
|
+
): Promise<GetAreaCodesResponse> | Observable<GetAreaCodesResponse> | GetAreaCodesResponse;
|
|
460
|
+
|
|
461
|
+
getRegions(
|
|
462
|
+
request: GetRegionsRequest,
|
|
463
|
+
): Promise<GetRegionsResponse> | Observable<GetRegionsResponse> | GetRegionsResponse;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
export function CardServiceControllerMethods() {
|
|
467
|
+
return function (constructor: Function) {
|
|
468
|
+
const grpcMethods: string[] = [
|
|
469
|
+
"getCardProvidersInfo",
|
|
470
|
+
"createCard",
|
|
471
|
+
"createCardsBatch",
|
|
472
|
+
"topupCard",
|
|
473
|
+
"getTopupFee",
|
|
474
|
+
"updateAutoTopup",
|
|
475
|
+
"getAutoTopup",
|
|
476
|
+
"listCards",
|
|
477
|
+
"listCardsPaginated",
|
|
478
|
+
"getCard",
|
|
479
|
+
"getCardBalance",
|
|
480
|
+
"getCardTransactions",
|
|
481
|
+
"getCardAuthTransactions",
|
|
482
|
+
"getCard3DsCodes",
|
|
483
|
+
"updateCardStatus",
|
|
484
|
+
"freezeCard",
|
|
485
|
+
"unfreezeCard",
|
|
486
|
+
"deleteCard",
|
|
487
|
+
"getBins",
|
|
488
|
+
"getBin",
|
|
489
|
+
"getBinsExists",
|
|
490
|
+
"getAreaCodes",
|
|
491
|
+
"getRegions",
|
|
492
|
+
];
|
|
493
|
+
for (const method of grpcMethods) {
|
|
494
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
495
|
+
GrpcMethod("CardService", method)(constructor.prototype[method], method, descriptor);
|
|
496
|
+
}
|
|
497
|
+
const grpcStreamMethods: string[] = [];
|
|
498
|
+
for (const method of grpcStreamMethods) {
|
|
499
|
+
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
|
500
|
+
GrpcStreamMethod("CardService", method)(constructor.prototype[method], method, descriptor);
|
|
501
|
+
}
|
|
502
|
+
};
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
export const CARD_SERVICE_NAME = "CardService";
|
package/gen/ledger.ts
CHANGED
|
@@ -294,6 +294,21 @@ export interface GetBalancesBatchResponse {
|
|
|
294
294
|
users: UserBalancesRow[];
|
|
295
295
|
}
|
|
296
296
|
|
|
297
|
+
export interface GetFxRatesUsdRequest {
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
export interface FxRateUsdRow {
|
|
301
|
+
asset: string;
|
|
302
|
+
priceUsd: string;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
export interface GetFxRatesUsdResponse {
|
|
306
|
+
quoteCurrency: string;
|
|
307
|
+
updatedAt: string;
|
|
308
|
+
stale: boolean;
|
|
309
|
+
rates: FxRateUsdRow[];
|
|
310
|
+
}
|
|
311
|
+
|
|
297
312
|
export interface TransactionFeedItem {
|
|
298
313
|
id: string;
|
|
299
314
|
/** Тип события ленты (строка, см. TransactionFeedType в реализации). */
|
|
@@ -450,6 +465,10 @@ export interface LedgerServiceClient {
|
|
|
450
465
|
|
|
451
466
|
getBalancesBatch(request: GetBalancesBatchRequest): Observable<GetBalancesBatchResponse>;
|
|
452
467
|
|
|
468
|
+
/** Курсы поддерживаемых активов к USD (внешний провайдер, кэш в Ledger); без user_id — публичная справка для UI. */
|
|
469
|
+
|
|
470
|
+
getFxRatesUsd(request: GetFxRatesUsdRequest): Observable<GetFxRatesUsdResponse>;
|
|
471
|
+
|
|
453
472
|
/** Постраничная лента операций пользователя (история для UI); курсор и offset — на усмотрение сервера. */
|
|
454
473
|
|
|
455
474
|
getTransactionFeed(request: GetTransactionFeedRequest): Observable<GetTransactionFeedResponse>;
|
|
@@ -548,6 +567,12 @@ export interface LedgerServiceController {
|
|
|
548
567
|
request: GetBalancesBatchRequest,
|
|
549
568
|
): Promise<GetBalancesBatchResponse> | Observable<GetBalancesBatchResponse> | GetBalancesBatchResponse;
|
|
550
569
|
|
|
570
|
+
/** Курсы поддерживаемых активов к USD (внешний провайдер, кэш в Ledger); без user_id — публичная справка для UI. */
|
|
571
|
+
|
|
572
|
+
getFxRatesUsd(
|
|
573
|
+
request: GetFxRatesUsdRequest,
|
|
574
|
+
): Promise<GetFxRatesUsdResponse> | Observable<GetFxRatesUsdResponse> | GetFxRatesUsdResponse;
|
|
575
|
+
|
|
551
576
|
/** Постраничная лента операций пользователя (история для UI); курсор и offset — на усмотрение сервера. */
|
|
552
577
|
|
|
553
578
|
getTransactionFeed(
|
|
@@ -583,6 +608,7 @@ export function LedgerServiceControllerMethods() {
|
|
|
583
608
|
"getBalance",
|
|
584
609
|
"getBalances",
|
|
585
610
|
"getBalancesBatch",
|
|
611
|
+
"getFxRatesUsd",
|
|
586
612
|
"getTransactionFeed",
|
|
587
613
|
"listTransactions",
|
|
588
614
|
"internalTransfer",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arbiwallet/contracts",
|
|
3
3
|
"descriptions": "Generate and manage smart contracts for ArbiWallet",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.50",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"generate": "protoc -I ./proto ./proto/*.proto --ts_proto_out=./gen --ts_proto_opt=nestJs=true,package=omit"
|
|
7
7
|
},
|
package/proto/card.proto
ADDED
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
syntax = "proto3";
|
|
2
|
+
|
|
3
|
+
package card.v1;
|
|
4
|
+
|
|
5
|
+
option csharp_namespace = "Card.V1";
|
|
6
|
+
option java_multiple_files = true;
|
|
7
|
+
option java_package = "com.arbiwallet.card.v1";
|
|
8
|
+
|
|
9
|
+
service CardService {
|
|
10
|
+
rpc GetCardProvidersInfo(GetCardProvidersInfoRequest) returns (GetCardProvidersInfoResponse);
|
|
11
|
+
rpc CreateCard(CreateCardRequest) returns (CardResponse);
|
|
12
|
+
rpc CreateCardsBatch(CreateCardsBatchRequest) returns (CreateCardsBatchResponse);
|
|
13
|
+
rpc TopupCard(TopupCardRequest) returns (TopupCardResponse);
|
|
14
|
+
rpc GetTopupFee(GetTopupFeeRequest) returns (GetTopupFeeResponse);
|
|
15
|
+
rpc UpdateAutoTopup(UpdateAutoTopupRequest) returns (AutoTopupResponse);
|
|
16
|
+
rpc GetAutoTopup(GetAutoTopupRequest) returns (AutoTopupResponse);
|
|
17
|
+
|
|
18
|
+
rpc ListCards(ListCardsRequest) returns (ListCardsResponse);
|
|
19
|
+
rpc ListCardsPaginated(ListCardsPaginatedRequest) returns (ListCardsPaginatedResponse);
|
|
20
|
+
rpc GetCard(GetCardRequest) returns (CardResponse);
|
|
21
|
+
rpc GetCardBalance(GetCardBalanceRequest) returns (GetCardBalanceResponse);
|
|
22
|
+
|
|
23
|
+
rpc GetCardTransactions(GetCardTransactionsRequest) returns (GetCardTransactionsResponse);
|
|
24
|
+
rpc GetCardAuthTransactions(GetCardAuthTransactionsRequest) returns (GetCardAuthTransactionsResponse);
|
|
25
|
+
rpc GetCard3dsCodes(GetCard3dsCodesRequest) returns (GetCard3dsCodesResponse);
|
|
26
|
+
|
|
27
|
+
rpc UpdateCardStatus(UpdateCardStatusRequest) returns (CardResponse);
|
|
28
|
+
rpc FreezeCard(CardActionRequest) returns (CardResponse);
|
|
29
|
+
rpc UnfreezeCard(CardActionRequest) returns (CardResponse);
|
|
30
|
+
rpc DeleteCard(CardActionRequest) returns (DeleteCardResponse);
|
|
31
|
+
|
|
32
|
+
rpc GetBins(GetBinsRequest) returns (GetBinsResponse);
|
|
33
|
+
rpc GetBin(GetBinRequest) returns (BinResponse);
|
|
34
|
+
rpc GetBinsExists(GetBinsExistsRequest) returns (GetBinsExistsResponse);
|
|
35
|
+
rpc GetAreaCodes(GetAreaCodesRequest) returns (GetAreaCodesResponse);
|
|
36
|
+
rpc GetRegions(GetRegionsRequest) returns (GetRegionsResponse);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
enum CardStatus {
|
|
40
|
+
CARD_STATUS_UNSPECIFIED = 0;
|
|
41
|
+
CARD_STATUS_CREATED = 1;
|
|
42
|
+
CARD_STATUS_ACTIVE = 2;
|
|
43
|
+
CARD_STATUS_FROZEN = 3;
|
|
44
|
+
CARD_STATUS_BLOCKED = 4;
|
|
45
|
+
CARD_STATUS_DELETED = 5;
|
|
46
|
+
CARD_STATUS_ERROR = 6;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
message GetCardProvidersInfoRequest {
|
|
50
|
+
int64 account_id = 1;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
message CardProviderInfo {
|
|
54
|
+
int64 id = 1;
|
|
55
|
+
string card_type = 2;
|
|
56
|
+
string currency = 3;
|
|
57
|
+
string bin = 4;
|
|
58
|
+
string card_form_factor = 5;
|
|
59
|
+
bool kyc_required = 6;
|
|
60
|
+
string init_balance = 7;
|
|
61
|
+
repeated string regions = 8;
|
|
62
|
+
repeated string phone_prefixes = 9;
|
|
63
|
+
string card_region = 10;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
message GetCardProvidersInfoResponse {
|
|
67
|
+
repeated CardProviderInfo providers = 1;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
message CreateCardRequest {
|
|
71
|
+
int64 account_id = 1;
|
|
72
|
+
string name = 2;
|
|
73
|
+
string currency = 3;
|
|
74
|
+
string card_type = 4;
|
|
75
|
+
bool is_virtual = 5;
|
|
76
|
+
string bin = 6;
|
|
77
|
+
string card_holder_name = 7;
|
|
78
|
+
string phone = 8;
|
|
79
|
+
string email = 9;
|
|
80
|
+
string external_uuid = 10;
|
|
81
|
+
string otp_code = 11;
|
|
82
|
+
bool is_auto_topup = 12;
|
|
83
|
+
string auto_top_amount = 13;
|
|
84
|
+
string auto_topup_limit = 14;
|
|
85
|
+
string card_balance_threshold = 15;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
message CreateCardsBatchRequest {
|
|
89
|
+
CreateCardRequest template = 1;
|
|
90
|
+
int32 number_of_cards = 2;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
message CreateCardsBatchResponse {
|
|
94
|
+
repeated CardResponse cards = 1;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
message TopupCardRequest {
|
|
98
|
+
int64 account_id = 1;
|
|
99
|
+
int64 card_id = 2;
|
|
100
|
+
string amount = 3;
|
|
101
|
+
string card_crypto_currency = 4;
|
|
102
|
+
string otp_code = 5;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
message TopupCardResponse {
|
|
106
|
+
int64 card_id = 1;
|
|
107
|
+
string currency_credit = 2;
|
|
108
|
+
string amount_credit = 3;
|
|
109
|
+
string amount_debit = 4;
|
|
110
|
+
string currency_debit = 5;
|
|
111
|
+
string fee = 6;
|
|
112
|
+
string total_amount = 7;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
message GetTopupFeeRequest {
|
|
116
|
+
int64 account_id = 1;
|
|
117
|
+
int64 card_id = 2;
|
|
118
|
+
string amount = 3;
|
|
119
|
+
string card_crypto_currency = 4;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
message GetTopupFeeResponse {
|
|
123
|
+
int64 card_id = 1;
|
|
124
|
+
string amount = 2;
|
|
125
|
+
string card_crypto_currency = 3;
|
|
126
|
+
string fee_amount = 4;
|
|
127
|
+
string fee_currency = 5;
|
|
128
|
+
string card_currency = 6;
|
|
129
|
+
string amount_to_card = 7;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
message UpdateAutoTopupRequest {
|
|
133
|
+
int64 account_id = 1;
|
|
134
|
+
int64 card_id = 2;
|
|
135
|
+
bool is_auto_topup = 3;
|
|
136
|
+
string auto_top_amount = 4;
|
|
137
|
+
string auto_topup_limit = 5;
|
|
138
|
+
string current_auto_topup_amount = 6;
|
|
139
|
+
string card_balance_threshold = 7;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
message GetAutoTopupRequest {
|
|
143
|
+
int64 account_id = 1;
|
|
144
|
+
int64 card_id = 2;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
message AutoTopupResponse {
|
|
148
|
+
int64 card_id = 1;
|
|
149
|
+
bool is_auto_topup = 2;
|
|
150
|
+
string auto_top_amount = 3;
|
|
151
|
+
string auto_topup_limit = 4;
|
|
152
|
+
string current_auto_topup_amount = 5;
|
|
153
|
+
string card_balance_threshold = 6;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
message ListCardsRequest {
|
|
157
|
+
int64 account_id = 1;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
message ListCardsResponse {
|
|
161
|
+
repeated CardResponse cards = 1;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
message ListCardsPaginatedRequest {
|
|
165
|
+
int64 account_id = 1;
|
|
166
|
+
int32 page = 2;
|
|
167
|
+
int32 size = 3;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
message ListCardsPaginatedResponse {
|
|
171
|
+
repeated CardResponse items = 1;
|
|
172
|
+
int32 total = 2;
|
|
173
|
+
int32 page = 3;
|
|
174
|
+
int32 size = 4;
|
|
175
|
+
int32 pages = 5;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
message GetCardRequest {
|
|
179
|
+
int64 account_id = 1;
|
|
180
|
+
int64 card_id = 2;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
message CardResponse {
|
|
184
|
+
int64 id = 1;
|
|
185
|
+
string name = 2;
|
|
186
|
+
int64 account_id = 3;
|
|
187
|
+
string balance = 4;
|
|
188
|
+
string currency = 5;
|
|
189
|
+
string card_number = 6;
|
|
190
|
+
int64 issuer_id = 7;
|
|
191
|
+
string card_type = 8;
|
|
192
|
+
string cvv = 9;
|
|
193
|
+
CardStatus status = 10;
|
|
194
|
+
bool is_virtual = 11;
|
|
195
|
+
string created_at = 12;
|
|
196
|
+
string expires_at = 13;
|
|
197
|
+
string phone = 14;
|
|
198
|
+
string email = 15;
|
|
199
|
+
string card_holder_name = 16;
|
|
200
|
+
string external_uuid = 17;
|
|
201
|
+
bool is_auto_topup = 18;
|
|
202
|
+
string auto_top_amount = 19;
|
|
203
|
+
string auto_topup_limit = 20;
|
|
204
|
+
string current_auto_topup_amount = 21;
|
|
205
|
+
string card_balance_threshold = 22;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
message GetCardBalanceRequest {
|
|
209
|
+
int64 account_id = 1;
|
|
210
|
+
int64 card_id = 2;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
message GetCardBalanceResponse {
|
|
214
|
+
int64 card_id = 1;
|
|
215
|
+
string balance = 2;
|
|
216
|
+
string currency = 3;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
message GetCardTransactionsRequest {
|
|
220
|
+
int64 account_id = 1;
|
|
221
|
+
int64 card_id = 2;
|
|
222
|
+
int32 pager_offset = 3;
|
|
223
|
+
int32 pager_size = 4;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
message CardTransaction {
|
|
227
|
+
int64 payment_id = 1;
|
|
228
|
+
int64 card_id = 2;
|
|
229
|
+
string card_number = 3;
|
|
230
|
+
string amount = 4;
|
|
231
|
+
string card_currency = 5;
|
|
232
|
+
string operation_type = 6;
|
|
233
|
+
string status = 7;
|
|
234
|
+
string created_at = 8;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
message Edge {
|
|
238
|
+
int32 offset = 1;
|
|
239
|
+
int32 size = 2;
|
|
240
|
+
int32 total = 3;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
message GetCardTransactionsResponse {
|
|
244
|
+
repeated CardTransaction payments = 1;
|
|
245
|
+
Edge edge = 2;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
message GetCardAuthTransactionsRequest {
|
|
249
|
+
int64 account_id = 1;
|
|
250
|
+
int64 card_id = 2;
|
|
251
|
+
int32 pager_offset = 3;
|
|
252
|
+
int32 pager_size = 4;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
message CardAuthTransaction {
|
|
256
|
+
int64 id = 1;
|
|
257
|
+
int64 card_id = 2;
|
|
258
|
+
string currency = 3;
|
|
259
|
+
string amount = 4;
|
|
260
|
+
string authorized_amount = 5;
|
|
261
|
+
string authorized_currency = 6;
|
|
262
|
+
string merchant_name = 7;
|
|
263
|
+
string type = 8;
|
|
264
|
+
string status = 9;
|
|
265
|
+
string description = 10;
|
|
266
|
+
string transaction_time = 11;
|
|
267
|
+
string settle_date = 12;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
message GetCardAuthTransactionsResponse {
|
|
271
|
+
repeated CardAuthTransaction transactions = 1;
|
|
272
|
+
Edge edge = 2;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
message GetCard3dsCodesRequest {
|
|
276
|
+
int64 account_id = 1;
|
|
277
|
+
int64 card_id = 2;
|
|
278
|
+
int32 pager_offset = 3;
|
|
279
|
+
int32 pager_size = 4;
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
message Card3dsInfo {
|
|
283
|
+
int64 id = 1;
|
|
284
|
+
int64 card_id = 2;
|
|
285
|
+
string currency = 3;
|
|
286
|
+
string amount = 4;
|
|
287
|
+
string merchant_name = 5;
|
|
288
|
+
string type = 6;
|
|
289
|
+
string values = 7;
|
|
290
|
+
string description = 8;
|
|
291
|
+
string transaction_time = 9;
|
|
292
|
+
string expiration_time = 10;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
message GetCard3dsCodesResponse {
|
|
296
|
+
repeated Card3dsInfo card_3ds_info = 1;
|
|
297
|
+
Edge edge = 2;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
message UpdateCardStatusRequest {
|
|
301
|
+
int64 account_id = 1;
|
|
302
|
+
int64 card_id = 2;
|
|
303
|
+
CardStatus status = 3;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
message CardActionRequest {
|
|
307
|
+
int64 account_id = 1;
|
|
308
|
+
int64 card_id = 2;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
message DeleteCardResponse {
|
|
312
|
+
bool ok = 1;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
message GetBinsRequest {
|
|
316
|
+
int64 account_id = 1;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
message GetBinRequest {
|
|
320
|
+
int64 account_id = 1;
|
|
321
|
+
string bin = 2;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
message GetBinsExistsRequest {
|
|
325
|
+
int64 account_id = 1;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
message GetAreaCodesRequest {
|
|
329
|
+
int64 account_id = 1;
|
|
330
|
+
string bin = 2;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
message GetRegionsRequest {
|
|
334
|
+
int64 account_id = 1;
|
|
335
|
+
string bin = 2;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
message BinResponse {
|
|
339
|
+
string bin = 1;
|
|
340
|
+
string card_type = 2;
|
|
341
|
+
string currency = 3;
|
|
342
|
+
string provider = 4;
|
|
343
|
+
bool kyc_required = 5;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
message GetBinsResponse {
|
|
347
|
+
repeated BinResponse bins = 1;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
message GetBinsExistsResponse {
|
|
351
|
+
repeated string bins = 1;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
message GetAreaCodesResponse {
|
|
355
|
+
repeated string area_codes = 1;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
message GetRegionsResponse {
|
|
359
|
+
repeated string regions = 1;
|
|
360
|
+
}
|
package/proto/ledger.proto
CHANGED
|
@@ -35,6 +35,8 @@ service LedgerService {
|
|
|
35
35
|
rpc GetBalances(GetBalancesRequest) returns (GetBalancesResponse);
|
|
36
36
|
// Балансовые позиции сразу для массива пользователей.
|
|
37
37
|
rpc GetBalancesBatch(GetBalancesBatchRequest) returns (GetBalancesBatchResponse);
|
|
38
|
+
// Курсы поддерживаемых активов к USD (внешний провайдер, кэш в Ledger); без user_id — публичная справка для UI.
|
|
39
|
+
rpc GetFxRatesUsd(GetFxRatesUsdRequest) returns (GetFxRatesUsdResponse);
|
|
38
40
|
// Постраничная лента операций пользователя (история для UI); курсор и offset — на усмотрение сервера.
|
|
39
41
|
rpc GetTransactionFeed(GetTransactionFeedRequest) returns (GetTransactionFeedResponse);
|
|
40
42
|
// Админский список всех транзакций с пагинацией/фильтрами/поиском.
|
|
@@ -263,6 +265,20 @@ message GetBalancesBatchResponse {
|
|
|
263
265
|
repeated UserBalancesRow users = 1;
|
|
264
266
|
}
|
|
265
267
|
|
|
268
|
+
message GetFxRatesUsdRequest {}
|
|
269
|
+
|
|
270
|
+
message FxRateUsdRow {
|
|
271
|
+
string asset = 1;
|
|
272
|
+
string price_usd = 2;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
message GetFxRatesUsdResponse {
|
|
276
|
+
string quote_currency = 1;
|
|
277
|
+
string updated_at = 2;
|
|
278
|
+
bool stale = 3;
|
|
279
|
+
repeated FxRateUsdRow rates = 4;
|
|
280
|
+
}
|
|
281
|
+
|
|
266
282
|
message TransactionFeedItem {
|
|
267
283
|
string id = 1;
|
|
268
284
|
string type = 2; // Тип события ленты (строка, см. TransactionFeedType в реализации).
|