UNPKG

redai-automation-web-sdk

Version:

TypeScript SDK for RedAI Automation Web API - Zalo Personal automation, messaging, advanced sticker search, and bulk operations. 100% compatible with automation-web backend. v1.8.1: Updated GroupInfo interface to match backend controller with complete gro

357 lines 11.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SearchService = void 0; /** * Zalo Personal Search Service Class * 100% khớp với automation-web ZaloSearchController */ class SearchService { constructor(httpClient) { this.httpClient = httpClient; } /** * Tìm sticker theo từ khóa (cải tiến) * POST /zalo-personal/search/get-stickers * * @param request - Search stickers request * @returns Promise<AutomationWebResponse<GetStickersResponse>> * * @example * ```typescript * const result = await searchService.getStickers({ * sessionId: "session-123", * keyword: "hello", * limit: 20, * includeDetails: false * }); * * if (result.success) { * console.log(`Found ${result.data.total} stickers (returned ${result.data.result.length})`); * console.log('Sticker IDs:', result.data.result); * if (result.data.details) { * console.log('Sticker details:', result.data.details); * } * } * ``` */ async getStickers(request) { const response = await this.httpClient.post('/zalo-personal/search/get-stickers', { sessionId: request.sessionId, keyword: request.keyword, limit: request.limit, includeDetails: request.includeDetails, }); return response; } /** * Lấy chi tiết sticker theo IDs * POST /zalo-personal/search/get-stickers-detail * * @param request - Get stickers detail request * @returns Promise<AutomationWebResponse<GetStickersDetailResponse>> * * @example * ```typescript * const result = await searchService.getStickersDetail({ * sessionId: "session-123", * stickerIds: [123, 456, 789] * }); * * if (result.success) { * result.data.result.forEach(sticker => { * console.log(`Sticker ${sticker.id}: ${sticker.name}`); * console.log(`Image: ${sticker.imageUrl}`); * }); * } * ``` */ async getStickersDetail(request) { const response = await this.httpClient.post('/zalo-personal/search/get-stickers-detail', { sessionId: request.sessionId, stickerIds: request.stickerIds, }); return response; } /** * Parse thông tin metadata từ URL * POST /zalo-personal/search/parse-link * * @param request - Parse link request * @returns Promise<AutomationWebResponse<ParseLinkResponse>> * * @example * ```typescript * const result = await searchService.parseLink({ * sessionId: "session-123", * url: "https://example.com/article" * }); * * if (result.success) { * const metadata = result.data.result; * console.log('Title:', metadata.title); * console.log('Description:', metadata.description); * console.log('Image:', metadata.image); * console.log('Site:', metadata.siteName); * } * ``` */ async parseLink(request) { const response = await this.httpClient.post('/zalo-personal/search/parse-link', { sessionId: request.sessionId, url: request.url, }); return response; } /** * Tìm sticker và lấy chi tiết trong một lần gọi (API mới) * POST /zalo-personal/search/search-with-details * * @param request - Search stickers with details request * @returns Promise<AutomationWebResponse<SearchStickersWithDetailsResponse>> * * @example * ```typescript * const result = await searchService.searchStickersWithDetails({ * sessionId: "session-123", * keyword: "hello", * limit: 10 * }); * * if (result.success) { * console.log(`Found ${result.data.total} stickers with details in ${result.data.searchTime}ms`); * result.data.stickers.forEach(sticker => { * console.log(`${sticker.text}: ${sticker.stickerUrl}`); * }); * } * ``` */ async searchStickersWithDetails(request) { const response = await this.httpClient.post('/zalo-personal/search/search-with-details', { sessionId: request.sessionId, keyword: request.keyword, limit: request.limit, }); return response; } /** * Lấy danh sách sticker phổ biến (API mới) * POST /zalo-personal/search/popular-stickers * * @param request - Get popular stickers request * @returns Promise<AutomationWebResponse<GetPopularStickersResponse>> * * @example * ```typescript * const result = await searchService.getPopularStickers({ * sessionId: "session-123", * limit: 20, * categoryId: 1 * }); * * if (result.success) { * console.log(`Retrieved ${result.data.stickers.length} popular stickers`); * result.data.stickers.forEach(sticker => { * console.log(`${sticker.text}: ${sticker.stickerUrl}`); * }); * } * ``` */ async getPopularStickers(request) { const response = await this.httpClient.post('/zalo-personal/search/popular-stickers', { sessionId: request.sessionId, limit: request.limit, categoryId: request.categoryId, }); return response; } // ==================== CONVENIENCE METHODS ==================== /** * Tìm stickers và lấy chi tiết (convenience method - sử dụng API mới) * Sử dụng API mới search-with-details thay vì gọi 2 API riêng biệt * * @param sessionId - Session ID * @param keyword - Search keyword * @param limit - Số lượng sticker tối đa (default: 10) * @returns Promise với sticker details * * @example * ```typescript * const stickers = await searchService.searchStickersWithDetailsConvenience( * "session-123", * "hello", * 10 * ); * * stickers.forEach(sticker => { * console.log(`${sticker.text}: ${sticker.stickerUrl}`); * }); * ``` */ async searchStickersWithDetailsConvenience(sessionId, keyword, limit = 10) { const result = await this.searchStickersWithDetails({ sessionId, keyword, limit, }); if (!result.result?.stickers) { return []; } return result.result.stickers; } /** * Tìm stickers và lấy chi tiết (legacy method - backward compatibility) * Sử dụng cách cũ: gọi getStickers + getStickersDetail * * @param sessionId - Session ID * @param keyword - Search keyword * @returns Promise với sticker details * * @deprecated Sử dụng searchStickersWithDetailsConvenience() thay thế */ async searchStickersWithDetailsLegacy(sessionId, keyword) { // Step 1: Search for stickers const searchResult = await this.getStickers({ sessionId, keyword }); if (!searchResult.result?.result?.length) { return []; } // Step 2: Get details for found stickers const detailResult = await this.getStickersDetail({ sessionId, stickerIds: searchResult.result.result, }); if (!detailResult.result?.result) { return []; } return detailResult.result.result; } /** * Batch parse multiple links * Parse nhiều links cùng lúc * * @param sessionId - Session ID * @param urls - Array of URLs to parse * @returns Promise với array of parsed metadata * * @example * ```typescript * const results = await searchService.parseMultipleLinks( * "session-123", * ["https://example1.com", "https://example2.com"] * ); * * results.forEach((metadata, index) => { * if (metadata) { * console.log(`Link ${index + 1}: ${metadata.title}`); * } * }); * ``` */ async parseMultipleLinks(sessionId, urls) { const promises = urls.map(async (url) => { try { const result = await this.parseLink({ sessionId, url }); return result.result?.result || null; } catch (error) { console.warn(`Failed to parse link ${url}:`, error); return null; } }); return Promise.all(promises); } /** * Lấy sticker phổ biến (convenience method) * * @param sessionId - Session ID * @param limit - Số lượng sticker (default: 20) * @param categoryId - Category ID để lọc (optional) * @returns Promise với popular stickers * * @example * ```typescript * const stickers = await searchService.getPopularStickersConvenience( * "session-123", * 20, * 1 * ); * * stickers.forEach(sticker => { * console.log(`${sticker.text}: ${sticker.stickerUrl}`); * }); * ``` */ async getPopularStickersConvenience(sessionId, limit = 20, categoryId) { const result = await this.getPopularStickers({ sessionId, limit, categoryId, }); if (!result.result?.stickers) { return []; } return result.result.stickers; } /** * Tìm kiếm sticker nhanh (chỉ trả về IDs) * Sử dụng API cải tiến với includeDetails = false * * @param sessionId - Session ID * @param keyword - Search keyword * @param limit - Số lượng sticker tối đa (default: 20) * @returns Promise với sticker IDs * * @example * ```typescript * const stickerIds = await searchService.quickSearchStickers( * "session-123", * "hello", * 20 * ); * * console.log('Found sticker IDs:', stickerIds); * ``` */ async quickSearchStickers(sessionId, keyword, limit = 20) { const result = await this.getStickers({ sessionId, keyword, limit, includeDetails: false, }); if (!result.result?.result) { return []; } return result.result.result; } /** * Tìm kiếm sticker với chi tiết và metadata đầy đủ * Trả về response đầy đủ bao gồm metadata như searchTime, total, etc. * * @param sessionId - Session ID * @param keyword - Search keyword * @param limit - Số lượng sticker tối đa (default: 10) * @returns Promise với full search response * * @example * ```typescript * const response = await searchService.fullSearchStickers( * "session-123", * "hello", * 10 * ); * * console.log(`Found ${response.total} stickers in ${response.searchTime}ms`); * console.log('Stickers:', response.stickers); * ``` */ async fullSearchStickers(sessionId, keyword, limit = 10) { const result = await this.searchStickersWithDetails({ sessionId, keyword, limit, }); return result.result || null; } } exports.SearchService = SearchService; //# sourceMappingURL=search.service.js.map