Trying to add jsdocs

This commit is contained in:
BinarySandia04 2024-10-05 12:57:47 +02:00
parent d395f9ab05
commit ceed4aecd9
36 changed files with 836 additions and 82 deletions

3
.gitignore vendored
View File

@ -15,6 +15,9 @@ client/public/plugins/
# Backend # Backend
backend/plugins/ backend/plugins/
# Docs
docs/
# local env files # local env files
.env.local .env.local
.env.*.local .env.*.local

View File

@ -1,6 +1,6 @@
<picture align="center"> <picture align="center">
<source media="(prefers-color-scheme: dark)" srcset="client/public/img/logo-splash.png"> <source media="(prefers-color-scheme: dark)" srcset="media/logo-splash.png">
<source media="(prefers-color-scheme: light)" srcset="client/public/img/logo-splash-light.png"> <source media="(prefers-color-scheme: light)" srcset="media/logo-splash-light.png">
<img alt="Shows a black logo in light color mode and a white one in dark color mode." src="client/public/img/logo-splash.png"> <img alt="Shows a black logo in light color mode and a white one in dark color mode." src="client/public/img/logo-splash.png">
</picture> </picture>
<hr> <hr>

24
backend/services/api.js Normal file
View File

@ -0,0 +1,24 @@
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
class BackendApi {
/**
* Plugin
* @param {plugin} Plugin instance
*/
constructor(plugin){
this.plugin = plugin;
}
createRoute(){
}
createModel(name, schema){
return mongoose.model(name, new Schema(schema))
}
};
module.exports = {
BackendApi
}

View File

@ -1,6 +1,6 @@
const fs = require('fs'); const fs = require('fs');
const path = require('path') const path = require('path')
const Api = {} const Api = require('./api').Api
const basePath = path.resolve(__dirname, '../') const basePath = path.resolve(__dirname, '../')
console.log(basePath) console.log(basePath)
@ -25,7 +25,7 @@ function init(){
// Execute main // Execute main
Object.keys(plugins).forEach(k => { Object.keys(plugins).forEach(k => {
plugins[k].Main(Api) plugins[k].Main(new Api(k))
}) })
} }

5
build.sh Executable file
View File

@ -0,0 +1,5 @@
#!/bin/bash
node prebuild.js
npm run generate-docs
cp -r media docs/dragonroll/1.0.0/

View File

@ -1,13 +1,23 @@
import axios from 'axios'; import * as Dragonroll from "@/services/Dragonroll"
import * as Chat from "@/services/Chat"
import * as ContextMenu from "@/services/ContextMenu"
import * as Map from "@/services/Map"
import * as Modules from "@/services/Modules"
import * as Sound from "@/services/Sound"
import * as Tooltip from "@/services/Tooltip"
import * as Windows from "@/services/Windows"
import { backendUrl } from './BackendURL'; const Api = {
Dragonroll,
export default () => { Chat,
return axios.create({ ContextMenu,
baseURL: backendUrl, Map,
headers: { Modules,
'Authorization': "Bearer " + localStorage.getItem('token'), Sound,
"Access-Control-Allow-Origin": "*", Tooltip,
} Windows
}); }
export {
Api
} }

View File

@ -6,7 +6,7 @@ import { GetUser } from "./User";
import { chat } from './Chat'; import { chat } from './Chat';
import { ClearAll, CreateWindow } from './Windows'; import { ClearAll, CreateWindow } from './Windows';
import Api from '@/services/Api'; import Server from '@/services/Server';
import { GetCampaign } from './Dragonroll'; import { GetCampaign } from './Dragonroll';
let _currentCampaign = null; let _currentCampaign = null;
@ -37,7 +37,7 @@ function DisplayCampaign(data = _currentCampaign){
} }
function UpdateCampaignData(data){ function UpdateCampaignData(data){
Api().put('/campaign/update?campaign=' + GetCampaign()._id, {campaign: data}).then(response => { Server().put('/campaign/update?campaign=' + GetCampaign()._id, {campaign: data}).then(response => {
}); });
} }

View File

@ -1,4 +1,4 @@
import Api from '@/services/Api' import Server from '@/services/Server'
import { GetCampaign } from "./Dragonroll"; import { GetCampaign } from "./Dragonroll";
import { socket } from './Socket'; import { socket } from './Socket';
import { reactive } from 'vue'; import { reactive } from 'vue';
@ -12,7 +12,7 @@ function InitData(){
} }
function FetchConcepts(){ function FetchConcepts(){
Api().get('/concept/list?campaign=' + GetCampaign()._id).then(response => { Server().get('/concept/list?campaign=' + GetCampaign()._id).then(response => {
data.value.concepts = response.data.data; data.value.concepts = response.data.data;
}).catch((err) => console.log(err)); }).catch((err) => console.log(err));
} }
@ -27,7 +27,7 @@ socket.on('update-concepts', () => {
}); });
let GetConcepts = () => data.value.concepts; let GetConcepts = () => data.value.concepts;
let GetConcept = (id) => Api().get('/concept/get?campaign=' + GetCampaign()._id + "&id=" + id) let GetConcept = (id) => Server().get('/concept/get?campaign=' + GetCampaign()._id + "&id=" + id)
export { export {

View File

@ -1,6 +1,6 @@
import { initCustomFormatter, ref, toRaw } from 'vue'; import { initCustomFormatter, ref, toRaw } from 'vue';
import Api from '@/services/Api' import Server from '@/services/Server'
import { _SendMap, GetCampaign } from './Dragonroll'; import { _SendMap, GetCampaign } from './Dragonroll';
import { backendUrl } from './BackendURL'; import { backendUrl } from './BackendURL';
import { socket } from './Socket'; import { socket } from './Socket';
@ -213,7 +213,7 @@ function GetMap(id){
function UpdateMapList(){ function UpdateMapList(){
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
Api().get('/maps/list?campaign=' + GetCampaign()._id).then(response => { Server().get('/maps/list?campaign=' + GetCampaign()._id).then(response => {
mapList.value = response.data.data; mapList.value = response.data.data;
resolve(); resolve();
}).catch((err) => console.log(err)); }).catch((err) => console.log(err));
@ -237,7 +237,7 @@ function RenameMap(id, new_title){
} }
function SaveMap(id){ function SaveMap(id){
Api().post('/maps/update?campaign=' + GetCampaign()._id + "&map=" + id, {data: currentMap}).then(response => { Server().post('/maps/update?campaign=' + GetCampaign()._id + "&map=" + id, {data: currentMap}).then(response => {
console.log("Map updated"); console.log("Map updated");
}).catch(err => console.log(err)); }).catch(err => console.log(err));
} }
@ -263,7 +263,7 @@ function UploadResource(image){
const formData = new FormData(); const formData = new FormData();
formData.append("image", dataURLtoFile(image.src)); formData.append("image", dataURLtoFile(image.src));
Api().post('/maps/create-resource?campaign=' + GetCampaign()._id, formData, { Server().post('/maps/create-resource?campaign=' + GetCampaign()._id, formData, {
headers: { "Content-Type": "multipart/form-data"} headers: { "Content-Type": "multipart/form-data"}
}).then(response => { }).then(response => {
resolve(response.data.data); resolve(response.data.data);
@ -272,7 +272,7 @@ function UploadResource(image){
} }
function CreateMap(){ function CreateMap(){
Api().post('/maps/create', { Server().post('/maps/create', {
campaign: GetCampaign()._id, campaign: GetCampaign()._id,
data: currentMap, data: currentMap,
}).then(response => { }).then(response => {

View File

@ -1,13 +1,5 @@
import { GetPluginPaths } from "./Resources" import { GetPluginPaths } from "./Resources"
import { Api } from '@/services/Api'
import * as Dragonroll from "@/services/Dragonroll"
import * as Chat from "@/services/Chat"
import * as ContextMenu from "@/services/ContextMenu"
import * as Map from "@/services/Map"
import * as Modules from "@/services/Modules"
import * as Sound from "@/services/Sound"
import * as Tooltip from "@/services/Tooltip"
import * as Windows from "@/services/Windows"
let pluginInfo = [] let pluginInfo = []
@ -31,16 +23,7 @@ async function FetchPlugins(){
}); });
import(/* @vite-ignore */ `../../plugins/${pluginName}/${pluginData.client.entrypoint}`).then(module => { import(/* @vite-ignore */ `../../plugins/${pluginName}/${pluginData.client.entrypoint}`).then(module => {
module.Main({ module.Main(Api);
Dragonroll,
Chat,
ContextMenu,
Map,
Modules,
Sound,
Tooltip,
Windows
});
}) })
} }
} }

View File

@ -0,0 +1,13 @@
import axios from 'axios';
import { backendUrl } from './BackendURL';
export default () => {
return axios.create({
baseURL: backendUrl,
headers: {
'Authorization': "Bearer " + localStorage.getItem('token'),
"Access-Control-Allow-Origin": "*",
}
});
}

View File

@ -1,5 +1,5 @@
import { ref } from 'vue'; import { ref } from 'vue';
import Api from '@/services/Api' import Server from '@/services/Server'
const UserStatus = ref(0); const UserStatus = ref(0);
@ -20,7 +20,7 @@ function SetUser(token){
} }
async function HasAdmin(){ async function HasAdmin(){
let response = await Api().get('/user/has-admin'); let response = await Server().get('/user/has-admin');
return response.data.status != "init"; return response.data.status != "init";
} }
@ -29,7 +29,7 @@ function SetUserSetting(key, value){
let user = GetUser() let user = GetUser()
if(!user.settings) user.settings = {}; if(!user.settings) user.settings = {};
user.settings[key] = value; user.settings[key] = value;
Api().post('/user/update-settings', {settings: user.settings}).then(response => { Server().post('/user/update-settings', {settings: user.settings}).then(response => {
resolve(response.data.settings); resolve(response.data.settings);
}); });
}); });
@ -37,7 +37,7 @@ function SetUserSetting(key, value){
function GetUserSetting(key){ function GetUserSetting(key){
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
Api().get('/user/get-settings').then(response => { Server().get('/user/get-settings').then(response => {
if(response.data.settings) if(response.data.settings)
resolve(response.data.settings[key]); resolve(response.data.settings[key]);
else resolve(undefined); else resolve(undefined);

View File

@ -5,7 +5,7 @@ const { t } = useI18n()
import { onMounted } from 'vue'; import { onMounted } from 'vue';
import WindowManager from '@/views/managers/WindowManager.vue' import WindowManager from '@/views/managers/WindowManager.vue'
import Api from '@/services/Api' import Server from '@/services/Server'
import { CreateWindow } from '@/services/Windows' import { CreateWindow } from '@/services/Windows'
import { GetUser, HasAdmin, LoadUser } from '@/services/User.js' import { GetUser, HasAdmin, LoadUser } from '@/services/User.js'
import { DisplayToast, SetEmitter } from '@/services/Dragonroll'; import { DisplayToast, SetEmitter } from '@/services/Dragonroll';
@ -35,7 +35,7 @@ async function DisplayFirstWindow(){
// Check if we have a link // Check if we have a link
if(route.query.setupCode){ if(route.query.setupCode){
// Let's try to activate it // Let's try to activate it
Api().get('/user/verify-setup?code=' + route.query.setupCode).then(res => { Server().get('/user/verify-setup?code=' + route.query.setupCode).then(res => {
if(res.data.code){ if(res.data.code){
// Yep exists // Yep exists
CreateWindow('setup_account', { CreateWindow('setup_account', {

View File

@ -2,7 +2,7 @@
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import Api from '@/services/Api' import Server from '@/services/Server'
import { AddSound } from '../../services/Sound'; import { AddSound } from '../../services/Sound';
import { ConnectToCampaign, DisplayCampaign } from '../../services/Campaign'; import { ConnectToCampaign, DisplayCampaign } from '../../services/Campaign';

View File

@ -2,7 +2,7 @@
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { GetUser, LogoutUser } from '@/services/User' import { GetUser, LogoutUser } from '@/services/User'
import Api from '@/services/Api' import Server from '@/services/Server'
import useEmitter from '@/services/Emitter'; import useEmitter from '@/services/Emitter';
import { ClearWindows, CreateWindow, CreateChildWindow, ClearWindow } from '../../services/Windows'; import { ClearWindows, CreateWindow, CreateChildWindow, ClearWindow } from '../../services/Windows';
@ -14,7 +14,7 @@ username.value = GetUser().username;
function retrieveAvatar(){ function retrieveAvatar(){
let userAvatarDisplay = document.getElementById("upload-image"); let userAvatarDisplay = document.getElementById("upload-image");
Api().get('/user/retrieve-avatar?username=' + GetUser().username).then((response) => { Server().get('/user/retrieve-avatar?username=' + GetUser().username).then((response) => {
if(response.data.image) userAvatarDisplay.src = backendUrl + "public/" + response.data.image; if(response.data.image) userAvatarDisplay.src = backendUrl + "public/" + response.data.image;
}).catch((err) => console.log("Internal error")); }).catch((err) => console.log("Internal error"));
} }
@ -53,7 +53,7 @@ onMounted(() => {
formData.append("image", image); formData.append("image", image);
Api().post('/user/upload-avatar', formData, { Server().post('/user/upload-avatar', formData, {
headers: { "Content-Type": "multipart/form-data" } headers: { "Content-Type": "multipart/form-data" }
}).then((response) => { }).then((response) => {
retrieveAvatar(); retrieveAvatar();

View File

@ -1,6 +1,6 @@
<script setup> <script setup>
import { onMounted, onUpdated, ref } from 'vue'; import { onMounted, onUpdated, ref } from 'vue';
import Api from '@/services/Api.js' import Server from '@/services/Server.js'
import { backendUrl } from '../../services/BackendURL'; import { backendUrl } from '../../services/BackendURL';
import { GetClient, GetPlayer, GetPlayerList } from '../../services/Dragonroll'; import { GetClient, GetPlayer, GetPlayerList } from '../../services/Dragonroll';
import { GetUser } from '../../services/User'; import { GetUser } from '../../services/User';
@ -17,7 +17,7 @@ const status = ref("");
function retrieveAvatar(){ function retrieveAvatar(){
let userAvatarDisplay = avatar.value; let userAvatarDisplay = avatar.value;
Api().get('/user/retrieve-avatar?username=' + player.user.username).then((response) => { Server().get('/user/retrieve-avatar?username=' + player.user.username).then((response) => {
if(response.data.image) userAvatarDisplay.src = backendUrl + "public/" + response.data.image; if(response.data.image) userAvatarDisplay.src = backendUrl + "public/" + response.data.image;
}).catch((err) => console.log("Internal error")); }).catch((err) => console.log("Internal error"));
} }

View File

@ -2,7 +2,7 @@
import { onMounted, onUpdated, ref } from 'vue'; import { onMounted, onUpdated, ref } from 'vue';
import { SetupHandle, SetSize, SetPosition, ResetPosition } from '@/services/Windows'; import { SetupHandle, SetSize, SetPosition, ResetPosition } from '@/services/Windows';
import Api from '@/services/Api.js' import Server from '@/services/Server.js'
import PlayerEntry from './PlayerEntry.vue'; import PlayerEntry from './PlayerEntry.vue';
import { GetPlayerList } from '../../services/Dragonroll'; import { GetPlayerList } from '../../services/Dragonroll';

View File

@ -4,7 +4,7 @@ import WindowHandle from '@/views/partials/WindowHandle.vue';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows'; import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import Api from '@/services/Api' import Server from '@/services/Server'
import BigIconTemplate from '@/views/partials/BigIconTemplate.vue'; import BigIconTemplate from '@/views/partials/BigIconTemplate.vue';
import { SetMinSize, SetResizable } from '@/services/Windows'; import { SetMinSize, SetResizable } from '@/services/Windows';
import { backendUrl } from '@/services/BackendURL'; import { backendUrl } from '@/services/BackendURL';
@ -31,7 +31,7 @@ onMounted(() => {
isAdmin.value = GetUser().admin; isAdmin.value = GetUser().admin;
Api().get('/user/retrieve-avatar?username=' + data.user.username).then((response) => { Server().get('/user/retrieve-avatar?username=' + data.user.username).then((response) => {
if(response.data.image) userIcon.value = backendUrl + "public/" + response.data.image; if(response.data.image) userIcon.value = backendUrl + "public/" + response.data.image;
else userIcon.value = "public/img/def-avatar.jpg"; else userIcon.value = "public/img/def-avatar.jpg";
}).catch((err) => console.log("Internal error")); }).catch((err) => console.log("Internal error"));

View File

@ -8,7 +8,7 @@ import WindowHandle from '@/views/partials/WindowHandle.vue';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows'; import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import Api from '@/services/Api.js' import Server from '@/services/Server.js'
import { ClearWindow, CreateWindow } from '@/services/Windows'; import { ClearWindow, CreateWindow } from '@/services/Windows';
import { DisplayToast } from '@/services/Dragonroll'; import { DisplayToast } from '@/services/Dragonroll';
@ -41,7 +41,7 @@ function register(){
return; return;
} }
Api().post('/admin/register', Server().post('/admin/register',
{ {
name: name.value, name: name.value,
username: username.value, username: username.value,

View File

@ -7,7 +7,7 @@ import { onMounted, ref } from 'vue';
import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows'; import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import { SetUser, GetUser } from '@/services/User' import { SetUser, GetUser } from '@/services/User'
import Api from '@/services/Api.js' import Server from '@/services/Server.js'
import WindowHandle from '@/views/partials/WindowHandle.vue'; import WindowHandle from '@/views/partials/WindowHandle.vue';
import { ClearWindows, CreateWindow } from '@/services/Windows'; import { ClearWindows, CreateWindow } from '@/services/Windows';
@ -31,7 +31,7 @@ onMounted(() => {
}); });
function login(){ function login(){
Api().post('/user/login', { username: username.value, password: password.value }).then((response) => { Server().post('/user/login', { username: username.value, password: password.value }).then((response) => {
const data = response.data; const data = response.data;
console.log(data); console.log(data);

View File

@ -8,7 +8,7 @@ import WindowHandle from '@/views/partials/WindowHandle.vue';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows'; import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import Api from '@/services/Api.js' import Server from '@/services/Server.js'
import { ClearWindow, CreateWindow } from '@/services/Windows'; import { ClearWindow, CreateWindow } from '@/services/Windows';
import { DisplayToast } from '@/services/Dragonroll'; import { DisplayToast } from '@/services/Dragonroll';
@ -41,7 +41,7 @@ function setup(){
return; return;
} }
Api().post('/user/setup?code=' + data.setupCode, Server().post('/user/setup?code=' + data.setupCode,
{ {
name: name.value, name: name.value,
username: username.value, username: username.value,

View File

@ -5,7 +5,7 @@ import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import WindowHandle from '@/views/partials/WindowHandle.vue'; import WindowHandle from '@/views/partials/WindowHandle.vue';
import { CreateChildWindow } from '@/services/Windows'; import { CreateChildWindow } from '@/services/Windows';
import Api from '@/services/Api.js' import Server from '@/services/Server.js'
import CampaignEntry from '@/views/partials/CampaignEntry.vue'; import CampaignEntry from '@/views/partials/CampaignEntry.vue';
import { GetEmitter } from '@/services/Dragonroll'; import { GetEmitter } from '@/services/Dragonroll';
@ -37,7 +37,7 @@ function JoinCampaign(){
} }
function RefreshCampaigns(){ function RefreshCampaigns(){
Api().get('/campaign/list').then((response) => { Server().get('/campaign/list').then((response) => {
response.data.forEach((camp) => { response.data.forEach((camp) => {
if(camp.is_dm) { if(camp.is_dm) {
myCampaigns.value.push(camp.campaign); myCampaigns.value.push(camp.campaign);

View File

@ -8,7 +8,7 @@ import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import WindowHandle from '@/views/partials/WindowHandle.vue'; import WindowHandle from '@/views/partials/WindowHandle.vue';
import { DisplayToast } from '@/services/Dragonroll'; import { DisplayToast } from '@/services/Dragonroll';
import Api from '@/services/Api' import Server from '@/services/Server'
const handle = ref(null); const handle = ref(null);
@ -26,7 +26,7 @@ onMounted(() => {
function JoinCampaign(){ function JoinCampaign(){
let invite_code = code.value; let invite_code = code.value;
Api().post('/campaign/join', { Server().post('/campaign/join', {
invite_code invite_code
}).then(response => { }).then(response => {
if(response.data.status == "ok"){ if(response.data.status == "ok"){

View File

@ -5,7 +5,7 @@ import { SetupHandle, SetSize, ResetPosition, ClearWindow } from '@/services/Win
import WindowHandle from '@/views/partials/WindowHandle.vue'; import WindowHandle from '@/views/partials/WindowHandle.vue';
import ErrorMessage from '@/components/partials/ErrorMessage.vue' import ErrorMessage from '@/components/partials/ErrorMessage.vue'
import Api from '@/services/Api.js' import Server from '@/services/Server.js'
import SystemSelector from '@/views/partials/SystemSelector.vue'; import SystemSelector from '@/views/partials/SystemSelector.vue';
import { GetEmitter } from '@/services/Dragonroll'; import { GetEmitter } from '@/services/Dragonroll';
@ -40,7 +40,7 @@ function Select(system_id){
function NewCampaign(){ function NewCampaign(){
Api().post('/campaign/create', { Server().post('/campaign/create', {
name: campaignName.value, name: campaignName.value,
system system
}).then((response) => { }).then((response) => {

View File

@ -5,7 +5,7 @@ const { t } = useI18n()
import { onMounted, ref, shallowRef, toRaw } from 'vue'; import { onMounted, ref, shallowRef, toRaw } from 'vue';
import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows'; import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import Api from '@/services/Api' import Server from '@/services/Server'
import WindowHandle from '@/views/partials/WindowHandle.vue'; import WindowHandle from '@/views/partials/WindowHandle.vue';
import ConceptList from '@/views/partials/ConceptList.vue'; import ConceptList from '@/views/partials/ConceptList.vue';
@ -31,7 +31,7 @@ onMounted(() => {
}); });
function RefreshUsers(){ function RefreshUsers(){
Api().get('/admin/users').then(response => { Server().get('/admin/users').then(response => {
let users = response.data.users; let users = response.data.users;
elements.value = []; elements.value = [];
users.forEach(user => { users.forEach(user => {
@ -58,7 +58,7 @@ function RefreshUsers(){
} }
async function ElementIcon(element){ async function ElementIcon(element){
let response = await Api().get('/user/retrieve-avatar?username=' + element.name); let response = await Server().get('/user/retrieve-avatar?username=' + element.name);
if(response.data.image) return backendUrl + "public/" + response.data.image; if(response.data.image) return backendUrl + "public/" + response.data.image;
return "public/img/def-avatar.jpg"; return "public/img/def-avatar.jpg";
} }

View File

@ -8,7 +8,7 @@ import WindowHandle from '@/views/partials/WindowHandle.vue';
import { onMounted, ref } from 'vue'; import { onMounted, ref } from 'vue';
import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows'; import { SetupHandle, SetSize, ResetPosition } from '@/services/Windows';
import Api from '@/services/Api.js' import Server from '@/services/Server.js'
import { ClearWindow, CreateWindow } from '@/services/Windows'; import { ClearWindow, CreateWindow } from '@/services/Windows';
import { DisplayToast } from '@/services/Dragonroll'; import { DisplayToast } from '@/services/Dragonroll';
@ -38,7 +38,7 @@ onMounted(() => {
function register(){ function register(){
Api().post('/user/register').then((response) => { Server().post('/user/register').then((response) => {
const data = response.data; const data = response.data;
console.log(data); console.log(data);
if(data.error){ if(data.error){

26
jsdoc.json Normal file
View File

@ -0,0 +1,26 @@
{
"source": {
"includePattern": ".+\\.js(doc|x)?$",
"include": ["./client/src/services/Api.js", "./backend/services/api.js", "package.json", "README.md"],
"exclude": ["node_modules"]
},
"plugins": ["plugins/markdown"],
"recurseDepth": 10,
"opts": {
"encoding": "utf8",
"readme": "./README.md",
"destination": "docs/",
"recurse": true,
"verbose": true,
"template": "node_modules/clean-jsdoc-theme",
"theme_opts": {
"default_theme": "dark",
"homepageTitle": "Dragonroll API",
"title": "<img src='media/logo-splash.png' class='my-custom-class'/>"
}
},
"markdown": {
"hardwrap": false,
"idInHeadings": true
}
}

BIN
media/logo-splash-light.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 312 KiB

BIN
media/logo-splash.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
media/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

687
package-lock.json generated
View File

@ -10,6 +10,138 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"motion": "^10.18.0" "motion": "^10.18.0"
},
"devDependencies": {
"clean-jsdoc-theme": "^4.3.0",
"jsdoc": "^4.0.3"
}
},
"node_modules/@babel/helper-string-parser": {
"version": "7.25.7",
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
"integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
"version": "7.25.7",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
"integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
"version": "7.25.7",
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz",
"integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/types": "^7.25.7"
},
"bin": {
"parser": "bin/babel-parser.js"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@babel/types": {
"version": "7.25.7",
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz",
"integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@babel/helper-string-parser": "^7.25.7",
"@babel/helper-validator-identifier": "^7.25.7",
"to-fast-properties": "^2.0.0"
},
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@jridgewell/gen-mapping": {
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz",
"integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/set-array": "^1.2.1",
"@jridgewell/sourcemap-codec": "^1.4.10",
"@jridgewell/trace-mapping": "^0.3.24"
},
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/resolve-uri": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
"integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/set-array": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz",
"integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6.0.0"
}
},
"node_modules/@jridgewell/source-map": {
"version": "0.3.6",
"resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz",
"integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.5",
"@jridgewell/trace-mapping": "^0.3.25"
}
},
"node_modules/@jridgewell/sourcemap-codec": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz",
"integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==",
"dev": true,
"license": "MIT"
},
"node_modules/@jridgewell/trace-mapping": {
"version": "0.3.25",
"resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz",
"integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jridgewell/resolve-uri": "^3.1.0",
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
"node_modules/@jsdoc/salty": {
"version": "0.2.8",
"resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.8.tgz",
"integrity": "sha512-5e+SFVavj1ORKlKaKr2BmTOekmXbelU7dC0cDkQLqag7xfuTPuGMUFx7KWJuv4bYZrTsoL2Z18VVCOKYxzoHcg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"lodash": "^4.17.21"
},
"engines": {
"node": ">=v12.0.0"
} }
}, },
"node_modules/@motionone/animation": { "node_modules/@motionone/animation": {
@ -76,12 +208,376 @@
"tslib": "^2.3.1" "tslib": "^2.3.1"
} }
}, },
"node_modules/@types/linkify-it": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
"integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
"dev": true,
"license": "MIT"
},
"node_modules/@types/markdown-it": {
"version": "14.1.2",
"resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
"integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/linkify-it": "^5",
"@types/mdurl": "^2"
}
},
"node_modules/@types/mdurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
"integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
"dev": true,
"license": "MIT"
},
"node_modules/acorn": {
"version": "8.12.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz",
"integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==",
"dev": true,
"license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
"engines": {
"node": ">=0.4.0"
}
},
"node_modules/argparse": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
"integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
"dev": true,
"license": "Python-2.0"
},
"node_modules/bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
"dev": true,
"license": "MIT"
},
"node_modules/buffer-from": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
"dev": true,
"license": "MIT"
},
"node_modules/camel-case": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz",
"integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==",
"dev": true,
"license": "MIT",
"dependencies": {
"pascal-case": "^3.1.2",
"tslib": "^2.0.3"
}
},
"node_modules/catharsis": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz",
"integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==",
"dev": true,
"license": "MIT",
"dependencies": {
"lodash": "^4.17.15"
},
"engines": {
"node": ">= 10"
}
},
"node_modules/clean-css": {
"version": "5.3.3",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz",
"integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==",
"dev": true,
"license": "MIT",
"dependencies": {
"source-map": "~0.6.0"
},
"engines": {
"node": ">= 10.0"
}
},
"node_modules/clean-jsdoc-theme": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/clean-jsdoc-theme/-/clean-jsdoc-theme-4.3.0.tgz",
"integrity": "sha512-QMrBdZ2KdPt6V2Ytg7dIt0/q32U4COpxvR0UDhPjRRKRL0o0MvRCR5YpY37/4rPF1SI1AYEKAWyof7ndCb/dzA==",
"dev": true,
"license": "MIT",
"dependencies": {
"@jsdoc/salty": "^0.2.4",
"fs-extra": "^10.1.0",
"html-minifier-terser": "^7.2.0",
"klaw-sync": "^6.0.0",
"lodash": "^4.17.21",
"showdown": "^2.1.0"
},
"peerDependencies": {
"jsdoc": ">=3.x <=4.x"
}
},
"node_modules/commander": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz",
"integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=14"
}
},
"node_modules/dot-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz",
"integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==",
"dev": true,
"license": "MIT",
"dependencies": {
"no-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/entities": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
"integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
"dev": true,
"license": "BSD-2-Clause",
"engines": {
"node": ">=0.12"
},
"funding": {
"url": "https://github.com/fb55/entities?sponsor=1"
}
},
"node_modules/escape-string-regexp": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz",
"integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/fs-extra": {
"version": "10.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz",
"integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
"node": ">=12"
}
},
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true,
"license": "ISC"
},
"node_modules/hey-listen": { "node_modules/hey-listen": {
"version": "1.0.8", "version": "1.0.8",
"resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz", "resolved": "https://registry.npmjs.org/hey-listen/-/hey-listen-1.0.8.tgz",
"integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==", "integrity": "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/html-minifier-terser": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz",
"integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==",
"dev": true,
"license": "MIT",
"dependencies": {
"camel-case": "^4.1.2",
"clean-css": "~5.3.2",
"commander": "^10.0.0",
"entities": "^4.4.0",
"param-case": "^3.0.4",
"relateurl": "^0.2.7",
"terser": "^5.15.1"
},
"bin": {
"html-minifier-terser": "cli.js"
},
"engines": {
"node": "^14.13.1 || >=16.0.0"
}
},
"node_modules/js2xmlparser": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz",
"integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"xmlcreate": "^2.0.4"
}
},
"node_modules/jsdoc": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.3.tgz",
"integrity": "sha512-Nu7Sf35kXJ1MWDZIMAuATRQTg1iIPdzh7tqJ6jjvaU/GfDf+qi5UV8zJR3Mo+/pYFvm8mzay4+6O5EWigaQBQw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@babel/parser": "^7.20.15",
"@jsdoc/salty": "^0.2.1",
"@types/markdown-it": "^14.1.1",
"bluebird": "^3.7.2",
"catharsis": "^0.9.0",
"escape-string-regexp": "^2.0.0",
"js2xmlparser": "^4.0.2",
"klaw": "^3.0.0",
"markdown-it": "^14.1.0",
"markdown-it-anchor": "^8.6.7",
"marked": "^4.0.10",
"mkdirp": "^1.0.4",
"requizzle": "^0.2.3",
"strip-json-comments": "^3.1.0",
"underscore": "~1.13.2"
},
"bin": {
"jsdoc": "jsdoc.js"
},
"engines": {
"node": ">=12.0.0"
}
},
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"universalify": "^2.0.0"
},
"optionalDependencies": {
"graceful-fs": "^4.1.6"
}
},
"node_modules/klaw": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz",
"integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.9"
}
},
"node_modules/klaw-sync": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz",
"integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.11"
}
},
"node_modules/linkify-it": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz",
"integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"uc.micro": "^2.0.0"
}
},
"node_modules/lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"dev": true,
"license": "MIT"
},
"node_modules/lower-case": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz",
"integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==",
"dev": true,
"license": "MIT",
"dependencies": {
"tslib": "^2.0.3"
}
},
"node_modules/markdown-it": {
"version": "14.1.0",
"resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz",
"integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==",
"dev": true,
"license": "MIT",
"dependencies": {
"argparse": "^2.0.1",
"entities": "^4.4.0",
"linkify-it": "^5.0.0",
"mdurl": "^2.0.0",
"punycode.js": "^2.3.1",
"uc.micro": "^2.1.0"
},
"bin": {
"markdown-it": "bin/markdown-it.mjs"
}
},
"node_modules/markdown-it-anchor": {
"version": "8.6.7",
"resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz",
"integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==",
"dev": true,
"license": "Unlicense",
"peerDependencies": {
"@types/markdown-it": "*",
"markdown-it": "*"
}
},
"node_modules/marked": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
"integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
"dev": true,
"license": "MIT",
"bin": {
"marked": "bin/marked.js"
},
"engines": {
"node": ">= 12"
}
},
"node_modules/mdurl": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz",
"integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==",
"dev": true,
"license": "MIT"
},
"node_modules/mkdirp": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
"integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
"dev": true,
"license": "MIT",
"bin": {
"mkdirp": "bin/cmd.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/motion": { "node_modules/motion": {
"version": "10.18.0", "version": "10.18.0",
"resolved": "https://registry.npmjs.org/motion/-/motion-10.18.0.tgz", "resolved": "https://registry.npmjs.org/motion/-/motion-10.18.0.tgz",
@ -94,11 +590,202 @@
"@motionone/utils": "^10.18.0" "@motionone/utils": "^10.18.0"
} }
}, },
"node_modules/no-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz",
"integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==",
"dev": true,
"license": "MIT",
"dependencies": {
"lower-case": "^2.0.2",
"tslib": "^2.0.3"
}
},
"node_modules/param-case": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz",
"integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==",
"dev": true,
"license": "MIT",
"dependencies": {
"dot-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/pascal-case": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz",
"integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==",
"dev": true,
"license": "MIT",
"dependencies": {
"no-case": "^3.0.4",
"tslib": "^2.0.3"
}
},
"node_modules/punycode.js": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
"integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/relateurl": {
"version": "0.2.7",
"resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz",
"integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/requizzle": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz",
"integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==",
"dev": true,
"license": "MIT",
"dependencies": {
"lodash": "^4.17.21"
}
},
"node_modules/showdown": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz",
"integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"commander": "^9.0.0"
},
"bin": {
"showdown": "bin/showdown.js"
},
"funding": {
"type": "individual",
"url": "https://www.paypal.me/tiviesantos"
}
},
"node_modules/showdown/node_modules/commander": {
"version": "9.5.0",
"resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
"integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": "^12.20.0 || >=14"
}
},
"node_modules/source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
"dev": true,
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-support": {
"version": "0.5.21",
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
"integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
"dev": true,
"license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"source-map": "^0.6.0"
}
},
"node_modules/strip-json-comments": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/terser": {
"version": "5.34.1",
"resolved": "https://registry.npmjs.org/terser/-/terser-5.34.1.tgz",
"integrity": "sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==",
"dev": true,
"license": "BSD-2-Clause",
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
"acorn": "^8.8.2",
"commander": "^2.20.0",
"source-map-support": "~0.5.20"
},
"bin": {
"terser": "bin/terser"
},
"engines": {
"node": ">=10"
}
},
"node_modules/terser/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,
"license": "MIT"
},
"node_modules/to-fast-properties": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">=4"
}
},
"node_modules/tslib": { "node_modules/tslib": {
"version": "2.7.0", "version": "2.7.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
"integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
"license": "0BSD" "license": "0BSD"
},
"node_modules/uc.micro": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
"integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
"dev": true,
"license": "MIT"
},
"node_modules/underscore": {
"version": "1.13.7",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz",
"integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==",
"dev": true,
"license": "MIT"
},
"node_modules/universalify": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
"integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/xmlcreate": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz",
"integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==",
"dev": true,
"license": "Apache-2.0"
} }
} }
} }

View File

@ -4,11 +4,16 @@
"description": "Vtt", "description": "Vtt",
"main": "prebuild.js", "main": "prebuild.js",
"scripts": { "scripts": {
"test": "echo \"Error: no test specified\" && exit 1" "test": "echo \"Error: no test specified\" && exit 1",
"generate-docs": "npx jsdoc -c jsdoc.json"
}, },
"author": "Aran Roig", "author": "Aran Roig",
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"motion": "^10.18.0" "motion": "^10.18.0"
},
"devDependencies": {
"clean-jsdoc-theme": "^4.3.0",
"jsdoc": "^4.0.3"
} }
} }

View File

@ -1,6 +1,6 @@
<script setup> <script setup>
import WindowHandle from '@/views/partials/WindowHandle.vue'; import WindowHandle from '@/views/partials/WindowHandle.vue';
import Api from '@/services/Api'; import Server from '@/services/Server';
import { onMounted, ref, shallowRef } from 'vue'; import { onMounted, ref, shallowRef } from 'vue';
import { SetupHandle, SetSize, ResetPosition, CreateWindow, SetMinSize, SetResizable } from '@/services/Windows'; import { SetupHandle, SetSize, ResetPosition, CreateWindow, SetMinSize, SetResizable } from '@/services/Windows';
@ -70,7 +70,7 @@ function Upload(){
oldInfo = structuredClone(concept.value.info); oldInfo = structuredClone(concept.value.info);
console.log("MAIASIUDHSAHJ") console.log("MAIASIUDHSAHJ")
} }
Api().put('/concept/update?campaign=' + GetCampaign()._id + "&id=" + concept.value._id + extraParams, {concept: concept.value}).then(response => { Server().put('/concept/update?campaign=' + GetCampaign()._id + "&id=" + concept.value._id + extraParams, {concept: concept.value}).then(response => {
console.log(response); console.log(response);
}); });
} }
@ -139,7 +139,7 @@ onMounted(() => {
item_type.value = data.item_type; item_type.value = data.item_type;
if(data.item_create){ if(data.item_create){
Api().post('/concept/create?campaign=' + GetCampaign()._id, { Server().post('/concept/create?campaign=' + GetCampaign()._id, {
data: { data: {
type: data.item_type, type: data.item_type,
name: "New " + data.item_type name: "New " + data.item_type

View File

@ -1,5 +1,5 @@
{ {
"package": "example-plugin" "package": "example-plugin",
"name": "Dragonroll example plugin", "name": "Dragonroll example plugin",
"description": "This is an example plugin to help you getting started with the Dragonroll API", "description": "This is an example plugin to help you getting started with the Dragonroll API",
"authors": [ "authors": [

View File

@ -9,7 +9,6 @@ terminate(){
} }
script_full_path=$(dirname "$0") script_full_path=$(dirname "$0")
node prebuild.js
cd client cd client
./start-dev.sh & ./start-dev.sh &
cd .. cd ..

View File

@ -8,7 +8,6 @@ terminate(){
} }
script_full_path=$(dirname "$0") script_full_path=$(dirname "$0")
node prebuild.js
cd client cd client
./start.sh & ./start.sh &
cd .. cd ..