refactor: add typescript support to project

This commit is contained in:
HD
2022-06-20 17:44:42 +08:00
parent 45419bbcf4
commit c2c051d94c
25 changed files with 407 additions and 222 deletions
+28
View File
@@ -0,0 +1,28 @@
export interface AuthToken {
// common
server_id: string;
token: string;
refresh_token: string;
expired_in: number;
}
// todo: check gender values
export type Gender = 0 | 1;
export interface User {
// avatar: string; // todo: check transform data in redux slice
uid: number;
email: string;
name: string;
gender: Gender;
language: string;
is_admin: boolean;
avatar_updated_at: number;
create_by: string;
}
export interface AuthData extends AuthToken {
initialized?: boolean;
user: User;
}
+6 -1
View File
@@ -3,6 +3,11 @@ export interface ChannelMember {
}
// todo: check message fields
export interface ChannelMessage {
mid: number;
}
export type ContentType =
'text/plain' |
'text/markdown' |
@@ -22,7 +27,7 @@ export interface PinnedMessage {
export interface Channel {
gid: number;
icon: string; // added by frontend
// icon: string; // todo: check
owner: number;
name: string;
description: string;
+3
View File
@@ -0,0 +1,3 @@
export interface EntityId {
id: number;
}
+3 -2
View File
@@ -1,7 +1,8 @@
import { PrecacheEntry } from "workbox-precaching/src/_types";
export declare global {
interface Window {
__WB_MANIFEST: any; // todo
skipWaiting: any; // todo
__WB_MANIFEST: Array<PrecacheEntry | string>;
skipWaiting: () => void;
}
}
+91 -23
View File
@@ -1,70 +1,138 @@
// todo
interface ReadyEvent {
type: 'ready'
import { User } from './auth';
import { Channel, ContentType } from './channel';
export interface ReadyEvent {
type: 'ready';
}
interface UsersSnapshotEvent {
type: 'users_snapshot'
export interface UsersSnapshotEvent {
type: 'users_snapshot';
users: User[];
version: number;
}
interface UsersLogEvent {
type: 'users_log'
// todo: check if create_by field exists
export interface UserLog extends Omit<User, 'create_by'> {
log_id: number;
action: 'create' | 'update' | 'delete';
}
interface UsersStateEvent {
type: 'users_state'
export interface UsersLogEvent {
type: 'users_log';
logs: UserLog[];
}
interface UsersStateChangedEvent {
type: 'users_state_changed'
export interface UserState {
uid: number;
online: boolean;
}
export interface UsersStateEvent {
type: 'users_state';
users: UserState[];
}
interface UsersStateChangedEvent extends UserState{
type: 'users_state_changed';
}
interface UserSettingsEvent {
type: 'user_settings'
type: 'user_settings';
mute_users?: { uid: number; expired_at: number; }[];
mute_groups?: { gid: number; expired_at: number; }[];
read_index_users?: { uid: number; mid: number; }[];
read_index_groups?: { gid: number; mid: number; }[];
burn_after_reading_users?: { uid: number; expires_in: number; }[];
burn_after_reading_groups?: { gid: number; expires_in: number; }[];
}
interface UserSettingsChangedEvent {
type: 'user_settings_changed'
type: 'user_settings_changed';
from_device?: string;
add_mute_users?: { uid: number; expired_at: number; }[];
remove_mute_users?: number[];
add_mute_groups?: { gid: number; expired_at: number; }[];
remove_mute_groups?: number[];
read_index_users?: { uid: number; mid: number; }[];
read_index_groups?: { gid: number; mid: number; }[];
burn_after_reading_users?: { uid: number; expires_in: number; }[];
burn_after_reading_groups?: { gid: number; expires_in: number; }[];
}
interface RelatedGroupsEvent {
type: 'related_groups'
type: 'related_groups';
groups: Channel[];
}
interface ChatEvent {
type: 'chat'
type: 'chat';
mid: number;
from_uid: number;
created_at: number;
target: { uid: number };
detail: {
properties: {};
content: string;
content_type: ContentType;
expires_in: number;
type: 'normal';
};
}
interface KickEvent {
type: 'kick'
type: 'kick';
reason: string;
}
interface UserJoinedGroupEvent {
type: 'user_joined_group'
type: 'user_joined_group';
gid: number;
uid: number[];
}
interface UserLeavedGroupEvent {
type: 'user_leaved_group'
type: 'user_leaved_group';
gid: number;
uid: number[];
}
interface JoinedGroupEvent {
type: 'joined_group'
type: 'joined_group';
group: Channel;
}
interface KickFromGroupEvent {
type: 'kick_from_group'
type: 'kick_from_group';
gid: number;
reason: string;
}
interface GroupChangedEvent {
type: 'group_changed'
type: 'group_changed';
gid: number;
name: string;
description: string;
owner: number;
avatar_updated_at: number;
}
interface PinnedMessageUpdatedEvent {
type: 'pinned_message_updated'
type: 'pinned_message_updated';
gid: number;
mid: number;
msg: {
mid: number;
created_by: number;
created_at: number;
properties: {};
content: string;
content_type: ContentType;
}
}
interface HeartbeatEvent {
type: 'heartbeat'
type: 'heartbeat';
time: number;
}
export type ServerEvent = ReadyEvent |