@truewatchtech/react-native-mobile 0.4.2 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FTMobileReactNativeSDK.podspec +7 -5
- package/android/build.gradle +10 -3
- package/android/src/main/java/com/ft/sdk/reactnative/FTLogImpl.java +10 -2
- package/android/src/main/java/com/ft/sdk/reactnative/FTMobileImpl.java +45 -10
- package/android/src/main/java/com/ft/sdk/reactnative/FTRUMImpl.java +131 -6
- package/android/src/main/java/com/ft/sdk/reactnative/FTTraceImpl.java +10 -3
- package/android/src/main/java/com/ft/sdk/reactnative/JsLongTaskMonitor.java +281 -0
- package/android/src/main/java/com/ft/sdk/reactnative/ViewTiming.java +17 -0
- package/android/src/main/java/com/ft/sdk/reactnative/VisitorIdConfigMapper.java +50 -0
- package/android/src/main/java/com/ft/sdk/reactnative/utils/ReactNativeUtils.java +5 -12
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTMobileModule.java +14 -5
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTRUMModule.java +44 -1
- package/android/src/newarch/java/com/ft/sdk/reactnative/FTTraceModule.java +14 -0
- package/android/src/oldarch/java/com/ft/sdk/reactnative/FTMobileModule.java +7 -2
- package/android/src/oldarch/java/com/ft/sdk/reactnative/FTRUMModule.java +39 -1
- package/android/src/oldarch/java/com/ft/sdk/reactnative/FTTraceModule.java +12 -0
- package/android/src/rnpost70/java/com/ft/sdk/reactnative/ReactJsThreadExecutor.java +21 -0
- package/android/src/rnpre70/java/com/ft/sdk/reactnative/ReactJsThreadExecutor.java +37 -0
- package/android/src/test/java/com/ft/sdk/reactnative/FTMobileImplTest.java +53 -0
- package/android/src/test/java/com/ft/sdk/reactnative/FTRUMModuleTest.java +117 -0
- package/android/src/test/java/com/ft/sdk/reactnative/JsLongTaskMonitorTest.java +446 -0
- package/android/src/test/java/com/ft/sdk/reactnative/utils/ReactNativeUtilsTest.java +33 -0
- package/ios/FTJSLongTaskMonitor.h +51 -0
- package/ios/FTJSLongTaskMonitor.m +250 -0
- package/ios/FTMobileReactNative.mm +54 -18
- package/ios/FTReactNativeLog.mm +9 -5
- package/ios/FTReactNativeRUM.mm +196 -31
- package/ios/FTReactNativeResource.h +4 -0
- package/ios/FTReactNativeResource.m +64 -0
- package/ios/FTReactNativeTrace.mm +59 -14
- package/ios/FTReactNativeUtils.m +10 -15
- package/ios/FTReactNativeViewTiming.h +18 -0
- package/ios/FTReactNativeWebSocket.h +10 -0
- package/ios/FTReactNativeWebSocket.mm +201 -0
- package/ios/FTWebSocketMetadataStore.h +25 -0
- package/ios/FTWebSocketMetadataStore.m +622 -0
- package/ios/FTWebSocketResourceData.h +20 -0
- package/ios/FTWebSocketResourceData.m +106 -0
- package/lib/commonjs/ft_logger.js +3 -1
- package/lib/commonjs/ft_logger.js.map +1 -1
- package/lib/commonjs/ft_mobile_agent.js +47 -4
- package/lib/commonjs/ft_mobile_agent.js.map +1 -1
- package/lib/commonjs/ft_rum.js +65 -5
- package/lib/commonjs/ft_rum.js.map +1 -1
- package/lib/commonjs/ft_tracing.js +14 -4
- package/lib/commonjs/ft_tracing.js.map +1 -1
- package/lib/commonjs/index.js +21 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/rum/FTBabelInteractionTracking.js +72 -0
- package/lib/commonjs/rum/FTBabelInteractionTracking.js.map +1 -0
- package/lib/commonjs/rum/FTBabelUtils.js +87 -0
- package/lib/commonjs/rum/FTBabelUtils.js.map +1 -0
- package/lib/commonjs/rum/FTRumActionTracking.js +10 -39
- package/lib/commonjs/rum/FTRumActionTracking.js.map +1 -1
- package/lib/commonjs/rum/FTRumActionTrackingContext.js +50 -0
- package/lib/commonjs/rum/FTRumActionTrackingContext.js.map +1 -0
- package/lib/commonjs/rum/FTRumViewTracking.js +147 -0
- package/lib/commonjs/rum/FTRumViewTracking.js.map +1 -0
- package/lib/commonjs/rum/FTRumWebSocketNative.js +73 -0
- package/lib/commonjs/rum/FTRumWebSocketNative.js.map +1 -0
- package/lib/commonjs/rum/FTRumWebSocketTiming.js +73 -0
- package/lib/commonjs/rum/FTRumWebSocketTiming.js.map +1 -0
- package/lib/commonjs/rum/FTRumWebSocketTracking.js +506 -0
- package/lib/commonjs/rum/FTRumWebSocketTracking.js.map +1 -0
- package/lib/commonjs/rum/longTasksUtils.js +25 -0
- package/lib/commonjs/rum/longTasksUtils.js.map +1 -0
- package/lib/commonjs/specs/NativeFTMobileReactNative.js.map +1 -1
- package/lib/commonjs/specs/NativeFTReactNativeRUM.js.map +1 -1
- package/lib/commonjs/specs/NativeFTReactNativeTrace.js.map +1 -1
- package/lib/commonjs/specs/NativeFTReactNativeWebSocket.js +11 -0
- package/lib/commonjs/specs/NativeFTReactNativeWebSocket.js.map +1 -0
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/commonjs/visitorIdConfig.js +37 -0
- package/lib/commonjs/visitorIdConfig.js.map +1 -0
- package/lib/module/ft_logger.js +3 -1
- package/lib/module/ft_logger.js.map +1 -1
- package/lib/module/ft_mobile_agent.js +47 -4
- package/lib/module/ft_mobile_agent.js.map +1 -1
- package/lib/module/ft_rum.js +65 -5
- package/lib/module/ft_rum.js.map +1 -1
- package/lib/module/ft_tracing.js +14 -2
- package/lib/module/ft_tracing.js.map +1 -1
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/rum/FTBabelInteractionTracking.js +66 -0
- package/lib/module/rum/FTBabelInteractionTracking.js.map +1 -0
- package/lib/module/rum/FTBabelUtils.js +80 -0
- package/lib/module/rum/FTBabelUtils.js.map +1 -0
- package/lib/module/rum/FTRumActionTracking.js +10 -39
- package/lib/module/rum/FTRumActionTracking.js.map +1 -1
- package/lib/module/rum/FTRumActionTrackingContext.js +43 -0
- package/lib/module/rum/FTRumActionTrackingContext.js.map +1 -0
- package/lib/module/rum/FTRumViewTracking.js +140 -0
- package/lib/module/rum/FTRumViewTracking.js.map +1 -0
- package/lib/module/rum/FTRumWebSocketNative.js +62 -0
- package/lib/module/rum/FTRumWebSocketNative.js.map +1 -0
- package/lib/module/rum/FTRumWebSocketTiming.js +67 -0
- package/lib/module/rum/FTRumWebSocketTiming.js.map +1 -0
- package/lib/module/rum/FTRumWebSocketTracking.js +499 -0
- package/lib/module/rum/FTRumWebSocketTracking.js.map +1 -0
- package/lib/module/rum/longTasksUtils.js +18 -0
- package/lib/module/rum/longTasksUtils.js.map +1 -0
- package/lib/module/specs/NativeFTMobileReactNative.js.map +1 -1
- package/lib/module/specs/NativeFTReactNativeRUM.js.map +1 -1
- package/lib/module/specs/NativeFTReactNativeTrace.js.map +1 -1
- package/lib/module/specs/NativeFTReactNativeWebSocket.js +8 -0
- package/lib/module/specs/NativeFTReactNativeWebSocket.js.map +1 -0
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/module/visitorIdConfig.js +31 -0
- package/lib/module/visitorIdConfig.js.map +1 -0
- package/lib/typescript/ft_logger.d.ts +11 -1
- package/lib/typescript/ft_mobile_agent.d.ts +28 -0
- package/lib/typescript/ft_rum.d.ts +42 -5
- package/lib/typescript/ft_tracing.d.ts +9 -1
- package/lib/typescript/index.d.ts +5 -1
- package/lib/typescript/rum/FTBabelInteractionTracking.d.ts +30 -0
- package/lib/typescript/rum/FTBabelUtils.d.ts +1 -0
- package/lib/typescript/rum/FTRumActionTracking.d.ts +0 -2
- package/lib/typescript/rum/FTRumActionTrackingContext.d.ts +11 -0
- package/lib/typescript/rum/FTRumViewTracking.d.ts +32 -0
- package/lib/typescript/rum/FTRumWebSocketNative.d.ts +22 -0
- package/lib/typescript/rum/FTRumWebSocketTiming.d.ts +7 -0
- package/lib/typescript/rum/FTRumWebSocketTracking.d.ts +54 -0
- package/lib/typescript/rum/longTasksUtils.d.ts +8 -0
- package/lib/typescript/specs/NativeFTMobileReactNative.d.ts +15 -0
- package/lib/typescript/specs/NativeFTReactNativeRUM.d.ts +11 -1
- package/lib/typescript/specs/NativeFTReactNativeTrace.d.ts +12 -0
- package/lib/typescript/specs/NativeFTReactNativeWebSocket.d.ts +13 -0
- package/lib/typescript/version.d.ts +1 -1
- package/lib/typescript/visitorIdConfig.d.ts +11 -0
- package/package.json +6 -4
- package/src/ft_logger.tsx +11 -1
- package/src/ft_mobile_agent.tsx +79 -7
- package/src/ft_rum.tsx +111 -7
- package/src/ft_tracing.tsx +24 -2
- package/src/index.tsx +8 -0
- package/src/rum/FTBabelInteractionTracking.ts +124 -0
- package/src/rum/FTBabelUtils.tsx +99 -0
- package/src/rum/FTRumActionTracking.tsx +14 -43
- package/src/rum/FTRumActionTrackingContext.ts +68 -0
- package/src/rum/FTRumViewTracking.ts +179 -0
- package/src/rum/FTRumWebSocketNative.ts +107 -0
- package/src/rum/FTRumWebSocketTiming.ts +82 -0
- package/src/rum/FTRumWebSocketTracking.ts +722 -0
- package/src/rum/longTasksUtils.ts +17 -0
- package/src/specs/NativeFTMobileReactNative.ts +18 -0
- package/src/specs/NativeFTReactNativeRUM.ts +19 -1
- package/src/specs/NativeFTReactNativeTrace.ts +12 -0
- package/src/specs/NativeFTReactNativeWebSocket.ts +33 -0
- package/src/version.ts +1 -1
- package/src/visitorIdConfig.ts +123 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#import "FTReactNativeWebSocket.h"
|
|
2
|
+
#import "FTWebSocketMetadataStore.h"
|
|
3
|
+
#import "FTWebSocketResourceData.h"
|
|
4
|
+
#import "FTReactNativeResource.h"
|
|
5
|
+
#import <TrueWatchSDK/FTExternalDataManager.h>
|
|
6
|
+
#import <TrueWatchSDK/FTURLSessionInterceptor.h>
|
|
7
|
+
#import <TrueWatchSDK/FTURLSessionInterceptorProtocol.h>
|
|
8
|
+
#import <React/RCTBridge.h>
|
|
9
|
+
|
|
10
|
+
@interface FTReactNativeWebSocket ()
|
|
11
|
+
// Retired capture sessions can finish after configuration disables/re-enables
|
|
12
|
+
// collection. Each store keeps its own association namespace; all socket refs
|
|
13
|
+
// still share the process-wide 256 cap and native expiry timer.
|
|
14
|
+
@property (nonatomic, strong) NSMutableDictionary<NSString *, FTWebSocketMetadataStore *> *sessions;
|
|
15
|
+
@property (nonatomic, strong) NSMutableArray<NSString *> *sessionOrder;
|
|
16
|
+
@property (nonatomic, copy) NSString *currentSession;
|
|
17
|
+
// Capture the current native instance weakly. Cancellation must not call
|
|
18
|
+
// +shared after shutdown and accidentally recreate an interceptor singleton.
|
|
19
|
+
@property (nonatomic, weak) id<FTURLSessionInterceptorProtocol> resourceInterceptor;
|
|
20
|
+
@end
|
|
21
|
+
|
|
22
|
+
@implementation FTReactNativeWebSocket
|
|
23
|
+
@synthesize bridge = _bridge;
|
|
24
|
+
RCT_EXPORT_MODULE()
|
|
25
|
+
|
|
26
|
+
+ (BOOL)requiresMainQueueSetup { return NO; }
|
|
27
|
+
|
|
28
|
+
- (instancetype)init {
|
|
29
|
+
if ((self = [super init])) {
|
|
30
|
+
_sessions = [NSMutableDictionary new];
|
|
31
|
+
_sessionOrder = [NSMutableArray new];
|
|
32
|
+
}
|
|
33
|
+
return self;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
- (dispatch_queue_t)methodQueue { return dispatch_get_main_queue(); }
|
|
37
|
+
|
|
38
|
+
RCT_REMAP_METHOD(startCapture,
|
|
39
|
+
startCapture:(NSString *)session
|
|
40
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
41
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
42
|
+
@synchronized (self) {
|
|
43
|
+
@try {
|
|
44
|
+
if (self.sessions[session]) {
|
|
45
|
+
// A duplicate setup cannot reactivate a retired session.
|
|
46
|
+
resolve(nil);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
id owner = nil;
|
|
50
|
+
@try {
|
|
51
|
+
Class moduleClass = NSClassFromString(@"RCTWebSocketModule");
|
|
52
|
+
owner = moduleClass ? [self.bridge moduleForClass:moduleClass] : nil;
|
|
53
|
+
} @catch (__unused NSException *exception) {
|
|
54
|
+
// RN module lookup only affects optional socket enrichment.
|
|
55
|
+
}
|
|
56
|
+
[self.sessions[self.currentSession ?: @""] stopForSession:self.currentSession];
|
|
57
|
+
FTWebSocketMetadataStore *store = [FTWebSocketMetadataStore new];
|
|
58
|
+
if ([store startForOwner:owner session:session]) {
|
|
59
|
+
// Bound bookkeeping for repeated configuration as well as socket refs.
|
|
60
|
+
if (self.sessionOrder.count >= 256) {
|
|
61
|
+
NSString *oldest = self.sessionOrder.firstObject;
|
|
62
|
+
[self.sessions[oldest] clear];
|
|
63
|
+
[self.sessions removeObjectForKey:oldest];
|
|
64
|
+
[self.sessionOrder removeObjectAtIndex:0];
|
|
65
|
+
}
|
|
66
|
+
self.sessions[session] = store;
|
|
67
|
+
[self.sessionOrder addObject:session];
|
|
68
|
+
self.currentSession = session;
|
|
69
|
+
}
|
|
70
|
+
resolve(nil);
|
|
71
|
+
} @catch (__unused NSException *exception) { reject(@"E_WS_CAPTURE", @"Unable to create WebSocket capture session", nil); }
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
RCT_REMAP_METHOD(stopCapture,
|
|
76
|
+
stopCapture:(NSString *)session
|
|
77
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
78
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
79
|
+
@synchronized (self) {
|
|
80
|
+
[self.sessions[session] stopForSession:session];
|
|
81
|
+
resolve(nil);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
RCT_REMAP_METHOD(clear,
|
|
86
|
+
clear:(RCTPromiseResolveBlock)resolve
|
|
87
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
88
|
+
@synchronized (self) {
|
|
89
|
+
[self clearSessions];
|
|
90
|
+
resolve(nil);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
RCT_REMAP_METHOD(startResource,
|
|
95
|
+
startResource:(NSString *)key
|
|
96
|
+
socketID:(double)socketID
|
|
97
|
+
url:(NSString *)url
|
|
98
|
+
session:(NSString *)session
|
|
99
|
+
sequence:(double)sequence
|
|
100
|
+
property:(NSDictionary *)property
|
|
101
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
102
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
103
|
+
@synchronized (self) {
|
|
104
|
+
@try {
|
|
105
|
+
FTWebSocketMetadataStore *store = self.sessions[session];
|
|
106
|
+
[store startResource:key socketID:@(socketID) URL:url session:session sequence:sequence report:^{
|
|
107
|
+
// The store invokes this block under its SDK lifecycle lock. Resolve
|
|
108
|
+
// the singleton here, before shutdown can clear the native instance.
|
|
109
|
+
id<FTURLSessionInterceptorProtocol> interceptor = (id)[FTURLSessionInterceptor shared];
|
|
110
|
+
self.resourceInterceptor = interceptor;
|
|
111
|
+
FTResourceUrlHandler blocked = nil;
|
|
112
|
+
FTIntakeUrl allowed = nil;
|
|
113
|
+
if ([interceptor respondsToSelector:@selector(resourceUrlHandler)]) blocked = interceptor.resourceUrlHandler;
|
|
114
|
+
if ([interceptor respondsToSelector:@selector(intakeUrlHandler)]) allowed = interceptor.intakeUrlHandler;
|
|
115
|
+
if (!FTWebSocketShouldCollectResource([NSURL URLWithString:url], blocked, allowed)) {
|
|
116
|
+
// Cancel also leaves a terminal tombstone, so queued stop/add cannot
|
|
117
|
+
// report a filtered Resource or retain its socket until expiry.
|
|
118
|
+
[store cancelResource:key session:session];
|
|
119
|
+
FTWebSocketDiscardTraceResource(interceptor, key);
|
|
120
|
+
return;
|
|
121
|
+
}
|
|
122
|
+
[[FTExternalDataManager sharedManager] startResourceWithKey:key property:property];
|
|
123
|
+
}];
|
|
124
|
+
resolve(nil);
|
|
125
|
+
} @catch (__unused NSException *exception) {
|
|
126
|
+
if ([self.sessions[session] cancelResource:key session:session]) {
|
|
127
|
+
FTWebSocketDiscardTraceResource(self.resourceInterceptor, key);
|
|
128
|
+
}
|
|
129
|
+
reject(@"E_WS_RESOURCE", @"Unable to start WebSocket resource", nil);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
RCT_REMAP_METHOD(stopResource,
|
|
135
|
+
stopResource:(NSString *)key
|
|
136
|
+
event:(NSString *)event
|
|
137
|
+
session:(NSString *)session
|
|
138
|
+
property:(NSDictionary *)property
|
|
139
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
140
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
141
|
+
@synchronized (self) {
|
|
142
|
+
@try {
|
|
143
|
+
[self.sessions[session] stopResource:key event:event session:session report:^{
|
|
144
|
+
[[FTExternalDataManager sharedManager] stopResourceWithKey:key property:property];
|
|
145
|
+
}];
|
|
146
|
+
resolve(nil);
|
|
147
|
+
} @catch (__unused NSException *exception) { reject(@"E_WS_RESOURCE", @"Unable to stop WebSocket resource", nil); }
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
RCT_REMAP_METHOD(addResource,
|
|
152
|
+
addResource:(NSString *)key
|
|
153
|
+
content:(NSDictionary *)content
|
|
154
|
+
metrics:(NSDictionary *)metrics
|
|
155
|
+
session:(NSString *)session
|
|
156
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
157
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
158
|
+
@synchronized (self) {
|
|
159
|
+
@try {
|
|
160
|
+
[self.sessions[session] addResource:key event:content[@"webSocketEvent"] session:session report:^(NSDictionary *metadata, NSString *event) {
|
|
161
|
+
NSDictionary *data = FTWebSocketResourceData(content, metrics, metadata, event);
|
|
162
|
+
FTAddReactNativeResource(key, data[@"content"], data[@"metrics"]);
|
|
163
|
+
}];
|
|
164
|
+
resolve(nil);
|
|
165
|
+
} @catch (__unused NSException *exception) { reject(@"E_WS_RESOURCE", @"Unable to add WebSocket resource", nil); }
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
RCT_REMAP_METHOD(releaseResource,
|
|
170
|
+
releaseResource:(NSString *)key
|
|
171
|
+
session:(NSString *)session
|
|
172
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
173
|
+
reject:(RCTPromiseRejectBlock)reject) {
|
|
174
|
+
@synchronized (self) {
|
|
175
|
+
if ([self.sessions[session] cancelResource:key session:session]) {
|
|
176
|
+
FTWebSocketDiscardTraceResource(self.resourceInterceptor, key);
|
|
177
|
+
}
|
|
178
|
+
resolve(nil);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
- (void)invalidate { [self clearSessions]; }
|
|
183
|
+
- (void)clearSessions {
|
|
184
|
+
@synchronized (self) {
|
|
185
|
+
for (FTWebSocketMetadataStore *store in self.sessions.allValues) [store clear];
|
|
186
|
+
[self.sessions removeAllObjects];
|
|
187
|
+
[self.sessionOrder removeAllObjects];
|
|
188
|
+
self.currentSession = nil;
|
|
189
|
+
self.resourceInterceptor = nil;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
- (void)dealloc {
|
|
193
|
+
for (FTWebSocketMetadataStore *store in _sessions.allValues) [store clear];
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
#ifdef RCT_NEW_ARCH_ENABLED
|
|
197
|
+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const facebook::react::ObjCTurboModule::InitParams &)params {
|
|
198
|
+
return std::make_shared<facebook::react::NativeFTReactNativeWebSocketSpecJSI>(params);
|
|
199
|
+
}
|
|
200
|
+
#endif
|
|
201
|
+
@end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
|
|
3
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
4
|
+
|
|
5
|
+
/// Bounded handshake-only ownership. Hooks initialization and HTTP response
|
|
6
|
+
/// completion; JS alone controls Resource lifecycle. No delegate events hooked.
|
|
7
|
+
@interface FTWebSocketMetadataStore : NSObject
|
|
8
|
+
// An unavailable RN owner disables enrichment only; Resource reporting remains valid.
|
|
9
|
+
- (BOOL)startForOwner:(nullable id)owner session:(NSString *)session;
|
|
10
|
+
- (void)stopForSession:(NSString *)session;
|
|
11
|
+
- (void)clear;
|
|
12
|
+
- (void)bindResource:(NSString *)key socketID:(NSNumber *)socketID URL:(NSString *)URL session:(NSString *)session sequence:(double)sequence;
|
|
13
|
+
- (void)releaseResource:(NSString *)key session:(NSString *)session;
|
|
14
|
+
- (nullable NSDictionary *)takeResource:(NSString *)key session:(NSString *)session;
|
|
15
|
+
// All callbacks run synchronously under the lifecycle lock on the module's
|
|
16
|
+
// main queue. No callback, bridge promise, or business socket is stored here.
|
|
17
|
+
- (void)startResource:(NSString *)key socketID:(NSNumber *)socketID URL:(NSString *)URL session:(NSString *)session sequence:(double)sequence report:(void (^)(void))report;
|
|
18
|
+
- (void)stopResource:(NSString *)key event:(NSString *)event session:(NSString *)session report:(void (^)(void))report;
|
|
19
|
+
- (void)addResource:(NSString *)key event:(NSString *)event session:(NSString *)session report:(void (^)(NSDictionary * _Nullable metadata, NSString *event))report;
|
|
20
|
+
- (BOOL)cancelResource:(NSString *)key session:(NSString *)session;
|
|
21
|
+
+ (void)sdkDidStart;
|
|
22
|
+
+ (void)shutDown;
|
|
23
|
+
@end
|
|
24
|
+
|
|
25
|
+
NS_ASSUME_NONNULL_END
|