Skip to content

Commit 59b8886

Browse files
cipolleschimeta-codesync[bot]
authored andcommitted
Add request interceptor API to RCTMultipartDataTask (#55916)
Summary: Pull Request resolved: #55916 ## Summary: Replace the hardcoded `RCTDevSupportHttpHeaders` integration in `RCTMultipartDataTask` with a generic request interceptor API. This allows consumers to register a block via `RCTSetCustomMultipartDataTaskRequestInterceptor` that can inspect and modify multipart data task requests before they are sent, without coupling `RCTMultipartDataTask` to any specific header injection mechanism. ## Changelog: [IOS][ADDED] - Add `RCTSetCustomMultipartDataTaskRequestInterceptor` API to allow custom modification of multipart data task requests before they are sent Reviewed By: cortinico Differential Revision: D95219954 fbshipit-source-id: 7752b2ee44ee9d4db574a9866661e1a717b75bed
1 parent 77231f4 commit 59b8886

2 files changed

Lines changed: 24 additions & 3 deletions

File tree

packages/react-native/React/Base/RCTMultipartDataTask.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
#import <Foundation/Foundation.h>
99

10+
#import <React/RCTDefines.h>
1011
#import <React/RCTMultipartStreamReader.h>
1112

1213
typedef void (^RCTMultipartDataTaskCallback)(
@@ -16,6 +17,14 @@ typedef void (^RCTMultipartDataTaskCallback)(
1617
NSError *error,
1718
BOOL done);
1819

20+
typedef NSURLRequest *_Nullable (^RCTMultipartDataTaskRequestInterceptor)(NSURLRequest *request);
21+
/**
22+
* The block provided via this function can inspect/modify multipart data task
23+
* requests before they are sent. Return a modified request to override, or nil
24+
* to use the original request unchanged.
25+
*/
26+
RCT_EXTERN void RCTSetCustomMultipartDataTaskRequestInterceptor(RCTMultipartDataTaskRequestInterceptor /*interceptor*/);
27+
1928
@interface RCTMultipartDataTask : NSObject
2029

2130
- (instancetype)initWithURL:(NSURL *)url

packages/react-native/React/Base/RCTMultipartDataTask.m

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,12 @@
77

88
#import "RCTMultipartDataTask.h"
99

10-
#import "RCTDevSupportHttpHeaders.h"
10+
static RCTMultipartDataTaskRequestInterceptor multipartRequestInterceptor;
11+
12+
void RCTSetCustomMultipartDataTaskRequestInterceptor(RCTMultipartDataTaskRequestInterceptor interceptor)
13+
{
14+
multipartRequestInterceptor = interceptor;
15+
}
1116

1217
@interface RCTMultipartDataTask () <NSURLSessionDataDelegate, NSURLSessionDataDelegate>
1318

@@ -42,8 +47,15 @@ - (void)startTask
4247
delegateQueue:nil];
4348
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:_url];
4449
[request addValue:@"multipart/mixed" forHTTPHeaderField:@"Accept"];
45-
[[RCTDevSupportHttpHeaders sharedInstance] applyHeadersToRequest:request];
46-
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
50+
NSURLRequest *finalRequest = request;
51+
if (multipartRequestInterceptor != nil) {
52+
NSURLRequest *intercepted = multipartRequestInterceptor(request);
53+
if (intercepted != nil) {
54+
finalRequest = intercepted;
55+
}
56+
}
57+
NSLog(@"[RCTMultipartDataTask] %@ %@", finalRequest.HTTPMethod ?: @"GET", finalRequest.URL.absoluteString);
58+
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:finalRequest];
4759
[dataTask resume];
4860
[session finishTasksAndInvalidate];
4961
}

0 commit comments

Comments
 (0)