Merge pull request #17 from EllieBotDevs/development

v4 preparations
This commit is contained in:
Emotion 2022-01-27 23:43:33 +13:00 committed by GitHub
commit 51240a5969
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 504 additions and 40 deletions

5
.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/

12
.idea/Ellie-v4.iml Normal file
View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="WEB_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/temp" />
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
<excludeFolder url="file://$MODULE_DIR$/tmp" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

7
.idea/discord.xml Normal file
View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DiscordProjectSettings">
<option name="show" value="PROJECT_FILES" />
<option name="description" value="" />
</component>
</project>

8
.idea/modules.xml Normal file
View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/Ellie-v4.iml" filepath="$PROJECT_DIR$/.idea/Ellie-v4.iml" />
</modules>
</component>
</project>

6
.idea/vcs.xml Normal file
View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View file

@ -2,7 +2,20 @@
Experimental changelog. Mostly based on [keepachangelog](https://keepachangelog.com/en/1.0.0/) except date format. a-c-f-r-o
## [4.0.5-alpha] - 6.01.2022
##[4.0.6-beta1] - 27-01-2022
### Added
- Most of the main base system
## [4.0.6-alpha] - 16-01-2022
### Added
- Added the groundwork for the database system
## [4.0.5-alpha] - 6-01-2022
### Added
- Initial bot system stuff

View file

@ -5,15 +5,17 @@
"license": "GPL-3.0",
"dependencies": {
"discord.js": "^13.6.0",
"dotenv": "^11.0.0",
"dotenv": "^14.3.2",
"mysql2": "^2.3.3",
"reflect-metadata": "^0.1.13",
"socket.io-client": "^4.4.1",
"typeorm": "^0.2.41"
},
"devDependencies": {
"@types/node": "^17.0.8",
"@types/node": "^17.0.10",
"@types/socket.io-client": "^3.0.0",
"nodemon": "^2.0.15",
"typescript": "^4.5.4"
"typescript": "^4.5.5"
},
"scripts": {
"dev": "nodemon ./src/index.ts",

View file

@ -1,21 +1,34 @@
import { Client, ClientOptions, Collection } from 'discord.js';
import BaseEvent from '../utils/structures/BaseEvent';
import BaseCommand from '../utils/structures/BaseCommand';
import { GuildConfiguration } from '../typeorm/entities/GuildConfiguration';
export default class DiscordClient extends Client {
private _commands = new Collection<string, BaseCommand>();
private _events = new Collection<string, BaseEvent>();
private _prefix: string = '!';
private _configs = new Collection<string, GuildConfiguration>();
constructor(options: ClientOptions) {
super(options);
}
get commands(): Collection<string, BaseCommand> { return this._commands; }
get events(): Collection<string, BaseEvent> { return this._events; }
get prefix(): string { return this._prefix; }
set prefix(prefix: string) { this._prefix = prefix; }
get commands(): Collection<string, BaseCommand> {
return this._commands;
}
get events(): Collection<string, BaseEvent> {
return this._events;
}
get prefix(): string {
return this._prefix;
}
set prefix(prefix: string) {
this._prefix = prefix;
}
get configs() {
return this._configs;
}
set configs(guildConfigs: Collection<string, GuildConfiguration>) {
this._configs = guildConfigs;
}
}

View file

@ -0,0 +1,37 @@
import { Message } from "discord.js";
import BaseCommand from "../../utils/structures/BaseCommand";
import DiscordClient from "../../client/client";
import { getRepository, Repository } from "typeorm";
import { GuildBanLog } from '../../typeorm/entities/GuildBanLog';
import { ModerationLog } from "../../typeorm/entities/ModerationLog";
export default class BanCommand extends BaseCommand {
constructor(
private readonly modLogRepository: Repository<ModerationLog> = getRepository(
ModerationLog
)
) {
super('ban', 'mod', []);
}
async run(client: DiscordClient, message: Message, args: Array<string>) {
console.log(args);
const [memberId, ...rest] = args;
const reason = rest.join(' ');
try {
// const member = await message.guild?.members.fetch(memberId)!;
// await member.ban({ reason });
const guildBan = this.modLogRepository.create({
guildId: message.guildId!,
issuedBy: message.author.id,
issuedOn: new Date(),
type: 'ban',
reason,
memberId,
});
await this.modLogRepository.save(guildBan);
} catch (err) {
console.log(err);
}
}
}

View file

@ -0,0 +1,35 @@
import { Message } from "discord.js";
import BaseCommand from "../../utils/structures/BaseCommand";
import DiscordClient from "../../client/client";
import { getRepository } from "typeorm";
import { GuildConfiguration } from "../../typeorm/entities/GuildConfiguration";
export default class ChprefixCommand extends BaseCommand {
constructor(
private readonly guildConfigRepository = getRepository(GuildConfiguration)
) {
super('chprefix', 'mod', []);
}
async run(client: DiscordClient, message: Message, args: Array<string>) {
if (!args.length) {
message.channel.send('Please provide an argument!');
return;
}
const [newPrefix] = args;
try {
const config = client.configs.get(message.guildId!);
const updatedConfig = await this.guildConfigRepository.save({
...config,
prefix: newPrefix,
});
console.log(updatedConfig);
message.channel.send('Updated prefix successfully!');
client.configs.set(message.guildId!, updatedConfig);
console.log(client.configs);
} catch (err) {
console.log(err);
message.channel.send('Something went wrong.');
}
}
}

View file

@ -0,0 +1,35 @@
import { Message } from "discord.js";
import BaseCommand from "../../utils/structures/BaseCommand";
import DiscordClient from "../../client/client";
import { GuildConfiguration } from "../../typeorm/entities/GuildConfiguration";
import { getRepository } from "typeorm";
export default class ChwelcomechannelCommand extends BaseCommand {
constructor(
private readonly guildConfigRepository = getRepository(GuildConfiguration)
) {
super('chwemcomechannel', 'mod', []);
}
async run(client: DiscordClient, message: Message, args: Array<string>) {
if (!args.length) {
message.channel.send('Please provide an argument!');
return;
}
const [newChannelId] = args;
try {
const config = client.configs.get(message.guildId!);
const updatedConfig = await this.guildConfigRepository.save({
...config,
welcomeChannelId: newChannelId,
});
console.log(updatedConfig);
message.channel.send('Updated Welcome Channel successfully!');
client.configs.set(message.guildId!, updatedConfig);
console.log(client.configs);
} catch (err) {
console.log(err);
message.channel.send('Something went wrong.');
}
}
}

View file

@ -0,0 +1,38 @@
import { Message } from "discord.js";
import BaseCommand from "../../utils/structures/BaseCommand";
import DiscordClient from "../../client/client";
import { getRepository, Repository } from "typeorm";
import { ModerationLog } from "../../typeorm/entities/ModerationLog";
export default class KickCommand extends BaseCommand {
constructor(
private readonly modLogRepository: Repository<ModerationLog> = getRepository(
ModerationLog
)
) {
super('kick', 'mod', []);
}
async run(client: DiscordClient, message: Message, args: Array<string>) {
console.log(args);
const [memberId, ...rest] = args;
const reason = rest.join(' ');
try {
// const member = await message.guild?.members.fetch(memberId)!;
// await member.kick(reason);
const date = new Date();
date.setDate(date.getDate() - 6);
const modLog = this.modLogRepository.create({
guildId: message.guildId!,
memberId,
issuedBy: message.author.id,
issuedOn: date,
reason,
type: 'kick'
});
await this.modLogRepository.save(modLog);
} catch (err) {
console.log(err);
}
}
}

View file

@ -0,0 +1,41 @@
import { Message } from 'discord.js';
import BaseCommand from "../../utils/structures/BaseCommand";
import DiscordClient from "../../client/client";
import { getRepository, Repository } from "typeorm";
import { ModerationLog } from "../../typeorm/entities/ModerationLog";
export default class TimeoutCommand extends BaseCommand {
constructor(
private readonly modLogRepository: Repository<ModerationLog> = getRepository(
ModerationLog
)
) {
super('timeout', 'mod', []);
}
async run(client: DiscordClient, message: Message, args: Array<string>) {
console.log(args);
const [memberId, timeoutStr, ...rest] = args;
const reason = rest.join(' ');
const time = parseInt(timeoutStr);
if (isNaN(time)) {
message.channel.send('Invalid Time');
return;
}
try {
const member = await message.guild?.members.fetch(memberId)!;
await member.timeout(time * 1000, reason);
const modLog = this.modLogRepository.create({
guildId: message.guildId!,
memberId,
issuedBy: message.author.id,
issuedOn: new Date(),
reason,
type: 'timeout',
});
await this.modLogRepository.save(modLog);
} catch (err) {
console.log(err);
}
}
}

View file

@ -13,20 +13,23 @@ export default class GuildCreateEvent extends BaseEvent {
}
async run(client: DiscordClient, guild: Guild) {
console.log('Hellp World!');
console.log('Hello, World!')
console.log(`Joined ${guild.name}`);
const config = await this.guildConfigRepository.findOne({
guildId: guild.id,
});
if (config) {
console.log('A configuration was found!');
console.log('A configuration was found!')
client.configs.set(guild.id, config);
console.log(client.configs);
} else {
console.log('A configuration was not found. Creating One.');
const newConfig = this.guildConfigRepository.create({
guildId: guild.id,
})
return this.guildConfigRepository.save(newConfig);
});
const savedConfig = await this.guildConfigRepository.save(newConfig);
client.configs.set(guild.id, savedConfig);
console.log(client.configs);
}
}
}

View file

@ -0,0 +1,27 @@
// https://discord.js.org/#/docs/main/stable/class/Client?scrollTo=e-guildMemberAdd
import { GuildMember, TextChannel} from "discord.js";
import BaseEvent from "../utils/structures/BaseEvent";
import DiscordClient from "../client/client";
export default class GuildMemberAddEvent extends BaseEvent {
constructor() {
super('guildMemberAdd');
}
async run(client: DiscordClient, member: GuildMember) {
console.log(`Guild Member Joined`);
console.log(`Joined ${member.guild.id} ${member.guild.name}`);
const config = client.configs.get(member.guild.id);
console.log(config);
if (!config) return;
if (config.welcomeChannelId) {
const channel = member.guild.channels.cache.get(
config.welcomeChannelId
) as TextChannel;
if (!channel) console.log(`No welcome channel found`);
else channel.send(`Welcome ${member}`);
} else {
console.log('No welcome channel set.');
}
}
}

View file

@ -9,9 +9,14 @@ export default class MessageEvent extends BaseEvent {
async run(client: DiscordClient, message: Message) {
if (message.author.bot) return;
if (message.content.startsWith(client.prefix)) {
const config = client.configs.get(message.guildId!);
if (!config) {
message.channel.send('No configuration set.');
return;
}
if (message.content.startsWith(config.prefix)) {
const [cmdName, ...cmdArgs] = message.content
.slice(client.prefix.length)
.slice(config.prefix.length)
.trim()
.split(/\s+/);
const command = client.commands.get(cmdName);

View file

@ -1,14 +1,32 @@
require('dotenv').config();
import 'reflect-metadata';
import { registerCommands, registerEvents } from './utils/registry';
import config from '../slappey.json';
import DiscordClient from './client/client';
import { Intents } from 'discord.js';
import { createConnection } from 'typeorm';
import { Collection, Intents } from 'discord.js';
import { createConnection, getRepository } from 'typeorm';
import { GuildConfiguration } from './typeorm/entities/GuildConfiguration';
const client = new DiscordClient({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES ] });
import { io } from 'socket.io-client';
import { entities } from './typeorm/entities';
const client = new DiscordClient({
intents: [
Intents.FLAGS.GUILDS,
Intents.FLAGS.GUILD_MESSAGES,
Intents.FLAGS.GUILD_MEMBERS,
],
});
(async () => {
const socket = io('http://localhost:3001');
socket.on('guildPrefixUpdate', (config: GuildConfiguration) => {
console.log('guildPrefixUpdate');
console.log(config);
console.log(client.configs)
client.configs.set(config.guildId, config);
console.log(client.configs);
});
await createConnection({
type: 'mysql',
host: process.env.MYSQL_DB_HOST,
@ -17,11 +35,17 @@ const client = new DiscordClient({ intents: [Intents.FLAGS.GUILDS, Intents.FLAGS
password: process.env.MYSQL_DB_PASSWORD,
database: process.env.MYSQL_DB_DATABASE,
synchronize: true,
entities: [GuildConfiguration]
entities: entities,
});
client.prefix = config.prefix || client.prefix;
const configRepo = getRepository(GuildConfiguration);
const guildConfigs = await configRepo.find();
const configs = new Collection<string, GuildConfiguration>();
guildConfigs.forEach((config) => configs.set(config.guildId, config));
console.log(guildConfigs);
await registerCommands(client, '../commands');
await registerEvents(client, '../events');
await client.login(process.env.DJS_BOT_TOKEN);
})();

View file

@ -0,0 +1,22 @@
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
@Entity({ name: 'guild_bans' })
export class GuildBanLog {
@PrimaryGeneratedColumn()
id: number;
@Column({ name: 'guild_id' })
guildId: string;
@Column({ name: 'banned_member_id' })
bannedMemberId: string;
@Column({ name: 'issued_by' })
issuedBy: string;
@Column()
reason?: string;
@Column({ name: 'issued_on' })
issuedOn: Date;
}

View file

@ -0,0 +1,26 @@
import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
import { ModerationActionType } from "../../utils/types";
@Entity({ name: 'moderation_logs' })
export class ModerationLog {
@PrimaryGeneratedColumn()
id: number;
@Column({ name: 'guild_id' })
guildId: string;
@Column({ name: 'member_id' })
memberId: string;
@Column({ name: 'issued_by' })
issuedBy: string;
@Column()
reason?: string;
@Column({ name: 'issued_on' })
issuedOn: Date;
@Column()
type: ModerationActionType;
}

View file

@ -0,0 +1,5 @@
import { GuildBanLog } from "./GuildBanLog";
import { GuildConfiguration } from "./GuildConfiguration";
import { ModerationLog } from "./ModerationLog";
export const entities = [GuildBanLog, GuildConfiguration, ModerationLog];

1
src/utils/types.ts Normal file
View file

@ -0,0 +1 @@
export type ModerationActionType = 'ban' | 'kick' | 'timeout';

119
yarn.lock
View file

@ -33,6 +33,16 @@
resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.2.1.tgz#b88b5724283db80b507cd612caee9a1947412a20"
integrity sha512-BrzrgtaqEre0qfvI8sMTaEvx+bayuhPmfe2rfeUGPPHYr/PLxCOqkOe4TQTDPb+qcqgNcsAtXV/Ew74mcDIE8w==
"@socket.io/base64-arraybuffer@~1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@socket.io/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#568d9beae00b0d835f4f8c53fd55714986492e61"
integrity sha512-dOlCBKnDw4iShaIsH/bxujKTM18+2TOAsYz+KSc11Am38H4q5Xw8Bbz97ZYdrVNM+um3p7w86Bvvmcn9q+5+eQ==
"@socket.io/component-emitter@~3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@socket.io/component-emitter/-/component-emitter-3.0.0.tgz#8863915676f837d9dad7b76f50cb500c1e9422e9"
integrity sha512-2pTGuibAXJswAPJjaKisthqS/NOK5ypG4LYT6tEAV0S/mxW0zOIvYvGK0V8w8+SHxAm6vRMSjqSalFXeBAqs+Q==
"@sqltools/formatter@^1.2.2":
version "1.2.3"
resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.3.tgz#1185726610acc37317ddab11c3c7f9066966bd20"
@ -53,11 +63,23 @@
"@types/node" "*"
form-data "^3.0.0"
"@types/node@*", "@types/node@^17.0.8":
"@types/node@*":
version "17.0.8"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b"
integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg==
"@types/node@^17.0.10":
version "17.0.10"
resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.10.tgz#616f16e9d3a2a3d618136b1be244315d95bd7cab"
integrity sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==
"@types/socket.io-client@^3.0.0":
version "3.0.0"
resolved "https://registry.yarnpkg.com/@types/socket.io-client/-/socket.io-client-3.0.0.tgz#d0b8ea22121b7c1df68b6a923002f9c8e3cefb42"
integrity sha512-s+IPvFoEIjKA3RdJz/Z2dGR4gLgysKi8owcnrVwNjgvc01Lk68LJDDsG2GRqegFITcxmvCMYM7bhMpwEMlHmDg==
dependencies:
socket.io-client "*"
"@types/ws@^8.2.2":
version "8.2.2"
resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.2.2.tgz#7c5be4decb19500ae6b3d563043cd407bf366c21"
@ -122,6 +144,11 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
backo2@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947"
integrity sha1-MasayLEpNjRj41s+u2n038+6eUc=
balanced-match@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
@ -301,7 +328,7 @@ debug@^3.2.7:
dependencies:
ms "^2.1.1"
debug@^4.3.1:
debug@^4.3.1, debug@~4.3.1, debug@~4.3.2:
version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
@ -362,10 +389,10 @@ dot-prop@^5.2.0:
dependencies:
is-obj "^2.0.0"
dotenv@^11.0.0:
version "11.0.0"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-11.0.0.tgz#ee37feddf8ada6d348a79e198312d4a8abfd1c1e"
integrity sha512-Fp/b504Y5W+e+FpCxTFMUZ7ZEQkQYF0rx+KZtmwixJxGQbLHrhCwo3FjZgNC8vIfrSi29PABNbMoCGD9YoiXbQ==
dotenv@^14.3.2:
version "14.3.2"
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-14.3.2.tgz#7c30b3a5f777c79a3429cb2db358eef6751e8369"
integrity sha512-vwEppIphpFdvaMCaHfCEv9IgwcxMljMw2TnAQBB4VWPvzXQLTb82jwmdOKzlEVUL3gNFT4l4TPKO+Bn+sqcrVQ==
dotenv@^8.2.0:
version "8.6.0"
@ -389,6 +416,28 @@ end-of-stream@^1.1.0:
dependencies:
once "^1.4.0"
engine.io-client@~6.1.1:
version "6.1.1"
resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-6.1.1.tgz#800d4b9db5487d169686729e5bd887afa78d36b0"
integrity sha512-V05mmDo4gjimYW+FGujoGmmmxRaDsrVr7AXA3ZIfa04MWM1jOfZfUwou0oNqhNwy/votUDvGDt4JA4QF4e0b4g==
dependencies:
"@socket.io/component-emitter" "~3.0.0"
debug "~4.3.1"
engine.io-parser "~5.0.0"
has-cors "1.1.0"
parseqs "0.0.6"
parseuri "0.0.6"
ws "~8.2.3"
xmlhttprequest-ssl "~2.0.0"
yeast "0.1.2"
engine.io-parser@~5.0.0:
version "5.0.3"
resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-5.0.3.tgz#ca1f0d7b11e290b4bfda251803baea765ed89c09"
integrity sha512-BtQxwF27XUNnSafQLvDi0dQ8s3i6VgzSoQMJacpIcGNrlUdfHSKbgm3jmjCVvQluGzqwujQMPAoMai3oYSTurg==
dependencies:
"@socket.io/base64-arraybuffer" "~1.0.2"
escalade@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
@ -508,6 +557,11 @@ graceful-fs@^4.1.2:
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96"
integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==
has-cors@1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39"
integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk=
has-flag@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
@ -878,6 +932,16 @@ parse5@^6.0.1:
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==
parseqs@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.6.tgz#8e4bb5a19d1cdc844a08ac974d34e273afa670d5"
integrity sha512-jeAGzMDbfSHHA091hr0r31eYfTig+29g3GKKE/PPbEQ65X0lmMwlEoqmhzu0iztID5uJpZsFlUPDP8ThPL7M8w==
parseuri@0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.6.tgz#e1496e829e3ac2ff47f39a4dd044b32823c4a25a"
integrity sha512-AUjen8sAkGgao7UyCX6Ahv0gIK2fABKmYjvP4xmy5JaKvcbTRueIqIPHLAfq30xJddqSE033IOMUSOMCcK3Sow==
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
@ -1023,6 +1087,26 @@ signal-exit@^3.0.2:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af"
integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==
socket.io-client@*, socket.io-client@^4.4.1:
version "4.4.1"
resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-4.4.1.tgz#b6aa9448149d09b8d0b2bbf3d2fac310631fdec9"
integrity sha512-N5C/L5fLNha5Ojd7Yeb/puKcPWWcoB/A09fEjjNsg91EDVr5twk/OEyO6VT9dlLSUNY85NpW6KBhVMvaLKQ3vQ==
dependencies:
"@socket.io/component-emitter" "~3.0.0"
backo2 "~1.0.2"
debug "~4.3.2"
engine.io-client "~6.1.1"
parseuri "0.0.6"
socket.io-parser "~4.1.1"
socket.io-parser@~4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-4.1.1.tgz#0ad53d980781cab1eabe320417d8480c0133e62d"
integrity sha512-USQVLSkDWE5nbcY760ExdKaJxCE65kcsG/8k5FDGZVVxpD1pA7hABYXYkCUvxUuYYh/+uQw0N/fvBzfT8o07KA==
dependencies:
"@socket.io/component-emitter" "~3.0.0"
debug "~4.3.1"
sqlstring@^2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.2.tgz#cdae7169389a1375b18e885f2e60b3e460809514"
@ -1145,10 +1229,10 @@ typeorm@^0.2.41:
yargs "^17.0.1"
zen-observable-ts "^1.0.0"
typescript@^4.5.4:
version "4.5.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8"
integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==
typescript@^4.5.5:
version "4.5.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
undefsafe@^2.0.5:
version "2.0.5"
@ -1238,6 +1322,11 @@ ws@^8.4.0:
resolved "https://registry.yarnpkg.com/ws/-/ws-8.4.0.tgz#f05e982a0a88c604080e8581576e2a063802bed6"
integrity sha512-IHVsKe2pjajSUIl4KYMQOdlyliovpEPquKkqbwswulszzI7r0SfQrxnXdWAEqOlDCLrVSJzo+O1hAwdog2sKSQ==
ws@~8.2.3:
version "8.2.3"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba"
integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==
xdg-basedir@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
@ -1256,6 +1345,11 @@ xmlbuilder@~11.0.0:
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
xmlhttprequest-ssl@~2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz#91360c86b914e67f44dce769180027c0da618c67"
integrity sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==
y18n@^5.0.5:
version "5.0.8"
resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
@ -1307,6 +1401,11 @@ yargs@^17.0.1:
y18n "^5.0.5"
yargs-parser "^21.0.0"
yeast@0.1.2:
version "0.1.2"
resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419"
integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk=
zen-observable-ts@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/zen-observable-ts/-/zen-observable-ts-1.1.0.tgz#2d1aa9d79b87058e9b75698b92791c1838551f83"