spwmini-shitless
Version:
Shitless SPWorlds Miniapp creation toolkit
48 lines (46 loc) • 1.21 kB
text/typescript
type Requests = {
init: string;
openURL: string;
openPayment: string;
};
type EmptyRequests = {
[K in keyof Requests as Requests[K] extends undefined ? K : never]: undefined;
};
type PayloadRequests = Omit<Requests, keyof EmptyRequests>;
type Responses = {
init: UserData;
openURL: 'success';
openPayment: 'success';
payment: 'success' | 'cancel';
};
type SuccessResponses = {
[K in keyof Responses as `${K}Response`]: Responses[K];
};
type ErrorResponses = {
[K in keyof Responses as `${K}Error`]: string;
};
type PlainResponses = {
ready: never;
};
type MessageFromServer = SuccessResponses & ErrorResponses & PlainResponses;
interface User {
accountId: string;
username: string;
minecraftUUID: string;
}
interface UserData extends User {
hash: string;
}
type DoMessageData<T> = {
[K in keyof T]: {
type: K;
};
}[keyof T];
type DoMessageLoadedData<T> = {
[K in keyof T]: {
type: K;
payload: T[K];
};
}[keyof T];
type RequestMessage = DoMessageData<EmptyRequests> | DoMessageLoadedData<PayloadRequests>;
export type { EmptyRequests, MessageFromServer, PayloadRequests, RequestMessage, User, UserData };