mirror of
https://github.com/stoatchat/javascript-client-sdk.git
synced 2026-07-21 04:25:27 -04:00
chore: bump revolt-api; add mocking
This commit is contained in:
+2
-2
@@ -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
@@ -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
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user