@functionland/react-native-fula 1.55.1 → 1.55.2
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.
|
@@ -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
|
};
|