@shamilovtim/react-native-nitro-sse 2.3.0
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/LICENSE +21 -0
- package/NitroSse.podspec +37 -0
- package/README.md +144 -0
- package/android/CMakeLists.txt +24 -0
- package/android/build.gradle +124 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/cpp/cpp-adapter.cpp +10 -0
- package/android/src/main/java/com/margelo/nitro/nitrosse/NetworkInspector.kt +94 -0
- package/android/src/main/java/com/margelo/nitro/nitrosse/NitroSse.kt +889 -0
- package/android/src/main/java/com/margelo/nitro/nitrosse/NitroSsePackage.kt +22 -0
- package/ios/NitroSse.swift +760 -0
- package/ios/NitroSseNetworkInspector.h +24 -0
- package/ios/NitroSseNetworkInspector.mm +68 -0
- package/lib/module/NitroSse.nitro.js +4 -0
- package/lib/module/NitroSse.nitro.js.map +1 -0
- package/lib/module/NitroSseClient.js +244 -0
- package/lib/module/NitroSseClient.js.map +1 -0
- package/lib/module/SseInterface.js +4 -0
- package/lib/module/SseInterface.js.map +1 -0
- package/lib/module/index.js +26 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/typescript/package.json +1 -0
- package/lib/typescript/src/NitroSse.nitro.d.ts +48 -0
- package/lib/typescript/src/NitroSse.nitro.d.ts.map +1 -0
- package/lib/typescript/src/NitroSseClient.d.ts +26 -0
- package/lib/typescript/src/NitroSseClient.d.ts.map +1 -0
- package/lib/typescript/src/SseInterface.d.ts +237 -0
- package/lib/typescript/src/SseInterface.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +11 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/nitro.json +23 -0
- package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____.hpp +138 -0
- package/nitrogen/generated/android/c++/JFunc_void_std__vector_SseEvent_.hpp +102 -0
- package/nitrogen/generated/android/c++/JHttpMethod.hpp +58 -0
- package/nitrogen/generated/android/c++/JHybridNitroSseSpec.cpp +134 -0
- package/nitrogen/generated/android/c++/JHybridNitroSseSpec.hpp +71 -0
- package/nitrogen/generated/android/c++/JSseConfig.hpp +162 -0
- package/nitrogen/generated/android/c++/JSseEvent.hpp +90 -0
- package/nitrogen/generated/android/c++/JSseEventType.hpp +67 -0
- package/nitrogen/generated/android/c++/JSseMockConfig.hpp +101 -0
- package/nitrogen/generated/android/c++/JSseMockEvent.hpp +94 -0
- package/nitrogen/generated/android/c++/JSseMockMode.hpp +58 -0
- package/nitrogen/generated/android/c++/JSseStats.hpp +70 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/Func_void_std__vector_SseEvent_.kt +80 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/HttpMethod.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/HybridNitroSseSpec.kt +91 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseConfig.kt +135 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseEvent.kt +86 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseEventType.kt +26 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseMockConfig.kt +71 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseMockEvent.kt +91 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseMockMode.kt +23 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseStats.kt +66 -0
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/nitrosseOnLoad.kt +35 -0
- package/nitrogen/generated/android/nitrosse+autolinking.cmake +81 -0
- package/nitrogen/generated/android/nitrosse+autolinking.gradle +27 -0
- package/nitrogen/generated/android/nitrosseOnLoad.cpp +58 -0
- package/nitrogen/generated/android/nitrosseOnLoad.hpp +34 -0
- package/nitrogen/generated/ios/NitroSse+autolinking.rb +62 -0
- package/nitrogen/generated/ios/NitroSse-Swift-Cxx-Bridge.cpp +74 -0
- package/nitrogen/generated/ios/NitroSse-Swift-Cxx-Bridge.hpp +415 -0
- package/nitrogen/generated/ios/NitroSse-Swift-Cxx-Umbrella.hpp +74 -0
- package/nitrogen/generated/ios/NitroSseAutolinking.mm +33 -0
- package/nitrogen/generated/ios/NitroSseAutolinking.swift +26 -0
- package/nitrogen/generated/ios/c++/HybridNitroSseSpecSwift.cpp +11 -0
- package/nitrogen/generated/ios/c++/HybridNitroSseSpecSwift.hpp +161 -0
- package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____.swift +67 -0
- package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
- package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__unordered_map_std__string__std__string___.swift +66 -0
- package/nitrogen/generated/ios/swift/Func_void_std__unordered_map_std__string__std__string_.swift +54 -0
- package/nitrogen/generated/ios/swift/Func_void_std__vector_SseEvent_.swift +46 -0
- package/nitrogen/generated/ios/swift/HttpMethod.swift +40 -0
- package/nitrogen/generated/ios/swift/HybridNitroSseSpec.swift +63 -0
- package/nitrogen/generated/ios/swift/HybridNitroSseSpec_cxx.swift +246 -0
- package/nitrogen/generated/ios/swift/SseConfig.swift +346 -0
- package/nitrogen/generated/ios/swift/SseEvent.swift +155 -0
- package/nitrogen/generated/ios/swift/SseEventType.swift +52 -0
- package/nitrogen/generated/ios/swift/SseMockConfig.swift +94 -0
- package/nitrogen/generated/ios/swift/SseMockEvent.swift +179 -0
- package/nitrogen/generated/ios/swift/SseMockMode.swift +40 -0
- package/nitrogen/generated/ios/swift/SseStats.swift +70 -0
- package/nitrogen/generated/shared/c++/HttpMethod.hpp +76 -0
- package/nitrogen/generated/shared/c++/HybridNitroSseSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridNitroSseSpec.hpp +81 -0
- package/nitrogen/generated/shared/c++/SseConfig.hpp +156 -0
- package/nitrogen/generated/shared/c++/SseEvent.hpp +115 -0
- package/nitrogen/generated/shared/c++/SseEventType.hpp +88 -0
- package/nitrogen/generated/shared/c++/SseMockConfig.hpp +105 -0
- package/nitrogen/generated/shared/c++/SseMockEvent.hpp +119 -0
- package/nitrogen/generated/shared/c++/SseMockMode.hpp +76 -0
- package/nitrogen/generated/shared/c++/SseStats.hpp +96 -0
- package/package.json +186 -0
- package/src/NitroSse.nitro.ts +53 -0
- package/src/NitroSseClient.ts +297 -0
- package/src/SseInterface.ts +248 -0
- package/src/index.ts +31 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
|
|
3
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
4
|
+
|
|
5
|
+
@interface NitroSseNetworkInspector : NSObject
|
|
6
|
+
|
|
7
|
+
+ (nullable NSString *)reportRequestStart:(NSURLRequest *)request
|
|
8
|
+
encodedDataLength:(NSInteger)encodedDataLength;
|
|
9
|
+
|
|
10
|
+
+ (void)reportResponseStart:(nullable NSString *)requestId
|
|
11
|
+
url:(nullable NSString *)url
|
|
12
|
+
response:(nullable NSURLResponse *)response
|
|
13
|
+
statusCode:(NSInteger)statusCode
|
|
14
|
+
headers:(NSDictionary<NSString *, NSString *> *)headers;
|
|
15
|
+
|
|
16
|
+
+ (void)reportResponseEnd:(nullable NSString *)requestId
|
|
17
|
+
encodedDataLength:(NSInteger)encodedDataLength;
|
|
18
|
+
|
|
19
|
+
+ (void)reportRequestFailed:(nullable NSString *)requestId
|
|
20
|
+
cancelled:(BOOL)cancelled;
|
|
21
|
+
|
|
22
|
+
@end
|
|
23
|
+
|
|
24
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
#import "NitroSseNetworkInspector.h"
|
|
2
|
+
|
|
3
|
+
#if __has_include(<React/RCTInspectorNetworkReporter.h>)
|
|
4
|
+
#import <React/RCTInspectorNetworkReporter.h>
|
|
5
|
+
#define HAS_NETWORK_REPORTER 1
|
|
6
|
+
#endif
|
|
7
|
+
|
|
8
|
+
@implementation NitroSseNetworkInspector
|
|
9
|
+
|
|
10
|
+
+ (nullable NSString *)reportRequestStart:(NSURLRequest *)request
|
|
11
|
+
encodedDataLength:(NSInteger)encodedDataLength {
|
|
12
|
+
#ifdef HAS_NETWORK_REPORTER
|
|
13
|
+
NSString *requestId = [[NSUUID UUID] UUIDString];
|
|
14
|
+
[RCTInspectorNetworkReporter reportRequestStart:(id)requestId request:request encodedDataLength:(int)encodedDataLength];
|
|
15
|
+
[RCTInspectorNetworkReporter reportConnectionTiming:(id)requestId request:request];
|
|
16
|
+
return requestId;
|
|
17
|
+
#else
|
|
18
|
+
return nil;
|
|
19
|
+
#endif
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
+ (void)reportResponseStart:(nullable NSString *)requestId
|
|
23
|
+
url:(nullable NSString *)url
|
|
24
|
+
response:(nullable NSURLResponse *)response
|
|
25
|
+
statusCode:(NSInteger)statusCode
|
|
26
|
+
headers:(NSDictionary<NSString *, NSString *> *)headers {
|
|
27
|
+
#ifdef HAS_NETWORK_REPORTER
|
|
28
|
+
if (requestId) {
|
|
29
|
+
NSURLResponse *finalResponse = response;
|
|
30
|
+
if (finalResponse == nil) {
|
|
31
|
+
// Reconstruct a dummy response using standard SSE headers if none provided
|
|
32
|
+
NSMutableDictionary *mergedHeaders = [headers mutableCopy] ?: [NSMutableDictionary new];
|
|
33
|
+
if (!mergedHeaders[@"Content-Type"]) mergedHeaders[@"Content-Type"] = @"text/event-stream";
|
|
34
|
+
if (!mergedHeaders[@"Cache-Control"]) mergedHeaders[@"Cache-Control"] = @"no-cache";
|
|
35
|
+
if (!mergedHeaders[@"Connection"]) mergedHeaders[@"Connection"] = @"keep-alive";
|
|
36
|
+
|
|
37
|
+
finalResponse = [[NSHTTPURLResponse alloc] initWithURL:[NSURL URLWithString:url ?: @"http://sse-stream/"]
|
|
38
|
+
statusCode:statusCode
|
|
39
|
+
HTTPVersion:@"HTTP/1.1"
|
|
40
|
+
headerFields:mergedHeaders];
|
|
41
|
+
// Pass the merged headers to the reporter as well
|
|
42
|
+
[RCTInspectorNetworkReporter reportResponseStart:(id)requestId response:finalResponse statusCode:(int)statusCode headers:mergedHeaders];
|
|
43
|
+
} else {
|
|
44
|
+
[RCTInspectorNetworkReporter reportResponseStart:(id)requestId response:finalResponse statusCode:(int)statusCode headers:headers ?: @{}];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
#endif
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
+ (void)reportResponseEnd:(nullable NSString *)requestId
|
|
51
|
+
encodedDataLength:(NSInteger)encodedDataLength {
|
|
52
|
+
#ifdef HAS_NETWORK_REPORTER
|
|
53
|
+
if (requestId) {
|
|
54
|
+
[RCTInspectorNetworkReporter reportResponseEnd:(id)requestId encodedDataLength:(int)encodedDataLength];
|
|
55
|
+
}
|
|
56
|
+
#endif
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
+ (void)reportRequestFailed:(nullable NSString *)requestId
|
|
60
|
+
cancelled:(BOOL)cancelled {
|
|
61
|
+
#ifdef HAS_NETWORK_REPORTER
|
|
62
|
+
if (requestId) {
|
|
63
|
+
[RCTInspectorNetworkReporter reportRequestFailed:(id)requestId cancelled:cancelled];
|
|
64
|
+
}
|
|
65
|
+
#endif
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@end
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["NitroSse.nitro.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
export class NitroSseClient {
|
|
4
|
+
_listeners = new Map();
|
|
5
|
+
_mockIndex = 0;
|
|
6
|
+
constructor(native) {
|
|
7
|
+
this._native = native;
|
|
8
|
+
}
|
|
9
|
+
setup(config, onEvent) {
|
|
10
|
+
this._config = {
|
|
11
|
+
...config
|
|
12
|
+
};
|
|
13
|
+
this._legacyCallback = onEvent;
|
|
14
|
+
const isDev = typeof __DEV__ !== 'undefined' ? __DEV__ === true : false;
|
|
15
|
+
if (!isDev) {
|
|
16
|
+
delete this._config.mock;
|
|
17
|
+
}
|
|
18
|
+
if (this._config.mock) {
|
|
19
|
+
console.warn('\n' + '=================================================================\n' + '⚠️ [react-native-nitro-sse] WARNING: MOCK STREAMING IS ENABLED! ⚠️\n' + ` Mode: ${this._config.mock.mode.toUpperCase()} | Speed: ${this._config.mock.eventsPerSecond ?? 1} events/sec\n` + ' Please ensure mocking is disabled before building for production!\n' + '=================================================================\n');
|
|
20
|
+
}
|
|
21
|
+
if (this._mockIntervalId) {
|
|
22
|
+
clearTimeout(this._mockIntervalId);
|
|
23
|
+
this._mockIntervalId = undefined;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// We wrap the native setup to dispatch events to typed listeners
|
|
27
|
+
this._native.setup(this._config, events => {
|
|
28
|
+
// 1. Call legacy batch callback if provided
|
|
29
|
+
this._legacyCallback?.(events);
|
|
30
|
+
|
|
31
|
+
// 2. Dispatch individual events to registered listeners
|
|
32
|
+
for (const event of events) {
|
|
33
|
+
// Dispatch basic types: 'open', 'message', 'error', 'close', 'heartbeat'
|
|
34
|
+
this._emit(event.type, event);
|
|
35
|
+
|
|
36
|
+
// Dispatch by SSE event name if it's different from the type
|
|
37
|
+
// e.g., if type is 'message' but event name is 'update'
|
|
38
|
+
if (event.event && event.event !== event.type) {
|
|
39
|
+
this._emit(event.event, event);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
addEventListener(type, listener) {
|
|
45
|
+
if (!this._listeners.has(type)) {
|
|
46
|
+
this._listeners.set(type, new Set());
|
|
47
|
+
}
|
|
48
|
+
this._listeners.get(type).add(listener);
|
|
49
|
+
}
|
|
50
|
+
removeEventListener(type, listener) {
|
|
51
|
+
this._listeners.get(type)?.delete(listener);
|
|
52
|
+
}
|
|
53
|
+
_emit(type, event) {
|
|
54
|
+
const listeners = this._listeners.get(type);
|
|
55
|
+
if (listeners) {
|
|
56
|
+
listeners.forEach(listener => {
|
|
57
|
+
try {
|
|
58
|
+
listener(event);
|
|
59
|
+
} catch (e) {
|
|
60
|
+
console.error(`[NitroSse] Error in event listener for "${type}":`, e);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
_createSseEvent(rawMock) {
|
|
66
|
+
return {
|
|
67
|
+
type: rawMock.type ?? 'message',
|
|
68
|
+
data: rawMock.data,
|
|
69
|
+
parsedData: rawMock.parsedData,
|
|
70
|
+
id: rawMock.id,
|
|
71
|
+
event: rawMock.event,
|
|
72
|
+
message: rawMock.message,
|
|
73
|
+
statusCode: rawMock.statusCode ?? 200,
|
|
74
|
+
retry: rawMock.retry
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
start() {
|
|
78
|
+
if (this._mockIntervalId) {
|
|
79
|
+
clearTimeout(this._mockIntervalId);
|
|
80
|
+
this._mockIntervalId = undefined;
|
|
81
|
+
}
|
|
82
|
+
if (this._config?.mock) {
|
|
83
|
+
const {
|
|
84
|
+
mode,
|
|
85
|
+
data,
|
|
86
|
+
eventsPerSecond = 1,
|
|
87
|
+
loop = false,
|
|
88
|
+
errorRate = 0
|
|
89
|
+
} = this._config.mock;
|
|
90
|
+
this._mockIndex = 0;
|
|
91
|
+
|
|
92
|
+
// Validate and normalize eventsPerSecond (must be a finite positive number, default to 1)
|
|
93
|
+
let validatedEventsPerSecond = Number(eventsPerSecond);
|
|
94
|
+
if (Number.isNaN(validatedEventsPerSecond) || !Number.isFinite(validatedEventsPerSecond) || validatedEventsPerSecond <= 0) {
|
|
95
|
+
validatedEventsPerSecond = 1;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Validate and normalize errorRate (must be a finite number within [0,1], default to 0)
|
|
99
|
+
let validatedErrorRate = Number(errorRate);
|
|
100
|
+
if (Number.isNaN(validatedErrorRate) || !Number.isFinite(validatedErrorRate)) {
|
|
101
|
+
validatedErrorRate = 0;
|
|
102
|
+
} else {
|
|
103
|
+
validatedErrorRate = Math.max(0, Math.min(1, validatedErrorRate));
|
|
104
|
+
}
|
|
105
|
+
const delayMs = 1000 / validatedEventsPerSecond;
|
|
106
|
+
// Safeguard: if eventsPerSecond is huge (e.g. 1000), setInterval/setTimeout is too slow.
|
|
107
|
+
// We batch events together in chunks if the calculated interval is under 10ms.
|
|
108
|
+
const batchSize = Math.max(1, Math.round(validatedEventsPerSecond / 100)); // chunk size for 10ms intervals
|
|
109
|
+
const intervalMs = Math.max(10, delayMs * batchSize);
|
|
110
|
+
const scheduleNext = () => {
|
|
111
|
+
if (this._mockIndex >= data.length) {
|
|
112
|
+
if (loop && data.length > 0) {
|
|
113
|
+
this._mockIndex = 0;
|
|
114
|
+
} else {
|
|
115
|
+
if (this._mockIntervalId) {
|
|
116
|
+
clearTimeout(this._mockIntervalId);
|
|
117
|
+
this._mockIntervalId = undefined;
|
|
118
|
+
}
|
|
119
|
+
const closeEvent = {
|
|
120
|
+
type: 'close',
|
|
121
|
+
statusCode: 200
|
|
122
|
+
};
|
|
123
|
+
this._legacyCallback?.([closeEvent]);
|
|
124
|
+
this._emit('close', closeEvent);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Simulate connection drops
|
|
130
|
+
if (validatedErrorRate && Math.random() < validatedErrorRate) {
|
|
131
|
+
const errorEvent = {
|
|
132
|
+
type: 'error',
|
|
133
|
+
message: 'Mock Connection Drop (Simulated Error)',
|
|
134
|
+
statusCode: 500
|
|
135
|
+
};
|
|
136
|
+
this._legacyCallback?.([errorEvent]);
|
|
137
|
+
this._emit('error', errorEvent);
|
|
138
|
+
|
|
139
|
+
// Retry / reconnect delay simulator (e.g. 2000ms)
|
|
140
|
+
this._mockIntervalId = setTimeout(scheduleNext, 2000);
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const currentItem = data[this._mockIndex];
|
|
144
|
+
const hasCustomDelay = currentItem && typeof currentItem.delayMs === 'number';
|
|
145
|
+
const batch = [];
|
|
146
|
+
if (hasCustomDelay) {
|
|
147
|
+
const rawMock = data[this._mockIndex++];
|
|
148
|
+
if (rawMock) {
|
|
149
|
+
batch.push(this._createSseEvent(rawMock));
|
|
150
|
+
}
|
|
151
|
+
} else {
|
|
152
|
+
for (let i = 0; i < batchSize && this._mockIndex < data.length; i++) {
|
|
153
|
+
const nextItem = data[this._mockIndex];
|
|
154
|
+
if (nextItem && typeof nextItem.delayMs === 'number') {
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
const rawMock = data[this._mockIndex++];
|
|
158
|
+
if (rawMock) {
|
|
159
|
+
batch.push(this._createSseEvent(rawMock));
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
if (batch.length > 0) {
|
|
164
|
+
// 1. Call legacy batch callback if provided
|
|
165
|
+
this._legacyCallback?.(batch);
|
|
166
|
+
|
|
167
|
+
// 2. Dispatch individual events to registered listeners
|
|
168
|
+
for (const event of batch) {
|
|
169
|
+
this._emit(event.type, event);
|
|
170
|
+
if (event.event && event.event !== event.type) {
|
|
171
|
+
this._emit(event.event, event);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
const nextDelay = hasCustomDelay ? currentItem.delayMs : intervalMs;
|
|
176
|
+
this._mockIntervalId = setTimeout(scheduleNext, nextDelay);
|
|
177
|
+
};
|
|
178
|
+
const firstItem = data[0];
|
|
179
|
+
const firstDelay = firstItem && typeof firstItem.delayMs === 'number' ? firstItem.delayMs : intervalMs;
|
|
180
|
+
if (mode === 'replace') {
|
|
181
|
+
// Emit simulated open event
|
|
182
|
+
const openEvent = {
|
|
183
|
+
type: 'open',
|
|
184
|
+
statusCode: 200
|
|
185
|
+
};
|
|
186
|
+
this._legacyCallback?.([openEvent]);
|
|
187
|
+
this._emit('open', openEvent);
|
|
188
|
+
this._mockIntervalId = setTimeout(scheduleNext, firstDelay);
|
|
189
|
+
return; // Skip native start
|
|
190
|
+
} else if (mode === 'inject') {
|
|
191
|
+
this._mockIntervalId = setTimeout(scheduleNext, firstDelay);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
this._native.start();
|
|
195
|
+
}
|
|
196
|
+
stop() {
|
|
197
|
+
if (this._mockIntervalId) {
|
|
198
|
+
clearTimeout(this._mockIntervalId);
|
|
199
|
+
this._mockIntervalId = undefined;
|
|
200
|
+
}
|
|
201
|
+
this._native.stop();
|
|
202
|
+
}
|
|
203
|
+
restart() {
|
|
204
|
+
if (this._config?.mock) {
|
|
205
|
+
this.stop();
|
|
206
|
+
this.start();
|
|
207
|
+
} else {
|
|
208
|
+
this._native.restart();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
flush() {
|
|
212
|
+
this._native.flush();
|
|
213
|
+
}
|
|
214
|
+
isConnected() {
|
|
215
|
+
if (this._config?.mock?.mode === 'replace' && this._mockIntervalId) {
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
return this._native.isConnected();
|
|
219
|
+
}
|
|
220
|
+
getStats() {
|
|
221
|
+
if (this._config?.mock?.mode === 'replace') {
|
|
222
|
+
return {
|
|
223
|
+
totalBytesReceived: this._mockIndex * 150,
|
|
224
|
+
reconnectCount: 0
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
return this._native.getStats();
|
|
228
|
+
}
|
|
229
|
+
updateHeaders(headers) {
|
|
230
|
+
this._native.updateHeaders(headers);
|
|
231
|
+
}
|
|
232
|
+
setLastProcessedId(id) {
|
|
233
|
+
this._native.setLastProcessedId(id);
|
|
234
|
+
}
|
|
235
|
+
injectMockEvent(event) {
|
|
236
|
+
const sseEvent = this._createSseEvent(event);
|
|
237
|
+
this._legacyCallback?.([sseEvent]);
|
|
238
|
+
this._emit(sseEvent.type, sseEvent);
|
|
239
|
+
if (sseEvent.event && sseEvent.event !== sseEvent.type) {
|
|
240
|
+
this._emit(sseEvent.event, sseEvent);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=NitroSseClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NitroSseClient","_listeners","Map","_mockIndex","constructor","native","_native","setup","config","onEvent","_config","_legacyCallback","isDev","__DEV__","mock","console","warn","mode","toUpperCase","eventsPerSecond","_mockIntervalId","clearTimeout","undefined","events","event","_emit","type","addEventListener","listener","has","set","Set","get","add","removeEventListener","delete","listeners","forEach","e","error","_createSseEvent","rawMock","data","parsedData","id","message","statusCode","retry","start","loop","errorRate","validatedEventsPerSecond","Number","isNaN","isFinite","validatedErrorRate","Math","max","min","delayMs","batchSize","round","intervalMs","scheduleNext","length","closeEvent","random","errorEvent","setTimeout","currentItem","hasCustomDelay","batch","push","i","nextItem","nextDelay","firstItem","firstDelay","openEvent","stop","restart","flush","isConnected","getStats","totalBytesReceived","reconnectCount","updateHeaders","headers","setLastProcessedId","injectMockEvent","sseEvent"],"sourceRoot":"../../src","sources":["NitroSseClient.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["SseInterface.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
4
|
+
import { NitroSseClient } from "./NitroSseClient.js";
|
|
5
|
+
export * from "./SseInterface.js";
|
|
6
|
+
export * from "./NitroSse.nitro.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Creates a high-performance SSE client that supports typed event listeners (`addEventListener`) and legacy batching.
|
|
10
|
+
*
|
|
11
|
+
* @returns An SseClient instance wrapping the native NitroSse implementation.
|
|
12
|
+
* @throws If the native NitroSse module cannot be found. Ensure the library is linked and the app is built for iOS/Android.
|
|
13
|
+
*/
|
|
14
|
+
export function createNitroSse() {
|
|
15
|
+
let nativeSse;
|
|
16
|
+
try {
|
|
17
|
+
nativeSse = NitroModules.createHybridObject('NitroSse');
|
|
18
|
+
} catch {
|
|
19
|
+
console.debug('Native NitroSse not found. This might be a test environment or web.');
|
|
20
|
+
}
|
|
21
|
+
if (!nativeSse) {
|
|
22
|
+
throw new Error('NitroSse: Native module not found. Ensure you have linked the library and built the app for iOS/Android.');
|
|
23
|
+
}
|
|
24
|
+
return new NitroSseClient(nativeSse);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["NitroModules","NitroSseClient","createNitroSse","nativeSse","createHybridObject","console","debug","Error"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA,SAASA,YAAY,QAAQ,4BAA4B;AAEzD,SAASC,cAAc,QAAQ,qBAAkB;AAGjD,cAAc,mBAAgB;AAC9B,cAAc,qBAAkB;;AAEhC;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAA,EAAc;EAC1C,IAAIC,SAA+B;EACnC,IAAI;IACFA,SAAS,GAAGH,YAAY,CAACI,kBAAkB,CAAW,UAAU,CAAC;EACnE,CAAC,CAAC,MAAM;IACNC,OAAO,CAACC,KAAK,CACX,qEACF,CAAC;EACH;EAEA,IAAI,CAACH,SAAS,EAAE;IACd,MAAM,IAAII,KAAK,CACb,0GACF,CAAC;EACH;EACA,OAAO,IAAIN,cAAc,CAACE,SAAS,CAAC;AACtC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
import type { SseConfig, SseEvent, SseStats } from './SseInterface';
|
|
3
|
+
export interface NitroSse extends HybridObject<{
|
|
4
|
+
ios: 'swift';
|
|
5
|
+
android: 'kotlin';
|
|
6
|
+
}> {
|
|
7
|
+
/**
|
|
8
|
+
* Configure SSE and setup event callback.
|
|
9
|
+
*/
|
|
10
|
+
setup(config: SseConfig, onEvent: (events: SseEvent[]) => void): void;
|
|
11
|
+
/**
|
|
12
|
+
* Start the SSE connection.
|
|
13
|
+
*/
|
|
14
|
+
start(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Stop the SSE connection.
|
|
17
|
+
*/
|
|
18
|
+
stop(): void;
|
|
19
|
+
/**
|
|
20
|
+
* Set the last processed event ID.
|
|
21
|
+
* Native will use this ID to resume connection if interrupted.
|
|
22
|
+
*/
|
|
23
|
+
setLastProcessedId(id: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Update HTTP headers dynamically (e.g., when token expires).
|
|
26
|
+
* These headers will be used for subsequent connection/reconnection attempts.
|
|
27
|
+
*/
|
|
28
|
+
updateHeaders(headers: Record<string, string>): void;
|
|
29
|
+
/**
|
|
30
|
+
* Get connection statistics.
|
|
31
|
+
*/
|
|
32
|
+
getStats(): SseStats;
|
|
33
|
+
/**
|
|
34
|
+
* Manually flush the event buffer.
|
|
35
|
+
* Useful when batching is enabled but you need to process pending events immediately.
|
|
36
|
+
*/
|
|
37
|
+
flush(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Force a reconnection.
|
|
40
|
+
* This resets the connection state and attempts to reconnect immediately.
|
|
41
|
+
*/
|
|
42
|
+
restart(): void;
|
|
43
|
+
/**
|
|
44
|
+
* Check if the connection is currently active.
|
|
45
|
+
*/
|
|
46
|
+
isConnected(): boolean;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=NitroSse.nitro.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NitroSse.nitro.d.ts","sourceRoot":"","sources":["../../../src/NitroSse.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEpE,MAAM,WAAW,QACf,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAAC;IACzD;;OAEG;IACH,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAEtE;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;;OAGG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAErC;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAErD;;OAEG;IACH,QAAQ,IAAI,QAAQ,CAAC;IACrB;;;OAGG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;OAEG;IACH,WAAW,IAAI,OAAO,CAAC;CACxB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { NitroSse } from './NitroSse.nitro';
|
|
2
|
+
import type { SseClient, SseConfig, SseEvent, SseListener, SseStats } from './SseInterface';
|
|
3
|
+
export declare class NitroSseClient implements SseClient {
|
|
4
|
+
private _native;
|
|
5
|
+
private _listeners;
|
|
6
|
+
private _legacyCallback?;
|
|
7
|
+
private _config?;
|
|
8
|
+
private _mockIntervalId?;
|
|
9
|
+
private _mockIndex;
|
|
10
|
+
constructor(native: NitroSse);
|
|
11
|
+
setup(config: SseConfig, onEvent?: (events: SseEvent[]) => void): void;
|
|
12
|
+
addEventListener(type: string, listener: SseListener): void;
|
|
13
|
+
removeEventListener(type: string, listener: SseListener): void;
|
|
14
|
+
private _emit;
|
|
15
|
+
private _createSseEvent;
|
|
16
|
+
start(): void;
|
|
17
|
+
stop(): void;
|
|
18
|
+
restart(): void;
|
|
19
|
+
flush(): void;
|
|
20
|
+
isConnected(): boolean;
|
|
21
|
+
getStats(): SseStats;
|
|
22
|
+
updateHeaders(headers: Record<string, string>): void;
|
|
23
|
+
setLastProcessedId(id: string): void;
|
|
24
|
+
injectMockEvent(event: Partial<SseEvent>): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=NitroSseClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NitroSseClient.d.ts","sourceRoot":"","sources":["../../../src/NitroSseClient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,QAAQ,EACT,MAAM,gBAAgB,CAAC;AAIxB,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,OAAO,CAAW;IAC1B,OAAO,CAAC,UAAU,CAA4C;IAC9D,OAAO,CAAC,eAAe,CAAC,CAA+B;IACvD,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,eAAe,CAAC,CAAM;IAC9B,OAAO,CAAC,UAAU,CAAa;gBAEnB,MAAM,EAAE,QAAQ;IAI5B,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI;IA8CtE,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAO3D,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAI9D,OAAO,CAAC,KAAK;IAab,OAAO,CAAC,eAAe;IAavB,KAAK,IAAI,IAAI;IAwIb,IAAI,IAAI,IAAI;IAQZ,OAAO,IAAI,IAAI;IASf,KAAK,IAAI,IAAI;IAIb,WAAW,IAAI,OAAO;IAOtB,QAAQ,IAAI,QAAQ;IAUpB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAIpD,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAIpC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI;CAQhD"}
|