mirror of
https://github.com/ragestudio/comty.js.git
synced 2025-06-09 02:24:18 +00:00
add jsdoc
This commit is contained in:
parent
99c85b81ef
commit
fac6a9f0d1
@ -17,7 +17,7 @@
|
|||||||
"axios": "^1.4.0",
|
"axios": "^1.4.0",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"jsonwebtoken": "^9.0.0",
|
"jsonwebtoken": "^9.0.0",
|
||||||
"jwt-decode": "^3.1.2",
|
"jwt-decode": "^4.0.0",
|
||||||
"luxon": "^3.3.0",
|
"luxon": "^3.3.0",
|
||||||
"socket.io-client": "^4.6.1"
|
"socket.io-client": "^4.6.1"
|
||||||
},
|
},
|
||||||
|
33
src/index.js
33
src/index.js
@ -21,6 +21,13 @@ if (globalThis.isServerMode) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates websockets by disconnecting and removing listeners from existing instances,
|
||||||
|
* then creating new instances for each websocket in the remote.websockets array.
|
||||||
|
* Registers event listeners for connection, disconnection, reconnection, error, and any other events.
|
||||||
|
*
|
||||||
|
* @return {Promise<void>} A promise that resolves when all websockets have been created and event listeners have been registered.
|
||||||
|
*/
|
||||||
export async function createWebsockets() {
|
export async function createWebsockets() {
|
||||||
if (!remote.websockets) {
|
if (!remote.websockets) {
|
||||||
return false
|
return false
|
||||||
@ -94,6 +101,11 @@ export async function createWebsockets() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disconnects all websocket instances by calling the `disconnect` method on each instance.
|
||||||
|
*
|
||||||
|
* @return {Promise<void>} A promise that resolves when all websocket instances have been disconnected.
|
||||||
|
*/
|
||||||
export async function disconnectWebsockets() {
|
export async function disconnectWebsockets() {
|
||||||
const instances = globalThis.__comty_shared_state.sockets
|
const instances = globalThis.__comty_shared_state.sockets
|
||||||
|
|
||||||
@ -104,6 +116,11 @@ export async function disconnectWebsockets() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reconnects all websocket instances by disconnecting and reconnecting them with the current token.
|
||||||
|
*
|
||||||
|
* @return {Promise<void>} A promise that resolves when all websocket instances have been reconnected.
|
||||||
|
*/
|
||||||
export async function reconnectWebsockets() {
|
export async function reconnectWebsockets() {
|
||||||
const instances = globalThis.__comty_shared_state.sockets
|
const instances = globalThis.__comty_shared_state.sockets
|
||||||
|
|
||||||
@ -121,6 +138,11 @@ export async function reconnectWebsockets() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reauthenticates all websocket instances with the current token. If a websocket instance is not connected, it connects to the server. If it is connected, it emits an "auth:reauth" event with the current token.
|
||||||
|
*
|
||||||
|
* @return {Promise<void>} Promise that resolves when all websocket instances have been reauthenticated.
|
||||||
|
*/
|
||||||
export async function reauthenticateWebsockets() {
|
export async function reauthenticateWebsockets() {
|
||||||
const instances = globalThis.__comty_shared_state.sockets
|
const instances = globalThis.__comty_shared_state.sockets
|
||||||
|
|
||||||
@ -139,14 +161,21 @@ export async function reauthenticateWebsockets() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a client with the specified access key, private key, and websocket enablement.
|
||||||
|
*
|
||||||
|
* @param {Object} options - Optional parameters for accessKey, privateKey, and enableWs
|
||||||
|
* @return {Object} sharedState - Object containing eventBus, mainOrigin, baseRequest, sockets, rest, and version
|
||||||
|
*/
|
||||||
export function createClient({
|
export function createClient({
|
||||||
accessKey = null,
|
accessKey = null,
|
||||||
privateKey = null,
|
privateKey = null,
|
||||||
enableWs = false,
|
enableWs = false,
|
||||||
|
origin = remote.origin,
|
||||||
} = {}) {
|
} = {}) {
|
||||||
const sharedState = globalThis.__comty_shared_state = {
|
const sharedState = globalThis.__comty_shared_state = {
|
||||||
eventBus: new EventEmitter(),
|
eventBus: new EventEmitter(),
|
||||||
mainOrigin: remote.origin,
|
mainOrigin: origin,
|
||||||
baseRequest: null,
|
baseRequest: null,
|
||||||
sockets: new Map(),
|
sockets: new Map(),
|
||||||
rest: null,
|
rest: null,
|
||||||
@ -160,7 +189,7 @@ export function createClient({
|
|||||||
}
|
}
|
||||||
|
|
||||||
sharedState.baseRequest = axios.create({
|
sharedState.baseRequest = axios.create({
|
||||||
baseURL: remote.origin,
|
baseURL: origin,
|
||||||
headers: {
|
headers: {
|
||||||
"Content-Type": "application/json",
|
"Content-Type": "application/json",
|
||||||
}
|
}
|
||||||
|
78
src/models/api/index.js
Normal file
78
src/models/api/index.js
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
import request from "../../request"
|
||||||
|
|
||||||
|
export default class API {
|
||||||
|
/**
|
||||||
|
* Retrieves the server keys associated with the current user.
|
||||||
|
*
|
||||||
|
* @return {object} The server keys data
|
||||||
|
*/
|
||||||
|
static async getMyServerKeys() {
|
||||||
|
const response = await request({
|
||||||
|
method: "GET",
|
||||||
|
url: "/server-keys/my",
|
||||||
|
})
|
||||||
|
|
||||||
|
return response.data
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new server key.
|
||||||
|
*
|
||||||
|
* @param {object} options - Options for the new server key.
|
||||||
|
* @param {string} options.name - The name of the server key.
|
||||||
|
* @param {string} options.description - The description of the server key.
|
||||||
|
* @param {string} options.access - The access level of the server key.
|
||||||
|
* @return {object} The newly created server key data.
|
||||||
|
*/
|
||||||
|
static async createNewServerKey({
|
||||||
|
name,
|
||||||
|
description,
|
||||||
|
access,
|
||||||
|
} = {}) {
|
||||||
|
const response = await request({
|
||||||
|
method: "POST",
|
||||||
|
url: "/server-keys/generate",
|
||||||
|
data: {
|
||||||
|
name,
|
||||||
|
description,
|
||||||
|
access
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return response.data
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Regenerates a secret token for a server key.
|
||||||
|
*
|
||||||
|
* @param {object} options - Options for regenerating the secret token.
|
||||||
|
* @param {string} access_id - The ID of the server key to regenerate the secret token for.
|
||||||
|
* @return {object} The regenerated secret token data.
|
||||||
|
*/
|
||||||
|
static async regenerateSecretToken(access_id) {
|
||||||
|
const response = await request({
|
||||||
|
method: "POST",
|
||||||
|
url: `/server-keys/${access_id}/regenerate`,
|
||||||
|
})
|
||||||
|
|
||||||
|
return response.data
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes a server key by its access ID.
|
||||||
|
*
|
||||||
|
* @param {string} access_id - The ID of the server key to delete.
|
||||||
|
* @return {Promise<object>} - A promise that resolves to the response data.
|
||||||
|
*/
|
||||||
|
static async deleteServerKey(access_id) {
|
||||||
|
const response = await request({
|
||||||
|
method: "DELETE",
|
||||||
|
url: `/server-keys/${access_id}`,
|
||||||
|
data: {
|
||||||
|
access_id
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
return response.data
|
||||||
|
}
|
||||||
|
}
|
@ -2,15 +2,18 @@ import request from "../../request"
|
|||||||
import SessionModel from "../session"
|
import SessionModel from "../session"
|
||||||
|
|
||||||
export default class AuthModel {
|
export default class AuthModel {
|
||||||
static login = async (payload, callback) => {
|
/**
|
||||||
|
* Async function to handle the login process.
|
||||||
|
*
|
||||||
|
* @param {Object} payload - The payload containing username, password, and MFA code.
|
||||||
|
* @param {Function} callback - Optional callback function to handle further actions.
|
||||||
|
* @return {Object|boolean} The response data if login successful, false if MFA is required.
|
||||||
|
*/
|
||||||
|
static async login(payload, callback) {
|
||||||
const response = await request({
|
const response = await request({
|
||||||
method: "post",
|
method: "post",
|
||||||
url: "/auth",
|
url: "/auth",
|
||||||
data: {
|
data: payload,
|
||||||
username: payload.username,
|
|
||||||
password: payload.password,
|
|
||||||
mfa_code: payload.mfa_code,
|
|
||||||
},
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if (response.data.mfa_required) {
|
if (response.data.mfa_required) {
|
||||||
@ -40,7 +43,12 @@ export default class AuthModel {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static logout = async () => {
|
/**
|
||||||
|
* Asynchronously logs out the user by destroying the current session and emitting an event for successful logout.
|
||||||
|
*
|
||||||
|
* @return {Promise<void>} A Promise that resolves after the logout process is completed.
|
||||||
|
*/
|
||||||
|
static async logout() {
|
||||||
await SessionModel.destroyCurrentSession()
|
await SessionModel.destroyCurrentSession()
|
||||||
|
|
||||||
SessionModel.removeToken()
|
SessionModel.removeToken()
|
||||||
@ -48,7 +56,18 @@ export default class AuthModel {
|
|||||||
__comty_shared_state.eventBus.emit("auth:logout_success")
|
__comty_shared_state.eventBus.emit("auth:logout_success")
|
||||||
}
|
}
|
||||||
|
|
||||||
static register = async (payload) => {
|
/**
|
||||||
|
* Registers a new user with the provided payload.
|
||||||
|
*
|
||||||
|
* @param {Object} payload - The payload containing the user's information.
|
||||||
|
* @param {string} payload.username - The username of the user.
|
||||||
|
* @param {string} payload.password - The password of the user.
|
||||||
|
* @param {string} payload.email - The email of the user.
|
||||||
|
* @param {boolean} payload.tos - The acceptance of the terms of service.
|
||||||
|
* @return {Promise<Object>} A Promise that resolves with the response data if the registration is successful, or false if there was an error.
|
||||||
|
* @throws {Error} Throws an error if the registration fails.
|
||||||
|
*/
|
||||||
|
static async register(payload) {
|
||||||
const { username, password, email, tos } = payload
|
const { username, password, email, tos } = payload
|
||||||
|
|
||||||
const response = await request({
|
const response = await request({
|
||||||
@ -73,7 +92,14 @@ export default class AuthModel {
|
|||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
static usernameValidation = async (username) => {
|
/**
|
||||||
|
* Validates the existence of a username by making a GET request to the `/auth/{username}/exists` endpoint.
|
||||||
|
*
|
||||||
|
* @param {string} username - The username to validate.
|
||||||
|
* @return {Promise<boolean|Object>} A Promise that resolves with the response data if the validation is successful,
|
||||||
|
* or false if there was an error. Throws an error if the validation fails.
|
||||||
|
*/
|
||||||
|
static async usernameValidation(username) {
|
||||||
const response = await request({
|
const response = await request({
|
||||||
method: "get",
|
method: "get",
|
||||||
url: `/auth/${username}/exists`,
|
url: `/auth/${username}/exists`,
|
||||||
@ -90,7 +116,15 @@ export default class AuthModel {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static availability = async (payload) => {
|
/**
|
||||||
|
* Retrieves the availability of a username and email by making a GET request to the `/availability` endpoint.
|
||||||
|
*
|
||||||
|
* @param {Object} payload - The payload containing the username and email.
|
||||||
|
* @param {string} payload.username - The username to check availability for.
|
||||||
|
* @param {string} payload.email - The email to check availability for.
|
||||||
|
* @return {Promise<Object|boolean>} A Promise that resolves with the availability data if successful, or false if an error occurred.
|
||||||
|
*/
|
||||||
|
static async availability(payload) {
|
||||||
const { username, email } = payload
|
const { username, email } = payload
|
||||||
|
|
||||||
const response = await request({
|
const response = await request({
|
||||||
@ -109,7 +143,15 @@ export default class AuthModel {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static changePassword = async (payload) => {
|
/**
|
||||||
|
* A function to change the user's password.
|
||||||
|
*
|
||||||
|
* @param {Object} payload - An object containing the currentPassword and newPassword.
|
||||||
|
* @param {string} payload.currentPassword - The current password of the user.
|
||||||
|
* @param {string} payload.newPassword - The new password to set for the user.
|
||||||
|
* @return {Promise<Object>} The data response after changing the password.
|
||||||
|
*/
|
||||||
|
static async changePassword(payload) {
|
||||||
const { currentPassword, newPassword } = payload
|
const { currentPassword, newPassword } = payload
|
||||||
|
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
|
@ -2,7 +2,14 @@ import { SessionModel } from "../../models"
|
|||||||
import request from "../../request"
|
import request from "../../request"
|
||||||
|
|
||||||
export default class FollowsModel {
|
export default class FollowsModel {
|
||||||
static imFollowing = async (user_id) => {
|
/**
|
||||||
|
* Checks if the current user is following the specified user.
|
||||||
|
*
|
||||||
|
* @param {string} user_id - The ID of the user to check if the current user is following.
|
||||||
|
* @return {Promise<Object>} A promise that resolves with the response data indicating if the current user is following the specified user.
|
||||||
|
* @throws {Error} If the user_id parameter is not provided.
|
||||||
|
*/
|
||||||
|
static async imFollowing(user_id) {
|
||||||
if (!user_id) {
|
if (!user_id) {
|
||||||
throw new Error("user_id is required")
|
throw new Error("user_id is required")
|
||||||
}
|
}
|
||||||
@ -15,9 +22,15 @@ export default class FollowsModel {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static getFollowers = async (user_id, fetchData) => {
|
/**
|
||||||
|
* Retrieves the list of followers for a given user.
|
||||||
|
*
|
||||||
|
* @param {string} user_id - The ID of the user. If not provided, the current user ID will be used.
|
||||||
|
* @param {boolean} fetchData - Whether to fetch additional data for each follower. Defaults to false.
|
||||||
|
* @return {Promise<Object>} A promise that resolves with the list of followers and their data.
|
||||||
|
*/
|
||||||
|
static async getFollowers(user_id, fetchData) {
|
||||||
if (!user_id) {
|
if (!user_id) {
|
||||||
// set current user_id
|
|
||||||
user_id = SessionModel.user_id
|
user_id = SessionModel.user_id
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,7 +45,13 @@ export default class FollowsModel {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static toggleFollow = async ({ user_id }) => {
|
/**
|
||||||
|
* Toggles the follow status for a user.
|
||||||
|
*
|
||||||
|
* @param {Object} user_id - The ID of the user to toggle follow status.
|
||||||
|
* @return {Promise} The response data after toggling follow status.
|
||||||
|
*/
|
||||||
|
static async toggleFollow({ user_id }) {
|
||||||
if (!user_id) {
|
if (!user_id) {
|
||||||
throw new Error("user_id is required")
|
throw new Error("user_id is required")
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,26 @@
|
|||||||
import request from "../../request"
|
import request from "../../request"
|
||||||
|
|
||||||
export default class NFCModel {
|
export default class NFCModel {
|
||||||
|
/**
|
||||||
|
* Retrieves the list of tags owned by the current user.
|
||||||
|
*
|
||||||
|
* @return {Promise<Object>} A promise that resolves with the data of the tags.
|
||||||
|
*/
|
||||||
static async getOwnTags() {
|
static async getOwnTags() {
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/nfc/tags`
|
url: `/nfc/tag/my`
|
||||||
})
|
})
|
||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a tag by its ID.
|
||||||
|
*
|
||||||
|
* @param {type} id - The ID of the tag to retrieve.
|
||||||
|
* @return {type} The data of the retrieved tag.
|
||||||
|
*/
|
||||||
static async getTagById(id) {
|
static async getTagById(id) {
|
||||||
if (!id) {
|
if (!id) {
|
||||||
throw new Error("ID is required")
|
throw new Error("ID is required")
|
||||||
@ -17,12 +28,19 @@ export default class NFCModel {
|
|||||||
|
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/nfc/tags/${id}`
|
url: `/nfc/tag/id/${id}`
|
||||||
})
|
})
|
||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a tag by its serial number.
|
||||||
|
*
|
||||||
|
* @param {string} serial - The serial number of the tag to retrieve.
|
||||||
|
* @throws {Error} If the serial number is not provided.
|
||||||
|
* @return {Promise<Object>} A promise that resolves with the data of the tag.
|
||||||
|
*/
|
||||||
static async getTagBySerial(serial) {
|
static async getTagBySerial(serial) {
|
||||||
if (!serial) {
|
if (!serial) {
|
||||||
throw new Error("Serial is required")
|
throw new Error("Serial is required")
|
||||||
@ -36,6 +54,14 @@ export default class NFCModel {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Registers a tag with the given serial number and payload.
|
||||||
|
*
|
||||||
|
* @param {string} serial - The serial number of the tag.
|
||||||
|
* @param {Object} payload - The payload data for the tag.
|
||||||
|
* @throws {Error} If the serial or payload is not provided.
|
||||||
|
* @return {Promise<Object>} The data of the registered tag.
|
||||||
|
*/
|
||||||
static async registerTag(serial, payload) {
|
static async registerTag(serial, payload) {
|
||||||
if (!serial) {
|
if (!serial) {
|
||||||
throw new Error("Serial is required")
|
throw new Error("Serial is required")
|
||||||
@ -47,10 +73,23 @@ export default class NFCModel {
|
|||||||
|
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: `/nfc/tag/${serial}`,
|
url: `/nfc/tag/register/${serial}`,
|
||||||
data: payload
|
data: payload
|
||||||
})
|
})
|
||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static async deleteTag(id) {
|
||||||
|
if (!id) {
|
||||||
|
throw new Error("ID is required")
|
||||||
|
}
|
||||||
|
|
||||||
|
const { data } = await request({
|
||||||
|
method: "DELETE",
|
||||||
|
url: `/nfc/tag/id/${id}`
|
||||||
|
})
|
||||||
|
|
||||||
|
return data
|
||||||
|
}
|
||||||
}
|
}
|
@ -2,15 +2,30 @@ import request from "../../request"
|
|||||||
import Settings from "../../helpers/withSettings"
|
import Settings from "../../helpers/withSettings"
|
||||||
|
|
||||||
export default class Post {
|
export default class Post {
|
||||||
|
/**
|
||||||
|
* Retrieves the maximum length allowed for the post text.
|
||||||
|
*
|
||||||
|
* @return {number} The maximum length allowed for the post text.
|
||||||
|
*/
|
||||||
static get maxPostTextLength() {
|
static get maxPostTextLength() {
|
||||||
return 3200
|
return 3200
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the maximum length allowed for a comment.
|
||||||
|
*
|
||||||
|
* @return {number} The maximum length allowed for a comment.
|
||||||
|
*/
|
||||||
static get maxCommentLength() {
|
static get maxCommentLength() {
|
||||||
return 1200
|
return 1200
|
||||||
}
|
}
|
||||||
|
|
||||||
static getPostingPolicy = async () => {
|
/**
|
||||||
|
* Retrieves the posting policy from the server.
|
||||||
|
*
|
||||||
|
* @return {Promise<Object>} The posting policy data.
|
||||||
|
*/
|
||||||
|
static async getPostingPolicy() {
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "/posting_policy",
|
url: "/posting_policy",
|
||||||
@ -19,7 +34,15 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static getPost = async ({ post_id }) => {
|
/**
|
||||||
|
* Retrieves the data of a post by its ID.
|
||||||
|
*
|
||||||
|
* @param {Object} options - The options for retrieving the post.
|
||||||
|
* @param {string} options.post_id - The ID of the post to retrieve.
|
||||||
|
* @throws {Error} If the post_id is not provided.
|
||||||
|
* @return {Promise<Object>} The data of the post.
|
||||||
|
*/
|
||||||
|
static async post({ post_id }) {
|
||||||
if (!post_id) {
|
if (!post_id) {
|
||||||
throw new Error("Post ID is required")
|
throw new Error("Post ID is required")
|
||||||
}
|
}
|
||||||
@ -32,6 +55,18 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static getPost = Post.post
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the replies of a post by its ID.
|
||||||
|
*
|
||||||
|
* @param {Object} options - The options for retrieving the replies.
|
||||||
|
* @param {string} options.post_id - The ID of the post to retrieve replies for.
|
||||||
|
* @param {number} [options.trim=0] - The number of characters to trim the reply content.
|
||||||
|
* @param {number} [options.limit=Settings.get("feed_max_fetch")] - The maximum number of replies to fetch.
|
||||||
|
* @throws {Error} If the post_id is not provided.
|
||||||
|
* @return {Promise<Object>} The data of the replies.
|
||||||
|
*/
|
||||||
static async replies({ post_id, trim, limit }) {
|
static async replies({ post_id, trim, limit }) {
|
||||||
if (!post_id) {
|
if (!post_id) {
|
||||||
throw new Error("Post ID is required")
|
throw new Error("Post ID is required")
|
||||||
@ -49,7 +84,15 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static getSavedPosts = async ({ trim, limit }) => {
|
/**
|
||||||
|
* Retrieves the saved posts with optional trimming and limiting.
|
||||||
|
*
|
||||||
|
* @param {Object} options - The options for retrieving the saved posts.
|
||||||
|
* @param {number} [options.trim=0] - The number of posts to trim from the result.
|
||||||
|
* @param {number} [options.limit=Settings.get("feed_max_fetch")] - The maximum number of posts to fetch.
|
||||||
|
* @return {Promise<Object>} The data of the saved posts.
|
||||||
|
*/
|
||||||
|
static async getSavedPosts({ trim, limit }) {
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/posts/saved`,
|
url: `/posts/saved`,
|
||||||
@ -62,7 +105,14 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static getLikedPosts = async ({ trim, limit }) => {
|
/**
|
||||||
|
* Retrieves the liked posts with optional trimming and limiting.
|
||||||
|
*
|
||||||
|
* @param {number} trim - The number of characters to trim the post content.
|
||||||
|
* @param {number} limit - The maximum number of liked posts to fetch.
|
||||||
|
* @return {Promise<Object>} The data of the liked posts.
|
||||||
|
*/
|
||||||
|
static async getLikedPosts({ trim, limit }) {
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/posts/liked`,
|
url: `/posts/liked`,
|
||||||
@ -75,7 +125,16 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static getUserPosts = async ({ user_id, trim, limit }) => {
|
/**
|
||||||
|
* Retrieves the posts of a user with optional trimming and limiting.
|
||||||
|
*
|
||||||
|
* @param {Object} options - The options for retrieving the user's posts.
|
||||||
|
* @param {string} options.user_id - The ID of the user whose posts to retrieve. If not provided, the current user's ID will be used.
|
||||||
|
* @param {number} [options.trim=0] - The number of characters to trim the post content.
|
||||||
|
* @param {number} [options.limit=Settings.get("feed_max_fetch")] - The maximum number of posts to fetch.
|
||||||
|
* @return {Promise<Object>} The data of the user's posts.
|
||||||
|
*/
|
||||||
|
static async getUserPosts({ user_id, trim, limit }) {
|
||||||
if (!user_id) {
|
if (!user_id) {
|
||||||
// use current user_id
|
// use current user_id
|
||||||
user_id = app.userData?._id
|
user_id = app.userData?._id
|
||||||
@ -93,7 +152,15 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static toggleLike = async ({ post_id }) => {
|
/**
|
||||||
|
* Toggles the like status of a post.
|
||||||
|
*
|
||||||
|
* @param {Object} options - The options for toggling the like status.
|
||||||
|
* @param {string} options.post_id - The ID of the post to toggle the like status.
|
||||||
|
* @throws {Error} If the post_id is not provided.
|
||||||
|
* @return {Promise<Object>} The response data after toggling the like status.
|
||||||
|
*/
|
||||||
|
static async toggleLike({ post_id }) {
|
||||||
if (!post_id) {
|
if (!post_id) {
|
||||||
throw new Error("Post ID is required")
|
throw new Error("Post ID is required")
|
||||||
}
|
}
|
||||||
@ -106,7 +173,13 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static toggleSave = async ({ post_id }) => {
|
/**
|
||||||
|
* Toggles the save status of a post.
|
||||||
|
*
|
||||||
|
* @param {string} post_id - The ID of the post to toggle the save status.
|
||||||
|
* @return {Promise<Object>} The response data after toggling the save status.
|
||||||
|
*/
|
||||||
|
static async toggleSave({ post_id }) {
|
||||||
if (!post_id) {
|
if (!post_id) {
|
||||||
throw new Error("Post ID is required")
|
throw new Error("Post ID is required")
|
||||||
}
|
}
|
||||||
@ -119,7 +192,13 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static create = async (payload) => {
|
/**
|
||||||
|
* Creates a new post with the given payload.
|
||||||
|
*
|
||||||
|
* @param {Object} payload - The data to create the post with.
|
||||||
|
* @return {Promise<Object>} The response data after creating the post.
|
||||||
|
*/
|
||||||
|
static async create(payload) {
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: `/posts/new`,
|
url: `/posts/new`,
|
||||||
@ -129,7 +208,17 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static update = async (post_id, update) => {
|
static createPost = Post.create
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates a post with the given post ID and update payload.
|
||||||
|
*
|
||||||
|
* @param {string} post_id - The ID of the post to update.
|
||||||
|
* @param {Object} update - The data to update the post with.
|
||||||
|
* @throws {Error} If the post_id is not provided.
|
||||||
|
* @return {Promise<Object>} The response data after updating the post.
|
||||||
|
*/
|
||||||
|
static async update(post_id, update) {
|
||||||
if (!post_id) {
|
if (!post_id) {
|
||||||
throw new Error("Post ID is required")
|
throw new Error("Post ID is required")
|
||||||
}
|
}
|
||||||
@ -143,7 +232,15 @@ export default class Post {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
static deletePost = async ({ post_id }) => {
|
static updatePost = Post.update
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Deletes a post with the given post ID.
|
||||||
|
*
|
||||||
|
* @param {string} post_id - The ID of the post to delete.
|
||||||
|
* @return {Object} The response data after deleting the post.
|
||||||
|
*/
|
||||||
|
static async delete({ post_id }) {
|
||||||
if (!post_id) {
|
if (!post_id) {
|
||||||
throw new Error("Post ID is required")
|
throw new Error("Post ID is required")
|
||||||
}
|
}
|
||||||
@ -155,4 +252,6 @@ export default class Post {
|
|||||||
|
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static deletePost = Post.delete
|
||||||
}
|
}
|
@ -1,7 +1,14 @@
|
|||||||
import request from "../../request"
|
import request from "../../request"
|
||||||
|
|
||||||
export default class Search {
|
export default class Search {
|
||||||
static search = async (keywords, params = {}) => {
|
/**
|
||||||
|
* Performs a search using the provided keywords and optional parameters.
|
||||||
|
*
|
||||||
|
* @param {string} keywords - The keywords to search for.
|
||||||
|
* @param {Object} [params={}] - Optional parameters for the search.
|
||||||
|
* @return {Promise<Object>} A promise that resolves with the search results.
|
||||||
|
*/
|
||||||
|
static async search(keywords, params = {}) {
|
||||||
const { data } = await request({
|
const { data } = await request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/search`,
|
url: `/search`,
|
||||||
@ -14,6 +21,12 @@ export default class Search {
|
|||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs a quick search using the provided parameters.
|
||||||
|
*
|
||||||
|
* @param {Object} params - The parameters for the search.
|
||||||
|
* @return {Promise<Object>} A promise that resolves with the search results data.
|
||||||
|
*/
|
||||||
static async quickSearch(params) {
|
static async quickSearch(params) {
|
||||||
const response = await request({
|
const response = await request({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import jwt_decode from "jwt-decode"
|
import { jwtDecode } from "jwt-decode"
|
||||||
import request from "../../request"
|
import request from "../../request"
|
||||||
import Storage from "../../helpers/withStorage"
|
import Storage from "../../helpers/withStorage"
|
||||||
|
|
||||||
@ -6,45 +6,97 @@ export default class Session {
|
|||||||
static storageTokenKey = "token"
|
static storageTokenKey = "token"
|
||||||
static storageRefreshTokenKey = "refreshToken"
|
static storageRefreshTokenKey = "refreshToken"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the token from the storage engine.
|
||||||
|
*
|
||||||
|
* @return {type} description of return value
|
||||||
|
*/
|
||||||
static get token() {
|
static get token() {
|
||||||
return Storage.engine.get(this.storageTokenKey)
|
return Storage.engine.get(this.storageTokenKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the token in the storage engine.
|
||||||
|
*
|
||||||
|
* @param {string} token - The token to be set.
|
||||||
|
* @return {Promise<void>} A promise that resolves when the token is successfully set.
|
||||||
|
*/
|
||||||
static set token(token) {
|
static set token(token) {
|
||||||
return Storage.engine.set(this.storageTokenKey, token)
|
return Storage.engine.set(this.storageTokenKey, token)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the refresh token from the storage engine.
|
||||||
|
*
|
||||||
|
* @return {string} The refresh token stored in the storage engine.
|
||||||
|
*/
|
||||||
static get refreshToken() {
|
static get refreshToken() {
|
||||||
return Storage.engine.get(this.storageRefreshTokenKey)
|
return Storage.engine.get(this.storageRefreshTokenKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the refresh token in the storage engine.
|
||||||
|
*
|
||||||
|
* @param {string} token - The refresh token to be set.
|
||||||
|
* @return {Promise<void>} A promise that resolves when the refresh token is successfully set.
|
||||||
|
*/
|
||||||
static set refreshToken(token) {
|
static set refreshToken(token) {
|
||||||
return Storage.engine.set(this.storageRefreshTokenKey, token)
|
return Storage.engine.set(this.storageRefreshTokenKey, token)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the roles from the decoded token object.
|
||||||
|
*
|
||||||
|
* @return {Array<string>|undefined} The roles if they exist, otherwise undefined.
|
||||||
|
*/
|
||||||
static get roles() {
|
static get roles() {
|
||||||
return this.getDecodedToken()?.roles
|
return this.getDecodedToken()?.roles
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the user ID from the decoded token object.
|
||||||
|
*
|
||||||
|
* @return {string|undefined} The user ID if it exists, otherwise undefined.
|
||||||
|
*/
|
||||||
static get user_id() {
|
static get user_id() {
|
||||||
return this.getDecodedToken()?.user_id
|
return this.getDecodedToken()?.user_id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves the session UUID from the decoded token object.
|
||||||
|
*
|
||||||
|
* @return {string} The session UUID if it exists, otherwise undefined.
|
||||||
|
*/
|
||||||
static get session_uuid() {
|
static get session_uuid() {
|
||||||
return this.getDecodedToken()?.session_uuid
|
return this.getDecodedToken()?.session_uuid
|
||||||
}
|
}
|
||||||
|
|
||||||
static getDecodedToken = () => {
|
/**
|
||||||
|
* Retrieves the decoded token from the session storage.
|
||||||
|
*
|
||||||
|
* @return {Object|null} The decoded token object if it exists, otherwise null.
|
||||||
|
*/
|
||||||
|
static getDecodedToken() {
|
||||||
const token = this.token
|
const token = this.token
|
||||||
|
|
||||||
return token && jwt_decode(token)
|
return token && jwtDecode(token)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes the token from the storage engine.
|
||||||
|
*
|
||||||
|
* @return {Promise<void>} A promise that resolves when the token is successfully removed.
|
||||||
|
*/
|
||||||
static removeToken() {
|
static removeToken() {
|
||||||
return Storage.engine.remove(Session.storageTokenKey)
|
return Storage.engine.remove(Session.storageTokenKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
static getAllSessions = async () => {
|
/**
|
||||||
|
* Retrieves all sessions from the server.
|
||||||
|
*
|
||||||
|
* @return {Promise<Object>} The data of all sessions.
|
||||||
|
*/
|
||||||
|
static async getAllSessions() {
|
||||||
const response = await request({
|
const response = await request({
|
||||||
method: "get",
|
method: "get",
|
||||||
url: "/sessions/all"
|
url: "/sessions/all"
|
||||||
@ -53,7 +105,12 @@ export default class Session {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static getCurrentSession = async () => {
|
/**
|
||||||
|
* Retrieves the current session from the server.
|
||||||
|
*
|
||||||
|
* @return {Promise<Object>} The data of the current session.
|
||||||
|
*/
|
||||||
|
static async getCurrentSession() {
|
||||||
const response = await request({
|
const response = await request({
|
||||||
method: "get",
|
method: "get",
|
||||||
url: "/sessions/current"
|
url: "/sessions/current"
|
||||||
@ -62,7 +119,12 @@ export default class Session {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static getTokenValidation = async () => {
|
/**
|
||||||
|
* Retrieves the token validation data from the server.
|
||||||
|
*
|
||||||
|
* @return {Promise<Object>} The token validation data.
|
||||||
|
*/
|
||||||
|
static async getTokenValidation() {
|
||||||
const session = await Session.token
|
const session = await Session.token
|
||||||
|
|
||||||
const response = await request({
|
const response = await request({
|
||||||
@ -76,7 +138,12 @@ export default class Session {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static destroyCurrentSession = async () => {
|
/**
|
||||||
|
* Destroys the current session by deleting it from the server.
|
||||||
|
*
|
||||||
|
* @return {Promise<Object>} The response data from the server after deleting the session.
|
||||||
|
*/
|
||||||
|
static async destroyCurrentSession() {
|
||||||
const token = await Session.token
|
const token = await Session.token
|
||||||
const session = await Session.getDecodedToken()
|
const session = await Session.getDecodedToken()
|
||||||
|
|
||||||
@ -100,16 +167,16 @@ export default class Session {
|
|||||||
return response.data
|
return response.data
|
||||||
}
|
}
|
||||||
|
|
||||||
static destroyAllSessions = async () => {
|
static async destroyAllSessions() {
|
||||||
throw new Error("Not implemented")
|
throw new Error("Not implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
// alias for validateToken method
|
/**
|
||||||
static validSession = async (token) => {
|
* Retrieves the validity of the current token.
|
||||||
return await Session.validateToken(token)
|
*
|
||||||
}
|
* @return {boolean} The validity status of the current token.
|
||||||
|
*/
|
||||||
static isCurrentTokenValid = async () => {
|
static async isCurrentTokenValid() {
|
||||||
const health = await Session.getTokenValidation()
|
const health = await Session.getTokenValidation()
|
||||||
|
|
||||||
return health.valid
|
return health.valid
|
||||||
|
Loading…
x
Reference in New Issue
Block a user