@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.
Files changed (98) hide show
  1. package/LICENSE +21 -0
  2. package/NitroSse.podspec +37 -0
  3. package/README.md +144 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +124 -0
  6. package/android/src/main/AndroidManifest.xml +4 -0
  7. package/android/src/main/cpp/cpp-adapter.cpp +10 -0
  8. package/android/src/main/java/com/margelo/nitro/nitrosse/NetworkInspector.kt +94 -0
  9. package/android/src/main/java/com/margelo/nitro/nitrosse/NitroSse.kt +889 -0
  10. package/android/src/main/java/com/margelo/nitro/nitrosse/NitroSsePackage.kt +22 -0
  11. package/ios/NitroSse.swift +760 -0
  12. package/ios/NitroSseNetworkInspector.h +24 -0
  13. package/ios/NitroSseNetworkInspector.mm +68 -0
  14. package/lib/module/NitroSse.nitro.js +4 -0
  15. package/lib/module/NitroSse.nitro.js.map +1 -0
  16. package/lib/module/NitroSseClient.js +244 -0
  17. package/lib/module/NitroSseClient.js.map +1 -0
  18. package/lib/module/SseInterface.js +4 -0
  19. package/lib/module/SseInterface.js.map +1 -0
  20. package/lib/module/index.js +26 -0
  21. package/lib/module/index.js.map +1 -0
  22. package/lib/module/package.json +1 -0
  23. package/lib/typescript/package.json +1 -0
  24. package/lib/typescript/src/NitroSse.nitro.d.ts +48 -0
  25. package/lib/typescript/src/NitroSse.nitro.d.ts.map +1 -0
  26. package/lib/typescript/src/NitroSseClient.d.ts +26 -0
  27. package/lib/typescript/src/NitroSseClient.d.ts.map +1 -0
  28. package/lib/typescript/src/SseInterface.d.ts +237 -0
  29. package/lib/typescript/src/SseInterface.d.ts.map +1 -0
  30. package/lib/typescript/src/index.d.ts +11 -0
  31. package/lib/typescript/src/index.d.ts.map +1 -0
  32. package/nitro.json +23 -0
  33. package/nitrogen/generated/android/c++/JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____.hpp +138 -0
  34. package/nitrogen/generated/android/c++/JFunc_void_std__vector_SseEvent_.hpp +102 -0
  35. package/nitrogen/generated/android/c++/JHttpMethod.hpp +58 -0
  36. package/nitrogen/generated/android/c++/JHybridNitroSseSpec.cpp +134 -0
  37. package/nitrogen/generated/android/c++/JHybridNitroSseSpec.hpp +71 -0
  38. package/nitrogen/generated/android/c++/JSseConfig.hpp +162 -0
  39. package/nitrogen/generated/android/c++/JSseEvent.hpp +90 -0
  40. package/nitrogen/generated/android/c++/JSseEventType.hpp +67 -0
  41. package/nitrogen/generated/android/c++/JSseMockConfig.hpp +101 -0
  42. package/nitrogen/generated/android/c++/JSseMockEvent.hpp +94 -0
  43. package/nitrogen/generated/android/c++/JSseMockMode.hpp +58 -0
  44. package/nitrogen/generated/android/c++/JSseStats.hpp +70 -0
  45. 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
  46. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/Func_void_std__vector_SseEvent_.kt +80 -0
  47. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/HttpMethod.kt +23 -0
  48. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/HybridNitroSseSpec.kt +91 -0
  49. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseConfig.kt +135 -0
  50. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseEvent.kt +86 -0
  51. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseEventType.kt +26 -0
  52. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseMockConfig.kt +71 -0
  53. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseMockEvent.kt +91 -0
  54. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseMockMode.kt +23 -0
  55. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/SseStats.kt +66 -0
  56. package/nitrogen/generated/android/kotlin/com/margelo/nitro/nitrosse/nitrosseOnLoad.kt +35 -0
  57. package/nitrogen/generated/android/nitrosse+autolinking.cmake +81 -0
  58. package/nitrogen/generated/android/nitrosse+autolinking.gradle +27 -0
  59. package/nitrogen/generated/android/nitrosseOnLoad.cpp +58 -0
  60. package/nitrogen/generated/android/nitrosseOnLoad.hpp +34 -0
  61. package/nitrogen/generated/ios/NitroSse+autolinking.rb +62 -0
  62. package/nitrogen/generated/ios/NitroSse-Swift-Cxx-Bridge.cpp +74 -0
  63. package/nitrogen/generated/ios/NitroSse-Swift-Cxx-Bridge.hpp +415 -0
  64. package/nitrogen/generated/ios/NitroSse-Swift-Cxx-Umbrella.hpp +74 -0
  65. package/nitrogen/generated/ios/NitroSseAutolinking.mm +33 -0
  66. package/nitrogen/generated/ios/NitroSseAutolinking.swift +26 -0
  67. package/nitrogen/generated/ios/c++/HybridNitroSseSpecSwift.cpp +11 -0
  68. package/nitrogen/generated/ios/c++/HybridNitroSseSpecSwift.hpp +161 -0
  69. package/nitrogen/generated/ios/swift/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____.swift +67 -0
  70. package/nitrogen/generated/ios/swift/Func_void_std__exception_ptr.swift +46 -0
  71. package/nitrogen/generated/ios/swift/Func_void_std__shared_ptr_Promise_std__unordered_map_std__string__std__string___.swift +66 -0
  72. package/nitrogen/generated/ios/swift/Func_void_std__unordered_map_std__string__std__string_.swift +54 -0
  73. package/nitrogen/generated/ios/swift/Func_void_std__vector_SseEvent_.swift +46 -0
  74. package/nitrogen/generated/ios/swift/HttpMethod.swift +40 -0
  75. package/nitrogen/generated/ios/swift/HybridNitroSseSpec.swift +63 -0
  76. package/nitrogen/generated/ios/swift/HybridNitroSseSpec_cxx.swift +246 -0
  77. package/nitrogen/generated/ios/swift/SseConfig.swift +346 -0
  78. package/nitrogen/generated/ios/swift/SseEvent.swift +155 -0
  79. package/nitrogen/generated/ios/swift/SseEventType.swift +52 -0
  80. package/nitrogen/generated/ios/swift/SseMockConfig.swift +94 -0
  81. package/nitrogen/generated/ios/swift/SseMockEvent.swift +179 -0
  82. package/nitrogen/generated/ios/swift/SseMockMode.swift +40 -0
  83. package/nitrogen/generated/ios/swift/SseStats.swift +70 -0
  84. package/nitrogen/generated/shared/c++/HttpMethod.hpp +76 -0
  85. package/nitrogen/generated/shared/c++/HybridNitroSseSpec.cpp +29 -0
  86. package/nitrogen/generated/shared/c++/HybridNitroSseSpec.hpp +81 -0
  87. package/nitrogen/generated/shared/c++/SseConfig.hpp +156 -0
  88. package/nitrogen/generated/shared/c++/SseEvent.hpp +115 -0
  89. package/nitrogen/generated/shared/c++/SseEventType.hpp +88 -0
  90. package/nitrogen/generated/shared/c++/SseMockConfig.hpp +105 -0
  91. package/nitrogen/generated/shared/c++/SseMockEvent.hpp +119 -0
  92. package/nitrogen/generated/shared/c++/SseMockMode.hpp +76 -0
  93. package/nitrogen/generated/shared/c++/SseStats.hpp +96 -0
  94. package/package.json +186 -0
  95. package/src/NitroSse.nitro.ts +53 -0
  96. package/src/NitroSseClient.ts +297 -0
  97. package/src/SseInterface.ts +248 -0
  98. package/src/index.ts +31 -0
@@ -0,0 +1,237 @@
1
+ import type { AnyMap } from 'react-native-nitro-modules';
2
+ /**
3
+ * HTTP method to use for the SSE connection.
4
+ */
5
+ export type HttpMethod = 'get' | 'post';
6
+ /**
7
+ * Type of event received from the SSE stream.
8
+ * - `open`: Connection established.
9
+ * - `message`: Standard data message.
10
+ * - `error`: Connection error or other failure.
11
+ * - `close`: Connection closed (not typical for SSE, but used for cleanup).
12
+ * - `heartbeat`: Ping/Keep-alive signal.
13
+ */
14
+ export type SseEventType = 'open' | 'message' | 'error' | 'close' | 'heartbeat';
15
+ /**
16
+ * Configuration for the SSE connection.
17
+ */
18
+ export interface SseConfig {
19
+ /** The URL of the SSE endpoint. */
20
+ url: string;
21
+ /** HTTP method (default: 'GET'). */
22
+ method?: HttpMethod;
23
+ /** Custom HTTP headers to include in the request. */
24
+ headers?: Record<string, string>;
25
+ /** Body for POST requests. */
26
+ body?: string;
27
+ /**
28
+ * Whether to continue processing events when the app is in the background.
29
+ * Note: On iOS, this uses background tasks which are limited in time by the OS.
30
+ * @default false
31
+ */
32
+ backgroundExecution?: boolean;
33
+ /**
34
+ * How long (in ms) to wait and group multiple events before sending them to the JS side.
35
+ * High-frequency streams should use this to reduce JS bridge overhead and improve UI performance.
36
+ * Set to 0 to deliver events immediately one-by-one.
37
+ * @default 0
38
+ */
39
+ batchingIntervalMs?: number;
40
+ /**
41
+ * Maximum number of events to keep in the native buffer before forcing a flush to JS,
42
+ * regardless of the `batchingIntervalMs`. Prevents memory pressure.
43
+ * @default 1000
44
+ */
45
+ maxBufferSize?: number;
46
+ /**
47
+ * Maximum time (in ms) to wait for the initial server connection and handshake to complete.
48
+ * Effectively the \"Connect Timeout\".
49
+ * @default 15000
50
+ */
51
+ connectionTimeoutMs?: number;
52
+ /**
53
+ * Maximum idle time (in ms) allowed between receiving data packets or heartbeats.
54
+ * If the server remains silent longer than this, the connection is considered stalled and will reconnect.
55
+ * Increase this for streams that transmit data infrequently.
56
+ * @default 300000
57
+ */
58
+ readTimeoutMs?: number;
59
+ /**
60
+ * Initial delay (in ms) for reconnection attempts.
61
+ * Subsequent attempts use exponential backoff.
62
+ * @default 1000
63
+ */
64
+ retryIntervalMs?: number;
65
+ /**
66
+ * Maximum delay (in ms) for reconnection attempts.
67
+ * @default 30000
68
+ */
69
+ maxRetryIntervalMs?: number;
70
+ /**
71
+ * Factor to randomize reconnection attempts (0.0 to 1.0).
72
+ * 0 means no jitter, 1.0 means up to 100% randomization.
73
+ * @default 0.5
74
+ */
75
+ jitterFactor?: number;
76
+ /**
77
+ * Maximum number of reconnection attempts before giving up.
78
+ * Use -1 for infinite (default), 0 to disable auto-reconnection.
79
+ * @default -1
80
+ */
81
+ maxReconnectAttempts?: number;
82
+ /**
83
+ * Whether to automatically parse message data as JSON in a background native thread.
84
+ * If true, and parsing succeeds, the result will be available in the 'parsedData' field.
85
+ * @default false
86
+ */
87
+ autoParseJSON?: boolean;
88
+ /**
89
+ * Whether to automatically monitor network connectivity changes.
90
+ * If true, the client will proactively reconnect when switching networks (WiFi <-> Cellular)
91
+ * and pause/resume based on internet availability.
92
+ * @default true
93
+ */
94
+ monitorNetwork?: boolean;
95
+ /**
96
+ * Async interceptor called before every connection attempt (including auto-reconnects).
97
+ * Use this to refresh tokens or calculate dynamic headers.
98
+ * Note: This is protected by a native timeout to prevent the app from hanging.
99
+ */
100
+ onBeforeRequest?: () => Promise<Record<string, string>>;
101
+ /**
102
+ * Configuration for mock streaming data.
103
+ * Used for local testing and debugging.
104
+ */
105
+ mock?: SseMockConfig;
106
+ }
107
+ export type SseMockMode = 'replace' | 'inject';
108
+ /**
109
+ * Represents a single mock SSE event configuration.
110
+ */
111
+ export interface SseMockEvent {
112
+ /** The type of the event. */
113
+ type?: SseEventType;
114
+ /** The data payload of the event as a raw string. */
115
+ data?: string;
116
+ /** The parsed JSON data, if autoParseJSON is enabled and parsing succeeds. */
117
+ parsedData?: AnyMap;
118
+ /** The event ID, if provided. */
119
+ id?: string;
120
+ /** The event name, if provided (internal 'event' field in SSE). */
121
+ event?: string;
122
+ /** System message or error description. */
123
+ message?: string;
124
+ /** HTTP status code if applicable. */
125
+ statusCode?: number;
126
+ /** Server-requested retry delay in milliseconds. */
127
+ retry?: number;
128
+ /** Custom delay in milliseconds before this event is dispatched. */
129
+ delayMs?: number;
130
+ }
131
+ /**
132
+ * Configuration for mock streaming data.
133
+ */
134
+ export interface SseMockConfig {
135
+ /**
136
+ * - 'replace': Simulates the stream completely in JavaScript without any native network connection.
137
+ * - 'inject': Establishes the real server connection and injects mock events alongside it.
138
+ */
139
+ mode: SseMockMode;
140
+ /**
141
+ * The list of mock events to be streamed.
142
+ */
143
+ data: SseMockEvent[];
144
+ /**
145
+ * The frequency at which mock events are dispatched.
146
+ * Represented in events per second.
147
+ * @default 1
148
+ */
149
+ eventsPerSecond?: number;
150
+ /**
151
+ * Whether to loop the mock stream indefinitely.
152
+ * @default false
153
+ */
154
+ loop?: boolean;
155
+ /**
156
+ * Probability of simulated connection drop/error events (0.0 to 1.0).
157
+ * @default 0
158
+ */
159
+ errorRate?: number;
160
+ }
161
+ /**
162
+ * Represents a single SSE event.
163
+ */
164
+ export interface SseEvent {
165
+ /** The type of the event. */
166
+ type: SseEventType;
167
+ /** The data payload of the event as a raw string. */
168
+ data?: string;
169
+ /** The parsed JSON data, if autoParseJSON is enabled and parsing succeeds. */
170
+ parsedData?: AnyMap;
171
+ /** The event ID, if provided. */
172
+ id?: string;
173
+ /** The event name, if provided (internal 'event' field in SSE). */
174
+ event?: string;
175
+ /** System message or error description. */
176
+ message?: string;
177
+ /** HTTP status code if applicable. */
178
+ statusCode?: number;
179
+ /** Server-requested retry delay in milliseconds. */
180
+ retry?: number;
181
+ }
182
+ /**
183
+ * Statistics about the SSE connection.
184
+ */
185
+ export interface SseStats {
186
+ /** Total bytes received so far. */
187
+ totalBytesReceived: number;
188
+ /** Number of times the connection has been re-established. */
189
+ reconnectCount: number;
190
+ /** Timestamp of the last error event. */
191
+ lastErrorTime?: number;
192
+ /** Error code of the last error. */
193
+ lastErrorCode?: string;
194
+ }
195
+ /**
196
+ * Listener for a specific SSE event.
197
+ */
198
+ export type SseListener = (event: SseEvent) => void;
199
+ /**
200
+ * Public interface for the NitroSse client, supporting typed event listeners.
201
+ */
202
+ export interface SseClient {
203
+ /**
204
+ * Configure SSE and setup event callback.
205
+ * @param config The SSE configuration.
206
+ * @param onEvent Optional legacy batch callback for all events.
207
+ */
208
+ setup(config: SseConfig, onEvent?: (events: SseEvent[]) => void): void;
209
+ /**
210
+ * Register a listener for a specific event type ('message', 'open', etc.)
211
+ * or a custom SSE event name (from the 'event:' field).
212
+ */
213
+ addEventListener(type: string, listener: SseListener): void;
214
+ /**
215
+ * Unregister a listener.
216
+ */
217
+ removeEventListener(type: string, listener: SseListener): void;
218
+ /** Start the connection. */
219
+ start(): void;
220
+ /** Stop the connection. */
221
+ stop(): void;
222
+ /** Restart the connection (stop + start). */
223
+ restart(): void;
224
+ /** Force flush buffered events to JS. */
225
+ flush(): void;
226
+ /** Check if active. */
227
+ isConnected(): boolean;
228
+ /** Get stats. */
229
+ getStats(): SseStats;
230
+ /** Manually update headers. */
231
+ updateHeaders(headers: Record<string, string>): void;
232
+ /** Set last event ID. */
233
+ setLastProcessedId(id: string): void;
234
+ /** Manually inject a mock event into the stream (for testing/debugging). */
235
+ injectMockEvent(event: Partial<SseEvent>): void;
236
+ }
237
+ //# sourceMappingURL=SseInterface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SseInterface.d.ts","sourceRoot":"","sources":["../../../src/SseInterface.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { SseClient } from './SseInterface';
2
+ export * from './SseInterface';
3
+ export * from './NitroSse.nitro';
4
+ /**
5
+ * Creates a high-performance SSE client that supports typed event listeners (`addEventListener`) and legacy batching.
6
+ *
7
+ * @returns An SseClient instance wrapping the native NitroSse implementation.
8
+ * @throws If the native NitroSse module cannot be found. Ensure the library is linked and the app is built for iOS/Android.
9
+ */
10
+ export declare function createNitroSse(): SseClient;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AAEjC;;;;;GAKG;AACH,wBAAgB,cAAc,IAAI,SAAS,CAgB1C"}
package/nitro.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "cxxNamespace": ["nitrosse"],
3
+ "ios": {
4
+ "iosModuleName": "NitroSse"
5
+ },
6
+ "android": {
7
+ "androidNamespace": ["nitrosse"],
8
+ "androidCxxLibName": "nitrosse"
9
+ },
10
+ "autolinking": {
11
+ "NitroSse": {
12
+ "ios": {
13
+ "language": "swift",
14
+ "implementationClassName": "NitroSse"
15
+ },
16
+ "android": {
17
+ "language": "kotlin",
18
+ "implementationClassName": "NitroSse"
19
+ }
20
+ }
21
+ },
22
+ "ignorePaths": ["node_modules"]
23
+ }
@@ -0,0 +1,138 @@
1
+ ///
2
+ /// JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include <functional>
12
+
13
+ #include <string>
14
+ #include <unordered_map>
15
+ #include <NitroModules/Promise.hpp>
16
+ #include <functional>
17
+ #include <NitroModules/JNICallable.hpp>
18
+ #include <NitroModules/JPromise.hpp>
19
+
20
+ namespace margelo::nitro::nitrosse {
21
+
22
+ using namespace facebook;
23
+
24
+ /**
25
+ * Represents the Java/Kotlin callback `() -> Promise<Promise<Map<String, String>>>`.
26
+ * This can be passed around between C++ and Java/Kotlin.
27
+ */
28
+ struct JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____: public jni::JavaClass<JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____> {
29
+ public:
30
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrosse/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____;";
31
+
32
+ public:
33
+ /**
34
+ * Invokes the function this `JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____` instance holds through JNI.
35
+ */
36
+ std::shared_ptr<Promise<std::shared_ptr<Promise<std::unordered_map<std::string, std::string>>>>> invoke() const {
37
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("invoke");
38
+ auto __result = method(self());
39
+ return [&]() {
40
+ auto __promise = Promise<std::shared_ptr<Promise<std::unordered_map<std::string, std::string>>>>::create();
41
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
42
+ auto __result = jni::static_ref_cast<JPromise::javaobject>(__boxedResult);
43
+ __promise->resolve([&]() {
44
+ auto __promise = Promise<std::unordered_map<std::string, std::string>>::create();
45
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
46
+ auto __result = jni::static_ref_cast<jni::JMap<jni::JString, jni::JString>>(__boxedResult);
47
+ __promise->resolve([&]() {
48
+ std::unordered_map<std::string, std::string> __map;
49
+ __map.reserve(__result->size());
50
+ for (const auto& __entry : *__result) {
51
+ __map.emplace(__entry.first->toStdString(), __entry.second->toStdString());
52
+ }
53
+ return __map;
54
+ }());
55
+ });
56
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
57
+ jni::JniException __jniError(__throwable);
58
+ __promise->reject(std::make_exception_ptr(__jniError));
59
+ });
60
+ return __promise;
61
+ }());
62
+ });
63
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
64
+ jni::JniException __jniError(__throwable);
65
+ __promise->reject(std::make_exception_ptr(__jniError));
66
+ });
67
+ return __promise;
68
+ }();
69
+ }
70
+ };
71
+
72
+ /**
73
+ * An implementation of Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____ that is backed by a C++ implementation (using `std::function<...>`)
74
+ */
75
+ class JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string______cxx final: public jni::HybridClass<JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string______cxx, JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____> {
76
+ public:
77
+ static jni::local_ref<JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string_____::javaobject> fromCpp(const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::unordered_map<std::string, std::string>>>>>()>& func) {
78
+ return JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string______cxx::newObjectCxxArgs(func);
79
+ }
80
+
81
+ public:
82
+ /**
83
+ * Invokes the C++ `std::function<...>` this `JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string______cxx` instance holds.
84
+ */
85
+ jni::local_ref<JPromise::javaobject> invoke_cxx() {
86
+ std::shared_ptr<Promise<std::shared_ptr<Promise<std::unordered_map<std::string, std::string>>>>> __result = _func();
87
+ return [&]() {
88
+ jni::local_ref<JPromise::javaobject> __localPromise = JPromise::create();
89
+ jni::global_ref<JPromise::javaobject> __promise = jni::make_global(__localPromise);
90
+ __result->addOnResolvedListener([=](const std::shared_ptr<Promise<std::unordered_map<std::string, std::string>>>& __result) {
91
+ __promise->cthis()->resolve([&]() {
92
+ jni::local_ref<JPromise::javaobject> __localPromise = JPromise::create();
93
+ jni::global_ref<JPromise::javaobject> __promise = jni::make_global(__localPromise);
94
+ __result->addOnResolvedListener([=](const std::unordered_map<std::string, std::string>& __result) {
95
+ __promise->cthis()->resolve([&]() -> jni::local_ref<jni::JMap<jni::JString, jni::JString>> {
96
+ auto __map = jni::JHashMap<jni::JString, jni::JString>::create(__result.size());
97
+ for (const auto& __entry : __result) {
98
+ __map->put(jni::make_jstring(__entry.first), jni::make_jstring(__entry.second));
99
+ }
100
+ return __map;
101
+ }());
102
+ });
103
+ __result->addOnRejectedListener([=](const std::exception_ptr& __error) {
104
+ auto __jniError = jni::getJavaExceptionForCppException(__error);
105
+ __promise->cthis()->reject(__jniError);
106
+ });
107
+ return __localPromise;
108
+ }());
109
+ });
110
+ __result->addOnRejectedListener([=](const std::exception_ptr& __error) {
111
+ auto __jniError = jni::getJavaExceptionForCppException(__error);
112
+ __promise->cthis()->reject(__jniError);
113
+ });
114
+ return __localPromise;
115
+ }();
116
+ }
117
+
118
+ public:
119
+ [[nodiscard]]
120
+ inline const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::unordered_map<std::string, std::string>>>>>()>& getFunction() const {
121
+ return _func;
122
+ }
123
+
124
+ public:
125
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrosse/Func_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string______cxx;";
126
+ static void registerNatives() {
127
+ registerHybrid({makeNativeMethod("invoke_cxx", JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string______cxx::invoke_cxx)});
128
+ }
129
+
130
+ private:
131
+ explicit JFunc_std__shared_ptr_Promise_std__shared_ptr_Promise_std__unordered_map_std__string__std__string______cxx(const std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::unordered_map<std::string, std::string>>>>>()>& func): _func(func) { }
132
+
133
+ private:
134
+ friend HybridBase;
135
+ std::function<std::shared_ptr<Promise<std::shared_ptr<Promise<std::unordered_map<std::string, std::string>>>>>()> _func;
136
+ };
137
+
138
+ } // namespace margelo::nitro::nitrosse
@@ -0,0 +1,102 @@
1
+ ///
2
+ /// JFunc_void_std__vector_SseEvent_.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include <functional>
12
+
13
+ #include "SseEvent.hpp"
14
+ #include <vector>
15
+ #include <functional>
16
+ #include <NitroModules/JNICallable.hpp>
17
+ #include "JSseEvent.hpp"
18
+ #include "SseEventType.hpp"
19
+ #include "JSseEventType.hpp"
20
+ #include <string>
21
+ #include <optional>
22
+ #include <NitroModules/AnyMap.hpp>
23
+ #include <NitroModules/JAnyMap.hpp>
24
+
25
+ namespace margelo::nitro::nitrosse {
26
+
27
+ using namespace facebook;
28
+
29
+ /**
30
+ * Represents the Java/Kotlin callback `(events: Array<SseEvent>) -> Unit`.
31
+ * This can be passed around between C++ and Java/Kotlin.
32
+ */
33
+ struct JFunc_void_std__vector_SseEvent_: public jni::JavaClass<JFunc_void_std__vector_SseEvent_> {
34
+ public:
35
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrosse/Func_void_std__vector_SseEvent_;";
36
+
37
+ public:
38
+ /**
39
+ * Invokes the function this `JFunc_void_std__vector_SseEvent_` instance holds through JNI.
40
+ */
41
+ void invoke(const std::vector<SseEvent>& events) const {
42
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JArrayClass<JSseEvent>> /* events */)>("invoke");
43
+ method(self(), [&](auto&& __input) {
44
+ size_t __size = __input.size();
45
+ jni::local_ref<jni::JArrayClass<JSseEvent>> __array = jni::JArrayClass<JSseEvent>::newArray(__size);
46
+ for (size_t __i = 0; __i < __size; __i++) {
47
+ const auto& __element = __input[__i];
48
+ auto __elementJni = JSseEvent::fromCpp(__element);
49
+ __array->setElement(__i, *__elementJni);
50
+ }
51
+ return __array;
52
+ }(events));
53
+ }
54
+ };
55
+
56
+ /**
57
+ * An implementation of Func_void_std__vector_SseEvent_ that is backed by a C++ implementation (using `std::function<...>`)
58
+ */
59
+ class JFunc_void_std__vector_SseEvent__cxx final: public jni::HybridClass<JFunc_void_std__vector_SseEvent__cxx, JFunc_void_std__vector_SseEvent_> {
60
+ public:
61
+ static jni::local_ref<JFunc_void_std__vector_SseEvent_::javaobject> fromCpp(const std::function<void(const std::vector<SseEvent>& /* events */)>& func) {
62
+ return JFunc_void_std__vector_SseEvent__cxx::newObjectCxxArgs(func);
63
+ }
64
+
65
+ public:
66
+ /**
67
+ * Invokes the C++ `std::function<...>` this `JFunc_void_std__vector_SseEvent__cxx` instance holds.
68
+ */
69
+ void invoke_cxx(jni::alias_ref<jni::JArrayClass<JSseEvent>> events) {
70
+ _func([&](auto&& __input) {
71
+ size_t __size = __input->size();
72
+ std::vector<SseEvent> __vector;
73
+ __vector.reserve(__size);
74
+ for (size_t __i = 0; __i < __size; __i++) {
75
+ auto __element = __input->getElement(__i);
76
+ __vector.push_back(__element->toCpp());
77
+ }
78
+ return __vector;
79
+ }(events));
80
+ }
81
+
82
+ public:
83
+ [[nodiscard]]
84
+ inline const std::function<void(const std::vector<SseEvent>& /* events */)>& getFunction() const {
85
+ return _func;
86
+ }
87
+
88
+ public:
89
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrosse/Func_void_std__vector_SseEvent__cxx;";
90
+ static void registerNatives() {
91
+ registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__vector_SseEvent__cxx::invoke_cxx)});
92
+ }
93
+
94
+ private:
95
+ explicit JFunc_void_std__vector_SseEvent__cxx(const std::function<void(const std::vector<SseEvent>& /* events */)>& func): _func(func) { }
96
+
97
+ private:
98
+ friend HybridBase;
99
+ std::function<void(const std::vector<SseEvent>& /* events */)> _func;
100
+ };
101
+
102
+ } // namespace margelo::nitro::nitrosse
@@ -0,0 +1,58 @@
1
+ ///
2
+ /// JHttpMethod.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "HttpMethod.hpp"
12
+
13
+ namespace margelo::nitro::nitrosse {
14
+
15
+ using namespace facebook;
16
+
17
+ /**
18
+ * The C++ JNI bridge between the C++ enum "HttpMethod" and the the Kotlin enum "HttpMethod".
19
+ */
20
+ struct JHttpMethod final: public jni::JavaClass<JHttpMethod> {
21
+ public:
22
+ static constexpr auto kJavaDescriptor = "Lcom/margelo/nitro/nitrosse/HttpMethod;";
23
+
24
+ public:
25
+ /**
26
+ * Convert this Java/Kotlin-based enum to the C++ enum HttpMethod.
27
+ */
28
+ [[maybe_unused]]
29
+ [[nodiscard]]
30
+ HttpMethod toCpp() const {
31
+ static const auto clazz = javaClassStatic();
32
+ static const auto fieldOrdinal = clazz->getField<int>("value");
33
+ int ordinal = this->getFieldValue(fieldOrdinal);
34
+ return static_cast<HttpMethod>(ordinal);
35
+ }
36
+
37
+ public:
38
+ /**
39
+ * Create a Java/Kotlin-based enum with the given C++ enum's value.
40
+ */
41
+ [[maybe_unused]]
42
+ static jni::alias_ref<JHttpMethod> fromCpp(HttpMethod value) {
43
+ static const auto clazz = javaClassStatic();
44
+ switch (value) {
45
+ case HttpMethod::GET:
46
+ static const auto fieldGET = clazz->getStaticField<JHttpMethod>("GET");
47
+ return clazz->getStaticFieldValue(fieldGET);
48
+ case HttpMethod::POST:
49
+ static const auto fieldPOST = clazz->getStaticField<JHttpMethod>("POST");
50
+ return clazz->getStaticFieldValue(fieldPOST);
51
+ default:
52
+ std::string stringValue = std::to_string(static_cast<int>(value));
53
+ throw std::invalid_argument("Invalid enum value (" + stringValue + "!");
54
+ }
55
+ }
56
+ };
57
+
58
+ } // namespace margelo::nitro::nitrosse