commit
3f3f488924
@ -25,6 +25,7 @@
|
||||
],
|
||||
"rules": {
|
||||
"no-unused-vars": "off",
|
||||
"@typescript-eslint/no-explicit-any": "error"
|
||||
"@typescript-eslint/no-explicit-any": "error",
|
||||
"no-throw-literal": "error"
|
||||
}
|
||||
}
|
||||
|
@ -34,6 +34,7 @@ module.exports = {
|
||||
"rules": {
|
||||
"no-unused-vars": "off",
|
||||
"@typescript-eslint/no-explicit-any": "error",
|
||||
"no-throw-literal": "error",
|
||||
// TODO: remove those ignored rules and write a stronger code!
|
||||
"@typescript-eslint/no-unsafe-call": "off",
|
||||
"@typescript-eslint/restrict-plus-operands": "off",
|
||||
|
2
front/dist/.htaccess
vendored
2
front/dist/.htaccess
vendored
@ -20,7 +20,7 @@ RewriteBase /
|
||||
# We only want to let Apache serve files and not directories.
|
||||
# Rewrite all other queries starting with _ to index.ts.
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteRule "^[_@]/" "/index.html" [L]
|
||||
RewriteRule "^[_@*]/" "/index.html" [L]
|
||||
RewriteRule "^register/" "/index.html" [L]
|
||||
RewriteRule "^login" "/index.html" [L]
|
||||
RewriteRule "^jwt" "/index.html" [L]
|
||||
|
@ -26,7 +26,7 @@
|
||||
const selectedFile = inputAudio.files ? inputAudio.files[0] : null;
|
||||
if (!selectedFile) {
|
||||
errorFile = true;
|
||||
throw "no file selected";
|
||||
throw new Error("no file selected");
|
||||
}
|
||||
|
||||
const fd = new FormData();
|
||||
|
@ -76,7 +76,7 @@
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else throw "There is no menu called " + menu;
|
||||
} else throw new Error("There is no menu called " + menu);
|
||||
}
|
||||
|
||||
function closeMenu() {
|
||||
|
@ -106,10 +106,10 @@ class ConnectionManager {
|
||||
const code = urlParams.get("code");
|
||||
const state = urlParams.get("state");
|
||||
if (!state || !localUserStore.verifyState(state)) {
|
||||
throw "Could not validate state!";
|
||||
throw new Error("Could not validate state!");
|
||||
}
|
||||
if (!code) {
|
||||
throw "No Auth code provided";
|
||||
throw new Error("No Auth code provided");
|
||||
}
|
||||
localUserStore.setCode(code);
|
||||
}
|
||||
@ -168,6 +168,9 @@ class ConnectionManager {
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
if (err instanceof Error) {
|
||||
console.error(err.stack);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
const query = urlParams.toString();
|
||||
@ -333,10 +336,10 @@ class ConnectionManager {
|
||||
|
||||
if (!token) {
|
||||
if (!state || !localUserStore.verifyState(state)) {
|
||||
throw "Could not validate state!";
|
||||
throw new Error("Could not validate state!");
|
||||
}
|
||||
if (!code) {
|
||||
throw "No Auth code provided";
|
||||
throw new Error("No Auth code provided");
|
||||
}
|
||||
}
|
||||
const { authToken, userUuid, textures, email } = await Axios.get(`${PUSHER_URL}/login-callback`, {
|
||||
|
@ -139,9 +139,13 @@ class LocalUserStore {
|
||||
async setLastRoomUrl(roomUrl: string): Promise<void> {
|
||||
localStorage.setItem(lastRoomUrl, roomUrl.toString());
|
||||
if ("caches" in window) {
|
||||
try {
|
||||
const cache = await caches.open(cacheAPIIndex);
|
||||
const stringResponse = new Response(JSON.stringify({ roomUrl }));
|
||||
await cache.put(`/${lastRoomUrl}`, stringResponse);
|
||||
} catch (e) {
|
||||
console.error("Could not store last room url in Browser cache. Are you using private browser mode?", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
getLastRoomUrl(): string {
|
||||
|
@ -691,7 +691,7 @@ export class RoomConnection implements RoomConnection {
|
||||
}
|
||||
|
||||
public getUserId(): number {
|
||||
if (this.userId === null) throw "UserId cannot be null!";
|
||||
if (this.userId === null) throw new Error("UserId cannot be null!");
|
||||
return this.userId;
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ export const getRessourceDescriptor = (
|
||||
const playerResource = LAYERS[i][textureName];
|
||||
if (playerResource !== undefined) return playerResource;
|
||||
}
|
||||
throw "Could not find a data for texture " + textureName;
|
||||
throw new Error("Could not find a data for texture " + textureName);
|
||||
};
|
||||
|
||||
export const createLoadingPromise = (
|
||||
|
@ -66,7 +66,7 @@ export class GameManager {
|
||||
|
||||
getCharacterLayers(): string[] {
|
||||
if (!this.characterLayers) {
|
||||
throw "characterLayers are not set";
|
||||
throw new Error("characterLayers are not set");
|
||||
}
|
||||
return this.characterLayers;
|
||||
}
|
||||
@ -119,7 +119,7 @@ export class GameManager {
|
||||
* This will close the socket connections and stop the gameScene, but won't remove it.
|
||||
*/
|
||||
leaveGame(targetSceneName: string, sceneClass: Phaser.Scene): void {
|
||||
if (this.currentGameSceneName === null) throw "No current scene id set!";
|
||||
if (this.currentGameSceneName === null) throw new Error("No current scene id set!");
|
||||
const gameScene: GameScene = this.scenePlugin.get(this.currentGameSceneName) as GameScene;
|
||||
gameScene.cleanupClosingScene();
|
||||
gameScene.createSuccessorGameScene(false, false);
|
||||
@ -143,7 +143,7 @@ export class GameManager {
|
||||
}
|
||||
|
||||
public getCurrentGameScene(): GameScene {
|
||||
if (this.currentGameSceneName === null) throw "No current scene id set!";
|
||||
if (this.currentGameSceneName === null) throw new Error("No current scene id set!");
|
||||
return this.scenePlugin.get(this.currentGameSceneName) as GameScene;
|
||||
}
|
||||
|
||||
|
@ -453,7 +453,7 @@ export class GameScene extends DirtyScene {
|
||||
|
||||
const playerName = gameManager.getPlayerName();
|
||||
if (!playerName) {
|
||||
throw "playerName is not set";
|
||||
throw new Error("playerName is not set");
|
||||
}
|
||||
this.playerName = playerName;
|
||||
this.characterLayers = gameManager.getCharacterLayers();
|
||||
|
@ -48,7 +48,7 @@ export class CustomizeScene extends AbstractCharacterScene {
|
||||
bodyResourceDescription.level < 0 ||
|
||||
bodyResourceDescription.level > 5
|
||||
) {
|
||||
throw "Texture level is null";
|
||||
throw new Error("Texture level is null");
|
||||
}
|
||||
this.layers[bodyResourceDescription.level].unshift(bodyResourceDescription);
|
||||
});
|
||||
|
@ -78,6 +78,9 @@ export class ErrorScene extends Phaser.Scene {
|
||||
*/
|
||||
public static showError(error: unknown, scene: ScenePlugin): void {
|
||||
console.error(error);
|
||||
if (error instanceof Error) {
|
||||
console.error("Stacktrace: ", error.stack);
|
||||
}
|
||||
console.trace();
|
||||
|
||||
if (typeof error === "string" || error instanceof String) {
|
||||
|
@ -26,7 +26,7 @@ export interface ChatMessage {
|
||||
function getAuthor(authorId: number): PlayerInterface {
|
||||
const author = playersStore.getPlayerById(authorId);
|
||||
if (!author) {
|
||||
throw "Could not find data for author " + authorId;
|
||||
throw new Error("Could not find data for author " + authorId);
|
||||
}
|
||||
return author;
|
||||
}
|
||||
|
@ -612,17 +612,16 @@ class CoWebsiteManager {
|
||||
}
|
||||
}
|
||||
|
||||
public closeCoWebsites(): Promise<void> {
|
||||
this.currentOperationPromise = this.currentOperationPromise.then(() => {
|
||||
public async closeCoWebsites(): Promise<void> {
|
||||
await this.currentOperationPromise;
|
||||
|
||||
const promises: Promise<void>[] = [];
|
||||
this.coWebsites.forEach((coWebsite: CoWebsite) => {
|
||||
promises.push(this.closeCoWebsite(coWebsite));
|
||||
});
|
||||
return Promise.all(promises).then(() => {
|
||||
await Promise.all(promises);
|
||||
// TODO: this.currentOperationPromise does not point any more on the last promise
|
||||
return;
|
||||
});
|
||||
});
|
||||
return this.currentOperationPromise;
|
||||
}
|
||||
|
||||
public getGameSize(): { width: number; height: number } {
|
||||
|
@ -62,7 +62,7 @@ function hsv_to_rgb(hue: number, saturation: number, brightness: number): { r: n
|
||||
b = q;
|
||||
break;
|
||||
default:
|
||||
throw "h_i cannot be " + h_i;
|
||||
throw new Error("h_i cannot be " + h_i);
|
||||
}
|
||||
return {
|
||||
r,
|
||||
|
@ -22,7 +22,7 @@ export function getNavigatorType(): NavigatorType {
|
||||
} else if (window.navigator.userAgent.includes("Safari")) {
|
||||
return NavigatorType.safari;
|
||||
}
|
||||
throw "Couldn't detect navigator type";
|
||||
throw new Error("Couldn't detect navigator type");
|
||||
}
|
||||
export function isAndroid(): boolean {
|
||||
return window.navigator.userAgent.includes("Android");
|
||||
|
@ -123,7 +123,7 @@ export class SimplePeer {
|
||||
peerConnection.destroy();
|
||||
const peerConnexionDeleted = this.PeerConnectionArray.delete(user.userId);
|
||||
if (!peerConnexionDeleted) {
|
||||
throw "Error to delete peer connection";
|
||||
throw new Error("Error to delete peer connection");
|
||||
}
|
||||
//return this.createPeerConnection(user, localStream);
|
||||
} else {
|
||||
@ -177,7 +177,7 @@ export class SimplePeer {
|
||||
peerConnection.destroy();
|
||||
const peerConnexionDeleted = this.PeerScreenSharingConnectionArray.delete(user.userId);
|
||||
if (!peerConnexionDeleted) {
|
||||
throw "Error to delete peer connection";
|
||||
throw new Error("Error to delete peer connection");
|
||||
}
|
||||
this.createPeerConnection(user);
|
||||
} else {
|
||||
@ -229,7 +229,7 @@ export class SimplePeer {
|
||||
|
||||
const userIndex = this.Users.findIndex((user) => user.userId === userId);
|
||||
if (userIndex < 0) {
|
||||
throw "Couldn't delete user";
|
||||
throw new Error("Couldn't delete user");
|
||||
} else {
|
||||
this.Users.splice(userIndex, 1);
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
],
|
||||
"rules": {
|
||||
"no-unused-vars": "off",
|
||||
"@typescript-eslint/no-explicit-any": "error"
|
||||
"@typescript-eslint/no-explicit-any": "error",
|
||||
"no-throw-literal": "error"
|
||||
}
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ export class AdminController extends BaseController {
|
||||
|
||||
try {
|
||||
if (typeof body.roomId !== "string") {
|
||||
throw "Incorrect roomId parameter";
|
||||
throw new Error("Incorrect roomId parameter");
|
||||
}
|
||||
const roomId: string = body.roomId;
|
||||
|
||||
@ -86,13 +86,13 @@ export class AdminController extends BaseController {
|
||||
|
||||
try {
|
||||
if (typeof body.text !== "string") {
|
||||
throw "Incorrect text parameter";
|
||||
throw new Error("Incorrect text parameter");
|
||||
}
|
||||
if (body.type !== "capacity" && body.type !== "message") {
|
||||
throw "Incorrect type parameter";
|
||||
throw new Error("Incorrect type parameter");
|
||||
}
|
||||
if (!body.targets || typeof body.targets !== "object") {
|
||||
throw "Incorrect targets parameter";
|
||||
throw new Error("Incorrect targets parameter");
|
||||
}
|
||||
const text: string = body.text;
|
||||
const type: string = body.type;
|
||||
|
@ -32,7 +32,7 @@ export class AuthenticateController extends BaseController {
|
||||
try {
|
||||
const { nonce, state, playUri, redirect } = parse(req.getQuery());
|
||||
if (!state || !nonce) {
|
||||
throw "missing state and nonce URL parameters";
|
||||
throw new Error("missing state and nonce URL parameters");
|
||||
}
|
||||
|
||||
const loginUri = await openIDClient.authorizationUrl(
|
||||
|
@ -27,7 +27,7 @@ export class OpenIdProfileController extends BaseController {
|
||||
try {
|
||||
const resCheckTokenAuth = await openIDClient.checkTokenAuth(accessToken as string);
|
||||
if (!resCheckTokenAuth.email) {
|
||||
throw "Email was not found";
|
||||
throw new Error("Email was not found");
|
||||
}
|
||||
res.end(
|
||||
this.buildHtml(
|
||||
|
@ -671,7 +671,7 @@ export class SocketManager implements ZoneEventListener {
|
||||
playGlobalMessageEvent: PlayGlobalMessage
|
||||
): Promise<void> {
|
||||
if (!client.tags.includes("admin")) {
|
||||
throw "Client is not an admin!";
|
||||
throw new Error("Client is not an admin!");
|
||||
}
|
||||
|
||||
const clientRoomUrl = client.roomId;
|
||||
|
Loading…
Reference in New Issue
Block a user