= T extends T ? keyof T : never;
+export type Exact = P extends Builtin ? P
+ : P & { [K in keyof P]: Exact
} & { [K in Exclude>]: never };
+
+function longToNumber(int64: { toString(): string }): number {
+ const num = globalThis.Number(int64.toString());
+ if (num > globalThis.Number.MAX_SAFE_INTEGER) {
+ throw new globalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER");
+ }
+ if (num < globalThis.Number.MIN_SAFE_INTEGER) {
+ throw new globalThis.Error("Value is smaller than Number.MIN_SAFE_INTEGER");
+ }
+ return num;
+}
+
+function isObject(value: any): boolean {
+ return typeof value === "object" && value !== null;
+}
+
+function isSet(value: any): boolean {
+ return value !== null && value !== undefined;
+}
+
+export interface MessageFns {
+ encode(message: T, writer?: BinaryWriter): BinaryWriter;
+ decode(input: BinaryReader | Uint8Array, length?: number): T;
+ fromJSON(object: any): T;
+ toJSON(message: T): unknown;
+ create, I>>(base?: I): T;
+ fromPartial, I>>(object: I): T;
+}
diff --git a/src/server/api/proto/app/v1/account.ts b/src/server/api/proto/app/v1/account.ts
new file mode 100644
index 0000000..d2a9c08
--- /dev/null
+++ b/src/server/api/proto/app/v1/account.ts
@@ -0,0 +1,1795 @@
+// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
+// versions:
+// protoc-gen-ts_proto v2.11.4
+// protoc unknown
+// source: app/v1/account.proto
+
+/* eslint-disable */
+import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
+import {
+ type CallOptions,
+ type ChannelCredentials,
+ Client,
+ type ClientOptions,
+ type ClientUnaryCall,
+ type handleUnaryCall,
+ makeGenericClientConstructor,
+ type Metadata,
+ type ServiceError,
+ type UntypedServiceImplementation,
+} from "@grpc/grpc-js";
+import { StringValue } from "../../google/protobuf/wrappers";
+import { MessageResponse, Notification, Preferences, User } from "./common";
+
+export const protobufPackage = "stream.app.v1";
+
+export interface GetMeRequest {
+}
+
+export interface GetMeResponse {
+ user?: User | undefined;
+}
+
+export interface UpdateMeRequest {
+ username?: string | undefined;
+ email?: string | undefined;
+ language?: string | undefined;
+ locale?: string | undefined;
+ telegramId?: string | undefined;
+}
+
+export interface UpdateMeResponse {
+ user?: User | undefined;
+}
+
+export interface DeleteMeRequest {
+}
+
+export interface ClearMyDataRequest {
+}
+
+export interface GetPreferencesRequest {
+}
+
+export interface GetPreferencesResponse {
+ preferences?: Preferences | undefined;
+}
+
+export interface UpdatePreferencesRequest {
+ emailNotifications?: boolean | undefined;
+ pushNotifications?: boolean | undefined;
+ marketingNotifications?: boolean | undefined;
+ telegramNotifications?: boolean | undefined;
+ autoplay?: boolean | undefined;
+ loop?: boolean | undefined;
+ muted?: boolean | undefined;
+ showControls?: boolean | undefined;
+ pip?: boolean | undefined;
+ airplay?: boolean | undefined;
+ chromecast?: boolean | undefined;
+ language?: string | undefined;
+ locale?: string | undefined;
+}
+
+export interface UpdatePreferencesResponse {
+ preferences?: Preferences | undefined;
+}
+
+export interface GetUsageRequest {
+}
+
+export interface GetUsageResponse {
+ userId?: string | undefined;
+ totalVideos?: number | undefined;
+ totalStorage?: number | undefined;
+}
+
+export interface ListNotificationsRequest {
+}
+
+export interface ListNotificationsResponse {
+ notifications?: Notification[] | undefined;
+}
+
+export interface MarkNotificationReadRequest {
+ id?: string | undefined;
+}
+
+export interface MarkAllNotificationsReadRequest {
+}
+
+export interface DeleteNotificationRequest {
+ id?: string | undefined;
+}
+
+export interface ClearNotificationsRequest {
+}
+
+function createBaseGetMeRequest(): GetMeRequest {
+ return {};
+}
+
+export const GetMeRequest: MessageFns = {
+ encode(_: GetMeRequest, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
+ return writer;
+ },
+
+ decode(input: BinaryReader | Uint8Array, length?: number): GetMeRequest {
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
+ const end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseGetMeRequest();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skip(tag & 7);
+ }
+ return message;
+ },
+
+ fromJSON(_: any): GetMeRequest {
+ return {};
+ },
+
+ toJSON(_: GetMeRequest): unknown {
+ const obj: any = {};
+ return obj;
+ },
+
+ create, I>>(base?: I): GetMeRequest {
+ return GetMeRequest.fromPartial(base ?? ({} as any));
+ },
+ fromPartial, I>>(_: I): GetMeRequest {
+ const message = createBaseGetMeRequest();
+ return message;
+ },
+};
+
+function createBaseGetMeResponse(): GetMeResponse {
+ return { user: undefined };
+}
+
+export const GetMeResponse: MessageFns = {
+ encode(message: GetMeResponse, writer: BinaryWriter = new BinaryWriter()): BinaryWriter {
+ if (message.user !== undefined) {
+ User.encode(message.user, writer.uint32(10).fork()).join();
+ }
+ return writer;
+ },
+
+ decode(input: BinaryReader | Uint8Array, length?: number): GetMeResponse {
+ const reader = input instanceof BinaryReader ? input : new BinaryReader(input);
+ const end = length === undefined ? reader.len : reader.pos + length;
+ const message = createBaseGetMeResponse();
+ while (reader.pos < end) {
+ const tag = reader.uint32();
+ switch (tag >>> 3) {
+ case 1: {
+ if (tag !== 10) {
+ break;
+ }
+
+ message.user = User.decode(reader, reader.uint32());
+ continue;
+ }
+ }
+ if ((tag & 7) === 4 || tag === 0) {
+ break;
+ }
+ reader.skip(tag & 7);
+ }
+ return message;
+ },
+
+ fromJSON(object: any): GetMeResponse {
+ return { user: isSet(object.user) ? User.fromJSON(object.user) : undefined };
+ },
+
+ toJSON(message: GetMeResponse): unknown {
+ const obj: any = {};
+ if (message.user !== undefined) {
+ obj.user = User.toJSON(message.user);
+ }
+ return obj;
+ },
+
+ create, I>>(base?: I): GetMeResponse {
+ return GetMeResponse.fromPartial(base ?? ({} as any));
+ },
+ fromPartial, I>>(object: I): GetMeResponse {
+ const message = createBaseGetMeResponse();
+ message.user = (object.user !== undefined && object.user !== null) ? User.fromPartial(object.user) : undefined;
+ return message;
+ },
+};
+
+function createBaseUpdateMeRequest(): UpdateMeRequest {
+ return { username: undefined, email: undefined, language: undefined, locale: undefined, telegramId: undefined };
+}
+
+export const UpdateMeRequest: MessageFns