@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
JavaScript
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=