@arbiwallet/contracts 1.0.287 → 1.0.290
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/exchange_core.ts +110 -0
- package/gen/user.ts +49 -0
- package/package.json +1 -1
- package/proto/exchange_core.proto +84 -0
- package/proto/user.proto +28 -0
package/gen/exchange_core.ts
CHANGED
|
@@ -655,6 +655,83 @@ export interface GetWalletsMonikaResponse {
|
|
|
655
655
|
wallets: WalletMonikaItem[];
|
|
656
656
|
}
|
|
657
657
|
|
|
658
|
+
export interface ListExchangePayoutsRequest {
|
|
659
|
+
authManagerContext: AuthManagerContext | undefined;
|
|
660
|
+
page?: number | undefined;
|
|
661
|
+
pageSize?: number | undefined;
|
|
662
|
+
managerId?: string | undefined;
|
|
663
|
+
}
|
|
664
|
+
|
|
665
|
+
export interface ExchangePayoutManager {
|
|
666
|
+
id: string;
|
|
667
|
+
email?: string | undefined;
|
|
668
|
+
username?: string | undefined;
|
|
669
|
+
}
|
|
670
|
+
|
|
671
|
+
export interface ExchangePayoutItem {
|
|
672
|
+
id: string;
|
|
673
|
+
payoutAgentId?: string | undefined;
|
|
674
|
+
uuid?: string | undefined;
|
|
675
|
+
paymentAgent: number;
|
|
676
|
+
amount: number;
|
|
677
|
+
status: number;
|
|
678
|
+
paymentAgentStatus?: string | undefined;
|
|
679
|
+
pan?: string | undefined;
|
|
680
|
+
cardholder?: string | undefined;
|
|
681
|
+
managerId?: string | undefined;
|
|
682
|
+
manager?: ExchangePayoutManager | undefined;
|
|
683
|
+
createdAt: string;
|
|
684
|
+
updatedAt: string;
|
|
685
|
+
}
|
|
686
|
+
|
|
687
|
+
export interface ListExchangePayoutsResponse {
|
|
688
|
+
count: number;
|
|
689
|
+
next?: string | undefined;
|
|
690
|
+
previous?: string | undefined;
|
|
691
|
+
results: ExchangePayoutItem[];
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
export interface GetExchangePayoutRequest {
|
|
695
|
+
authManagerContext: AuthManagerContext | undefined;
|
|
696
|
+
id: string;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
export interface GetExchangePayoutResponse {
|
|
700
|
+
ok: boolean;
|
|
701
|
+
result?: ExchangePayoutItem | undefined;
|
|
702
|
+
error?: string | undefined;
|
|
703
|
+
validationErrors?: { [key: string]: any } | undefined;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
export interface CreateExchangePayoutRequest {
|
|
707
|
+
authManagerContext: AuthManagerContext | undefined;
|
|
708
|
+
amount: number;
|
|
709
|
+
pan: string;
|
|
710
|
+
holder: string;
|
|
711
|
+
cvv: string;
|
|
712
|
+
month: number;
|
|
713
|
+
year: number;
|
|
714
|
+
uuid: string;
|
|
715
|
+
paymentAgent?: number | undefined;
|
|
716
|
+
managerId?: string | undefined;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
export interface CreateExchangePayoutResponse {
|
|
720
|
+
ok: boolean;
|
|
721
|
+
result?: ExchangePayoutItem | undefined;
|
|
722
|
+
error?: string | undefined;
|
|
723
|
+
validationErrors?: { [key: string]: any } | undefined;
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
export interface HandleExchangePayoutWebhookRequest {
|
|
727
|
+
jsonPayload: string;
|
|
728
|
+
}
|
|
729
|
+
|
|
730
|
+
export interface HandleExchangePayoutWebhookResponse {
|
|
731
|
+
ok: boolean;
|
|
732
|
+
status: string;
|
|
733
|
+
}
|
|
734
|
+
|
|
658
735
|
export const EXCHANGE_CORE_PACKAGE_NAME = "exchange_core";
|
|
659
736
|
|
|
660
737
|
wrappers[".google.protobuf.Struct"] = { fromObject: Struct.wrap, toObject: Struct.unwrap } as any;
|
|
@@ -694,6 +771,16 @@ export interface ExchangeCoreServiceClient {
|
|
|
694
771
|
|
|
695
772
|
getExchangePayments(request: GetExchangePaymentsRequest): Observable<GetExchangePaymentsResponse>;
|
|
696
773
|
|
|
774
|
+
listExchangePayouts(request: ListExchangePayoutsRequest): Observable<ListExchangePayoutsResponse>;
|
|
775
|
+
|
|
776
|
+
getExchangePayout(request: GetExchangePayoutRequest): Observable<GetExchangePayoutResponse>;
|
|
777
|
+
|
|
778
|
+
createExchangePayout(request: CreateExchangePayoutRequest): Observable<CreateExchangePayoutResponse>;
|
|
779
|
+
|
|
780
|
+
handleExchangePayoutWebhook(
|
|
781
|
+
request: HandleExchangePayoutWebhookRequest,
|
|
782
|
+
): Observable<HandleExchangePayoutWebhookResponse>;
|
|
783
|
+
|
|
697
784
|
getExchangePayment(request: GetExchangePaymentRequest): Observable<GetExchangePaymentResponse>;
|
|
698
785
|
|
|
699
786
|
getPaymentsSummary(request: ExchangeCalculationsFiltersRequest): Observable<GetPaymentsSummaryResponse>;
|
|
@@ -787,6 +874,25 @@ export interface ExchangeCoreServiceController {
|
|
|
787
874
|
request: GetExchangePaymentsRequest,
|
|
788
875
|
): Promise<GetExchangePaymentsResponse> | Observable<GetExchangePaymentsResponse> | GetExchangePaymentsResponse;
|
|
789
876
|
|
|
877
|
+
listExchangePayouts(
|
|
878
|
+
request: ListExchangePayoutsRequest,
|
|
879
|
+
): Promise<ListExchangePayoutsResponse> | Observable<ListExchangePayoutsResponse> | ListExchangePayoutsResponse;
|
|
880
|
+
|
|
881
|
+
getExchangePayout(
|
|
882
|
+
request: GetExchangePayoutRequest,
|
|
883
|
+
): Promise<GetExchangePayoutResponse> | Observable<GetExchangePayoutResponse> | GetExchangePayoutResponse;
|
|
884
|
+
|
|
885
|
+
createExchangePayout(
|
|
886
|
+
request: CreateExchangePayoutRequest,
|
|
887
|
+
): Promise<CreateExchangePayoutResponse> | Observable<CreateExchangePayoutResponse> | CreateExchangePayoutResponse;
|
|
888
|
+
|
|
889
|
+
handleExchangePayoutWebhook(
|
|
890
|
+
request: HandleExchangePayoutWebhookRequest,
|
|
891
|
+
):
|
|
892
|
+
| Promise<HandleExchangePayoutWebhookResponse>
|
|
893
|
+
| Observable<HandleExchangePayoutWebhookResponse>
|
|
894
|
+
| HandleExchangePayoutWebhookResponse;
|
|
895
|
+
|
|
790
896
|
getExchangePayment(
|
|
791
897
|
request: GetExchangePaymentRequest,
|
|
792
898
|
): Promise<GetExchangePaymentResponse> | Observable<GetExchangePaymentResponse> | GetExchangePaymentResponse;
|
|
@@ -842,6 +948,10 @@ export function ExchangeCoreServiceControllerMethods() {
|
|
|
842
948
|
"createExchangePayment",
|
|
843
949
|
"handlePaymentWebhook",
|
|
844
950
|
"getExchangePayments",
|
|
951
|
+
"listExchangePayouts",
|
|
952
|
+
"getExchangePayout",
|
|
953
|
+
"createExchangePayout",
|
|
954
|
+
"handleExchangePayoutWebhook",
|
|
845
955
|
"getExchangePayment",
|
|
846
956
|
"getPaymentsSummary",
|
|
847
957
|
"searchExchangePayment",
|
package/gen/user.ts
CHANGED
|
@@ -225,6 +225,19 @@ export interface ListUsersResponse {
|
|
|
225
225
|
limit: number;
|
|
226
226
|
}
|
|
227
227
|
|
|
228
|
+
export interface ListUserSourcesRequest {
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export interface UserSourceItem {
|
|
232
|
+
id: number;
|
|
233
|
+
name: string;
|
|
234
|
+
code?: string | undefined;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
export interface ListUserSourcesResponse {
|
|
238
|
+
sources: UserSourceItem[];
|
|
239
|
+
}
|
|
240
|
+
|
|
228
241
|
export interface UserSearchExchangeStats {
|
|
229
242
|
exchangesCount: number;
|
|
230
243
|
exchangeCountLastYear: number;
|
|
@@ -598,6 +611,19 @@ export interface BatchGetUserIdsBySearchResponse {
|
|
|
598
611
|
totalMatches: number;
|
|
599
612
|
}
|
|
600
613
|
|
|
614
|
+
export interface BatchGetUserIdsByAdvChannelRequest {
|
|
615
|
+
advChannel: string;
|
|
616
|
+
/** Максимум возвращаемых id; сервис может дополнительно ограничить. */
|
|
617
|
+
limit: number;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
export interface BatchGetUserIdsByAdvChannelResponse {
|
|
621
|
+
userIds: number[];
|
|
622
|
+
/** true, если совпадений больше, чем limit (результат был обрезан). */
|
|
623
|
+
tooManyMatches: boolean;
|
|
624
|
+
totalMatches: number;
|
|
625
|
+
}
|
|
626
|
+
|
|
601
627
|
export interface SearchUserRequest {
|
|
602
628
|
/** Строка поиска по полям: telegram_username, email, phone, whatsapp. */
|
|
603
629
|
search: string;
|
|
@@ -685,6 +711,8 @@ export interface UserServiceClient {
|
|
|
685
711
|
|
|
686
712
|
listUsers(request: ListUsersRequest): Observable<ListUsersResponse>;
|
|
687
713
|
|
|
714
|
+
listUserSources(request: ListUserSourcesRequest): Observable<ListUserSourcesResponse>;
|
|
715
|
+
|
|
688
716
|
updateUserSearchStats(request: UpdateUserSearchStatsRequest): Observable<UpdateUserSearchStatsResponse>;
|
|
689
717
|
|
|
690
718
|
/** Батч-резолв полных имен пользователей по их id (для enrichment в других сервисах). */
|
|
@@ -799,6 +827,12 @@ export interface UserServiceClient {
|
|
|
799
827
|
|
|
800
828
|
batchGetUserIdsBySearch(request: BatchGetUserIdsBySearchRequest): Observable<BatchGetUserIdsBySearchResponse>;
|
|
801
829
|
|
|
830
|
+
/** Батч-поиск пользователей по adv channel (name/code/legacy string): возвращает только id. */
|
|
831
|
+
|
|
832
|
+
batchGetUserIdsByAdvChannel(
|
|
833
|
+
request: BatchGetUserIdsByAdvChannelRequest,
|
|
834
|
+
): Observable<BatchGetUserIdsByAdvChannelResponse>;
|
|
835
|
+
|
|
802
836
|
/** Поиск пользователей по строке (telegram_username, email, phone, whatsapp): возвращает до 50 совпадений. */
|
|
803
837
|
|
|
804
838
|
searchUser(request: SearchUserRequest): Observable<SearchUserResponse>;
|
|
@@ -833,6 +867,10 @@ export interface UserServiceController {
|
|
|
833
867
|
|
|
834
868
|
listUsers(request: ListUsersRequest): Promise<ListUsersResponse> | Observable<ListUsersResponse> | ListUsersResponse;
|
|
835
869
|
|
|
870
|
+
listUserSources(
|
|
871
|
+
request: ListUserSourcesRequest,
|
|
872
|
+
): Promise<ListUserSourcesResponse> | Observable<ListUserSourcesResponse> | ListUserSourcesResponse;
|
|
873
|
+
|
|
836
874
|
updateUserSearchStats(
|
|
837
875
|
request: UpdateUserSearchStatsRequest,
|
|
838
876
|
): Promise<UpdateUserSearchStatsResponse> | Observable<UpdateUserSearchStatsResponse> | UpdateUserSearchStatsResponse;
|
|
@@ -1045,6 +1083,15 @@ export interface UserServiceController {
|
|
|
1045
1083
|
| Observable<BatchGetUserIdsBySearchResponse>
|
|
1046
1084
|
| BatchGetUserIdsBySearchResponse;
|
|
1047
1085
|
|
|
1086
|
+
/** Батч-поиск пользователей по adv channel (name/code/legacy string): возвращает только id. */
|
|
1087
|
+
|
|
1088
|
+
batchGetUserIdsByAdvChannel(
|
|
1089
|
+
request: BatchGetUserIdsByAdvChannelRequest,
|
|
1090
|
+
):
|
|
1091
|
+
| Promise<BatchGetUserIdsByAdvChannelResponse>
|
|
1092
|
+
| Observable<BatchGetUserIdsByAdvChannelResponse>
|
|
1093
|
+
| BatchGetUserIdsByAdvChannelResponse;
|
|
1094
|
+
|
|
1048
1095
|
/** Поиск пользователей по строке (telegram_username, email, phone, whatsapp): возвращает до 50 совпадений. */
|
|
1049
1096
|
|
|
1050
1097
|
searchUser(
|
|
@@ -1073,6 +1120,7 @@ export function UserServiceControllerMethods() {
|
|
|
1073
1120
|
"adminUpdateUserProfile",
|
|
1074
1121
|
"updateUserStatus",
|
|
1075
1122
|
"listUsers",
|
|
1123
|
+
"listUserSources",
|
|
1076
1124
|
"updateUserSearchStats",
|
|
1077
1125
|
"getUserFullNamesByIds",
|
|
1078
1126
|
"resolveUserForTransfer",
|
|
@@ -1103,6 +1151,7 @@ export function UserServiceControllerMethods() {
|
|
|
1103
1151
|
"requestChangePhoneCode",
|
|
1104
1152
|
"verifyChangePhoneCode",
|
|
1105
1153
|
"batchGetUserIdsBySearch",
|
|
1154
|
+
"batchGetUserIdsByAdvChannel",
|
|
1106
1155
|
"searchUser",
|
|
1107
1156
|
"prealoadUserForSearch",
|
|
1108
1157
|
"batchGetUsersByIds",
|
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.290",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"generate": "protoc -I ./proto ./proto/*.proto --ts_proto_out=./gen --ts_proto_opt=nestJs=true,package=omit"
|
|
7
7
|
},
|
|
@@ -27,6 +27,11 @@ service ExchangeCoreService {
|
|
|
27
27
|
rpc CreateExchangePayment(CreateExchangePaymentRequest) returns (CreateExchangePaymentResponse);
|
|
28
28
|
rpc HandlePaymentWebhook(HandlePaymentWebhookRequest) returns (HandlePaymentWebhookResponse);
|
|
29
29
|
rpc GetExchangePayments(GetExchangePaymentsRequest) returns (GetExchangePaymentsResponse);
|
|
30
|
+
|
|
31
|
+
rpc ListExchangePayouts(ListExchangePayoutsRequest) returns (ListExchangePayoutsResponse);
|
|
32
|
+
rpc GetExchangePayout(GetExchangePayoutRequest) returns (GetExchangePayoutResponse);
|
|
33
|
+
rpc CreateExchangePayout(CreateExchangePayoutRequest) returns (CreateExchangePayoutResponse);
|
|
34
|
+
rpc HandleExchangePayoutWebhook(HandleExchangePayoutWebhookRequest) returns (HandleExchangePayoutWebhookResponse);
|
|
30
35
|
rpc GetExchangePayment(GetExchangePaymentRequest) returns (GetExchangePaymentResponse);
|
|
31
36
|
rpc GetPaymentsSummary(ExchangeCalculationsFiltersRequest) returns (GetPaymentsSummaryResponse);
|
|
32
37
|
rpc SearchExchangePayment(SearchExchangePaymentRequest) returns (SearchExchangePaymentResponse);
|
|
@@ -688,3 +693,82 @@ message WalletMonikaItem {
|
|
|
688
693
|
message GetWalletsMonikaResponse {
|
|
689
694
|
repeated WalletMonikaItem wallets = 2;
|
|
690
695
|
}
|
|
696
|
+
|
|
697
|
+
// --- Exchange Overpay payouts (CRM «Выплаты по обменам») ---
|
|
698
|
+
|
|
699
|
+
message ListExchangePayoutsRequest {
|
|
700
|
+
AuthManagerContext auth_manager_context = 1;
|
|
701
|
+
optional int32 page = 2;
|
|
702
|
+
optional int32 page_size = 3;
|
|
703
|
+
optional string manager_id = 4;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
message ExchangePayoutManager {
|
|
707
|
+
string id = 1;
|
|
708
|
+
optional string email = 2;
|
|
709
|
+
optional string username = 3;
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
message ExchangePayoutItem {
|
|
713
|
+
string id = 1;
|
|
714
|
+
optional string payout_agent_id = 2;
|
|
715
|
+
optional string uuid = 3;
|
|
716
|
+
int32 payment_agent = 4;
|
|
717
|
+
double amount = 5;
|
|
718
|
+
int32 status = 6;
|
|
719
|
+
optional string payment_agent_status = 7;
|
|
720
|
+
optional string pan = 8;
|
|
721
|
+
optional string cardholder = 9;
|
|
722
|
+
optional string manager_id = 10;
|
|
723
|
+
optional ExchangePayoutManager manager = 11;
|
|
724
|
+
string created_at = 12;
|
|
725
|
+
string updated_at = 13;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
message ListExchangePayoutsResponse {
|
|
729
|
+
int32 count = 1;
|
|
730
|
+
optional string next = 2;
|
|
731
|
+
optional string previous = 3;
|
|
732
|
+
repeated ExchangePayoutItem results = 4;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
message GetExchangePayoutRequest {
|
|
736
|
+
AuthManagerContext auth_manager_context = 1;
|
|
737
|
+
string id = 2;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
message GetExchangePayoutResponse {
|
|
741
|
+
bool ok = 1;
|
|
742
|
+
optional ExchangePayoutItem result = 2;
|
|
743
|
+
optional string error = 3;
|
|
744
|
+
optional google.protobuf.Struct validationErrors = 4;
|
|
745
|
+
}
|
|
746
|
+
|
|
747
|
+
message CreateExchangePayoutRequest {
|
|
748
|
+
AuthManagerContext auth_manager_context = 1;
|
|
749
|
+
double amount = 2;
|
|
750
|
+
string pan = 3;
|
|
751
|
+
string holder = 4;
|
|
752
|
+
string cvv = 5;
|
|
753
|
+
int32 month = 6;
|
|
754
|
+
int32 year = 7;
|
|
755
|
+
string uuid = 8;
|
|
756
|
+
optional int32 payment_agent = 9;
|
|
757
|
+
optional string manager_id = 10;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
message CreateExchangePayoutResponse {
|
|
761
|
+
bool ok = 1;
|
|
762
|
+
optional ExchangePayoutItem result = 2;
|
|
763
|
+
optional string error = 3;
|
|
764
|
+
optional google.protobuf.Struct validationErrors = 4;
|
|
765
|
+
}
|
|
766
|
+
|
|
767
|
+
message HandleExchangePayoutWebhookRequest {
|
|
768
|
+
string json_payload = 1;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
message HandleExchangePayoutWebhookResponse {
|
|
772
|
+
bool ok = 1;
|
|
773
|
+
string status = 2;
|
|
774
|
+
}
|
package/proto/user.proto
CHANGED
|
@@ -10,6 +10,7 @@ service UserService {
|
|
|
10
10
|
rpc AdminUpdateUserProfile (AdminUpdateUserProfileRequest) returns (AdminUserForUpdateResponse);
|
|
11
11
|
rpc UpdateUserStatus (UpdateUserStatusRequest) returns (UserResponse);
|
|
12
12
|
rpc ListUsers (ListUsersRequest) returns (ListUsersResponse);
|
|
13
|
+
rpc ListUserSources (ListUserSourcesRequest) returns (ListUserSourcesResponse);
|
|
13
14
|
rpc UpdateUserSearchStats (UpdateUserSearchStatsRequest) returns (UpdateUserSearchStatsResponse);
|
|
14
15
|
// Батч-резолв полных имен пользователей по их id (для enrichment в других сервисах).
|
|
15
16
|
rpc GetUserFullNamesByIds (GetUserFullNamesByIdsRequest) returns (GetUserFullNamesByIdsResponse);
|
|
@@ -62,6 +63,8 @@ service UserService {
|
|
|
62
63
|
rpc VerifyChangePhoneCode (VerifyChangePhoneCodeRequest) returns (UserResponse);
|
|
63
64
|
// Батч-поиск пользователей по строке (telegram_username, email, phone, whatsapp): возвращает только id.
|
|
64
65
|
rpc BatchGetUserIdsBySearch (BatchGetUserIdsBySearchRequest) returns (BatchGetUserIdsBySearchResponse);
|
|
66
|
+
// Батч-поиск пользователей по adv channel (name/code/legacy string): возвращает только id.
|
|
67
|
+
rpc BatchGetUserIdsByAdvChannel (BatchGetUserIdsByAdvChannelRequest) returns (BatchGetUserIdsByAdvChannelResponse);
|
|
65
68
|
// Поиск пользователей по строке (telegram_username, email, phone, whatsapp): возвращает до 50 совпадений.
|
|
66
69
|
rpc SearchUser (SearchUserRequest) returns (SearchUserResponse);
|
|
67
70
|
// Прелоад выбранного пользователя по id для поиска пользователей: возвращает один элемент.
|
|
@@ -262,6 +265,18 @@ message ListUsersResponse {
|
|
|
262
265
|
int32 limit = 4;
|
|
263
266
|
}
|
|
264
267
|
|
|
268
|
+
message ListUserSourcesRequest {}
|
|
269
|
+
|
|
270
|
+
message UserSourceItem {
|
|
271
|
+
int32 id = 1;
|
|
272
|
+
string name = 2;
|
|
273
|
+
optional string code = 3;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
message ListUserSourcesResponse {
|
|
277
|
+
repeated UserSourceItem sources = 1;
|
|
278
|
+
}
|
|
279
|
+
|
|
265
280
|
message UserSearchExchangeStats {
|
|
266
281
|
int32 exchanges_count = 1;
|
|
267
282
|
int32 exchange_count_last_year = 2;
|
|
@@ -632,6 +647,19 @@ message BatchGetUserIdsBySearchResponse {
|
|
|
632
647
|
int32 total_matches = 3;
|
|
633
648
|
}
|
|
634
649
|
|
|
650
|
+
message BatchGetUserIdsByAdvChannelRequest {
|
|
651
|
+
string adv_channel = 1;
|
|
652
|
+
// Максимум возвращаемых id; сервис может дополнительно ограничить.
|
|
653
|
+
int32 limit = 2;
|
|
654
|
+
}
|
|
655
|
+
|
|
656
|
+
message BatchGetUserIdsByAdvChannelResponse {
|
|
657
|
+
repeated int32 user_ids = 1;
|
|
658
|
+
// true, если совпадений больше, чем limit (результат был обрезан).
|
|
659
|
+
bool too_many_matches = 2;
|
|
660
|
+
int32 total_matches = 3;
|
|
661
|
+
}
|
|
662
|
+
|
|
635
663
|
message SearchUserRequest {
|
|
636
664
|
// Строка поиска по полям: telegram_username, email, phone, whatsapp.
|
|
637
665
|
string search = 1;
|