UNPKG

@visionfi/desktop-sdk

Version:

Desktop SDK for VisionFI Cloud Run services with Azure AD authentication

117 lines (116 loc) 4 kB
/** * Processing Client - handles processing operations for packages in Desktop SDK * Copyright (c) 2024-2025 VisionFI. All Rights Reserved. */ import { VisionFiError } from '@visionfi/core'; export class ProcessingClient { apiClient; constructor(apiClient) { this.apiClient = apiClient; } /** * Execute processing on a package */ async execute(packageId, options) { try { const response = await this.apiClient.post(`/operations/packages/${packageId}/processing/execute`, options); return response.data; } catch (error) { throw this.handleError(error, 'Failed to execute processing'); } } /** * Get processing history for a package */ async getHistory(packageId, options) { try { const response = await this.apiClient.get(`/operations/packages/${packageId}/processing`, { params: options }); return response.data; } catch (error) { throw this.handleError(error, 'Failed to get processing history'); } } /** * Get processing result */ async getResult(packageId, processingId) { try { const response = await this.apiClient.get(`/operations/packages/${packageId}/processing/${processingId}`); return response.data; } catch (error) { throw this.handleError(error, 'Failed to get processing result'); } } /** * Get processing view */ async getView(packageId, processingId, options) { try { const response = await this.apiClient.get(`/operations/packages/${packageId}/processing/${processingId}/view`, { params: options }); return response.data; } catch (error) { throw this.handleError(error, 'Failed to get processing view'); } } /** * Get processing with results (convenience method) */ async getWithResults(packageId) { try { const response = await this.apiClient.get(`/operations/packages/${packageId}/processing`, { params: { includeResults: true } }); return response.data; } catch (error) { throw this.handleError(error, 'Failed to get processing with results'); } } /** * Poll for processing completion with configurable intervals and attempts */ async pollForCompletion(packageId, processingId, pollInterval = 3000, maxAttempts = 20) { return new Promise((resolve, reject) => { let attemptCount = 0; const poll = async () => { attemptCount++; try { const result = await this.getResult(packageId, processingId); if (result.status === 'completed' || result.status === 'failed' || attemptCount >= maxAttempts) { resolve(result); return; } if (result.status === 'queued' || result.status === 'processing') { setTimeout(poll, pollInterval); return; } resolve(result); } catch (error) { reject(this.handleError(error, 'Error while polling for processing completion')); } }; poll(); }); } /** * Handle errors consistently */ handleError(error, defaultMessage) { if (error instanceof VisionFiError) { return error; } const message = error.response?.data?.message || error.message || defaultMessage; const statusCode = error.response?.status; const code = error.response?.data?.code || 'unknown_error'; return new VisionFiError(message, statusCode, code); } }