@oxyhq/services
Version:
Reusable OxyHQ module to handle authentication, user management, karma system, device-based session management and more 🚀
174 lines (161 loc) • 4.84 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.OxyServicesPrivacyMixin = OxyServicesPrivacyMixin;
/**
* Privacy Methods Mixin (Blocked & Restricted Users)
*/
function OxyServicesPrivacyMixin(Base) {
return class extends Base {
constructor(...args) {
super(...args);
}
/**
* Extract user ID from blocked/restricted user object
*/
extractUserId(userIdField) {
return typeof userIdField === 'string' ? userIdField : userIdField._id;
}
/**
* Check if a user is in a list (blocked or restricted)
*/
async isUserInList(userId, getUserList, getIdField) {
try {
if (!userId) {
return false;
}
const users = await getUserList();
return users.some(item => {
const itemId = this.extractUserId(getIdField(item));
return itemId === userId;
});
} catch (error) {
// If there's an error, assume not in list to avoid breaking functionality
if (__DEV__) {
console.warn('Error checking user list:', error);
}
return false;
}
}
// ============================================================================
// BLOCKED USERS METHODS
// ============================================================================
/**
* Get list of blocked users
* @returns Array of blocked users
*/
async getBlockedUsers() {
try {
return await this.makeRequest('GET', '/api/privacy/blocked', undefined, {
cache: true,
cacheTTL: 1 * 60 * 1000 // 1 minute cache
});
} catch (error) {
throw this.handleError(error);
}
}
/**
* Block a user
* @param userId - The user ID to block
* @returns Success message
*/
async blockUser(userId) {
try {
if (!userId) {
throw new Error('User ID is required');
}
return await this.makeRequest('POST', `/api/privacy/blocked/${userId}`, undefined, {
cache: false
});
} catch (error) {
throw this.handleError(error);
}
}
/**
* Unblock a user
* @param userId - The user ID to unblock
* @returns Success message
*/
async unblockUser(userId) {
try {
if (!userId) {
throw new Error('User ID is required');
}
return await this.makeRequest('DELETE', `/api/privacy/blocked/${userId}`, undefined, {
cache: false
});
} catch (error) {
throw this.handleError(error);
}
}
/**
* Check if a user is blocked
* @param userId - The user ID to check
* @returns True if the user is blocked, false otherwise
*/
async isUserBlocked(userId) {
return this.isUserInList(userId, () => this.getBlockedUsers(), block => block.blockedId);
}
// ============================================================================
// RESTRICTED USERS METHODS
// ============================================================================
/**
* Get list of restricted users
* @returns Array of restricted users
*/
async getRestrictedUsers() {
try {
return await this.makeRequest('GET', '/api/privacy/restricted', undefined, {
cache: true,
cacheTTL: 1 * 60 * 1000 // 1 minute cache
});
} catch (error) {
throw this.handleError(error);
}
}
/**
* Restrict a user (limit their interactions without fully blocking)
* @param userId - The user ID to restrict
* @returns Success message
*/
async restrictUser(userId) {
try {
if (!userId) {
throw new Error('User ID is required');
}
return await this.makeRequest('POST', `/api/privacy/restricted/${userId}`, undefined, {
cache: false
});
} catch (error) {
throw this.handleError(error);
}
}
/**
* Unrestrict a user
* @param userId - The user ID to unrestrict
* @returns Success message
*/
async unrestrictUser(userId) {
try {
if (!userId) {
throw new Error('User ID is required');
}
return await this.makeRequest('DELETE', `/api/privacy/restricted/${userId}`, undefined, {
cache: false
});
} catch (error) {
throw this.handleError(error);
}
}
/**
* Check if a user is restricted
* @param userId - The user ID to check
* @returns True if the user is restricted, false otherwise
*/
async isUserRestricted(userId) {
return this.isUserInList(userId, () => this.getRestrictedUsers(), restrict => restrict.restrictedId);
}
};
}
//# sourceMappingURL=OxyServices.privacy.js.map