Advanced
Advanced Header Management
Dynamic Authorization Headers
import { IHttpClient } from '@aurelia/fetch-client';
import { resolve } from '@aurelia/kernel';
export class AuthenticatedApiService {
private http = resolve(IHttpClient);
private tokenStorage = new TokenStorage();
constructor() {
this.http.configure(config => config
.withDefaults({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
'Authorization': () => {
const token = this.tokenStorage.getAccessToken();
return token ? `Bearer ${token}` : '';
},
'X-Client-Version': () => this.getClientVersion(),
'X-Request-ID': () => this.generateRequestId()
}
})
);
}
private getClientVersion(): string {
return process.env.APP_VERSION || '1.0.0';
}
private generateRequestId(): string {
return `${Date.now()}-${Math.random().toString(36).substring(2)}`;
}
}
class TokenStorage {
getAccessToken(): string | null {
const tokenData = localStorage.getItem('auth_tokens');
if (!tokenData) return null;
const { accessToken, expiresAt } = JSON.parse(tokenData);
// Check if token is expired
if (Date.now() >= expiresAt) {
this.refreshToken();
return this.getAccessToken(); // Recursive call after refresh
}
return accessToken;
}
private refreshToken(): void {
// Token refresh logic here
// This is synchronous for simplicity, but could be async
}
}Conditional Headers
Built-in Cache Interceptor
Custom Cache Storage
Request Tracking and Lifecycle Management
Built-in Request Properties
Request Lifecycle Events
Available Events
Configuring Event Dispatcher
Building a Loading Indicator
Advanced Request Monitoring
Progress Tracking Component
Request Queue Visualization
Best Practices for Request Tracking
1. Use Events for UI Updates
2. Single Event Dispatcher
3. Cleanup Event Listeners
4. Combine with Interceptors
Summary
Advanced Authentication Patterns
Automatic Token Refresh
Request Batching and Coordination
Request Deduplication
Request Queuing
Performance Optimization
Request Timeout Management
Response Compression Handling
Testing and Debugging Support
Request/Response Logging
Last updated
Was this helpful?