From 99c85b81ef65c2ccabb71c0f6c4d7f9df86e4de6 Mon Sep 17 00:00:00 2001 From: SrGooglo Date: Tue, 11 Jun 2024 17:14:20 +0000 Subject: [PATCH] merge from local --- src/helpers/handleBeforeRequest.js | 4 ++-- src/helpers/refreshToken.js | 8 ++++++- src/index.js | 16 +++++++++---- src/models/chats/index.js | 26 +++++++++++++++++++++ src/models/music/getters/index.js | 2 +- src/models/music/getters/myReleases.ts | 26 +++++++++++++++++++++ src/models/music/getters/trackLyrics.ts | 31 +++++++++++++++++++++++++ src/models/music/index.ts | 18 ++++++++++++++ src/remote.js | 10 +++++++- 9 files changed, 132 insertions(+), 9 deletions(-) create mode 100644 src/models/chats/index.js create mode 100644 src/models/music/getters/myReleases.ts create mode 100644 src/models/music/getters/trackLyrics.ts diff --git a/src/helpers/handleBeforeRequest.js b/src/helpers/handleBeforeRequest.js index 7404d2e..526c034 100755 --- a/src/helpers/handleBeforeRequest.js +++ b/src/helpers/handleBeforeRequest.js @@ -1,5 +1,5 @@ -export default async (request) => { - if (__comty_shared_state.refreshingToken) { +export default async () => { + if (__comty_shared_state.refreshingToken === true) { await new Promise((resolve) => { __comty_shared_state.eventBus.once("session:refreshed", resolve) }) diff --git a/src/helpers/refreshToken.js b/src/helpers/refreshToken.js index 24d7372..bffc320 100755 --- a/src/helpers/refreshToken.js +++ b/src/helpers/refreshToken.js @@ -12,13 +12,19 @@ export default async () => { authToken: await SessionModel.token, refreshToken: await SessionModel.refreshToken, } + }).catch((error) => { + return false }) if (!response) { - throw new Error("Failed to regenerate token, invalid server response.") + __comty_shared_state.refreshingToken = false + + throw new Error("Failed to regenerate token.") } if (!response.data?.token) { + __comty_shared_state.refreshingToken = false + throw new Error("Failed to regenerate token, invalid server response.") } diff --git a/src/index.js b/src/index.js index 12a353e..c482296 100755 --- a/src/index.js +++ b/src/index.js @@ -61,25 +61,33 @@ export async function createWebsockets() { // regsister events for (let [key, instance] of Object.entries(instances)) { instance.on("connect", () => { - console.debug(`[WS-API][${key}] Connected`) + //console.debug(`[WS-API][${key}] Connected`) globalThis.__comty_shared_state.eventBus.emit(`${key}:connected`) }) instance.on("disconnect", () => { - console.debug(`[WS-API][${key}] Disconnected`) + //console.debug(`[WS-API][${key}] Disconnected`) globalThis.__comty_shared_state.eventBus.emit(`${key}:disconnected`) }) + instance.on("reconnect", () => { + // console.debug(`[WS-API][${key}] Reconnected`) + + globalThis.__comty_shared_state.eventBus.emit(`${key}:reconnected`) + + reauthenticateWebsockets() + }) + instance.on("error", (error) => { - console.error(`[WS-API][${key}] Error`, error) + //console.error(`[WS-API][${key}] Error`, error) globalThis.__comty_shared_state.eventBus.emit(`${key}:error`, error) }) instance.onAny((event, ...args) => { - console.debug(`[WS-API][${key}] Event (${event})`, ...args) + //console.debug(`[WS-API][${key}] Event (${event})`, ...args) globalThis.__comty_shared_state.eventBus.emit(`${key}:${event}`, ...args) }) diff --git a/src/models/chats/index.js b/src/models/chats/index.js new file mode 100644 index 0000000..62c6e03 --- /dev/null +++ b/src/models/chats/index.js @@ -0,0 +1,26 @@ +import request from "../../request" +import SessionModel from "../session" + +export default class ChatsService { + static async getChatHistory(chat_id) { + if (!chat_id) { + throw new Error("chat_id is required") + } + + const { data } = await request({ + method: "GET", + url: `/chats/${chat_id}/history`, + }) + + return data + } + + static async getRecentChats() { + const { data } = await request({ + method: "GET", + url: "/chats/my", + }) + + return data + } +} \ No newline at end of file diff --git a/src/models/music/getters/index.js b/src/models/music/getters/index.js index 7740464..fc410af 100644 --- a/src/models/music/getters/index.js +++ b/src/models/music/getters/index.js @@ -17,7 +17,7 @@ async function exportObjs() { return fns } else { let objs = {} - + const dirs = fs.readdirSync(__dirname).filter(file => file !== "index.js") const fs = require("fs") diff --git a/src/models/music/getters/myReleases.ts b/src/models/music/getters/myReleases.ts new file mode 100644 index 0000000..999a4bc --- /dev/null +++ b/src/models/music/getters/myReleases.ts @@ -0,0 +1,26 @@ +import request from "../../../request" + +type Arguments = { + limit: Number + offset: Number + keywords: String +} + +export default async ({ + limit, + offset, + keywords, +}: Arguments) => { + const response = await request({ + method: "GET", + url: "/music/releases/self", + params: { + limit: limit, + offset: offset, + keywords: keywords, + } + }) + + // @ts-ignore + return response.data +} \ No newline at end of file diff --git a/src/models/music/getters/trackLyrics.ts b/src/models/music/getters/trackLyrics.ts new file mode 100644 index 0000000..57dc59e --- /dev/null +++ b/src/models/music/getters/trackLyrics.ts @@ -0,0 +1,31 @@ +import request from "../../../request" + +type RequestOptions = { + preferTranslation?: Boolean +} + +type RequestParams = { + translate_lang?: String +} + +export default async ( + id: String, + options: RequestOptions = { + preferTranslation: false, + } +) => { + const requestParams: RequestParams = Object() + + if (options.preferTranslation) { + requestParams.translate_lang = app.cores.settings.get("app:language") + } + + const response = await request({ + method: "GET", + url: `/music/lyrics/${id}`, + params: requestParams + }) + + // @ts-ignore + return response.data +} \ No newline at end of file diff --git a/src/models/music/index.ts b/src/models/music/index.ts index d386e6f..989d072 100755 --- a/src/models/music/index.ts +++ b/src/models/music/index.ts @@ -54,6 +54,16 @@ export default class MusicModel { */ public static getReleases = Getters.releases + /** + * Retrieves self releases. + * + * @param {object} options - The options for retrieving my releases. + * @param {number} options.limit - The maximum number of releases to retrieve. + * @param {number} options.offset - The offset for paginated results. + * @return {Promise} - A promise that resolves to the retrieved releases. + */ + public static getMyReleases = Getters.myReleases + /** * Retrieves release data by ID. * @@ -77,6 +87,14 @@ export default class MusicModel { */ public static getFeaturedPlaylists = Getters.featuredPlaylists + /** + * Retrieves track lyrics for a given ID. + * + * @param {string} id - The ID of the track. + * @return {Promise} The track lyrics. + */ + public static getTrackLyrics = Getters.trackLyrics + //!INCOMPLETE diff --git a/src/remote.js b/src/remote.js index 00c0de5..dfb73da 100755 --- a/src/remote.js +++ b/src/remote.js @@ -6,8 +6,16 @@ function getCurrentHostname() { return window?.location?.hostname ?? "localhost" } +function getCurrentProtocol() { + if (typeof window === "undefined") { + return "http" + } + + return window?.location?.protocol ?? "http:" +} + const envOrigins = { - "development": `http://${getCurrentHostname()}:9000`, + "development": `${getCurrentProtocol()}//${getCurrentHostname()}:9000`, "indev": "https://indev_api.comty.app", "production": "https://api.comty.app", }