Skip to content

Commit fae2a39

Browse files
Add documentation for interceptor and event monitor wrappers
Agent-Logs-Url: https://github.com/nativescript-community/https/sessions/d2d9c53a-efe5-4696-a2aa-b293851b2169 Co-authored-by: farfromrefug <655344+farfromrefug@users.noreply.github.com>
1 parent 84f7c21 commit fae2a39

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

packages/https/platforms/ios/src/README.md

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,35 @@ SSL/TLS security policy wrapper that implements Alamofire's `ServerTrustEvaluati
4747
- 1 = PublicKey (pin to public keys)
4848
- 2 = Certificate (pin to certificates)
4949

50+
### EventMonitorWrapper.swift
51+
Wrapper for Alamofire's EventMonitor protocol to enable network event tracking from TypeScript.
52+
53+
**Key Features:**
54+
- Request lifecycle tracking (resume, suspend, cancel, finish)
55+
- Data reception monitoring
56+
- Request completion tracking with response/error
57+
- @objc-compatible callback-based API
58+
59+
**Available Callbacks:**
60+
- `setRequestDidResume` - Called when request starts
61+
- `setRequestDidSuspend` - Called when request is paused
62+
- `setRequestDidCancel` - Called when request is cancelled
63+
- `setRequestDidFinish` - Called when request finishes
64+
- `setRequestDidComplete` - Called with response/error
65+
- `setDataTaskDidReceiveData` - Called as data is received
66+
67+
### RequestInterceptorWrapper.swift
68+
Wrapper for Alamofire's RequestInterceptor protocol to enable request modification and retry logic from TypeScript.
69+
70+
**Key Features:**
71+
- Request adaptation (modify requests before sending)
72+
- Automatic retry logic with custom conditions
73+
- @objc-compatible callback-based API
74+
75+
**Available Callbacks:**
76+
- `setAdapt` - Modify URLRequest before sending
77+
- `setRetry` - Return true to retry failed requests
78+
5079
### MultipartFormDataWrapper.swift
5180
Wrapper for building multipart form data requests.
5281

@@ -95,6 +124,45 @@ task.resume();
95124
// User can then call toFile(), toArrayBuffer(), etc. on the response
96125
```
97126

127+
### Using Interceptors and Event Monitors
128+
129+
```typescript
130+
// Create an event monitor to track network events
131+
const eventMonitor = EventMonitorWrapper.alloc().init();
132+
eventMonitor.setRequestDidResume((request) => {
133+
console.log('Request started:', request.URL.absoluteString);
134+
});
135+
eventMonitor.setDataTaskDidReceiveData((request, data) => {
136+
console.log('Received data:', data.length, 'bytes');
137+
});
138+
eventMonitor.setRequestDidComplete((request, response, error) => {
139+
if (error) {
140+
console.log('Request failed:', error.localizedDescription);
141+
} else {
142+
console.log('Request completed:', response.statusCode);
143+
}
144+
});
145+
manager.addEventMonitor(eventMonitor);
146+
147+
// Create a request interceptor to modify requests and retry logic
148+
const interceptor = RequestInterceptorWrapper.alloc().init();
149+
interceptor.setAdapt((request) => {
150+
// Add custom headers to all requests
151+
const mutableRequest = request.mutableCopy();
152+
mutableRequest.setValueForHTTPHeaderField('CustomToken', 'Authorization');
153+
return mutableRequest;
154+
});
155+
interceptor.setRetry((request, error, retryCount) => {
156+
// Retry up to 3 times on network errors
157+
if (retryCount < 3) {
158+
console.log(`Retrying request (attempt ${retryCount + 1})...`);
159+
return true;
160+
}
161+
return false;
162+
});
163+
manager.addInterceptor(interceptor);
164+
```
165+
98166
## Design Decisions
99167

100168
### Why Wrappers?

0 commit comments

Comments
 (0)