Compare commits
No commits in common. "fd276bdb94c5f64fcc67034014e0cbf08fdb48be" and "d2ab24ed64292e53f56475e42386fae7fe5fe0c9" have entirely different histories.
fd276bdb94
...
d2ab24ed64
@ -1,63 +0,0 @@
|
|||||||
name: Build and Deploy
|
|
||||||
on: [push]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
Deploy Web:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
container:
|
|
||||||
image: catthehacker/ubuntu:act-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Use Nodejs
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18
|
|
||||||
- run: npm install
|
|
||||||
working-directory: ./web
|
|
||||||
- run: npm run build
|
|
||||||
working-directory: ./web
|
|
||||||
|
|
||||||
- uses: docker/setup-qemu-action@v2
|
|
||||||
- uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
- uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
registry: gitea.xeovalyte.dev
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
- run: docker buildx build -t gitea.xeovalyte.dev/xeovalyte/polarcraft-web:latest --load --platform=linux/amd64 .
|
|
||||||
working-directory: ./web
|
|
||||||
- run: docker push gitea.xeovalyte.dev/xeovalyte/polarcraft-web:latest
|
|
||||||
working-directory: ./web
|
|
||||||
|
|
||||||
Deploy Discord Bot:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
container:
|
|
||||||
image: catthehacker/ubuntu:act-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: Use Nodejs
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18
|
|
||||||
- run: npm install
|
|
||||||
working-directory: ./discord-bot
|
|
||||||
|
|
||||||
- uses: docker/setup-qemu-action@v2
|
|
||||||
- uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
- uses: docker/login-action@v2
|
|
||||||
with:
|
|
||||||
registry: gitea.xeovalyte.dev
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
|
|
||||||
- run: docker buildx build -t gitea.xeovalyte.dev/xeovalyte/polarcraft-web:latest --load --platform=linux/amd64 .
|
|
||||||
working-directory: ./discord-bot
|
|
||||||
- run: docker push gitea.xeovalyte.dev/xeovalyte/polarcraft-web:latest
|
|
||||||
working-directory: ./discord-bot
|
|
Before Width: | Height: | Size: 663 KiB |
Before Width: | Height: | Size: 899 KiB |
BIN
assets/logo.png
Before Width: | Height: | Size: 984 KiB |
Before Width: | Height: | Size: 6.0 KiB |
@ -3,19 +3,27 @@ const { SlashCommandBuilder, PermissionsBitField, ChannelType, ButtonStyle, Butt
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
data: new SlashCommandBuilder()
|
data: new SlashCommandBuilder()
|
||||||
.setName('ticket')
|
.setName('ticket')
|
||||||
.setDescription('Commands for managing a ticket')
|
.setDescription('Create a ticket!')
|
||||||
.addSubcommand(subcommand => subcommand
|
.addStringOption(option => option
|
||||||
.setName('create')
|
.setName('category')
|
||||||
.setDescription('Create a ticket with you and moderators'))
|
.setDescription('The category of the ticket')
|
||||||
.addSubcommand(subcommand => subcommand
|
.setRequired(true)
|
||||||
.setName('close')
|
.addChoices(
|
||||||
.setDescription('Close current ticket')),
|
{ name: 'Technical Problem', value: 'tech-problem' },
|
||||||
|
{ name: 'Griefing or Harm', value: 'grief-or-harm' },
|
||||||
|
{ name: 'Suggestion', value: 'suggestion' },
|
||||||
|
{ name: 'Other', value: 'other' },
|
||||||
|
)),
|
||||||
|
|
||||||
async execute({ interaction, createEmbed }) {
|
async execute({ interaction, createEmbed }) {
|
||||||
if (interaction.options.getSubcommand() === 'create') {
|
|
||||||
await interaction.reply({ embeds: [createEmbed.basic('Creating ticket channel...')], fetchReply: true, ephemeral: true });
|
await interaction.reply({ embeds: [createEmbed.basic('Creating ticket channel...')], fetchReply: true, ephemeral: true });
|
||||||
|
|
||||||
const ticketChannel = await interaction.member.guild.channels.create({
|
const category = interaction.options.getString('category');
|
||||||
|
|
||||||
|
let ticketChannel;
|
||||||
|
|
||||||
|
if (category === 'grief-or-harm') {
|
||||||
|
ticketChannel = await interaction.member.guild.channels.create({
|
||||||
name: `ticket-${interaction.user.username}`,
|
name: `ticket-${interaction.user.username}`,
|
||||||
type: ChannelType.GuildText,
|
type: ChannelType.GuildText,
|
||||||
parent: process.env.TICKET_CATEGORY_ID,
|
parent: process.env.TICKET_CATEGORY_ID,
|
||||||
@ -35,14 +43,51 @@ module.exports = {
|
|||||||
],
|
],
|
||||||
|
|
||||||
});
|
});
|
||||||
|
} else if (category === 'tech-problem') {
|
||||||
|
ticketChannel = await interaction.member.guild.channels.create({
|
||||||
|
name: `ticket-${interaction.user.username}`,
|
||||||
|
type: ChannelType.GuildText,
|
||||||
|
parent: process.env.TICKET_CATEGORY_ID,
|
||||||
|
permissionOverwrites: [
|
||||||
|
{
|
||||||
|
id: interaction.guild.id,
|
||||||
|
deny: [PermissionsBitField.Flags.ViewChannel],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: process.env.CONTRIBUTER_ROLE_ID,
|
||||||
|
allow: [PermissionsBitField.Flags.ViewChannel],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: interaction.user.id,
|
||||||
|
allow: [PermissionsBitField.Flags.ViewChannel],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
ticketChannel = await interaction.member.guild.channels.create({
|
||||||
|
name: `ticket-${interaction.user.username}`,
|
||||||
|
type: ChannelType.GuildText,
|
||||||
|
parent: process.env.TICKET_CATEGORY_ID,
|
||||||
|
permissionOverwrites: [
|
||||||
|
{
|
||||||
|
id: interaction.guild.id,
|
||||||
|
deny: [PermissionsBitField.Flags.ViewChannel],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: interaction.user.id,
|
||||||
|
allow: [PermissionsBitField.Flags.ViewChannel],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
await ticketChannel.send({ embeds: [createEmbed.basic(`${interaction.user} created a ticket`)]});
|
const closeRow = new ActionRowBuilder()
|
||||||
|
.addComponents(
|
||||||
interaction.editReply({ embeds: [createEmbed.basic(`${ticketChannel} has been created`)], emphemeral: true });
|
new ButtonBuilder()
|
||||||
|
.setCustomId('close')
|
||||||
} else if (interaction.options.getSubcommand() === 'close') {
|
.setLabel('Close Ticket')
|
||||||
|
.setStyle(ButtonStyle.Danger),
|
||||||
if (!interaction.channel.name.startsWith('ticket')) return interaction.reply({ embeds: [createEmbed.basic('You must execute this command inside a ticket channel')], emphemeral: true });
|
);
|
||||||
|
|
||||||
const cancelRow = new ActionRowBuilder()
|
const cancelRow = new ActionRowBuilder()
|
||||||
.addComponents(
|
.addComponents(
|
||||||
@ -52,19 +97,25 @@ module.exports = {
|
|||||||
.setStyle(ButtonStyle.Danger),
|
.setStyle(ButtonStyle.Danger),
|
||||||
);
|
);
|
||||||
|
|
||||||
const closeMessage = await interaction.reply({ embeds: [createEmbed.basic(`Closing ticket in 10 seconds...`)], components: [cancelRow]});
|
const ticketMessage = await ticketChannel.send({ embeds: [createEmbed.basic(`${interaction.user} created a ticket with the category **${category}**`)], components: [closeRow] });
|
||||||
const collector = closeMessage.createMessageComponentCollector();
|
|
||||||
|
|
||||||
const timeout = setTimeout(() => {
|
const collector = ticketMessage.createMessageComponentCollector();
|
||||||
try {
|
|
||||||
interaction.channel.delete()
|
|
||||||
} catch {}
|
|
||||||
}, 10000)
|
|
||||||
|
|
||||||
collector.on('collect', async () => {
|
let ticketCancelMessage;
|
||||||
|
let timeout;
|
||||||
|
collector.on('collect', async i => {
|
||||||
|
if (i.customId === 'close') {
|
||||||
|
ticketCancelMessage = await ticketChannel.send({ embeds: [createEmbed.basic('Closing ticket in 10 seconds...')] });
|
||||||
|
await ticketMessage.createMessageComponentCollector();
|
||||||
|
await i.update({ components: [cancelRow] });
|
||||||
|
timeout = setTimeout(() => ticketChannel.delete(), 10000);
|
||||||
|
} else {
|
||||||
clearTimeout(timeout);
|
clearTimeout(timeout);
|
||||||
await closeMessage.edit({ embeds: [createEmbed.basic('Ticket closing has been stopped')], components: [] });
|
await ticketCancelMessage.edit({ embeds: [createEmbed.basic('Ticket closing has been stopped')] });
|
||||||
});
|
await i.update({ components: [closeRow] });
|
||||||
}
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
interaction.editReply({ embeds: [createEmbed.basic(`${ticketChannel} has been created`)], emphemeral: true });
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -26,13 +26,9 @@ require('./functions/player.js').registerEvents({ client, createEmbed });
|
|||||||
const app = express();
|
const app = express();
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
|
|
||||||
const minecraftRoute = require('./routes/Minecraft');
|
const messageRoute = require('./routes/Message');
|
||||||
const userRoute = require('./routes/User');
|
|
||||||
const teamRoute = require('./routes/Team');
|
|
||||||
|
|
||||||
app.use('/minecraft', minecraftRoute);
|
app.use('/minecraft', messageRoute);
|
||||||
app.use('/user', userRoute);
|
|
||||||
app.use('/team', teamRoute);
|
|
||||||
|
|
||||||
app.listen('4000', () => {
|
app.listen('4000', () => {
|
||||||
log.Info('Express app running');
|
log.Info('Express app running');
|
||||||
|
@ -1,145 +0,0 @@
|
|||||||
const express = require('express');
|
|
||||||
const index = require('../index');
|
|
||||||
const { PermissionsBitField, ChannelType } = require('discord.js');
|
|
||||||
|
|
||||||
const router = express.Router();
|
|
||||||
|
|
||||||
router.post('/createchannels', async (req, res) => {
|
|
||||||
const { name, discordId } = req.body;
|
|
||||||
|
|
||||||
if (!name || !discordId ) return res.status(400).send({ error: 'Name en discordId zijn vereist' });
|
|
||||||
|
|
||||||
try {
|
|
||||||
const guild = await index.client.guilds.fetch(process.env.GUILD_ID);
|
|
||||||
|
|
||||||
const category = await guild.channels.fetch(process.env.TEAM_CATEGORY_ID);
|
|
||||||
|
|
||||||
const member = await guild.members.fetch(discordId)
|
|
||||||
|
|
||||||
const textChannel = await guild.channels.create({
|
|
||||||
name: name,
|
|
||||||
type: ChannelType.GuildText,
|
|
||||||
parent: category,
|
|
||||||
permissionOverwrites: [
|
|
||||||
{
|
|
||||||
id: guild.id,
|
|
||||||
deny: [PermissionsBitField.Flags.ViewChannel],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: member.id,
|
|
||||||
allow: [PermissionsBitField.Flags.ViewChannel]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
});
|
|
||||||
|
|
||||||
const voiceChannel = await guild.channels.create({
|
|
||||||
name: name,
|
|
||||||
type: ChannelType.GuildVoice,
|
|
||||||
parent: category,
|
|
||||||
permissionOverwrites: [
|
|
||||||
{
|
|
||||||
id: guild.id,
|
|
||||||
deny: [PermissionsBitField.Flags.ViewChannel],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: member.id,
|
|
||||||
allow: [PermissionsBitField.Flags.ViewChannel]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
});
|
|
||||||
|
|
||||||
res.send({ textChannel, voiceChannel });
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
return res.status(500).send({ error: 'Error tijdens het maken van discord channels' })
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
router.post('/deletechannels', async (req, res) => {
|
|
||||||
const { textChannelId, voiceChannelId } = req.body;
|
|
||||||
|
|
||||||
if (!textChannelId, !voiceChannelId ) return res.status(400).send({ error: 'textChannelId en voiceChannelId zijn vereist' });
|
|
||||||
|
|
||||||
try {
|
|
||||||
const guild = await index.client.guilds.fetch(process.env.GUILD_ID);
|
|
||||||
|
|
||||||
const textChannel = await guild.channels.fetch(textChannelId);
|
|
||||||
const voiceChannel = await guild.channels.fetch(voiceChannelId);
|
|
||||||
|
|
||||||
await textChannel.delete()
|
|
||||||
await voiceChannel.delete()
|
|
||||||
|
|
||||||
res.send({ status: 'success' });
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
return res.status(500).send({ error: 'Error tijdens het verwijderen van discord channels' })
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
router.post('/removeteammember', async (req, res) => {
|
|
||||||
const { textChannelId, voiceChannelId, discordId } = req.body;
|
|
||||||
|
|
||||||
if (!textChannelId, !voiceChannelId, !discordId ) return res.status(400).send({ error: 'textChannelId, voiceChannelId en discordId zijn vereist' });
|
|
||||||
|
|
||||||
try {
|
|
||||||
const guild = await index.client.guilds.fetch(process.env.GUILD_ID);
|
|
||||||
const member = await guild.members.fetch(discordId)
|
|
||||||
|
|
||||||
const textChannel = await guild.channels.fetch(textChannelId);
|
|
||||||
const voiceChannel = await guild.channels.fetch(voiceChannelId);
|
|
||||||
|
|
||||||
await textChannel.permissionOverwrites.delete(member)
|
|
||||||
await voiceChannel.permissionOverwrites.delete(member)
|
|
||||||
|
|
||||||
res.send({ status: 'success' });
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
return res.status(500).send({ error: 'Error tijdens het verwijderen van een team member' })
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
router.post('/addteammember', async (req, res) => {
|
|
||||||
const { textChannelId, voiceChannelId, discordId } = req.body;
|
|
||||||
|
|
||||||
if (!textChannelId, !voiceChannelId, !discordId ) return res.status(400).send({ error: 'textChannelId, voiceChannelId en discordId zijn vereist' });
|
|
||||||
|
|
||||||
try {
|
|
||||||
const guild = await index.client.guilds.fetch(process.env.GUILD_ID);
|
|
||||||
const member = await guild.members.fetch(discordId)
|
|
||||||
|
|
||||||
const textChannel = await guild.channels.fetch(textChannelId);
|
|
||||||
const voiceChannel = await guild.channels.fetch(voiceChannelId);
|
|
||||||
|
|
||||||
await textChannel.permissionOverwrites.edit(member, { ViewChannel: true })
|
|
||||||
await voiceChannel.permissionOverwrites.edit(member, { ViewChannel: true })
|
|
||||||
|
|
||||||
res.send({ status: 'success' });
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
return res.status(500).send({ error: 'Error tijdens het toevoegen van team member' })
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
router.post('/edit', async (req, res) => {
|
|
||||||
const { textChannelId, voiceChannelId, name } = req.body;
|
|
||||||
|
|
||||||
if (!textChannelId, !voiceChannelId, !name ) return res.status(400).send({ error: 'textChannelId, voiceChannelId en name zijn vereist' });
|
|
||||||
|
|
||||||
try {
|
|
||||||
const guild = await index.client.guilds.fetch(process.env.GUILD_ID);
|
|
||||||
|
|
||||||
const textChannel = await guild.channels.fetch(textChannelId);
|
|
||||||
const voiceChannel = await guild.channels.fetch(voiceChannelId);
|
|
||||||
|
|
||||||
await textChannel.edit({ name: name })
|
|
||||||
await voiceChannel.edit({ name: name })
|
|
||||||
|
|
||||||
res.send({ status: 'success' });
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
return res.status(500).send({ error: 'Error tijds het veranderen van Discord channel naam' })
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = router;
|
|
@ -1,27 +0,0 @@
|
|||||||
const express = require('express');
|
|
||||||
const index = require('../index')
|
|
||||||
|
|
||||||
const router = express.Router();
|
|
||||||
|
|
||||||
router.post('/changenickname', async (req, res) => {
|
|
||||||
const { nickname, discordId } = req.body;
|
|
||||||
|
|
||||||
if (!nickname || !discordId ) return res.status(400).send({ error: 'Nickname en discordId zijn vereist' });
|
|
||||||
|
|
||||||
const nick = nickname.length > 32 ? nickname.slice(0, 32) : nickname
|
|
||||||
|
|
||||||
try {
|
|
||||||
const guild = await index.client.guilds.fetch(process.env.GUILD_ID);
|
|
||||||
|
|
||||||
const member = await guild.members.fetch(discordId)
|
|
||||||
|
|
||||||
await member.edit({ nick: nick })
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e);
|
|
||||||
return res.status(500).send({ error: 'Error tijds het veranderen van de nickname' })
|
|
||||||
}
|
|
||||||
|
|
||||||
res.send({ status: 'success' });
|
|
||||||
});
|
|
||||||
|
|
||||||
module.exports = router;
|
|
@ -43,7 +43,7 @@ public class PolarcraftMod implements ModInitializer {
|
|||||||
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> {
|
ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> {
|
||||||
ServerPlayerEntity player = (ServerPlayerEntity) handler.player;
|
ServerPlayerEntity player = (ServerPlayerEntity) handler.player;
|
||||||
|
|
||||||
verifyFunction.onPlayerJoin(player, server);
|
verifyFunction.onPlayerJoin(player);
|
||||||
});
|
});
|
||||||
|
|
||||||
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> {
|
ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> {
|
||||||
|
@ -14,12 +14,11 @@ import com.google.gson.Gson;
|
|||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
|
||||||
import net.minecraft.server.MinecraftServer;
|
|
||||||
import net.minecraft.server.network.ServerPlayerEntity;
|
import net.minecraft.server.network.ServerPlayerEntity;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
public class verifyFunction {
|
public class verifyFunction {
|
||||||
public static void onPlayerJoin(ServerPlayerEntity player, MinecraftServer server) {
|
public static void onPlayerJoin(ServerPlayerEntity player) {
|
||||||
UUID uuid = player.getUuid();
|
UUID uuid = player.getUuid();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@ -56,9 +55,7 @@ public class verifyFunction {
|
|||||||
|
|
||||||
player.networkHandler.disconnect(Text.literal("Whitelist yourself by using this code: " + code));
|
player.networkHandler.disconnect(Text.literal("Whitelist yourself by using this code: " + code));
|
||||||
} else {
|
} else {
|
||||||
server.getCommandManager().executeWithPrefix(server.getCommandSource(), "/lp user " + player.getUuid() + " meta set display " + "\"" + jsonResponse.get("username").getAsString() + "\"");
|
messageFunctions.sendGameMessage(player.getUuid(), player.getDisplayName().getString() + " joined the game");
|
||||||
|
|
||||||
messageFunctions.sendGameMessage(player.getUuid(), jsonResponse.get("usernameWithoutStyle").getAsString() + " joined the game");
|
|
||||||
}
|
}
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
player.networkHandler.disconnect(Text.literal("There was an error while verifing your account"));
|
player.networkHandler.disconnect(Text.literal("There was an error while verifing your account"));
|
||||||
|
11
web/app.vue
@ -1,5 +1,14 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="h-screen w-full overflow-y-auto">
|
<div class="h-screen w-full overflow-y-auto">
|
||||||
<NuxtLayout />
|
<NuxtLayout :name="layout" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
const route = useRoute()
|
||||||
|
|
||||||
|
const layout = computed(() => {
|
||||||
|
if (route.path === '/login') { return 'blank' }
|
||||||
|
return 'default'
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
@ -34,7 +34,7 @@ const submitCode = async () => {
|
|||||||
user.value.minecraft.uuid = response.uuid
|
user.value.minecraft.uuid = response.uuid
|
||||||
user.value.minecraft.username = response.username
|
user.value.minecraft.username = response.username
|
||||||
|
|
||||||
useToast().success('Succesvol gewhitelist')
|
useToast().success('Successfully whitelisted')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
useToast().error(e.statusMessage)
|
useToast().error(e.statusMessage)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex flex-col gap-1 bg-neutral-800 px-2 pb-14 pt-5 text-gray-300">
|
<div class="flex flex-col bg-neutral-800 px-2 pb-14 pt-5 text-gray-300">
|
||||||
<NuxtLink to="/" class="sidebar-item">
|
<NuxtLink to="/" class="sidebar-item">
|
||||||
<Icon size="1.5em" name="ph:house" class="mr-3" />
|
<Icon size="1.5em" name="ph:house" class="mr-3" />
|
||||||
Home
|
Home
|
||||||
@ -8,13 +8,13 @@
|
|||||||
<Icon size="1.5em" name="ph:users-three" class="mr-3" />
|
<Icon size="1.5em" name="ph:users-three" class="mr-3" />
|
||||||
Team
|
Team
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
<NuxtLink to="/player-store" class="sidebar-item">
|
<NuxtLink to="/" class="sidebar-item">
|
||||||
<Icon size="1.5em" name="ph:storefront" class="mr-3" />
|
<Icon size="1.5em" name="ph:storefront" class="mr-3" />
|
||||||
Player stores
|
Player stores
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
<NuxtLink to="/map" class="sidebar-item">
|
<NuxtLink to="/" class="sidebar-item">
|
||||||
<Icon size="1.5em" name="ph:map-trifold" class="mr-3" />
|
<Icon size="1.5em" name="ph:storefront" class="mr-3" />
|
||||||
Map
|
Donation store
|
||||||
</NuxtLink>
|
</NuxtLink>
|
||||||
<div v-if="user && user.admin" class="mt-auto">
|
<div v-if="user && user.admin" class="mt-auto">
|
||||||
<h2 class="ml-2 text-gray-400">Adminstration</h2>
|
<h2 class="ml-2 text-gray-400">Adminstration</h2>
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="mb-10 mt-5 flex justify-center gap-x-3">
|
<div class="mb-10 mt-5 flex justify-center gap-x-3">
|
||||||
<Button type="danger" @click="leaveTeam">Leave Team</Button>
|
<Button type="danger" @click="leaveTeam">Leave Team</Button>
|
||||||
<Button v-if="user.team.admin" @click="openTeamModal">Edit Team</Button>
|
<Button @click="openTeamModal">Edit Team</Button>
|
||||||
</div>
|
</div>
|
||||||
<h2 class="mb-2 text-xl font-bold text-primary">Team Members</h2>
|
<h2 class="mb-2 text-xl font-bold text-primary">Team Members</h2>
|
||||||
<div class="space-y-5 rounded border-[1px] border-primary p-5 text-primary">
|
<div class="space-y-5 rounded border-[1px] border-primary p-5 text-primary">
|
||||||
@ -82,7 +82,7 @@ const leaveTeam = async () => {
|
|||||||
|
|
||||||
user.value.team = null;
|
user.value.team = null;
|
||||||
|
|
||||||
useToast().success('Succesvol team verlaten')
|
useToast().success('Successfully left team')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
useToast().error(e.statusMessage)
|
useToast().error(e.statusMessage)
|
||||||
@ -102,7 +102,7 @@ const editTeam = async () => {
|
|||||||
team.value.name = editTeamModal.value.name
|
team.value.name = editTeamModal.value.name
|
||||||
team.value.color = editTeamModal.value.color
|
team.value.color = editTeamModal.value.color
|
||||||
|
|
||||||
useToast().success('Team is succesvol bewerkt')
|
useToast().success('Successfully modified team')
|
||||||
|
|
||||||
editTeamModal.value.open = false
|
editTeamModal.value.open = false
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
@ -120,7 +120,7 @@ const inviteUser = async (usr) => {
|
|||||||
|
|
||||||
usr.teamInvites.push(user.value.team.id);
|
usr.teamInvites.push(user.value.team.id);
|
||||||
|
|
||||||
useToast().success(`Invited ${usr.username} succesvol`)
|
useToast().success(`Successfully invited ${usr.username}`)
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
useToast().error(e.statusMessage)
|
useToast().error(e.statusMessage)
|
||||||
@ -136,7 +136,7 @@ const cancelInvite = async (usr) => {
|
|||||||
|
|
||||||
usr.teamInvites = usr.teamInvites.filter(a => a !== user.value.team.id);
|
usr.teamInvites = usr.teamInvites.filter(a => a !== user.value.team.id);
|
||||||
|
|
||||||
useToast().success('Succesvol invite geannuleerd')
|
useToast().success('Successfully cancelled invited')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
useToast().error(e.statusMessage)
|
useToast().error(e.statusMessage)
|
||||||
@ -155,7 +155,7 @@ const promoteUser = async (usr) => {
|
|||||||
console.log(usr)
|
console.log(usr)
|
||||||
console.log(teamMembers)
|
console.log(teamMembers)
|
||||||
|
|
||||||
useToast().success('Succesvol gebruiker gepromoveerd')
|
useToast().success('Successfully promted user')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
useToast().error(e.statusMessage)
|
useToast().error(e.statusMessage)
|
||||||
@ -171,7 +171,7 @@ const demoteUser = async (usr) => {
|
|||||||
|
|
||||||
usr.team.admin = false
|
usr.team.admin = false
|
||||||
|
|
||||||
useToast().success('Succesvol gebruiker gedegradeerd')
|
useToast().success('Successfully demoted user')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
useToast().error(e.statusMessage)
|
useToast().error(e.statusMessage)
|
||||||
|
@ -28,7 +28,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div v-else class="flex w-full flex-col items-center gap-5">
|
<div v-else class="flex w-full flex-col items-center gap-5">
|
||||||
<Input v-model:value="createTeam.name" class="w-full max-w-sm">Naam</Input>
|
<Input v-model:value="createTeam.name" class="w-full max-w-sm">Naam / Prefix</Input>
|
||||||
<Colorpicker v-model:value="createTeam.color" class="w-full max-w-sm" />
|
<Colorpicker v-model:value="createTeam.color" class="w-full max-w-sm" />
|
||||||
<Button @click="handleCreateTeam">Create Team</Button>
|
<Button @click="handleCreateTeam">Create Team</Button>
|
||||||
</div>
|
</div>
|
||||||
@ -56,9 +56,11 @@ const acceptInvite = async (team) => {
|
|||||||
body: { teamId: team._id }
|
body: { teamId: team._id }
|
||||||
})
|
})
|
||||||
|
|
||||||
|
console.log(response)
|
||||||
|
|
||||||
user.value.team = { id: response._id, admin: false }
|
user.value.team = { id: response._id, admin: false }
|
||||||
|
|
||||||
useToast().success('Succesvol lid geworden van het team')
|
useToast().success('Successfully joined team')
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
useToast().error(e.statusMessage)
|
useToast().error(e.statusMessage)
|
||||||
@ -74,7 +76,7 @@ const handleCreateTeam = async () => {
|
|||||||
|
|
||||||
user.value.team = { id: response.insertedId.toString(), admin: true }
|
user.value.team = { id: response.insertedId.toString(), admin: true }
|
||||||
|
|
||||||
useToast().success('Succesvol team gemaakt')
|
useToast().success('Successfully created team')
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e);
|
console.log(e);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
<div v-if="user" class="hidden h-full grid-cols-desktoplayout grid-rows-desktoplayout sm:grid">
|
<div v-if="user" class="hidden h-full grid-cols-desktoplayout grid-rows-desktoplayout sm:grid">
|
||||||
<LayoutNavbar class="col-span-2" />
|
<LayoutNavbar class="col-span-2" />
|
||||||
<LayoutSidebar v-if="user.minecraft.uuid" class="" />
|
<LayoutSidebar v-if="user.minecraft.uuid" class="" />
|
||||||
<div class="overflow-y-auto px-10" :class="{ 'col-span-2': !user.minecraft.uuid }">
|
<div class="overflow-y-auto px-10 pt-5" :class="{ 'col-span-2': !user.minecraft.uuid }">
|
||||||
<NuxtPage />
|
<NuxtPage />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -8,19 +8,8 @@ export default defineNuxtConfig({
|
|||||||
'@xeovalyte/nuxt-xvtoast',
|
'@xeovalyte/nuxt-xvtoast',
|
||||||
'nuxt-icon',
|
'nuxt-icon',
|
||||||
'@nuxtjs/tailwindcss',
|
'@nuxtjs/tailwindcss',
|
||||||
'@vueuse/nuxt',
|
'@vueuse/nuxt'
|
||||||
'@nuxt/image-edge'
|
|
||||||
],
|
],
|
||||||
app: {
|
|
||||||
head: {
|
|
||||||
link: [
|
|
||||||
{ rel: "apple-touch-icon", sizes: "180x180", href: "/apple-touch-icon.png" },
|
|
||||||
{ rel: "icon", sizes: "32x32", type: "image/png", href: "/favicon-32x32.png" },
|
|
||||||
{ rel: "icon", sizes: "16x16", type: "image/png", href: "/favicon-16x16.png" },
|
|
||||||
{ rel: "manifest", href: "/site.webmanifest" },
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
runtimeConfig: {
|
runtimeConfig: {
|
||||||
discordId: '',
|
discordId: '',
|
||||||
discordSecret: '',
|
discordSecret: '',
|
||||||
@ -32,7 +21,6 @@ export default defineNuxtConfig({
|
|||||||
rconPassword: '',
|
rconPassword: '',
|
||||||
rconPort: '25575',
|
rconPort: '25575',
|
||||||
rconHost: 'localhost',
|
rconHost: 'localhost',
|
||||||
redirectURI: 'http://localhost:3000/api/auth',
|
|
||||||
public: {
|
public: {
|
||||||
redirectUrl: 'https://discord.com/api/oauth2/authorize?client_id=1052974736432443432&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth&response_type=code&scope=identify',
|
redirectUrl: 'https://discord.com/api/oauth2/authorize?client_id=1052974736432443432&redirect_uri=http%3A%2F%2Flocalhost%3A3000%2Fapi%2Fauth&response_type=code&scope=identify',
|
||||||
}
|
}
|
||||||
|
705
web/package-lock.json
generated
@ -18,7 +18,6 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nuxt/devtools": "^0.4.2",
|
"@nuxt/devtools": "^0.4.2",
|
||||||
"@nuxt/image-edge": "^1.0.0-28059208.2abef1b",
|
|
||||||
"@nuxtjs/eslint-module": "^4.0.2",
|
"@nuxtjs/eslint-module": "^4.0.2",
|
||||||
"@nuxtjs/tailwindcss": "^6.6.6",
|
"@nuxtjs/tailwindcss": "^6.6.6",
|
||||||
"@types/node": "^18",
|
"@types/node": "^18",
|
||||||
@ -1590,29 +1589,6 @@
|
|||||||
"eslint": "^8.29.0"
|
"eslint": "^8.29.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@nuxt/image-edge": {
|
|
||||||
"version": "1.0.0-28059208.2abef1b",
|
|
||||||
"resolved": "https://registry.npmjs.org/@nuxt/image-edge/-/image-edge-1.0.0-28059208.2abef1b.tgz",
|
|
||||||
"integrity": "sha512-pW0C+RdA6d0kRsITMuRXLsXZ6fbzgXqIELkpS3z5ZwR5pWkmRmTbgED4MCajblG0P4nuySQl2r0RU4Ktf1LMAA==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"@nuxt/kit": "^3.4.0",
|
|
||||||
"consola": "^3.0.1",
|
|
||||||
"defu": "^6.1.2",
|
|
||||||
"h3": "^1.6.4",
|
|
||||||
"image-meta": "^0.1.1",
|
|
||||||
"node-fetch-native": "^1.1.0",
|
|
||||||
"ohash": "^1.0.0",
|
|
||||||
"pathe": "^1.1.0",
|
|
||||||
"ufo": "^1.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^14.16.0 || >=16.11.0"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"ipx": "1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@nuxt/kit": {
|
"node_modules/@nuxt/kit": {
|
||||||
"version": "3.4.2",
|
"version": "3.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.4.2.tgz",
|
||||||
@ -4373,20 +4349,6 @@
|
|||||||
"node": ">= 0.12.0"
|
"node": ">= 0.12.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/color": {
|
|
||||||
"version": "4.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
|
|
||||||
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"color-convert": "^2.0.1",
|
|
||||||
"color-string": "^1.9.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/color-convert": {
|
"node_modules/color-convert": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
@ -4403,17 +4365,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||||
},
|
},
|
||||||
"node_modules/color-string": {
|
|
||||||
"version": "1.9.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
|
|
||||||
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"color-name": "^1.0.0",
|
|
||||||
"simple-swizzle": "^0.2.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/color-support": {
|
"node_modules/color-support": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
||||||
@ -4702,13 +4653,6 @@
|
|||||||
"node": ">=4"
|
"node": ">=4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/cssfilter": {
|
|
||||||
"version": "0.0.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
|
|
||||||
"integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/cssnano": {
|
"node_modules/cssnano": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
|
||||||
@ -4852,37 +4796,11 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/decompress-response": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"mimic-response": "^3.1.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/deep-equal": {
|
"node_modules/deep-equal": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
|
||||||
"integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw=="
|
"integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw=="
|
||||||
},
|
},
|
||||||
"node_modules/deep-extend": {
|
|
||||||
"version": "0.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
|
|
||||||
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=4.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/deep-is": {
|
"node_modules/deep-is": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
||||||
@ -5761,16 +5679,6 @@
|
|||||||
"url": "https://github.com/sindresorhus/execa?sponsor=1"
|
"url": "https://github.com/sindresorhus/execa?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/expand-template": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/external-editor": {
|
"node_modules/external-editor": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
||||||
@ -6226,13 +6134,6 @@
|
|||||||
"git-up": "^7.0.0"
|
"git-up": "^7.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/github-from-package": {
|
|
||||||
"version": "0.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
|
||||||
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/glob": {
|
"node_modules/glob": {
|
||||||
"version": "8.1.0",
|
"version": "8.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
|
||||||
@ -6908,36 +6809,6 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/ipx": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ipx/-/ipx-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-iJoCDCj2LQZRmzMA2psoUJUcSoLa/iG4f1tBfl8eFgII3priRLwFNHpsiOkk6ZDrilOurXq0A+qQgmJhkZEtcg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"consola": "^2.15.3",
|
|
||||||
"defu": "^6.1.2",
|
|
||||||
"destr": "^1.2.2",
|
|
||||||
"etag": "^1.8.1",
|
|
||||||
"image-meta": "^0.1.1",
|
|
||||||
"listhen": "^1.0.4",
|
|
||||||
"node-fetch-native": "^1.0.2",
|
|
||||||
"pathe": "^1.1.0",
|
|
||||||
"sharp": "^0.32.0",
|
|
||||||
"ufo": "^1.1.1",
|
|
||||||
"xss": "^1.0.14"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"ipx": "bin/ipx.mjs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/ipx/node_modules/consola": {
|
|
||||||
"version": "2.15.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
|
|
||||||
"integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/iron-webcrypto": {
|
"node_modules/iron-webcrypto": {
|
||||||
"version": "0.6.0",
|
"version": "0.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-0.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-0.6.0.tgz",
|
||||||
@ -8239,19 +8110,6 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mimic-response": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/minecraft-motd-util": {
|
"node_modules/minecraft-motd-util": {
|
||||||
"version": "1.1.12",
|
"version": "1.1.12",
|
||||||
"resolved": "https://registry.npmjs.org/minecraft-motd-util/-/minecraft-motd-util-1.1.12.tgz",
|
"resolved": "https://registry.npmjs.org/minecraft-motd-util/-/minecraft-motd-util-1.1.12.tgz",
|
||||||
@ -8517,13 +8375,6 @@
|
|||||||
"mkdirp": "bin/cmd.js"
|
"mkdirp": "bin/cmd.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/mkdirp-classic": {
|
|
||||||
"version": "0.5.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
|
|
||||||
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/mlly": {
|
"node_modules/mlly": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz",
|
||||||
@ -8666,13 +8517,6 @@
|
|||||||
"node": "^14 || ^16 || >=18"
|
"node": "^14 || ^16 || >=18"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/napi-build-utils": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/natural-compare": {
|
"node_modules/natural-compare": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||||
@ -8794,26 +8638,6 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/node-abi": {
|
|
||||||
"version": "3.40.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.40.0.tgz",
|
|
||||||
"integrity": "sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"semver": "^7.3.5"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/node-addon-api": {
|
|
||||||
"version": "6.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
|
|
||||||
"integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/node-domexception": {
|
"node_modules/node-domexception": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
|
||||||
@ -10647,33 +10471,6 @@
|
|||||||
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/prebuild-install": {
|
|
||||||
"version": "7.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
|
|
||||||
"integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"detect-libc": "^2.0.0",
|
|
||||||
"expand-template": "^2.0.3",
|
|
||||||
"github-from-package": "0.0.0",
|
|
||||||
"minimist": "^1.2.3",
|
|
||||||
"mkdirp-classic": "^0.5.3",
|
|
||||||
"napi-build-utils": "^1.0.1",
|
|
||||||
"node-abi": "^3.3.0",
|
|
||||||
"pump": "^3.0.0",
|
|
||||||
"rc": "^1.2.7",
|
|
||||||
"simple-get": "^4.0.0",
|
|
||||||
"tar-fs": "^2.0.0",
|
|
||||||
"tunnel-agent": "^0.6.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"prebuild-install": "bin.js"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=10"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/prelude-ls": {
|
"node_modules/prelude-ls": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||||
@ -10751,17 +10548,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
||||||
"integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw=="
|
"integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw=="
|
||||||
},
|
},
|
||||||
"node_modules/pump": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"end-of-stream": "^1.1.0",
|
|
||||||
"once": "^1.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/punycode": {
|
"node_modules/punycode": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||||
@ -10822,39 +10608,6 @@
|
|||||||
"node": ">= 0.6"
|
"node": ">= 0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rc": {
|
|
||||||
"version": "1.2.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
|
|
||||||
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"deep-extend": "^0.6.0",
|
|
||||||
"ini": "~1.3.0",
|
|
||||||
"minimist": "^1.2.0",
|
|
||||||
"strip-json-comments": "~2.0.1"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"rc": "cli.js"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/rc/node_modules/ini": {
|
|
||||||
"version": "1.3.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
|
||||||
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/rc/node_modules/strip-json-comments": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/rc9": {
|
"node_modules/rc9": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.0.tgz",
|
||||||
@ -11558,30 +11311,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
||||||
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
||||||
},
|
},
|
||||||
"node_modules/sharp": {
|
|
||||||
"version": "0.32.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.1.tgz",
|
|
||||||
"integrity": "sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg==",
|
|
||||||
"dev": true,
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"color": "^4.2.3",
|
|
||||||
"detect-libc": "^2.0.1",
|
|
||||||
"node-addon-api": "^6.1.0",
|
|
||||||
"prebuild-install": "^7.1.1",
|
|
||||||
"semver": "^7.5.0",
|
|
||||||
"simple-get": "^4.0.1",
|
|
||||||
"tar-fs": "^2.1.1",
|
|
||||||
"tunnel-agent": "^0.6.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=14.15.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/shebang-command": {
|
"node_modules/shebang-command": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
@ -11685,70 +11414,6 @@
|
|||||||
"encoding": "^0.1.13"
|
"encoding": "^0.1.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/simple-concat": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
|
|
||||||
"dev": true,
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/feross"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "patreon",
|
|
||||||
"url": "https://www.patreon.com/feross"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "consulting",
|
|
||||||
"url": "https://feross.org/support"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/simple-get": {
|
|
||||||
"version": "4.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
|
|
||||||
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
|
|
||||||
"dev": true,
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/feross"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "patreon",
|
|
||||||
"url": "https://www.patreon.com/feross"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "consulting",
|
|
||||||
"url": "https://feross.org/support"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"decompress-response": "^6.0.0",
|
|
||||||
"once": "^1.3.1",
|
|
||||||
"simple-concat": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/simple-swizzle": {
|
|
||||||
"version": "0.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
|
|
||||||
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"is-arrayish": "^0.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/simple-swizzle/node_modules/is-arrayish": {
|
|
||||||
"version": "0.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
|
||||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/sirv": {
|
"node_modules/sirv": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz",
|
||||||
@ -12358,26 +12023,6 @@
|
|||||||
"node": ">=10"
|
"node": ">=10"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tar-fs": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
|
|
||||||
"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"chownr": "^1.1.1",
|
|
||||||
"mkdirp-classic": "^0.5.2",
|
|
||||||
"pump": "^3.0.0",
|
|
||||||
"tar-stream": "^2.1.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/tar-fs/node_modules/chownr": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
|
||||||
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/tar-stream": {
|
"node_modules/tar-stream": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
||||||
@ -12774,19 +12419,6 @@
|
|||||||
"encoding": "^0.1.13"
|
"encoding": "^0.1.13"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/tunnel-agent": {
|
|
||||||
"version": "0.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
|
||||||
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"safe-buffer": "^5.0.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "*"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/type-check": {
|
"node_modules/type-check": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||||
@ -13836,30 +13468,6 @@
|
|||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/xss": {
|
|
||||||
"version": "1.0.14",
|
|
||||||
"resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz",
|
|
||||||
"integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"commander": "^2.20.3",
|
|
||||||
"cssfilter": "0.0.10"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"xss": "bin/xss"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">= 0.10.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/xss/node_modules/commander": {
|
|
||||||
"version": "2.20.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
|
||||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/xxhashjs": {
|
"node_modules/xxhashjs": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
|
||||||
@ -15031,24 +14639,6 @@
|
|||||||
"typescript": "^4.9.3"
|
"typescript": "^4.9.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@nuxt/image-edge": {
|
|
||||||
"version": "1.0.0-28059208.2abef1b",
|
|
||||||
"resolved": "https://registry.npmjs.org/@nuxt/image-edge/-/image-edge-1.0.0-28059208.2abef1b.tgz",
|
|
||||||
"integrity": "sha512-pW0C+RdA6d0kRsITMuRXLsXZ6fbzgXqIELkpS3z5ZwR5pWkmRmTbgED4MCajblG0P4nuySQl2r0RU4Ktf1LMAA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"@nuxt/kit": "^3.4.0",
|
|
||||||
"consola": "^3.0.1",
|
|
||||||
"defu": "^6.1.2",
|
|
||||||
"h3": "^1.6.4",
|
|
||||||
"image-meta": "^0.1.1",
|
|
||||||
"ipx": "1.0.0",
|
|
||||||
"node-fetch-native": "^1.1.0",
|
|
||||||
"ohash": "^1.0.0",
|
|
||||||
"pathe": "^1.1.0",
|
|
||||||
"ufo": "^1.1.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"@nuxt/kit": {
|
"@nuxt/kit": {
|
||||||
"version": "3.4.2",
|
"version": "3.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.4.2.tgz",
|
||||||
@ -17084,17 +16674,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
|
||||||
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ=="
|
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ=="
|
||||||
},
|
},
|
||||||
"color": {
|
|
||||||
"version": "4.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
|
|
||||||
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"color-convert": "^2.0.1",
|
|
||||||
"color-string": "^1.9.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-convert": {
|
"color-convert": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
@ -17108,17 +16687,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
|
||||||
},
|
},
|
||||||
"color-string": {
|
|
||||||
"version": "1.9.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
|
|
||||||
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"color-name": "^1.0.0",
|
|
||||||
"simple-swizzle": "^0.2.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"color-support": {
|
"color-support": {
|
||||||
"version": "1.1.3",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
|
||||||
@ -17334,13 +16902,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
|
||||||
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
|
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
|
||||||
},
|
},
|
||||||
"cssfilter": {
|
|
||||||
"version": "0.0.10",
|
|
||||||
"resolved": "https://registry.npmjs.org/cssfilter/-/cssfilter-0.0.10.tgz",
|
|
||||||
"integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"cssnano": {
|
"cssnano": {
|
||||||
"version": "6.0.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.0.tgz",
|
||||||
@ -17446,28 +17007,11 @@
|
|||||||
"ms": "2.1.2"
|
"ms": "2.1.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"decompress-response": {
|
|
||||||
"version": "6.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz",
|
|
||||||
"integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"mimic-response": "^3.1.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"deep-equal": {
|
"deep-equal": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz",
|
||||||
"integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw=="
|
"integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw=="
|
||||||
},
|
},
|
||||||
"deep-extend": {
|
|
||||||
"version": "0.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
|
|
||||||
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"deep-is": {
|
"deep-is": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
|
||||||
@ -18117,13 +17661,6 @@
|
|||||||
"strip-final-newline": "^3.0.0"
|
"strip-final-newline": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"expand-template": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"external-editor": {
|
"external-editor": {
|
||||||
"version": "3.1.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
|
||||||
@ -18461,13 +17998,6 @@
|
|||||||
"git-up": "^7.0.0"
|
"git-up": "^7.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"github-from-package": {
|
|
||||||
"version": "0.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
|
|
||||||
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"glob": {
|
"glob": {
|
||||||
"version": "8.1.0",
|
"version": "8.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
|
||||||
@ -18960,35 +18490,6 @@
|
|||||||
"integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==",
|
"integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ipx": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/ipx/-/ipx-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-iJoCDCj2LQZRmzMA2psoUJUcSoLa/iG4f1tBfl8eFgII3priRLwFNHpsiOkk6ZDrilOurXq0A+qQgmJhkZEtcg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"consola": "^2.15.3",
|
|
||||||
"defu": "^6.1.2",
|
|
||||||
"destr": "^1.2.2",
|
|
||||||
"etag": "^1.8.1",
|
|
||||||
"image-meta": "^0.1.1",
|
|
||||||
"listhen": "^1.0.4",
|
|
||||||
"node-fetch-native": "^1.0.2",
|
|
||||||
"pathe": "^1.1.0",
|
|
||||||
"sharp": "^0.32.0",
|
|
||||||
"ufo": "^1.1.1",
|
|
||||||
"xss": "^1.0.14"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"consola": {
|
|
||||||
"version": "2.15.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz",
|
|
||||||
"integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"iron-webcrypto": {
|
"iron-webcrypto": {
|
||||||
"version": "0.6.0",
|
"version": "0.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-0.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/iron-webcrypto/-/iron-webcrypto-0.6.0.tgz",
|
||||||
@ -20003,13 +19504,6 @@
|
|||||||
"integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
|
"integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"mimic-response": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz",
|
|
||||||
"integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"minecraft-motd-util": {
|
"minecraft-motd-util": {
|
||||||
"version": "1.1.12",
|
"version": "1.1.12",
|
||||||
"resolved": "https://registry.npmjs.org/minecraft-motd-util/-/minecraft-motd-util-1.1.12.tgz",
|
"resolved": "https://registry.npmjs.org/minecraft-motd-util/-/minecraft-motd-util-1.1.12.tgz",
|
||||||
@ -20233,13 +19727,6 @@
|
|||||||
"minimist": "^1.2.6"
|
"minimist": "^1.2.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mkdirp-classic": {
|
|
||||||
"version": "0.5.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz",
|
|
||||||
"integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"mlly": {
|
"mlly": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.0.tgz",
|
||||||
@ -20333,13 +19820,6 @@
|
|||||||
"integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==",
|
"integrity": "sha512-7ZtY5KTCNheRGfEFxnedV5zFiORN1+Y1N6zvPTnHQd8ENUvfaDBeuJDZb2bN/oXwXxu3qkTXDzy57W5vAmDTBw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"napi-build-utils": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"natural-compare": {
|
"natural-compare": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
|
||||||
@ -20441,23 +19921,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node-abi": {
|
|
||||||
"version": "3.40.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.40.0.tgz",
|
|
||||||
"integrity": "sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"semver": "^7.3.5"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node-addon-api": {
|
|
||||||
"version": "6.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
|
|
||||||
"integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node-domexception": {
|
"node-domexception": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
|
||||||
@ -21705,27 +21168,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
|
||||||
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
|
"integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
|
||||||
},
|
},
|
||||||
"prebuild-install": {
|
|
||||||
"version": "7.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
|
|
||||||
"integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"detect-libc": "^2.0.0",
|
|
||||||
"expand-template": "^2.0.3",
|
|
||||||
"github-from-package": "0.0.0",
|
|
||||||
"minimist": "^1.2.3",
|
|
||||||
"mkdirp-classic": "^0.5.3",
|
|
||||||
"napi-build-utils": "^1.0.1",
|
|
||||||
"node-abi": "^3.3.0",
|
|
||||||
"pump": "^3.0.0",
|
|
||||||
"rc": "^1.2.7",
|
|
||||||
"simple-get": "^4.0.0",
|
|
||||||
"tar-fs": "^2.0.0",
|
|
||||||
"tunnel-agent": "^0.6.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"prelude-ls": {
|
"prelude-ls": {
|
||||||
"version": "1.2.1",
|
"version": "1.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
|
||||||
@ -21785,17 +21227,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
|
||||||
"integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw=="
|
"integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw=="
|
||||||
},
|
},
|
||||||
"pump": {
|
|
||||||
"version": "3.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
|
|
||||||
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"end-of-stream": "^1.1.0",
|
|
||||||
"once": "^1.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"punycode": {
|
"punycode": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
|
||||||
@ -21830,35 +21261,6 @@
|
|||||||
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
|
"integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"rc": {
|
|
||||||
"version": "1.2.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
|
|
||||||
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"deep-extend": "^0.6.0",
|
|
||||||
"ini": "~1.3.0",
|
|
||||||
"minimist": "^1.2.0",
|
|
||||||
"strip-json-comments": "~2.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"ini": {
|
|
||||||
"version": "1.3.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
|
|
||||||
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"strip-json-comments": {
|
|
||||||
"version": "2.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
|
|
||||||
"integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"rc9": {
|
"rc9": {
|
||||||
"version": "2.1.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.0.tgz",
|
||||||
@ -22383,23 +21785,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
|
||||||
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
"integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
|
||||||
},
|
},
|
||||||
"sharp": {
|
|
||||||
"version": "0.32.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.1.tgz",
|
|
||||||
"integrity": "sha512-kQTFtj7ldpUqSe8kDxoGLZc1rnMFU0AO2pqbX6pLy3b7Oj8ivJIdoKNwxHVQG2HN6XpHPJqCSM2nsma2gOXvOg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"color": "^4.2.3",
|
|
||||||
"detect-libc": "^2.0.1",
|
|
||||||
"node-addon-api": "^6.1.0",
|
|
||||||
"prebuild-install": "^7.1.1",
|
|
||||||
"semver": "^7.5.0",
|
|
||||||
"simple-get": "^4.0.1",
|
|
||||||
"tar-fs": "^2.1.1",
|
|
||||||
"tunnel-agent": "^0.6.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"shebang-command": {
|
"shebang-command": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
@ -22479,44 +21864,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"simple-concat": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz",
|
|
||||||
"integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"simple-get": {
|
|
||||||
"version": "4.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
|
|
||||||
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"decompress-response": "^6.0.0",
|
|
||||||
"once": "^1.3.1",
|
|
||||||
"simple-concat": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"simple-swizzle": {
|
|
||||||
"version": "0.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
|
|
||||||
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"is-arrayish": "^0.3.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"is-arrayish": {
|
|
||||||
"version": "0.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
|
||||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"sirv": {
|
"sirv": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz",
|
||||||
@ -22986,28 +22333,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tar-fs": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
|
|
||||||
"integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"chownr": "^1.1.1",
|
|
||||||
"mkdirp-classic": "^0.5.2",
|
|
||||||
"pump": "^3.0.0",
|
|
||||||
"tar-stream": "^2.1.4"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"chownr": {
|
|
||||||
"version": "1.1.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
|
|
||||||
"integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"tar-stream": {
|
"tar-stream": {
|
||||||
"version": "2.2.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
|
||||||
@ -23272,16 +22597,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tunnel-agent": {
|
|
||||||
"version": "0.6.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
|
|
||||||
"integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"safe-buffer": "^5.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"type-check": {
|
"type-check": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
|
||||||
@ -23991,26 +23306,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
|
||||||
"integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A=="
|
"integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A=="
|
||||||
},
|
},
|
||||||
"xss": {
|
|
||||||
"version": "1.0.14",
|
|
||||||
"resolved": "https://registry.npmjs.org/xss/-/xss-1.0.14.tgz",
|
|
||||||
"integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
|
||||||
"commander": "^2.20.3",
|
|
||||||
"cssfilter": "0.0.10"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"commander": {
|
|
||||||
"version": "2.20.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
|
|
||||||
"integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"xxhashjs": {
|
"xxhashjs": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz",
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@nuxt/devtools": "^0.4.2",
|
"@nuxt/devtools": "^0.4.2",
|
||||||
"@nuxt/image-edge": "^1.0.0-28059208.2abef1b",
|
|
||||||
"@nuxtjs/eslint-module": "^4.0.2",
|
"@nuxtjs/eslint-module": "^4.0.2",
|
||||||
"@nuxtjs/tailwindcss": "^6.6.6",
|
"@nuxtjs/tailwindcss": "^6.6.6",
|
||||||
"@types/node": "^18",
|
"@types/node": "^18",
|
||||||
|
@ -1,50 +1,22 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="flex h-full w-full flex-col text-primary">
|
<div class="flex h-full w-full flex-col text-primary">
|
||||||
<h1 class="mb-10 mt-20 text-center text-5xl font-bold">Welkom, {{ user.username }}</h1>
|
<h1 class="mb-10 mt-20 text-center text-5xl font-bold">Welkom, {{ user.discord.username }}</h1>
|
||||||
<Whitelist v-if="!user.minecraft.uuid" />
|
<Whitelist v-if="!user.minecraft.uuid" />
|
||||||
<div v-else class="flex w-full flex-wrap justify-evenly gap-10">
|
<div v-else class="flex w-full max-w-3xl flex-wrap justify-center gap-4">
|
||||||
<div class="flex w-full max-w-xl flex-col gap-3">
|
<img :src="'https://api.mineatar.io/face/' + user.minecraft.uuid + '?scale=16'" class="w-24 rounded shadow">
|
||||||
<h2 class="text-xl font-bold text-primary">Discord Information <span v-if="!user.useMinecraftUsername" class="font-normal">(Default)</span></h2>
|
<div class="flex w-full max-w-md rounded border-2 border-primary p-4">
|
||||||
<div class="flex gap-3">
|
|
||||||
<img :src="'https://cdn.discordapp.com/avatars/' + user.discord.id + '/' + user.discord.avatarHash + '.png'" class="aspect-square w-24 rounded shadow">
|
|
||||||
<div class="flex w-full rounded border-2 border-primary p-4">
|
|
||||||
<ul class="my-auto">
|
|
||||||
<li>Username: <b>{{ user.discord.username }}</b></li>
|
|
||||||
<li>ID: <b>{{ user.discord.id }}</b></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="mt-2 flex w-full justify-center gap-4">
|
|
||||||
<Button @click="refreshDiscordUsername">
|
|
||||||
Refresh Username
|
|
||||||
</Button>
|
|
||||||
<Button v-if="user.useMinecraftUsername" @click="setDefaultUsername('discord')">
|
|
||||||
Set Default
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="flex w-full max-w-xl flex-col gap-3">
|
|
||||||
<h2 class="text-xl font-bold text-primary">Minecraft Information <span v-if="user.useMinecraftUsername" class="font-normal">(Default)</span></h2>
|
|
||||||
<div class="flex gap-3">
|
|
||||||
<img :src="'https://api.mineatar.io/face/' + user.minecraft.uuid + '?scale=16'" class="aspect-square w-24 rounded shadow">
|
|
||||||
<div class="flex w-full rounded border-2 border-primary p-4">
|
|
||||||
<ul class="my-auto">
|
<ul class="my-auto">
|
||||||
<li>Username: <b>{{ user.minecraft.username }}</b></li>
|
<li>Username: <b>{{ user.minecraft.username }}</b></li>
|
||||||
<li>UUID: <b>{{ user.minecraft.uuid }}</b></li>
|
<li>UUID: <b>{{ user.minecraft.uuid }}</b></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="mt-2 flex w-full justify-center gap-4">
|
<div class="mt-2 flex w-full justify-center gap-4">
|
||||||
<Button type="danger" @click="removeWhitelist">
|
<Button type="danger" @click="removeWhitelist">
|
||||||
Remove from whitelist
|
Remove from whitelist
|
||||||
</Button>
|
</Button>
|
||||||
<Button @click="refreshMinecraftUsername">
|
<Button @click="refreshUsername">
|
||||||
Refresh Username
|
Refresh Username
|
||||||
</Button>
|
</Button>
|
||||||
<Button v-if="!user.useMinecraftUsername" @click="setDefaultUsername('minecraft')">
|
|
||||||
Set Default
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -52,34 +24,18 @@
|
|||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
middleware: ["auth"],
|
middleware: ["auth"]
|
||||||
})
|
})
|
||||||
|
|
||||||
useHead({ title: 'Polarcraft' })
|
|
||||||
|
|
||||||
const user = useState('user')
|
const user = useState('user')
|
||||||
|
|
||||||
const refreshMinecraftUsername = async () => {
|
const refreshUsername = async () => {
|
||||||
try {
|
try {
|
||||||
const response = await $fetch('/api/minecraft/refreshusername')
|
const response = await $fetch('/api/minecraft/refreshusername')
|
||||||
|
|
||||||
user.value.minecraft.username = response.username
|
user.value.minecraft.username = response.username
|
||||||
|
|
||||||
useToast().success('Gebruikersnaam is ververst')
|
useToast().success('Username is ververst')
|
||||||
} catch (e) {
|
|
||||||
console.log(e)
|
|
||||||
|
|
||||||
useToast().error(e.statusMessage)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const refreshDiscordUsername = async () => {
|
|
||||||
try {
|
|
||||||
const response = await $fetch('/api/discord/refreshusername')
|
|
||||||
|
|
||||||
user.value.discord.username = response.username
|
|
||||||
|
|
||||||
useToast().success('Gebruikersnaam is ververst')
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
|
|
||||||
@ -100,21 +56,4 @@ const removeWhitelist = async () => {
|
|||||||
useToast().error(e.statusMessage)
|
useToast().error(e.statusMessage)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const setDefaultUsername = async (type) => {
|
|
||||||
try {
|
|
||||||
const response = await $fetch('/api/auth/user/setdefaultusername', {
|
|
||||||
method: 'POST',
|
|
||||||
body: { type: type }
|
|
||||||
})
|
|
||||||
|
|
||||||
user.value.username = response.username
|
|
||||||
user.value.useMinecraftUsername = type === 'discord' ? false : true
|
|
||||||
|
|
||||||
useToast().success(`${ type === 'discord' ? 'Discord' : 'Minecraft' } is nu de standaard gebruikersnaam`)
|
|
||||||
} catch (e) {
|
|
||||||
console.log(e)
|
|
||||||
useToast().error(e.statusMessage)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
@ -10,17 +10,11 @@
|
|||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<div class="absolute left-0 top-0 -z-10 h-screen w-full overflow-hidden">
|
<div class="absolute left-0 top-0 -z-10 h-screen w-full overflow-hidden">
|
||||||
<nuxt-img src="/pictures/diamond_wall.webp" class="h-full w-full scale-105 object-cover blur-[1px] brightness-75" />
|
<img src="../assets/pictures/diamond_wall.png" class="h-full w-full scale-105 object-cover blur-[1px] brightness-75">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
definePageMeta({
|
|
||||||
layout: 'blank'
|
|
||||||
})
|
|
||||||
|
|
||||||
useHead({ title: 'Login | Polarcraft' })
|
|
||||||
|
|
||||||
const config = useRuntimeConfig()
|
const config = useRuntimeConfig()
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="-mx-10 h-full">
|
|
||||||
<iframe src="https://squaremap-demo.jpenilla.xyz/" class="h-full w-full" />
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
definePageMeta({
|
|
||||||
middleware: ["auth"]
|
|
||||||
})
|
|
||||||
|
|
||||||
useHead({ title: 'Map | Polarcraft' })
|
|
||||||
</script>
|
|
@ -1,13 +0,0 @@
|
|||||||
<template>
|
|
||||||
<div class="mt-5 text-primary">
|
|
||||||
Player Store
|
|
||||||
</div>
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<script setup>
|
|
||||||
definePageMeta({
|
|
||||||
middleware: ["auth"]
|
|
||||||
})
|
|
||||||
|
|
||||||
useHead({ title: 'Player Stores | Polarcraft' })
|
|
||||||
</script>
|
|
@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="mt-5">
|
<div>
|
||||||
<h1 class="text-2xl font-bold text-primary">
|
<h1 class="text-2xl font-bold text-primary">
|
||||||
Team
|
Team
|
||||||
</h1>
|
</h1>
|
||||||
@ -14,6 +14,4 @@ const user = useState('user')
|
|||||||
definePageMeta({
|
definePageMeta({
|
||||||
middleware: ["auth"]
|
middleware: ["auth"]
|
||||||
})
|
})
|
||||||
|
|
||||||
useHead({ title: 'Team | Polarcraft' })
|
|
||||||
</script>
|
</script>
|
||||||
|
Before Width: | Height: | Size: 28 KiB |
Before Width: | Height: | Size: 174 KiB |
Before Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 825 B |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 103 KiB |
@ -1 +0,0 @@
|
|||||||
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}
|
|
@ -13,7 +13,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
client_secret: config.discordSecret,
|
client_secret: config.discordSecret,
|
||||||
code: code,
|
code: code,
|
||||||
grant_type: 'authorization_code',
|
grant_type: 'authorization_code',
|
||||||
redirect_uri: config.redirectURI,
|
redirect_uri: 'http://localhost:3000/api/auth',
|
||||||
scope: 'identify',
|
scope: 'identify',
|
||||||
}).toString(),
|
}).toString(),
|
||||||
headers: {
|
headers: {
|
||||||
@ -45,7 +45,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e)
|
console.log(e)
|
||||||
|
|
||||||
throw createError({ statusCode: 500, statusMessage: 'Error tijdens het genereren van JWT token'})
|
throw createError({ statusCode: 500, statusMessage: 'Error creating login token'})
|
||||||
}
|
}
|
||||||
|
|
||||||
return sendRedirect(event, '/', 302)
|
return sendRedirect(event, '/', 302)
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const user = await getAuth(event)
|
const auth = getAuth(event)
|
||||||
|
|
||||||
return user
|
return auth
|
||||||
});
|
});
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
import { ObjectId } from "mongodb";
|
|
||||||
import { applyUsername } from "~/server/utils/auth";
|
|
||||||
|
|
||||||
export default defineEventHandler(async (event) => {
|
|
||||||
const { type } = await readBody(event)
|
|
||||||
const auth = await getAuth(event)
|
|
||||||
|
|
||||||
const usersColl = db.collection('users')
|
|
||||||
|
|
||||||
const username = type === 'discord' ? auth.discord.username : auth.minecraft.username
|
|
||||||
|
|
||||||
const newUser = await usersColl.findOneAndUpdate({ _id: new ObjectId(auth._id) }, { $set: { username: username, useMinecraftUsername: type === 'discord' ? false : true } }, { returnDocument: 'after' })
|
|
||||||
await applyUsername(newUser.value)
|
|
||||||
|
|
||||||
return newUser.value
|
|
||||||
});
|
|
@ -1,26 +0,0 @@
|
|||||||
export default defineEventHandler(async (event) => {
|
|
||||||
const user = await getAuth(event)
|
|
||||||
|
|
||||||
const userResult = await $fetch('https://discord.com/api/users/@me', {
|
|
||||||
headers: {
|
|
||||||
authorization: `Bearer ${user.accessToken}`
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
const coll = db.collection('users')
|
|
||||||
|
|
||||||
const doc = {
|
|
||||||
discord: {
|
|
||||||
id: userResult.id,
|
|
||||||
username: userResult.username,
|
|
||||||
avatarHash: userResult.avatar || null
|
|
||||||
},
|
|
||||||
username: user.useMinecraftUsername ? user.minecraft.username : userResult.username
|
|
||||||
}
|
|
||||||
|
|
||||||
const newUser = await coll.findOneAndUpdate({ 'discord.id': userResult.id }, { $set: doc }, { returnDocument: 'after' })
|
|
||||||
|
|
||||||
applyUsername(newUser)
|
|
||||||
|
|
||||||
return doc.discord
|
|
||||||
});
|
|
@ -3,17 +3,15 @@ export default defineEventHandler(async (event) => {
|
|||||||
|
|
||||||
const config = useRuntimeConfig();
|
const config = useRuntimeConfig();
|
||||||
|
|
||||||
const usersColl = db.collection('users')
|
const coll = db.collection('users')
|
||||||
const user = await usersColl.findOne({ 'minecraft.uuid': uuid })
|
const doc = await coll.findOne({ 'minecraft.uuid': uuid })
|
||||||
|
|
||||||
const response = await getUsernameWithTeam(user);
|
|
||||||
|
|
||||||
await $fetch(config.discordHost + '/minecraft/sendchatmessage', {
|
await $fetch(config.discordHost + '/minecraft/sendchatmessage', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: {
|
body: {
|
||||||
username: response.usernameWithoutStyle,
|
username: doc.discord.username + ' | ' + doc.minecraft.username,
|
||||||
// avatarURL: 'https://cdn.discordapp.com/avatars/' + doc.discord.id + '/' + doc.discord.avatarHash + '.png',
|
// avatarURL: 'https://cdn.discordapp.com/avatars/' + doc.discord.id + '/' + doc.discord.avatarHash + '.png',
|
||||||
avatarURL: 'https://api.mineatar.io/face/' + user.minecraft.uuid + '?scale=16',
|
avatarURL: 'https://api.mineatar.io/face/' + doc.minecraft.uuid + '?scale=16',
|
||||||
content: content,
|
content: content,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -1,21 +1,10 @@
|
|||||||
import { getUsernameWithTeam } from "~/server/utils/auth";
|
|
||||||
|
|
||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const { discordId, content } = await readBody(event);
|
const { discordId, content } = await readBody(event);
|
||||||
|
|
||||||
const coll = db.collection('users');
|
const coll = db.collection('users');
|
||||||
const user = await coll.findOne({ 'discord.id': discordId });
|
const doc = await coll.findOne({ 'discord.id': discordId });
|
||||||
|
|
||||||
const response = await getUsernameWithTeam(user)
|
await sendRconCommand(`tellraw @a {"text":"(DC) ${doc.discord.username} > ${content}"}`)
|
||||||
|
|
||||||
let tellraw;
|
return { whoo: 'hi' }
|
||||||
if (user.team) {
|
|
||||||
tellraw = `["",{"text":"DC","color":"gray"},{"text":" ${user.username} ["},{"text":"${response.team.name}","color":"${response.team.color}"},{"text":"] > ${content}"}]`
|
|
||||||
} else {
|
|
||||||
tellraw = `["",{"text":"DC","color":"gray"},{"text":" ${user.username} > ${content}"}]`
|
|
||||||
}
|
|
||||||
|
|
||||||
await sendRconCommand(`tellraw @a ${tellraw}`)
|
|
||||||
|
|
||||||
return { status: 'success' }
|
|
||||||
});
|
});
|
||||||
|
@ -14,5 +14,5 @@ export default defineEventHandler(async (event) => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
return { status: 'success' }
|
return { code: 'success' }
|
||||||
});
|
});
|
||||||
|
@ -1,16 +1,12 @@
|
|||||||
import { applyUsername } from "~/server/utils/auth";
|
|
||||||
|
|
||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const user = await getAuth(event)
|
const auth = await getAuth(event)
|
||||||
|
|
||||||
if (!auth.minecraft.uuid) throw createError({ errorCode: 400, statusMessage: 'Geen Minecraft account is gekoppeld' })
|
if (!auth.minecraft.uuid) throw createError({ errorCode: 400, statusMessage: 'No Minecraft account is linked' })
|
||||||
|
|
||||||
const minecraftProfile = await $fetch(`https://sessionserver.mojang.com/session/minecraft/profile/${user.minecraft.uuid}`)
|
const minecraftProfile = await $fetch(`https://sessionserver.mojang.com/session/minecraft/profile/${auth.minecraft.uuid}`)
|
||||||
|
|
||||||
const usersColl = db.collection('users')
|
const usersColl = db.collection('users')
|
||||||
const newUser = await usersColl.findOneAndUpdate({ 'minecraft.uuid': auth.minecraft.uuid }, { $set: { 'minecraft.username': minecraftProfile.name, username: user.useMinecraftUsername ? minecraftProfile.name : user.discord.username } }, { returnDocument: 'after' })
|
await usersColl.findOneAndUpdate({ 'minecraft.uuid': auth.minecraft.uuid }, { $set: { 'minecraft.username': minecraftProfile.name } })
|
||||||
|
|
||||||
applyUsername(newUser.value)
|
return { username: minecraftProfile.name }
|
||||||
|
|
||||||
return newUser.value
|
|
||||||
});
|
});
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const auth = await getAuth(event)
|
const auth = await getAuth(event)
|
||||||
|
|
||||||
if (!auth.minecraft.uuid) throw createError({ errorCode: 400, statusMessage: 'Geen Minecraft account is gekoppeld' })
|
if (!auth.minecraft.uuid) throw createError({ errorCode: 400, statusMessage: 'No Minecraft account is linked' })
|
||||||
|
|
||||||
const whitelistColl = db.collection('whitelist')
|
const whitelistColl = db.collection('whitelist')
|
||||||
await whitelistColl.deleteOne({ uuid: auth.minecraft.uuid })
|
await whitelistColl.deleteOne({ uuid: auth.minecraft.uuid })
|
||||||
|
@ -1,22 +1,12 @@
|
|||||||
import { getUsernameWithTeam } from "~/server/utils/auth";
|
|
||||||
|
|
||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const { uuid } = await readBody(event)
|
const { uuid } = await readBody(event)
|
||||||
|
|
||||||
const coll = db.collection('whitelist')
|
const coll = db.collection('whitelist')
|
||||||
const usersColl = db.collection('users')
|
|
||||||
|
|
||||||
const doc = await coll.findOne({ uuid: uuid })
|
const doc = await coll.findOne({ uuid: uuid })
|
||||||
|
|
||||||
if (doc && !doc.verified) return { code: doc.code, verified: false }
|
if (doc && !doc.verified) return { code: doc.code, verified: false }
|
||||||
|
if (doc && doc.verified) return { verified: true }
|
||||||
if (doc && doc.verified) {
|
|
||||||
const user = await usersColl.findOne({ 'minecraft.uuid': uuid });
|
|
||||||
|
|
||||||
const response = await getUsernameWithTeam(user);
|
|
||||||
|
|
||||||
return { verified: true, username: response.username, usernameWithoutStyle: response.usernameWithoutStyle }
|
|
||||||
}
|
|
||||||
|
|
||||||
await coll.createIndex({ code: 1 }, { unique: true })
|
await coll.createIndex({ code: 1 }, { unique: true })
|
||||||
|
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const { code } = await readBody(event)
|
const { code } = await readBody(event)
|
||||||
|
|
||||||
if (!code) throw createError({ statusCode: 400, statusMessage: 'Code is vereist'})
|
if (!code) throw createError({ statusCode: 400, statusMessage: 'Code is required'})
|
||||||
|
|
||||||
const auth = await getAuth(event)
|
const auth = await getAuth(event)
|
||||||
|
|
||||||
const whitelistColl = db.collection('whitelist')
|
const whitelistColl = db.collection('whitelist')
|
||||||
const whitelistDoc = await whitelistColl.findOne({ code: code.toString() })
|
const whitelistDoc = await whitelistColl.findOne({ code: code.toString() })
|
||||||
|
|
||||||
if (!whitelistDoc) throw createError({ statusCode: 400, statusMessage: 'Code is niet gevonden, join eerste de Minecraft server' })
|
if (!whitelistDoc) throw createError({ statusCode: 400, statusMessage: 'Code has not been found, join the server first' })
|
||||||
if (whitelistDoc && whitelistDoc.verified) throw createError({ statusCode: 400, statusMessage: 'Already verified' })
|
if (whitelistDoc && whitelistDoc.verified) throw createError({ statusCode: 400, statusMessage: 'Already verified' })
|
||||||
|
|
||||||
await whitelistColl.updateOne({ code: code.toString() }, { $set: { verified: true } })
|
await whitelistColl.updateOne({ code: code.toString() }, { $set: { verified: true } })
|
||||||
|
@ -4,19 +4,13 @@ export default defineEventHandler(async (event) => {
|
|||||||
const { teamId } = await readBody(event);
|
const { teamId } = await readBody(event);
|
||||||
|
|
||||||
const user = await getAuth(event)
|
const user = await getAuth(event)
|
||||||
const config = useRuntimeConfig()
|
|
||||||
|
|
||||||
const teamsColl = db.collection('teams')
|
const teamsColl = db.collection('teams')
|
||||||
const usersColl = db.collection('users')
|
const usersColl = db.collection('users')
|
||||||
|
|
||||||
const team = await teamsColl.findOneAndUpdate({ _id: new ObjectId(teamId) }, { $inc: { count: 1 } })
|
const team = await teamsColl.findOneAndUpdate({ _id: new ObjectId(teamId) }, { $inc: { count: 1 } })
|
||||||
|
|
||||||
if (!team.value) return createError({ statusCode: 500, statusMessage: 'Team niet gevonden'})
|
if (!team.value) return createError({ statusCode: 500, statusMessage: 'Could not find team'})
|
||||||
|
|
||||||
await $fetch(config.discordHost + '/team/addteammember', {
|
|
||||||
method: 'POST',
|
|
||||||
body: { voiceChannelId: team.value.voiceChannelId, textChannelId: team.value.textChannelId, discordId: user.discord.id }
|
|
||||||
})
|
|
||||||
|
|
||||||
await usersColl.updateOne({ _id: new ObjectId(user._id) }, { $set: { 'team.id': teamId, 'team.admin': false }})
|
await usersColl.updateOne({ _id: new ObjectId(user._id) }, { $set: { 'team.id': teamId, 'team.admin': false }})
|
||||||
|
|
||||||
|
@ -1,26 +1,19 @@
|
|||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const { teamName, teamColor } = await readBody(event);
|
const { teamName, teamColor } = await readBody(event);
|
||||||
|
|
||||||
if (!teamName || !teamColor) return createError({ statusCode: 400, statusMessage: 'Team naam en kleur zijn vereist' })
|
if (!teamName || !teamColor) return createError({ statusCode: 400, statusMessage: 'teamName and teamColor are required' })
|
||||||
if (!isHexColor(teamColor)) return createError({ statusCode: 400, statusMessage: 'Team kleur is geen gelidige kleurencode' })
|
if (!isHexColor(teamColor)) return createError({ statusCode: 400, statusMessage: 'Team color is not a valid hex code' })
|
||||||
if (!verifyUsername(teamName)) return createError({ statusCode: 400, statusMessage: 'Team naam moet alfanumeriek zijn en mag maximaal 20 tekens lang zijn' })
|
|
||||||
|
|
||||||
const user = await getAuth(event)
|
const user = await getAuth(event)
|
||||||
const config = useRuntimeConfig()
|
|
||||||
|
|
||||||
if (user.team) return createError({ statusCode: 400, statusMessage: 'Gebruiker is al in een team' })
|
if (user.team) return createError({ statusCode: 400, statusMessage: 'User already is in a team' })
|
||||||
|
|
||||||
const teamsColl = db.collection('teams')
|
const teamsColl = db.collection('teams')
|
||||||
const usersColl = db.collection('users')
|
const usersColl = db.collection('users')
|
||||||
|
|
||||||
if (await teamsColl.findOne({ name: { $regex: new RegExp(teamName, "i") } })) return createError({ statusCode: 400, statusMessage: 'Team naam bestaat al' })
|
if (await teamsColl.findOne({ name: teamName })) return createError({ statusCode: 400, statusMessage: 'Team name already exists' })
|
||||||
|
|
||||||
const discordResponse = await $fetch(config.discordHost + '/team/createchannels', {
|
const response = await teamsColl.insertOne({ name: teamName, color: teamColor, count: 1 })
|
||||||
method: 'POST',
|
|
||||||
body: { name: teamName, discordId: user.discord.id }
|
|
||||||
})
|
|
||||||
|
|
||||||
const response = await teamsColl.insertOne({ name: teamName, color: teamColor, count: 1, textChannelId: discordResponse.textChannel.id, voiceChannelId: discordResponse.voiceChannel.id })
|
|
||||||
|
|
||||||
await usersColl.findOneAndUpdate({ 'discord.id': user.discord.id }, { $set: { 'team.id': response.insertedId.toString(), 'team.admin': true } })
|
await usersColl.findOneAndUpdate({ 'discord.id': user.discord.id }, { $set: { 'team.id': response.insertedId.toString(), 'team.admin': true } })
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
|
|
||||||
const user = await getAuth(event)
|
const user = await getAuth(event)
|
||||||
|
|
||||||
if (!user.team.admin) return createError({ statusCode: 403, statusMessage: 'Admin team rol vereist' })
|
if (!user.team.admin) return createError({ statusCode: 403, statusMessage: 'Forbidden' })
|
||||||
|
|
||||||
const usersColl = db.collection('users')
|
const usersColl = db.collection('users')
|
||||||
await usersColl.findOneAndUpdate({ _id: new ObjectId(userId) }, { $set: { 'team.admin': false } });
|
await usersColl.findOneAndUpdate({ _id: new ObjectId(userId) }, { $set: { 'team.admin': false } });
|
||||||
|
@ -3,25 +3,15 @@ import { ObjectId } from 'mongodb'
|
|||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const { name, color } = await readBody(event);
|
const { name, color } = await readBody(event);
|
||||||
|
|
||||||
if (!name || !color) return createError({ statusCode: 400, statusMessage: 'Team naam en kleur zijn vereist' })
|
if (!isHexColor(color)) return createError({ statusCode: 400, statusMessage: 'Team color is not a valid hex code' })
|
||||||
if (!isHexColor(color)) return createError({ statusCode: 400, statusMessage: 'Team kleur is geen goede kleurencode' })
|
|
||||||
if (!verifyUsername(name)) return createError({ statusCode: 400, statusMessage: 'Team naam moet alfanumeriek zijn en mag maximaal 20 tekens lang zijn' })
|
|
||||||
|
|
||||||
const user = await getAuth(event)
|
const user = await getAuth(event)
|
||||||
const config = useRuntimeConfig()
|
|
||||||
|
|
||||||
if (!user.team.admin) return createError({ statusCode: 403, statusMessage: 'Admin team rol vereist' })
|
|
||||||
|
|
||||||
const teamsColl = db.collection('teams')
|
const teamsColl = db.collection('teams')
|
||||||
|
|
||||||
const team = await teamsColl.findOne({ _id: new ObjectId(user.team.id) });
|
const team = await teamsColl.findOne({ _id: new ObjectId(user.team.id) });
|
||||||
|
|
||||||
if (team.name !== name && await teamsColl.findOne({ name: { $regex: new RegExp(name, "i") } })) return createError({ statusCode: 400, statusMessage: 'Team naam bestaat al' })
|
if (team.name !== name && await teamsColl.findOne({ name: name })) return createError({ statusCode: 400, statusMessage: 'Team name already exists' })
|
||||||
|
|
||||||
await $fetch(config.discordHost + '/team/edit', {
|
|
||||||
method: 'POST',
|
|
||||||
body: { voiceChannelId: team.voiceChannelId, textChannelId: team.textChannelId, name: name }
|
|
||||||
})
|
|
||||||
|
|
||||||
await teamsColl.updateOne({ _id: new ObjectId(user.team.id) }, { $set: { name: name, color: color } })
|
await teamsColl.updateOne({ _id: new ObjectId(user.team.id) }, { $set: { name: name, color: color } })
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
|
|
||||||
const invitedUser = await usersColl.findOne({ _id: new ObjectId(id)});
|
const invitedUser = await usersColl.findOne({ _id: new ObjectId(id)});
|
||||||
|
|
||||||
if (invitedUser.team) return createError({ statusCode: 400, statusMessage: 'Gebruiker zit al in een team' })
|
if (invitedUser.team) return createError({ statusCode: 400, statusMessage: 'User already is in a team' })
|
||||||
|
|
||||||
usersColl.updateOne({ _id: new ObjectId(id) }, { $push: { teamInvites: team._id.toString() } })
|
usersColl.updateOne({ _id: new ObjectId(id) }, { $push: { teamInvites: team._id.toString() } })
|
||||||
|
|
||||||
|
@ -3,26 +3,14 @@ import { ObjectId } from 'mongodb'
|
|||||||
export default defineEventHandler(async (event) => {
|
export default defineEventHandler(async (event) => {
|
||||||
const user = await getAuth(event)
|
const user = await getAuth(event)
|
||||||
|
|
||||||
const config = useRuntimeConfig()
|
|
||||||
|
|
||||||
const teamsColl = db.collection('teams')
|
const teamsColl = db.collection('teams')
|
||||||
const team = await teamsColl.findOneAndUpdate({ _id: new ObjectId(user.team.id) }, { $inc: { count: -1 }})
|
const team = await teamsColl.findOneAndUpdate({ _id: new ObjectId(user.team.id) }, { $inc: { count: -1 }})
|
||||||
|
|
||||||
const usersColl = db.collection('users')
|
const usersColl = db.collection('users')
|
||||||
await usersColl.findOneAndUpdate({ _id: new ObjectId(user._id) }, { $unset: { team: "" } })
|
await usersColl.findOneAndUpdate({ _id: new ObjectId(user._id) }, { $unset: { team: "" } })
|
||||||
|
|
||||||
await $fetch(config.discordHost + '/team/removeteammember', {
|
|
||||||
method: 'POST',
|
|
||||||
body: { voiceChannelId: team.value.voiceChannelId, textChannelId: team.value.textChannelId, discordId: user.discord.id }
|
|
||||||
})
|
|
||||||
|
|
||||||
if (team.value.count <= 1) {
|
if (team.value.count <= 1) {
|
||||||
await teamsColl.deleteOne({ _id: new ObjectId(user.team.id )})
|
await teamsColl.deleteOne({ _id: new ObjectId(user.team.id )})
|
||||||
|
|
||||||
await $fetch(config.discordHost + '/team/deletechannels', {
|
|
||||||
method: 'POST',
|
|
||||||
body: { voiceChannelId: team.voiceChannelId, textChannelId: team.textChannelId }
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
return team
|
return team
|
||||||
});
|
});
|
||||||
|
@ -5,7 +5,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
const cursor = usersColl.find({ 'team.id': user.team.id })
|
const cursor = usersColl.find({ 'team.id': user.team.id })
|
||||||
|
|
||||||
if((await usersColl.countDocuments({ 'team.id': user.team.id })) === 0) {
|
if((await usersColl.countDocuments({ 'team.id': user.team.id })) === 0) {
|
||||||
return createError({ statusCode: 500, statusMessage: 'Geen gebruikers zijn gevonden' })
|
return createError({ statusCode: 500, statusMessage: 'No users were found' })
|
||||||
}
|
}
|
||||||
|
|
||||||
const users = [];
|
const users = [];
|
||||||
|
@ -5,7 +5,7 @@ export default defineEventHandler(async (event) => {
|
|||||||
|
|
||||||
const user = await getAuth(event)
|
const user = await getAuth(event)
|
||||||
|
|
||||||
if (!user.team.admin) return createError({ statusCode: 403, statusMessage: 'Admin team rol is vereist' })
|
if (!user.team.admin) return createError({ statusCode: 403, statusMessage: 'Forbidden' })
|
||||||
|
|
||||||
const usersColl = db.collection('users')
|
const usersColl = db.collection('users')
|
||||||
await usersColl.findOneAndUpdate({ _id: new ObjectId(userId) },{ $set: { 'team.admin': true } });
|
await usersColl.findOneAndUpdate({ _id: new ObjectId(userId) },{ $set: { 'team.admin': true } });
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export default defineEventHandler(async () => {
|
export default defineEventHandler(async (event) => {
|
||||||
const usersColl = db.collection('users')
|
const usersColl = db.collection('users')
|
||||||
const cursor = usersColl.find({ team: { $exists: false } })
|
const cursor = usersColl.find({ team: { $exists: false } })
|
||||||
const unaffiliatedUsers = await cursor.toArray()
|
const unaffiliatedUsers = await cursor.toArray()
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
import { ObjectId } from 'mongodb'
|
|
||||||
import jwt from 'jsonwebtoken'
|
import jwt from 'jsonwebtoken'
|
||||||
|
|
||||||
const config = useRuntimeConfig()
|
const config = useRuntimeConfig()
|
||||||
@ -15,7 +14,7 @@ export const getAuth = async (event) => {
|
|||||||
if (!token) {
|
if (!token) {
|
||||||
throw createError({
|
throw createError({
|
||||||
statusCode: 401,
|
statusCode: 401,
|
||||||
statusMessage: 'JWT token is niet geldig',
|
statusMessage: 'JWT token invalid',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,7 +28,7 @@ export const getAuth = async (event) => {
|
|||||||
|
|
||||||
throw createError({
|
throw createError({
|
||||||
statusCode: 401,
|
statusCode: 401,
|
||||||
statusMessage: 'JWT token is niet geldig',
|
statusMessage: 'JWT token invalid',
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,37 +36,13 @@ export const getAuth = async (event) => {
|
|||||||
const coll = db.collection("users")
|
const coll = db.collection("users")
|
||||||
const user = await coll.findOne({ 'discord.id': decodedToken.discordId })
|
const user = await coll.findOne({ 'discord.id': decodedToken.discordId })
|
||||||
|
|
||||||
user.accessToken = decodedToken.accessToken
|
|
||||||
|
|
||||||
return user;
|
return user;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err)
|
console.log(err)
|
||||||
|
|
||||||
throw createError({
|
throw createError({
|
||||||
statusCode: 500,
|
statusCode: 500,
|
||||||
statusMessage: 'Error tijdens ophalen van gegevens'
|
statusMessage: 'Error getting user'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const applyUsername = async (user) => {
|
|
||||||
const teamsColl = db.collection('teams')
|
|
||||||
const team = await teamsColl.findOne({ _id: new ObjectId(user.team.id) })
|
|
||||||
|
|
||||||
const discordUsername = user.team ? user.username + ' [' + team.name + ']' : user.discord.username
|
|
||||||
|
|
||||||
await $fetch(config.discordHost + '/user/changenickname', {
|
|
||||||
method: 'POST',
|
|
||||||
body: { nickname: discordUsername, discordId: user.discord.id }
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export const getUsernameWithTeam = async (user) => {
|
|
||||||
const teamsColl = db.collection('teams')
|
|
||||||
const team = user.team ? await teamsColl.findOne({ _id: new ObjectId(user.team.id) }): undefined;
|
|
||||||
|
|
||||||
const username = user.team ? user.username + ` [<color:${team.color}>${team.name}</color>]` : user.username;
|
|
||||||
const usernameWithoutStyle = user.team ? user.username + ` [${team.name}]` : user.username;
|
|
||||||
|
|
||||||
return { username: username, usernameWithoutStyle: usernameWithoutStyle, team: team }
|
|
||||||
}
|
|
||||||
|
@ -2,14 +2,3 @@ export const isHexColor = (str) => {
|
|||||||
const pattern = /^#([0-9A-F]{3}){1,2}$/i;
|
const pattern = /^#([0-9A-F]{3}){1,2}$/i;
|
||||||
return pattern.test(str);
|
return pattern.test(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const verifyUsername = (username) => {
|
|
||||||
const alphanumeric = /^[a-zA-Z0-9]+$/;
|
|
||||||
if (username.length > 20) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!alphanumeric.test(username)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|