jr-common-micro 1.1.83 → 1.1.84

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.
@@ -90,6 +90,26 @@ export interface ChatMediaDto {
90
90
  kind: string;
91
91
  width: number;
92
92
  height: number;
93
+ url: string;
94
+ still_url: string;
95
+ full_url: string;
96
+ }
97
+ export interface GifSearchRequest {
98
+ query: string;
99
+ offset: number;
100
+ limit: number;
101
+ }
102
+ export interface GifItemDto {
103
+ id: string;
104
+ title: string;
105
+ preview_url: string;
106
+ preview_width: number;
107
+ preview_height: number;
108
+ }
109
+ export interface GifSearchResponse {
110
+ status: ResponseStatus | undefined;
111
+ data: GifItemDto[];
112
+ next_offset: number;
93
113
  }
94
114
  export interface ChatMediaUploadRequest {
95
115
  group_slug: string;
@@ -155,6 +155,9 @@ export declare class ChatMediaDto extends Message<ChatMediaDto> {
155
155
  kind: string;
156
156
  width: number;
157
157
  height: number;
158
+ url: string;
159
+ stillUrl: string;
160
+ fullUrl: string;
158
161
  constructor(data?: PartialMessage<ChatMediaDto>);
159
162
  static readonly runtime: typeof proto3;
160
163
  static readonly typeName = "micro.v1.chat.ChatMediaDto";
@@ -164,6 +167,47 @@ export declare class ChatMediaDto extends Message<ChatMediaDto> {
164
167
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ChatMediaDto;
165
168
  static equals(a: ChatMediaDto | PlainMessage<ChatMediaDto> | undefined, b: ChatMediaDto | PlainMessage<ChatMediaDto> | undefined): boolean;
166
169
  }
170
+ export declare class GifSearchRequest extends Message<GifSearchRequest> {
171
+ query: string;
172
+ offset: number;
173
+ limit: number;
174
+ constructor(data?: PartialMessage<GifSearchRequest>);
175
+ static readonly runtime: typeof proto3;
176
+ static readonly typeName = "micro.v1.chat.GifSearchRequest";
177
+ static readonly fields: FieldList;
178
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GifSearchRequest;
179
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GifSearchRequest;
180
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GifSearchRequest;
181
+ static equals(a: GifSearchRequest | PlainMessage<GifSearchRequest> | undefined, b: GifSearchRequest | PlainMessage<GifSearchRequest> | undefined): boolean;
182
+ }
183
+ export declare class GifItemDto extends Message<GifItemDto> {
184
+ id: string;
185
+ title: string;
186
+ previewUrl: string;
187
+ previewWidth: number;
188
+ previewHeight: number;
189
+ constructor(data?: PartialMessage<GifItemDto>);
190
+ static readonly runtime: typeof proto3;
191
+ static readonly typeName = "micro.v1.chat.GifItemDto";
192
+ static readonly fields: FieldList;
193
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GifItemDto;
194
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GifItemDto;
195
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GifItemDto;
196
+ static equals(a: GifItemDto | PlainMessage<GifItemDto> | undefined, b: GifItemDto | PlainMessage<GifItemDto> | undefined): boolean;
197
+ }
198
+ export declare class GifSearchResponse extends Message<GifSearchResponse> {
199
+ status?: ResponseStatus;
200
+ data: GifItemDto[];
201
+ nextOffset: number;
202
+ constructor(data?: PartialMessage<GifSearchResponse>);
203
+ static readonly runtime: typeof proto3;
204
+ static readonly typeName = "micro.v1.chat.GifSearchResponse";
205
+ static readonly fields: FieldList;
206
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GifSearchResponse;
207
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GifSearchResponse;
208
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GifSearchResponse;
209
+ static equals(a: GifSearchResponse | PlainMessage<GifSearchResponse> | undefined, b: GifSearchResponse | PlainMessage<GifSearchResponse> | undefined): boolean;
210
+ }
167
211
  export declare class ChatMediaUploadRequest extends Message<ChatMediaUploadRequest> {
168
212
  groupSlug: string;
169
213
  kind: string;
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ReportDto = exports.SanctionListResponse = exports.SanctionDto = exports.ChatMemberListResponse = exports.ChatUserAdminListResponse = exports.ChatUserAdminDto = exports.GroupPhotoResponse = exports.GroupPhotoSetRequest = exports.ChatMemberDto = exports.ChatMemberListRequest = exports.PendingMembersRequest = exports.MemberActionRequest = exports.PinMessageRequest = exports.DeleteMessageRequest = exports.RevokeSanctionRequest = exports.SanctionRequest = exports.GroupUpsertRequest = exports.BlockedUsersResponse = exports.BlockUserRequest = exports.ReportMessageRequest = exports.PinnedMessagesResponse = exports.PinnedMessagesRequest = exports.MessageHistoryResponse = exports.MessageHistoryRequest = exports.ChatReplyPreviewDto = exports.ChatReactionCountDto = exports.ChatReactorDto = exports.ChatPollDto = exports.ChatPollOptionDto = exports.GroupStatsResponse = exports.GroupStatsOverviewDto = exports.GroupStatsMemberDto = exports.GroupStatsDayDto = exports.GroupStatsRequest = exports.ChatMediaGetResponse = exports.GroupMediaResponse = exports.ChatMediaItemDto = exports.GroupMediaRequest = exports.ChatMediaGetRequest = exports.ChatMediaUploadResponse = exports.ChatMediaUploadRequest = exports.ChatMediaDto = exports.ChatLinkPreviewDto = exports.ChatTickerCardDto = exports.ChatMessageDto = exports.ChatGroupSingleResponse = exports.JoinGroupResponse = exports.GroupBySlugRequest = exports.ChatGroupListResponse = exports.ChatGroupDto = void 0;
4
- exports.ReviewReportRequest = exports.ReportListResponse = void 0;
3
+ exports.ChatMemberListResponse = exports.ChatUserAdminListResponse = exports.ChatUserAdminDto = exports.GroupPhotoResponse = exports.GroupPhotoSetRequest = exports.ChatMemberDto = exports.ChatMemberListRequest = exports.PendingMembersRequest = exports.MemberActionRequest = exports.PinMessageRequest = exports.DeleteMessageRequest = exports.RevokeSanctionRequest = exports.SanctionRequest = exports.GroupUpsertRequest = exports.BlockedUsersResponse = exports.BlockUserRequest = exports.ReportMessageRequest = exports.PinnedMessagesResponse = exports.PinnedMessagesRequest = exports.MessageHistoryResponse = exports.MessageHistoryRequest = exports.ChatReplyPreviewDto = exports.ChatReactionCountDto = exports.ChatReactorDto = exports.ChatPollDto = exports.ChatPollOptionDto = exports.GroupStatsResponse = exports.GroupStatsOverviewDto = exports.GroupStatsMemberDto = exports.GroupStatsDayDto = exports.GroupStatsRequest = exports.ChatMediaGetResponse = exports.GroupMediaResponse = exports.ChatMediaItemDto = exports.GroupMediaRequest = exports.ChatMediaGetRequest = exports.ChatMediaUploadResponse = exports.ChatMediaUploadRequest = exports.GifSearchResponse = exports.GifItemDto = exports.GifSearchRequest = exports.ChatMediaDto = exports.ChatLinkPreviewDto = exports.ChatTickerCardDto = exports.ChatMessageDto = exports.ChatGroupSingleResponse = exports.JoinGroupResponse = exports.GroupBySlugRequest = exports.ChatGroupListResponse = exports.ChatGroupDto = void 0;
4
+ exports.ReviewReportRequest = exports.ReportListResponse = exports.ReportDto = exports.SanctionListResponse = exports.SanctionDto = void 0;
5
5
  const protobuf_1 = require("@bufbuild/protobuf");
6
6
  const general_pb_js_1 = require("../general_pb.js");
7
7
  class ChatGroupDto extends protobuf_1.Message {
@@ -331,6 +331,9 @@ class ChatMediaDto extends protobuf_1.Message {
331
331
  kind = "";
332
332
  width = 0;
333
333
  height = 0;
334
+ url = "";
335
+ stillUrl = "";
336
+ fullUrl = "";
334
337
  constructor(data) {
335
338
  super();
336
339
  protobuf_1.proto3.util.initPartial(data, this);
@@ -342,6 +345,9 @@ class ChatMediaDto extends protobuf_1.Message {
342
345
  { no: 2, name: "kind", kind: "scalar", T: 9 },
343
346
  { no: 3, name: "width", kind: "scalar", T: 13 },
344
347
  { no: 4, name: "height", kind: "scalar", T: 13 },
348
+ { no: 5, name: "url", kind: "scalar", T: 9 },
349
+ { no: 6, name: "still_url", kind: "scalar", T: 9 },
350
+ { no: 7, name: "full_url", kind: "scalar", T: 9 },
345
351
  ]);
346
352
  static fromBinary(bytes, options) {
347
353
  return new ChatMediaDto().fromBinary(bytes, options);
@@ -357,6 +363,97 @@ class ChatMediaDto extends protobuf_1.Message {
357
363
  }
358
364
  }
359
365
  exports.ChatMediaDto = ChatMediaDto;
366
+ class GifSearchRequest extends protobuf_1.Message {
367
+ query = "";
368
+ offset = 0;
369
+ limit = 0;
370
+ constructor(data) {
371
+ super();
372
+ protobuf_1.proto3.util.initPartial(data, this);
373
+ }
374
+ static runtime = protobuf_1.proto3;
375
+ static typeName = "micro.v1.chat.GifSearchRequest";
376
+ static fields = protobuf_1.proto3.util.newFieldList(() => [
377
+ { no: 1, name: "query", kind: "scalar", T: 9 },
378
+ { no: 2, name: "offset", kind: "scalar", T: 13 },
379
+ { no: 3, name: "limit", kind: "scalar", T: 13 },
380
+ ]);
381
+ static fromBinary(bytes, options) {
382
+ return new GifSearchRequest().fromBinary(bytes, options);
383
+ }
384
+ static fromJson(jsonValue, options) {
385
+ return new GifSearchRequest().fromJson(jsonValue, options);
386
+ }
387
+ static fromJsonString(jsonString, options) {
388
+ return new GifSearchRequest().fromJsonString(jsonString, options);
389
+ }
390
+ static equals(a, b) {
391
+ return protobuf_1.proto3.util.equals(GifSearchRequest, a, b);
392
+ }
393
+ }
394
+ exports.GifSearchRequest = GifSearchRequest;
395
+ class GifItemDto extends protobuf_1.Message {
396
+ id = "";
397
+ title = "";
398
+ previewUrl = "";
399
+ previewWidth = 0;
400
+ previewHeight = 0;
401
+ constructor(data) {
402
+ super();
403
+ protobuf_1.proto3.util.initPartial(data, this);
404
+ }
405
+ static runtime = protobuf_1.proto3;
406
+ static typeName = "micro.v1.chat.GifItemDto";
407
+ static fields = protobuf_1.proto3.util.newFieldList(() => [
408
+ { no: 1, name: "id", kind: "scalar", T: 9 },
409
+ { no: 2, name: "title", kind: "scalar", T: 9 },
410
+ { no: 3, name: "preview_url", kind: "scalar", T: 9 },
411
+ { no: 4, name: "preview_width", kind: "scalar", T: 13 },
412
+ { no: 5, name: "preview_height", kind: "scalar", T: 13 },
413
+ ]);
414
+ static fromBinary(bytes, options) {
415
+ return new GifItemDto().fromBinary(bytes, options);
416
+ }
417
+ static fromJson(jsonValue, options) {
418
+ return new GifItemDto().fromJson(jsonValue, options);
419
+ }
420
+ static fromJsonString(jsonString, options) {
421
+ return new GifItemDto().fromJsonString(jsonString, options);
422
+ }
423
+ static equals(a, b) {
424
+ return protobuf_1.proto3.util.equals(GifItemDto, a, b);
425
+ }
426
+ }
427
+ exports.GifItemDto = GifItemDto;
428
+ class GifSearchResponse extends protobuf_1.Message {
429
+ status;
430
+ data = [];
431
+ nextOffset = 0;
432
+ constructor(data) {
433
+ super();
434
+ protobuf_1.proto3.util.initPartial(data, this);
435
+ }
436
+ static runtime = protobuf_1.proto3;
437
+ static typeName = "micro.v1.chat.GifSearchResponse";
438
+ static fields = protobuf_1.proto3.util.newFieldList(() => [
439
+ { no: 1, name: "status", kind: "message", T: general_pb_js_1.ResponseStatus },
440
+ { no: 2, name: "data", kind: "message", T: GifItemDto, repeated: true },
441
+ { no: 3, name: "next_offset", kind: "scalar", T: 13 },
442
+ ]);
443
+ static fromBinary(bytes, options) {
444
+ return new GifSearchResponse().fromBinary(bytes, options);
445
+ }
446
+ static fromJson(jsonValue, options) {
447
+ return new GifSearchResponse().fromJson(jsonValue, options);
448
+ }
449
+ static fromJsonString(jsonString, options) {
450
+ return new GifSearchResponse().fromJsonString(jsonString, options);
451
+ }
452
+ static equals(a, b) {
453
+ return protobuf_1.proto3.util.equals(GifSearchResponse, a, b);
454
+ }
455
+ }
456
+ exports.GifSearchResponse = GifSearchResponse;
360
457
  class ChatMediaUploadRequest extends protobuf_1.Message {
361
458
  groupSlug = "";
362
459
  kind = "";
@@ -1,5 +1,5 @@
1
1
  import { ByIdRequest, EmptyRequest, EmptyResponse, PaginateRequest } from "../general_pb.js";
2
- import { BlockedUsersResponse, BlockUserRequest, ChatGroupListResponse, ChatGroupSingleResponse, ChatMediaGetRequest, ChatMediaGetResponse, ChatMediaUploadRequest, ChatMediaUploadResponse, ChatMemberListRequest, ChatMemberListResponse, ChatUserAdminListResponse, DeleteMessageRequest, GroupBySlugRequest, GroupMediaRequest, GroupMediaResponse, GroupPhotoResponse, GroupPhotoSetRequest, GroupStatsRequest, GroupStatsResponse, GroupUpsertRequest, JoinGroupResponse, MemberActionRequest, MessageHistoryRequest, MessageHistoryResponse, PendingMembersRequest, PinMessageRequest, PinnedMessagesRequest, PinnedMessagesResponse, ReportListResponse, ReportMessageRequest, ReviewReportRequest, RevokeSanctionRequest, SanctionListResponse, SanctionRequest } from "./chat_messages_pb.js";
2
+ import { BlockedUsersResponse, BlockUserRequest, ChatGroupListResponse, ChatGroupSingleResponse, ChatMediaGetRequest, ChatMediaGetResponse, ChatMediaUploadRequest, ChatMediaUploadResponse, ChatMemberListRequest, ChatMemberListResponse, ChatUserAdminListResponse, DeleteMessageRequest, GifSearchRequest, GifSearchResponse, GroupBySlugRequest, GroupMediaRequest, GroupMediaResponse, GroupPhotoResponse, GroupPhotoSetRequest, GroupStatsRequest, GroupStatsResponse, GroupUpsertRequest, JoinGroupResponse, MemberActionRequest, MessageHistoryRequest, MessageHistoryResponse, PendingMembersRequest, PinMessageRequest, PinnedMessagesRequest, PinnedMessagesResponse, ReportListResponse, ReportMessageRequest, ReviewReportRequest, RevokeSanctionRequest, SanctionListResponse, SanctionRequest } from "./chat_messages_pb.js";
3
3
  import { MethodKind } from "@bufbuild/protobuf";
4
4
  export declare const PChatService: {
5
5
  readonly typeName: "micro.v1.chat.PChatService";
@@ -58,6 +58,12 @@ export declare const PChatService: {
58
58
  readonly O: typeof GroupStatsResponse;
59
59
  readonly kind: MethodKind.ServerStreaming;
60
60
  };
61
+ readonly gifSearch: {
62
+ readonly name: "GifSearch";
63
+ readonly I: typeof GifSearchRequest;
64
+ readonly O: typeof GifSearchResponse;
65
+ readonly kind: MethodKind.ServerStreaming;
66
+ };
61
67
  readonly getGroupPhoto: {
62
68
  readonly name: "GetGroupPhoto";
63
69
  readonly I: typeof ByIdRequest;
@@ -61,6 +61,12 @@ exports.PChatService = {
61
61
  O: chat_messages_pb_js_1.GroupStatsResponse,
62
62
  kind: protobuf_1.MethodKind.ServerStreaming,
63
63
  },
64
+ gifSearch: {
65
+ name: "GifSearch",
66
+ I: chat_messages_pb_js_1.GifSearchRequest,
67
+ O: chat_messages_pb_js_1.GifSearchResponse,
68
+ kind: protobuf_1.MethodKind.ServerStreaming,
69
+ },
64
70
  getGroupPhoto: {
65
71
  name: "GetGroupPhoto",
66
72
  I: general_pb_js_1.ByIdRequest,
@@ -1,7 +1,7 @@
1
1
  import type { Metadata } from "@grpc/grpc-js";
2
2
  import { Observable } from "rxjs";
3
3
  import { ByIdRequest, EmptyRequest, EmptyResponse, PaginateRequest } from "../general_nest";
4
- import { BlockedUsersResponse, BlockUserRequest, ChatGroupListResponse, ChatGroupSingleResponse, ChatMediaGetRequest, ChatMediaGetResponse, ChatMediaUploadRequest, ChatMediaUploadResponse, ChatMemberListRequest, ChatMemberListResponse, ChatUserAdminListResponse, DeleteMessageRequest, GroupBySlugRequest, GroupMediaRequest, GroupMediaResponse, GroupPhotoResponse, GroupPhotoSetRequest, GroupStatsRequest, GroupStatsResponse, GroupUpsertRequest, JoinGroupResponse, MemberActionRequest, MessageHistoryRequest, MessageHistoryResponse, PendingMembersRequest, PinMessageRequest, PinnedMessagesRequest, PinnedMessagesResponse, ReportListResponse, ReportMessageRequest, ReviewReportRequest, RevokeSanctionRequest, SanctionListResponse, SanctionRequest } from "./chat_messages_nest";
4
+ import { BlockedUsersResponse, BlockUserRequest, ChatGroupListResponse, ChatGroupSingleResponse, ChatMediaGetRequest, ChatMediaGetResponse, ChatMediaUploadRequest, ChatMediaUploadResponse, ChatMemberListRequest, ChatMemberListResponse, ChatUserAdminListResponse, DeleteMessageRequest, GifSearchRequest, GifSearchResponse, GroupBySlugRequest, GroupMediaRequest, GroupMediaResponse, GroupPhotoResponse, GroupPhotoSetRequest, GroupStatsRequest, GroupStatsResponse, GroupUpsertRequest, JoinGroupResponse, MemberActionRequest, MessageHistoryRequest, MessageHistoryResponse, PendingMembersRequest, PinMessageRequest, PinnedMessagesRequest, PinnedMessagesResponse, ReportListResponse, ReportMessageRequest, ReviewReportRequest, RevokeSanctionRequest, SanctionListResponse, SanctionRequest } from "./chat_messages_nest";
5
5
  export declare const protobufPackage = "micro.v1.chat";
6
6
  export declare const MICRO_V1_CHAT_PACKAGE_NAME = "micro.v1.chat";
7
7
  export interface PChatServiceClient {
@@ -14,6 +14,7 @@ export interface PChatServiceClient {
14
14
  listMembers(request: ChatMemberListRequest, metadata?: Metadata): Observable<ChatMemberListResponse>;
15
15
  groupMedia(request: GroupMediaRequest, metadata?: Metadata): Observable<GroupMediaResponse>;
16
16
  groupStats(request: GroupStatsRequest, metadata?: Metadata): Observable<GroupStatsResponse>;
17
+ gifSearch(request: GifSearchRequest, metadata?: Metadata): Observable<GifSearchResponse>;
17
18
  getGroupPhoto(request: ByIdRequest, metadata?: Metadata): Observable<GroupPhotoResponse>;
18
19
  uploadChatMedia(request: ChatMediaUploadRequest, metadata?: Metadata): Observable<ChatMediaUploadResponse>;
19
20
  getChatMedia(request: ChatMediaGetRequest, metadata?: Metadata): Observable<ChatMediaGetResponse>;
@@ -33,6 +34,7 @@ export interface PChatServiceController {
33
34
  listMembers(request: ChatMemberListRequest, metadata?: Metadata): Observable<ChatMemberListResponse>;
34
35
  groupMedia(request: GroupMediaRequest, metadata?: Metadata): Observable<GroupMediaResponse>;
35
36
  groupStats(request: GroupStatsRequest, metadata?: Metadata): Observable<GroupStatsResponse>;
37
+ gifSearch(request: GifSearchRequest, metadata?: Metadata): Observable<GifSearchResponse>;
36
38
  getGroupPhoto(request: ByIdRequest, metadata?: Metadata): Observable<GroupPhotoResponse>;
37
39
  uploadChatMedia(request: ChatMediaUploadRequest, metadata?: Metadata): Observable<ChatMediaUploadResponse>;
38
40
  getChatMedia(request: ChatMediaGetRequest, metadata?: Metadata): Observable<ChatMediaGetResponse>;
@@ -18,6 +18,7 @@ function PChatServiceControllerMethods() {
18
18
  "listMembers",
19
19
  "groupMedia",
20
20
  "groupStats",
21
+ "gifSearch",
21
22
  "getGroupPhoto",
22
23
  "uploadChatMedia",
23
24
  "getChatMedia",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jr-common-micro",
3
- "version": "1.1.83",
3
+ "version": "1.1.84",
4
4
  "description": "",
5
5
  "author": "",
6
6
  "private": false,
@@ -140,10 +140,41 @@ message ChatLinkPreviewDto {
140
140
  // the message (fan-out stays light), it is fetched via GetChatMedia.
141
141
  message ChatMediaDto {
142
142
  string public_id = 1;
143
- // image | video
143
+ // image | video | gif
144
144
  string kind = 2;
145
145
  uint32 width = 3;
146
146
  uint32 height = 4;
147
+ // kind=gif only: served straight from GIPHY's CDN, no bytes on our side.
148
+ // Animated WebP (~200 px wide) for the bubble, its first frame, and the
149
+ // large variant for the viewer. Empty for uploads.
150
+ string url = 5;
151
+ string still_url = 6;
152
+ string full_url = 7;
153
+ }
154
+
155
+ // GIF search through the micro (the GIPHY key never reaches a client).
156
+ message GifSearchRequest {
157
+ // '' = trending.
158
+ string query = 1;
159
+ uint32 offset = 2;
160
+ // Page size, capped by the micro (default 24).
161
+ uint32 limit = 3;
162
+ }
163
+
164
+ message GifItemDto {
165
+ string id = 1;
166
+ string title = 2;
167
+ // Small animated WebP for the picker grid, with its dimensions.
168
+ string preview_url = 3;
169
+ uint32 preview_width = 4;
170
+ uint32 preview_height = 5;
171
+ }
172
+
173
+ message GifSearchResponse {
174
+ ResponseStatus status = 1;
175
+ repeated GifItemDto data = 2;
176
+ // Offset of the next page; 0 = no more.
177
+ uint32 next_offset = 3;
147
178
  }
148
179
 
149
180
  message ChatMediaUploadRequest {
@@ -16,6 +16,7 @@ service PChatService {
16
16
  rpc ListMembers(ChatMemberListRequest) returns(stream ChatMemberListResponse) {}
17
17
  rpc GroupMedia(GroupMediaRequest) returns(stream GroupMediaResponse) {}
18
18
  rpc GroupStats(GroupStatsRequest) returns(stream GroupStatsResponse) {}
19
+ rpc GifSearch(GifSearchRequest) returns(stream GifSearchResponse) {}
19
20
  rpc GetGroupPhoto(ByIdRequest) returns(stream GroupPhotoResponse) {}
20
21
  // Authed upload (staging row); the send then references media_id.
21
22
  rpc UploadChatMedia(ChatMediaUploadRequest) returns(stream ChatMediaUploadResponse) {}