UNPKG

@lineai/bluebeam-api

Version:

Your unofficial library for Bluebeam API for human and AI developers. Provides TypeScript support, entity classes, and developer-friendly features. Perfect for AI coders, construction professionals, and document management tasks. Includes comprehensive JS

60 lines 4.31 kB
import { createHttpClient } from './http-client'; /** * Interceptor that handles automatic token refresh on 401 errors * Implements the same interface as HttpClient for compatibility */ export class AuthInterceptor { config; auth; storage; autoRefresh; httpClient; constructor(config, auth, storage, autoRefresh) { this.config = config; this.auth = auth; this.storage = storage; this.autoRefresh = autoRefresh; this.httpClient = createHttpClient(config); } async get(endpoint) { return this.executeWithRetry(() => this.httpClient.get(endpoint)); } async post(endpoint, data, isFormData) { return this.executeWithRetry(() => this.httpClient.post(endpoint, data, isFormData)); } async put(endpoint, data) { return this.executeWithRetry(() => this.httpClient.put(endpoint, data)); } async delete(endpoint) { return this.executeWithRetry(() => this.httpClient.delete(endpoint)); } async executeWithRetry(requestFn) { try { return await requestFn(); } catch (error) { // Only retry on 401 if autoRefresh is enabled if (!this.autoRefresh || error.status !== 401) { throw error; } try { // Refresh token await this.auth.refreshAccessToken(); // Get fresh token from storage const tokens = await this.storage.getTokens(); // Create new HTTP client with fresh token this.httpClient = createHttpClient({ ...this.config, access_token: tokens?.access_token }); // Retry request once return await requestFn(); } catch (refreshError) { // Refresh failed, throw original error throw error; } } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0aC1pbnRlcmNlcHRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvYXV0aC1pbnRlcmNlcHRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRTNFOzs7R0FHRztBQUNILE1BQU0sT0FBTyxlQUFlO0lBSWhCO0lBQ0E7SUFDQTtJQUNBO0lBTkYsVUFBVSxDQUFhO0lBRS9CLFlBQ1UsTUFBb0IsRUFDcEIsSUFBaUIsRUFDakIsT0FBcUIsRUFDckIsV0FBb0I7UUFIcEIsV0FBTSxHQUFOLE1BQU0sQ0FBYztRQUNwQixTQUFJLEdBQUosSUFBSSxDQUFhO1FBQ2pCLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQVM7UUFFNUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsS0FBSyxDQUFDLEdBQUcsQ0FBSSxRQUFnQjtRQUMzQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBSSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUNSLFFBQWdCLEVBQ2hCLElBQWMsRUFDZCxVQUFvQjtRQUVwQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUksUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLENBQUMsQ0FDcEQsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsR0FBRyxDQUNQLFFBQWdCLEVBQ2hCLElBQWM7UUFFZCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsQ0FDaEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxDQUN2QyxDQUFDO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxNQUFNLENBQUksUUFBZ0I7UUFDOUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUksUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sS0FBSyxDQUFDLGdCQUFnQixDQUM1QixTQUEyQjtRQUUzQixJQUFJO1lBQ0YsT0FBTyxNQUFNLFNBQVMsRUFBRSxDQUFDO1NBQzFCO1FBQUMsT0FBTyxLQUFVLEVBQUU7WUFDbkIsOENBQThDO1lBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO2dCQUM3QyxNQUFNLEtBQUssQ0FBQzthQUNiO1lBRUQsSUFBSTtnQkFDRixnQkFBZ0I7Z0JBQ2hCLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUVyQywrQkFBK0I7Z0JBQy9CLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFFOUMsMENBQTBDO2dCQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLGdCQUFnQixDQUFDO29CQUNqQyxHQUFHLElBQUksQ0FBQyxNQUFNO29CQUNkLFlBQVksRUFBRSxNQUFNLEVBQUUsWUFBWTtpQkFDbkMsQ0FBQyxDQUFDO2dCQUVILHFCQUFxQjtnQkFDckIsT0FBTyxNQUFNLFNBQVMsRUFBRSxDQUFDO2FBQzFCO1lBQUMsT0FBTyxZQUFZLEVBQUU7Z0JBQ3JCLHVDQUF1QztnQkFDdkMsTUFBTSxLQUFLLENBQUM7YUFDYjtTQUNGO0lBQ0gsQ0FBQztDQUNGIn0=