chore: bump revolt-api; add mocking

This commit is contained in:
Paul Makles
2022-05-26 21:17:42 +01:00
parent e7e8fde97d
commit c1d4e1e33d
4 changed files with 169 additions and 47 deletions
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "revolt.js",
"version": "6.0.0-2",
"version": "6.0.0-3",
"main": "dist/index.js",
"typings": "dist/index.d.ts",
"module": "esm/index.js",
@@ -17,7 +17,7 @@
"lodash.isequal": "^4.5.0",
"long": "^5.2.0",
"mobx": "^6.3.2",
"revolt-api": "0.5.3-5-patch.3",
"revolt-api": "0.5.3-5-patch.4",
"ulid": "^2.3.0",
"ws": "^8.2.2"
},
+157 -35
View File
@@ -1,7 +1,13 @@
import EventEmitter from "eventemitter3";
import defaultsDeep from "lodash.defaultsdeep";
import { action, makeObservable, observable } from "mobx";
import type { DataCreateAccount, DataLogin, DataOnboard, InviteResponse, Session } from "revolt-api";
import type {
DataCreateAccount,
DataLogin,
DataOnboard,
InviteResponse,
Session,
} from "revolt-api";
import type { RevoltConfig, Metadata } from "revolt-api";
import { API, MemberCompositeKey, Role } from "revolt-api";
@@ -62,14 +68,23 @@ export declare interface Client {
on(event: "message", listener: (message: Message) => void): this;
on(event: "message/update", listener: (message: Message) => void): this;
on(event: "message/delete", listener: (id: string, message?: Message) => void): this;
on(
event: "message/delete",
listener: (id: string, message?: Message) => void,
): this;
on(event: "channel/create", listener: (channel: Channel) => void): this;
on(event: "channel/update", listener: (channel: Channel) => void): this;
on(event: "channel/delete", listener: (id: string, channel?: Channel) => void): this;
on(
event: "channel/delete",
listener: (id: string, channel?: Channel) => void,
): this;
on(event: "server/update", listener: (server: Server) => void): this;
on(event: "server/delete", listener: (id: string, server?: Server) => void): this;
on(
event: "server/delete",
listener: (id: string, server?: Server) => void,
): this;
on(
event: "role/update",
@@ -99,10 +114,10 @@ export const RE_SPOILER = /!!.+!!/g;
export type FileArgs = [
options?: {
max_side?: number,
size?: number,
width?: number,
height?: number
max_side?: number;
size?: number;
width?: number;
height?: number;
},
allowAnimation?: boolean,
fallback?: string,
@@ -220,8 +235,8 @@ export class Client extends EventEmitter {
this.api = new API({
baseURL: this.apiURL,
authentication: {
revolt: this.session
}
revolt: this.session,
},
});
}
@@ -233,7 +248,7 @@ export class Client extends EventEmitter {
async login(details: DataLogin) {
await this.fetchConfiguration();
const data = await this.api.post("/auth/session/login", details);
if (data.result === 'Success') {
if (data.result === "Success") {
this.session = data;
return await this.$connect();
} else {
@@ -283,10 +298,7 @@ export class Client extends EventEmitter {
* @param data Onboarding data object
* @param loginAfterSuccess Defines whether to automatically log in and connect after onboarding finishes
*/
async completeOnboarding(
data: DataOnboard,
loginAfterSuccess?: boolean,
) {
async completeOnboarding(data: DataOnboard, loginAfterSuccess?: boolean) {
await this.api.post("/onboard/complete", data);
if (loginAfterSuccess) {
await this.websocket.connect();
@@ -303,7 +315,7 @@ export class Client extends EventEmitter {
* @returns Invite information.
*/
async fetchInvite(code: string) {
return await this.api.get(`/invites/${code as ''}`);
return await this.api.get(`/invites/${code as ""}`);
}
async joinInvite(code: string): Promise<Server>;
@@ -315,16 +327,16 @@ export class Client extends EventEmitter {
* @returns Data provided by invite.
*/
async joinInvite(invite: string | InviteResponse) {
const code = typeof invite === 'string' ? invite : invite.code;
const code = typeof invite === "string" ? invite : invite.code;
if (typeof invite === 'object') {
if (typeof invite === "object") {
switch (invite.type) {
case 'Group': {
case "Group": {
const group = this.channels.get(invite.channel_id);
if (group) return group;
break;
}
case 'Server': {
case "Server": {
const server = this.servers.get(invite.server_id);
if (server) return server;
}
@@ -332,8 +344,12 @@ export class Client extends EventEmitter {
}
const response = await this.api.post(`/invites/${code}`);
if (response.type === 'Server') {
return await this.servers.fetch(response.server._id, response.server, response.channels);
if (response.type === "Server") {
return await this.servers.fetch(
response.server._id,
response.server,
response.channels,
);
} else {
throw "Unsupported invite type.";
}
@@ -344,7 +360,7 @@ export class Client extends EventEmitter {
* @param code The invite code.
*/
async deleteInvite(code: string) {
await this.api.delete(`/invites/${code as ''}`);
await this.api.delete(`/invites/${code as ""}`);
}
/**
@@ -372,13 +388,10 @@ export class Client extends EventEmitter {
typeof value === "string" ? value : JSON.stringify(value);
}
await this.api.post(
`/sync/settings/set`,
{
...requestData,
timestamp
}
);
await this.api.post(`/sync/settings/set`, {
...requestData,
timestamp,
});
}
/**
@@ -469,7 +482,12 @@ export class Client extends EventEmitter {
* @returns Generated URL or nothing
*/
generateFileURL(
attachment?: { tag: string; _id: string; content_type?: string, metadata?: Metadata },
attachment?: {
tag: string;
_id: string;
content_type?: string;
metadata?: Metadata;
},
...args: FileArgs
) {
const [options, allowAnimation, fallback] = args;
@@ -481,10 +499,12 @@ export class Client extends EventEmitter {
const { tag, _id, content_type, metadata } = attachment;
// ! FIXME: These limits should be done on Autumn.
if (metadata?.type === 'Image') {
if (Math.min(metadata.width, metadata.height) <= 0 ||
(content_type === "image/gif"
&& Math.max(metadata.width, metadata.height) >= 1024))
if (metadata?.type === "Image") {
if (
Math.min(metadata.width, metadata.height) <= 0 ||
(content_type === "image/gif" &&
Math.max(metadata.width, metadata.height) >= 1024)
)
return fallback;
}
@@ -501,4 +521,106 @@ export class Client extends EventEmitter {
return `${autumn.url}/${tag}/${_id}${query}`;
}
/**
* Configure mock data ("demo mode")
*/
async mock() {
this.configuration = {
revolt: "0.5.3",
features: {
captcha: {
enabled: true,
key: "",
},
email: true,
invite_only: false,
autumn: { enabled: true, url: "https://autumn.revolt.chat" },
january: { enabled: true, url: "https://jan.revolt.chat" },
voso: {
enabled: true,
url: "https://vortex.revolt.chat",
ws: "wss://vortex.revolt.chat",
},
},
ws: "wss://ws.revolt.chat",
app: "https://app.revolt.chat",
vapid: "",
};
this.user = await this.users.fetch("user", {
_id: "user",
username: "insert",
online: true,
status: {
presence: "Online",
text: "gaming frfr",
},
profile: {
content: "profile text",
background: {
_id: "7B3pdjRfTd7NriBWRYFdqKTQpUiskBzHkZ67tJiMtE",
tag: "backgrounds",
filename: "tenor.gif",
metadata: {
type: "Image",
width: 498,
height: 292,
},
content_type: "image/gif",
size: 1073166,
},
},
avatar: {
_id: "6rgg372gI2LrxCUx0CiA2R1Qs6eTtmC-2NpMq1Xa_3",
tag: "avatars",
filename: "e4332b6d70619b8a98086e532dbd4b9e.png",
metadata: {
type: "Image",
width: 128,
height: 128,
},
content_type: "image/png",
size: 23321,
},
});
const names = [
"Server Name",
"My Server",
"Joe Nuts",
"F",
"G",
"Deez",
"A B C D E F",
];
for (let i = 0; i < names.length; i++) {
const _id = i.toString();
this.channels.fetch(_id, {
_id,
channel_type: "TextChannel",
name: "General",
server: _id,
});
this.servers.fetch(_id, {
_id,
name: names[i],
channels: [],
default_permissions: 0,
owner: "user",
});
if (Math.random() > 0.75) {
const count = Math.floor(Math.random() * 10);
for (let i = 0; i < count; i++) {
this.unreads?.markMention(_id, "mid");
}
} else if (Math.random() > 0.5) {
this.unreads?.markUnread(_id, "mid");
}
}
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
export const LIBRARY_VERSION = "6.0.0";
export const LIBRARY_VERSION = "6.0.0-3";
export const defaultConfig = {
apiURL: "https://api.revolt.chat",
+9 -9
View File
@@ -41,10 +41,10 @@
resolved "https://registry.yarnpkg.com/@insertish/isomorphic-ws/-/isomorphic-ws-4.0.1.tgz#5bcd6f73b93efa9ccdb6abf887ae808d40827169"
integrity sha512-kFD/p8T4Hkqr992QrdkbW/cQ/W/q2d9MPCobwzBv2PwTKLkCD9RaYDy6m17qRnSLQQ5PU0kHCG8kaOwAqzj1vQ==
"@insertish/oapi@0.1.15":
version "0.1.15"
resolved "https://registry.yarnpkg.com/@insertish/oapi/-/oapi-0.1.15.tgz#ee58b82d879ed5af54db846699941b8ad0262e7b"
integrity sha512-2G8eFxrojF651tBoRutQ8CJOw0u8UjYSlw/LQU+xycw5KpXslhWp/KSR86uIFyDIPddwfMCNA91vwHGCFRA63w==
"@insertish/oapi@0.1.16":
version "0.1.16"
resolved "https://registry.yarnpkg.com/@insertish/oapi/-/oapi-0.1.16.tgz#1149547a3ded6c1c087318bf9649e231836408ed"
integrity sha512-dxuLdNKBmnbVw8BBRzE1APZ3d7wErhNWQepXdNM3ueeQrheo6Sjg8FGFCQG7zCrEKns08lg5ITmxhqbYXVXZBQ==
dependencies:
typescript "^4.6.2"
optionalDependencies:
@@ -1015,12 +1015,12 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
revolt-api@0.5.3-5-patch.3:
version "0.5.3-5-patch.3"
resolved "https://registry.yarnpkg.com/revolt-api/-/revolt-api-0.5.3-5-patch.3.tgz#73a0614a02a210adac2b946fc0fc35f4304fb348"
integrity sha512-xESgQ9kp8T5iupeixt/yJIiGDiM11pm1b2E6srM/+jrV7Jyrj/vPgDPv3hEeJFhNmUK6EP5tKxkmTBhcqNE/Vw==
revolt-api@0.5.3-5-patch.4:
version "0.5.3-5-patch.4"
resolved "https://registry.yarnpkg.com/revolt-api/-/revolt-api-0.5.3-5-patch.4.tgz#c80da9c02a62ba8736420cf878d2a77e7c93a277"
integrity sha512-ITcKvMBJyx24+rcG/tzGLBZR7fBlYuDla9WMYVIE24dPehGnCzgx9r0ncuwM+RvjbHWGRRDGqc2MA9phT/PZsg==
dependencies:
"@insertish/oapi" "0.1.15"
"@insertish/oapi" "0.1.16"
axios "^0.26.1"
lodash.defaultsdeep "^4.6.1"