@functionland/react-native-fula 1.55.1 → 1.55.11
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/android/build.gradle
CHANGED
|
@@ -98,7 +98,7 @@ dependencies {
|
|
|
98
98
|
// For > 0.71, this will be replaced by `com.facebook.react:react-android:$version` by react gradle plugin
|
|
99
99
|
//noinspection GradleDynamicVersion
|
|
100
100
|
implementation "com.facebook.react:react-android:+"
|
|
101
|
-
implementation 'com.github.functionland:fula-build-aar:v1.55.
|
|
101
|
+
implementation 'com.github.functionland:fula-build-aar:v1.55.11' // From jitpack.io
|
|
102
102
|
implementation 'com.github.functionland:wnfs-android:v1.8.2' // From jitpack.io
|
|
103
103
|
implementation 'commons-io:commons-io:20030203.000550'
|
|
104
104
|
implementation 'commons-codec:commons-codec:1.16.0'
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.getChatChunk = exports.fetchChunksUsingIterator = exports.chatWithAI = void 0;
|
|
6
|
+
exports.streamChunks = exports.getChatChunk = exports.fetchChunksUsingIterator = exports.chatWithAI = void 0;
|
|
7
7
|
var _fulaNativeModule = _interopRequireDefault(require("../interfaces/fulaNativeModule"));
|
|
8
8
|
var _reactNative = require("react-native");
|
|
9
9
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -100,4 +100,62 @@ const fetchChunksUsingIterator = streamID => {
|
|
|
100
100
|
});
|
|
101
101
|
};
|
|
102
102
|
exports.fetchChunksUsingIterator = fetchChunksUsingIterator;
|
|
103
|
+
const streamChunks = (streamID, callbacks) => {
|
|
104
|
+
let active = true;
|
|
105
|
+
const cleanup = () => {
|
|
106
|
+
active = false;
|
|
107
|
+
_reactNative.DeviceEventEmitter.removeAllListeners('onChunkReceived');
|
|
108
|
+
_reactNative.DeviceEventEmitter.removeAllListeners('onStreamingCompleted');
|
|
109
|
+
_reactNative.DeviceEventEmitter.removeAllListeners('onStreamError');
|
|
110
|
+
};
|
|
111
|
+
const chunkHandler = chunk => {
|
|
112
|
+
if (active && callbacks.onChunk) {
|
|
113
|
+
callbacks.onChunk(chunk);
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
const completionHandler = () => {
|
|
117
|
+
if (active) {
|
|
118
|
+
cleanup();
|
|
119
|
+
if (callbacks.onComplete) {
|
|
120
|
+
callbacks.onComplete();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const errorHandler = error => {
|
|
125
|
+
if (active) {
|
|
126
|
+
cleanup();
|
|
127
|
+
if (error.includes('EOF')) {
|
|
128
|
+
// Treat EOF as successful completion
|
|
129
|
+
console.log('Stream completed with EOF');
|
|
130
|
+
if (callbacks.onComplete) {
|
|
131
|
+
callbacks.onComplete();
|
|
132
|
+
}
|
|
133
|
+
} else {
|
|
134
|
+
console.error('Stream error:', error);
|
|
135
|
+
if (callbacks.onError) {
|
|
136
|
+
callbacks.onError(new Error(error || 'Unknown stream error'));
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
_reactNative.DeviceEventEmitter.addListener('onChunkReceived', chunkHandler);
|
|
142
|
+
_reactNative.DeviceEventEmitter.addListener('onStreamingCompleted', completionHandler);
|
|
143
|
+
_reactNative.DeviceEventEmitter.addListener('onStreamError', errorHandler);
|
|
144
|
+
_fulaNativeModule.default.streamChunks(streamID).catch(error => {
|
|
145
|
+
if (active) {
|
|
146
|
+
cleanup();
|
|
147
|
+
if (error.message.includes('EOF')) {
|
|
148
|
+
if (callbacks.onComplete) {
|
|
149
|
+
callbacks.onComplete();
|
|
150
|
+
}
|
|
151
|
+
} else if (callbacks.onError) {
|
|
152
|
+
callbacks.onError(error);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
// Return a cleanup function that the caller can use to stop listening
|
|
158
|
+
return cleanup;
|
|
159
|
+
};
|
|
160
|
+
exports.streamChunks = streamChunks;
|
|
103
161
|
//# sourceMappingURL=fx-ai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_fulaNativeModule","_interopRequireDefault","require","_reactNative","e","__esModule","default","chatWithAI","aiModel","userMessage","console","log","res","Fula","then","res1","error","catch","err","exports","getChatChunk","streamID","trim","parsedChunk","JSON","parse","status","msg","content","fetchChunksUsingIterator","Promise","resolve","reject","fullResponse","active","cleanup","DeviceEventEmitter","removeAllListeners","chunkHandler","chunk","completionHandler","errorHandler","includes","Error","addListener","streamChunks","message"],"sourceRoot":"..\\..\\..\\src","sources":["protocols/fx-ai.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_fulaNativeModule","_interopRequireDefault","require","_reactNative","e","__esModule","default","chatWithAI","aiModel","userMessage","console","log","res","Fula","then","res1","error","catch","err","exports","getChatChunk","streamID","trim","parsedChunk","JSON","parse","status","msg","content","fetchChunksUsingIterator","Promise","resolve","reject","fullResponse","active","cleanup","DeviceEventEmitter","removeAllListeners","chunkHandler","chunk","completionHandler","errorHandler","includes","Error","addListener","streamChunks","message","callbacks","onChunk","onComplete","onError"],"sourceRoot":"..\\..\\..\\src","sources":["protocols/fx-ai.ts"],"mappings":"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","ignoreList":[]}
|
|
@@ -90,4 +90,61 @@ export const fetchChunksUsingIterator = streamID => {
|
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
92
|
};
|
|
93
|
+
export const streamChunks = (streamID, callbacks) => {
|
|
94
|
+
let active = true;
|
|
95
|
+
const cleanup = () => {
|
|
96
|
+
active = false;
|
|
97
|
+
DeviceEventEmitter.removeAllListeners('onChunkReceived');
|
|
98
|
+
DeviceEventEmitter.removeAllListeners('onStreamingCompleted');
|
|
99
|
+
DeviceEventEmitter.removeAllListeners('onStreamError');
|
|
100
|
+
};
|
|
101
|
+
const chunkHandler = chunk => {
|
|
102
|
+
if (active && callbacks.onChunk) {
|
|
103
|
+
callbacks.onChunk(chunk);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
const completionHandler = () => {
|
|
107
|
+
if (active) {
|
|
108
|
+
cleanup();
|
|
109
|
+
if (callbacks.onComplete) {
|
|
110
|
+
callbacks.onComplete();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
const errorHandler = error => {
|
|
115
|
+
if (active) {
|
|
116
|
+
cleanup();
|
|
117
|
+
if (error.includes('EOF')) {
|
|
118
|
+
// Treat EOF as successful completion
|
|
119
|
+
console.log('Stream completed with EOF');
|
|
120
|
+
if (callbacks.onComplete) {
|
|
121
|
+
callbacks.onComplete();
|
|
122
|
+
}
|
|
123
|
+
} else {
|
|
124
|
+
console.error('Stream error:', error);
|
|
125
|
+
if (callbacks.onError) {
|
|
126
|
+
callbacks.onError(new Error(error || 'Unknown stream error'));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
};
|
|
131
|
+
DeviceEventEmitter.addListener('onChunkReceived', chunkHandler);
|
|
132
|
+
DeviceEventEmitter.addListener('onStreamingCompleted', completionHandler);
|
|
133
|
+
DeviceEventEmitter.addListener('onStreamError', errorHandler);
|
|
134
|
+
Fula.streamChunks(streamID).catch(error => {
|
|
135
|
+
if (active) {
|
|
136
|
+
cleanup();
|
|
137
|
+
if (error.message.includes('EOF')) {
|
|
138
|
+
if (callbacks.onComplete) {
|
|
139
|
+
callbacks.onComplete();
|
|
140
|
+
}
|
|
141
|
+
} else if (callbacks.onError) {
|
|
142
|
+
callbacks.onError(error);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
// Return a cleanup function that the caller can use to stop listening
|
|
148
|
+
return cleanup;
|
|
149
|
+
};
|
|
93
150
|
//# sourceMappingURL=fx-ai.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Fula","DeviceEventEmitter","chatWithAI","aiModel","userMessage","console","log","res","then","res1","e","error","catch","err","getChatChunk","streamID","trim","parsedChunk","JSON","parse","status","msg","content","fetchChunksUsingIterator","Promise","resolve","reject","fullResponse","active","cleanup","removeAllListeners","chunkHandler","chunk","completionHandler","errorHandler","includes","Error","addListener","streamChunks","message"],"sourceRoot":"..\\..\\..\\src","sources":["protocols/fx-ai.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["Fula","DeviceEventEmitter","chatWithAI","aiModel","userMessage","console","log","res","then","res1","e","error","catch","err","getChatChunk","streamID","trim","parsedChunk","JSON","parse","status","msg","content","fetchChunksUsingIterator","Promise","resolve","reject","fullResponse","active","cleanup","removeAllListeners","chunkHandler","chunk","completionHandler","errorHandler","includes","Error","addListener","streamChunks","message","callbacks","onChunk","onComplete","onError"],"sourceRoot":"..\\..\\..\\src","sources":["protocols/fx-ai.ts"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
package/src/protocols/fx-ai.ts
CHANGED
|
@@ -1,111 +1,182 @@
|
|
|
1
|
-
import Fula from '../interfaces/fulaNativeModule';
|
|
2
|
-
import { DeviceEventEmitter } from 'react-native';
|
|
3
|
-
|
|
4
|
-
export const chatWithAI = (
|
|
5
|
-
aiModel: string,
|
|
6
|
-
userMessage: string
|
|
7
|
-
): Promise<string> => {
|
|
8
|
-
console.log('chatWithAI in react-native started');
|
|
9
|
-
let res = Fula.chatWithAI(aiModel, userMessage)
|
|
10
|
-
.then((res1) => {
|
|
11
|
-
try {
|
|
12
|
-
return res1; // Return the stream ID directly
|
|
13
|
-
} catch (e) {
|
|
14
|
-
console.error('Error parsing res in chatWithAI:', e);
|
|
15
|
-
throw e; // Rethrow the error to maintain the rejection state
|
|
16
|
-
}
|
|
17
|
-
})
|
|
18
|
-
.catch((err) => {
|
|
19
|
-
console.error('Error starting chat with AI:', err);
|
|
20
|
-
throw err; // Rethrow the error to maintain the rejection state
|
|
21
|
-
});
|
|
22
|
-
return res;
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
export const getChatChunk = (streamID: string): Promise<string> => {
|
|
26
|
-
console.log('getChatChunk in react-native started');
|
|
27
|
-
let res = Fula.getChatChunk(streamID)
|
|
28
|
-
.then((res1) => {
|
|
29
|
-
try {
|
|
30
|
-
if (!res1 || res1.trim() === "") {
|
|
31
|
-
console.log('Empty chunk received.');
|
|
32
|
-
return ""; // Return an empty string for empty chunks
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
console.log('Raw response from GetChatChunk:', res1); // Log raw response
|
|
36
|
-
|
|
37
|
-
const parsedChunk = JSON.parse(res1);
|
|
38
|
-
if (parsedChunk && parsedChunk.status && parsedChunk.msg) {
|
|
39
|
-
const content = parsedChunk.msg;
|
|
40
|
-
console.log('Processed content:', content); // Log processed content
|
|
41
|
-
return content;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
return "";
|
|
45
|
-
} catch (e) {
|
|
46
|
-
console.error('Error parsing res in getChatChunk:', e);
|
|
47
|
-
throw e;
|
|
48
|
-
}
|
|
49
|
-
})
|
|
50
|
-
.catch((err) => {
|
|
51
|
-
console.error('Error getting chat chunk:', err);
|
|
52
|
-
throw err;
|
|
53
|
-
});
|
|
54
|
-
return res;
|
|
55
|
-
};
|
|
56
|
-
|
|
57
|
-
export const fetchChunksUsingIterator = (streamID: string): Promise<string> => {
|
|
58
|
-
return new Promise((resolve, reject) => {
|
|
59
|
-
let fullResponse = '';
|
|
60
|
-
let active = true;
|
|
61
|
-
|
|
62
|
-
const cleanup = () => {
|
|
63
|
-
active = false;
|
|
64
|
-
DeviceEventEmitter.removeAllListeners('onChunkReceived');
|
|
65
|
-
DeviceEventEmitter.removeAllListeners('onStreamingCompleted');
|
|
66
|
-
DeviceEventEmitter.removeAllListeners('onStreamError');
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
const chunkHandler = (chunk: string) => {
|
|
70
|
-
if (active) fullResponse += chunk;
|
|
71
|
-
console.log('Chunk received:', chunk);
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
const completionHandler = () => {
|
|
75
|
-
if (active) {
|
|
76
|
-
cleanup();
|
|
77
|
-
resolve(fullResponse);
|
|
78
|
-
}
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
const errorHandler = (error: string) => {
|
|
82
|
-
if (active) {
|
|
83
|
-
cleanup();
|
|
84
|
-
if (error.includes('EOF')) {
|
|
85
|
-
// Treat EOF as successful completion
|
|
86
|
-
console.log('Stream completed with EOF');
|
|
87
|
-
resolve(fullResponse);
|
|
88
|
-
} else {
|
|
89
|
-
console.error('Stream error:', error);
|
|
90
|
-
reject(new Error(error || 'Unknown stream error'));
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
DeviceEventEmitter.addListener('onChunkReceived', chunkHandler);
|
|
96
|
-
DeviceEventEmitter.addListener('onStreamingCompleted', completionHandler);
|
|
97
|
-
DeviceEventEmitter.addListener('onStreamError', errorHandler);
|
|
98
|
-
|
|
99
|
-
Fula.streamChunks(streamID)
|
|
100
|
-
.catch(error => {
|
|
101
|
-
if (active) {
|
|
102
|
-
cleanup();
|
|
103
|
-
if (error.message.includes('EOF')) {
|
|
104
|
-
resolve(fullResponse);
|
|
105
|
-
} else {
|
|
106
|
-
reject(error);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
});
|
|
110
|
-
});
|
|
1
|
+
import Fula from '../interfaces/fulaNativeModule';
|
|
2
|
+
import { DeviceEventEmitter } from 'react-native';
|
|
3
|
+
|
|
4
|
+
export const chatWithAI = (
|
|
5
|
+
aiModel: string,
|
|
6
|
+
userMessage: string
|
|
7
|
+
): Promise<string> => {
|
|
8
|
+
console.log('chatWithAI in react-native started');
|
|
9
|
+
let res = Fula.chatWithAI(aiModel, userMessage)
|
|
10
|
+
.then((res1) => {
|
|
11
|
+
try {
|
|
12
|
+
return res1; // Return the stream ID directly
|
|
13
|
+
} catch (e) {
|
|
14
|
+
console.error('Error parsing res in chatWithAI:', e);
|
|
15
|
+
throw e; // Rethrow the error to maintain the rejection state
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
.catch((err) => {
|
|
19
|
+
console.error('Error starting chat with AI:', err);
|
|
20
|
+
throw err; // Rethrow the error to maintain the rejection state
|
|
21
|
+
});
|
|
22
|
+
return res;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const getChatChunk = (streamID: string): Promise<string> => {
|
|
26
|
+
console.log('getChatChunk in react-native started');
|
|
27
|
+
let res = Fula.getChatChunk(streamID)
|
|
28
|
+
.then((res1) => {
|
|
29
|
+
try {
|
|
30
|
+
if (!res1 || res1.trim() === "") {
|
|
31
|
+
console.log('Empty chunk received.');
|
|
32
|
+
return ""; // Return an empty string for empty chunks
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
console.log('Raw response from GetChatChunk:', res1); // Log raw response
|
|
36
|
+
|
|
37
|
+
const parsedChunk = JSON.parse(res1);
|
|
38
|
+
if (parsedChunk && parsedChunk.status && parsedChunk.msg) {
|
|
39
|
+
const content = parsedChunk.msg;
|
|
40
|
+
console.log('Processed content:', content); // Log processed content
|
|
41
|
+
return content;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return "";
|
|
45
|
+
} catch (e) {
|
|
46
|
+
console.error('Error parsing res in getChatChunk:', e);
|
|
47
|
+
throw e;
|
|
48
|
+
}
|
|
49
|
+
})
|
|
50
|
+
.catch((err) => {
|
|
51
|
+
console.error('Error getting chat chunk:', err);
|
|
52
|
+
throw err;
|
|
53
|
+
});
|
|
54
|
+
return res;
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
export const fetchChunksUsingIterator = (streamID: string): Promise<string> => {
|
|
58
|
+
return new Promise((resolve, reject) => {
|
|
59
|
+
let fullResponse = '';
|
|
60
|
+
let active = true;
|
|
61
|
+
|
|
62
|
+
const cleanup = () => {
|
|
63
|
+
active = false;
|
|
64
|
+
DeviceEventEmitter.removeAllListeners('onChunkReceived');
|
|
65
|
+
DeviceEventEmitter.removeAllListeners('onStreamingCompleted');
|
|
66
|
+
DeviceEventEmitter.removeAllListeners('onStreamError');
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
const chunkHandler = (chunk: string) => {
|
|
70
|
+
if (active) fullResponse += chunk;
|
|
71
|
+
console.log('Chunk received:', chunk);
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const completionHandler = () => {
|
|
75
|
+
if (active) {
|
|
76
|
+
cleanup();
|
|
77
|
+
resolve(fullResponse);
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const errorHandler = (error: string) => {
|
|
82
|
+
if (active) {
|
|
83
|
+
cleanup();
|
|
84
|
+
if (error.includes('EOF')) {
|
|
85
|
+
// Treat EOF as successful completion
|
|
86
|
+
console.log('Stream completed with EOF');
|
|
87
|
+
resolve(fullResponse);
|
|
88
|
+
} else {
|
|
89
|
+
console.error('Stream error:', error);
|
|
90
|
+
reject(new Error(error || 'Unknown stream error'));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
DeviceEventEmitter.addListener('onChunkReceived', chunkHandler);
|
|
96
|
+
DeviceEventEmitter.addListener('onStreamingCompleted', completionHandler);
|
|
97
|
+
DeviceEventEmitter.addListener('onStreamError', errorHandler);
|
|
98
|
+
|
|
99
|
+
Fula.streamChunks(streamID)
|
|
100
|
+
.catch(error => {
|
|
101
|
+
if (active) {
|
|
102
|
+
cleanup();
|
|
103
|
+
if (error.message.includes('EOF')) {
|
|
104
|
+
resolve(fullResponse);
|
|
105
|
+
} else {
|
|
106
|
+
reject(error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
|
|
113
|
+
export interface StreamCallbacks {
|
|
114
|
+
onChunk?: (chunk: string) => void;
|
|
115
|
+
onComplete?: () => void;
|
|
116
|
+
onError?: (error: Error) => void;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export const streamChunks = (streamID: string, callbacks: StreamCallbacks): () => void => {
|
|
120
|
+
let active = true;
|
|
121
|
+
|
|
122
|
+
const cleanup = () => {
|
|
123
|
+
active = false;
|
|
124
|
+
DeviceEventEmitter.removeAllListeners('onChunkReceived');
|
|
125
|
+
DeviceEventEmitter.removeAllListeners('onStreamingCompleted');
|
|
126
|
+
DeviceEventEmitter.removeAllListeners('onStreamError');
|
|
127
|
+
};
|
|
128
|
+
|
|
129
|
+
const chunkHandler = (chunk: string) => {
|
|
130
|
+
if (active && callbacks.onChunk) {
|
|
131
|
+
callbacks.onChunk(chunk);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
const completionHandler = () => {
|
|
136
|
+
if (active) {
|
|
137
|
+
cleanup();
|
|
138
|
+
if (callbacks.onComplete) {
|
|
139
|
+
callbacks.onComplete();
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
const errorHandler = (error: string) => {
|
|
145
|
+
if (active) {
|
|
146
|
+
cleanup();
|
|
147
|
+
if (error.includes('EOF')) {
|
|
148
|
+
// Treat EOF as successful completion
|
|
149
|
+
console.log('Stream completed with EOF');
|
|
150
|
+
if (callbacks.onComplete) {
|
|
151
|
+
callbacks.onComplete();
|
|
152
|
+
}
|
|
153
|
+
} else {
|
|
154
|
+
console.error('Stream error:', error);
|
|
155
|
+
if (callbacks.onError) {
|
|
156
|
+
callbacks.onError(new Error(error || 'Unknown stream error'));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
DeviceEventEmitter.addListener('onChunkReceived', chunkHandler);
|
|
163
|
+
DeviceEventEmitter.addListener('onStreamingCompleted', completionHandler);
|
|
164
|
+
DeviceEventEmitter.addListener('onStreamError', errorHandler);
|
|
165
|
+
|
|
166
|
+
Fula.streamChunks(streamID)
|
|
167
|
+
.catch(error => {
|
|
168
|
+
if (active) {
|
|
169
|
+
cleanup();
|
|
170
|
+
if (error.message.includes('EOF')) {
|
|
171
|
+
if (callbacks.onComplete) {
|
|
172
|
+
callbacks.onComplete();
|
|
173
|
+
}
|
|
174
|
+
} else if (callbacks.onError) {
|
|
175
|
+
callbacks.onError(error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
// Return a cleanup function that the caller can use to stop listening
|
|
181
|
+
return cleanup;
|
|
111
182
|
};
|