@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":"AAAA,OAAOA,IAAI,MAAM,gCAAgC;AACjD,SAASC,kBAAkB,QAAQ,cAAc;AAE/C,OAAO,MAAMC,UAAU,GAAGA,CACxBC,OAAe,EACfC,WAAmB,KACC;EACpBC,OAAO,CAACC,GAAG,CAAC,oCAAoC,CAAC;EACjD,IAAIC,GAAG,GAAGP,IAAI,CAACE,UAAU,CAACC,OAAO,EAAEC,WAAW,CAAC,CAC5CI,IAAI,CAAEC,IAAI,IAAK;IACd,IAAI;MACF,OAAOA,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,OAAOC,CAAC,EAAE;MACVL,OAAO,CAACM,KAAK,CAAC,kCAAkC,EAAED,CAAC,CAAC;MACpD,MAAMA,CAAC,CAAC,CAAC;IACX;EACF,CAAC,CAAC,CACDE,KAAK,CAAEC,GAAG,IAAK;IACdR,OAAO,CAACM,KAAK,CAAC,8BAA8B,EAAEE,GAAG,CAAC;IAClD,MAAMA,GAAG,CAAC,CAAC;EACb,CAAC,CAAC;EACJ,OAAON,GAAG;AACZ,CAAC;AAED,OAAO,MAAMO,YAAY,GAAIC,QAAgB,IAAsB;EACjEV,OAAO,CAACC,GAAG,CAAC,sCAAsC,CAAC;EACnD,IAAIC,GAAG,GAAGP,IAAI,CAACc,YAAY,CAACC,QAAQ,CAAC,CAClCP,IAAI,CAAEC,IAAI,IAAK;IACd,IAAI;MACF,IAAI,CAACA,IAAI,IAAIA,IAAI,CAACO,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/BX,OAAO,CAACC,GAAG,CAAC,uBAAuB,CAAC;QACpC,OAAO,EAAE,CAAC,CAAC;MACb;MAEAD,OAAO,CAACC,GAAG,CAAC,iCAAiC,EAAEG,IAAI,CAAC,CAAC,CAAC;;MAEtD,MAAMQ,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACV,IAAI,CAAC;MACpC,IAAIQ,WAAW,IAAIA,WAAW,CAACG,MAAM,IAAIH,WAAW,CAACI,GAAG,EAAE;QACxD,MAAMC,OAAO,GAAGL,WAAW,CAACI,GAAG;QAC/BhB,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEgB,OAAO,CAAC,CAAC,CAAC;QAC5C,OAAOA,OAAO;MAChB;MAEA,OAAO,EAAE;IACX,CAAC,CAAC,OAAOZ,CAAC,EAAE;MACVL,OAAO,CAACM,KAAK,CAAC,oCAAoC,EAAED,CAAC,CAAC;MACtD,MAAMA,CAAC;IACT;EACF,CAAC,CAAC,CACDE,KAAK,CAAEC,GAAG,IAAK;IACdR,OAAO,CAACM,KAAK,CAAC,2BAA2B,EAAEE,GAAG,CAAC;IAC/C,MAAMA,GAAG;EACX,CAAC,CAAC;EACJ,OAAON,GAAG;AACZ,CAAC;AAED,OAAO,MAAMgB,wBAAwB,GAAIR,QAAgB,IAAsB;EAC7E,OAAO,IAAIS,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAIC,YAAY,GAAG,EAAE;IACrB,IAAIC,MAAM,GAAG,IAAI;IAEjB,MAAMC,OAAO,GAAGA,CAAA,KAAM;MACpBD,MAAM,GAAG,KAAK;MACd3B,kBAAkB,CAAC6B,kBAAkB,CAAC,iBAAiB,CAAC;MACxD7B,kBAAkB,CAAC6B,kBAAkB,CAAC,sBAAsB,CAAC;MAC7D7B,kBAAkB,CAAC6B,kBAAkB,CAAC,eAAe,CAAC;IACxD,CAAC;IAED,MAAMC,YAAY,GAAIC,KAAa,IAAK;MACtC,IAAIJ,MAAM,EAAED,YAAY,IAAIK,KAAK;MACjC3B,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAE0B,KAAK,CAAC;IACvC,CAAC;IAED,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;MAC9B,IAAIL,MAAM,EAAE;QACVC,OAAO,CAAC,CAAC;QACTJ,OAAO,CAACE,YAAY,CAAC;MACvB;IACF,CAAC;IAED,MAAMO,YAAY,GAAIvB,KAAa,IAAK;MACtC,IAAIiB,MAAM,EAAE;QACRC,OAAO,CAAC,CAAC;QACT,IAAIlB,KAAK,CAACwB,QAAQ,CAAC,KAAK,CAAC,EAAE;UACvB;UACA9B,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;UACxCmB,OAAO,CAACE,YAAY,CAAC;QACzB,CAAC,MAAM;UACHtB,OAAO,CAACM,KAAK,CAAC,eAAe,EAAEA,KAAK,CAAC;UACrCe,MAAM,CAAC,IAAIU,KAAK,CAACzB,KAAK,IAAI,sBAAsB,CAAC,CAAC;QACtD;MACJ;IACF,CAAC;IAEDV,kBAAkB,CAACoC,WAAW,CAAC,iBAAiB,EAAEN,YAAY,CAAC;IAC/D9B,kBAAkB,CAACoC,WAAW,CAAC,sBAAsB,EAAEJ,iBAAiB,CAAC;IACzEhC,kBAAkB,CAACoC,WAAW,CAAC,eAAe,EAAEH,YAAY,CAAC;IAE7DlC,IAAI,CAACsC,YAAY,CAACvB,QAAQ,CAAC,CAC1BH,KAAK,CAACD,KAAK,IAAI;MACd,IAAIiB,MAAM,EAAE;QACRC,OAAO,CAAC,CAAC;QACT,IAAIlB,KAAK,CAAC4B,OAAO,CAACJ,QAAQ,CAAC,KAAK,CAAC,EAAE;UAC/BV,OAAO,CAACE,YAAY,CAAC;QACzB,CAAC,MAAM;UACHD,MAAM,CAACf,KAAK,CAAC;QACjB;MACJ;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC","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":"AAAA,OAAOA,IAAI,MAAM,gCAAgC;AACjD,SAASC,kBAAkB,QAAQ,cAAc;AAE/C,OAAO,MAAMC,UAAU,GAAGA,CACxBC,OAAe,EACfC,WAAmB,KACC;EACpBC,OAAO,CAACC,GAAG,CAAC,oCAAoC,CAAC;EACjD,IAAIC,GAAG,GAAGP,IAAI,CAACE,UAAU,CAACC,OAAO,EAAEC,WAAW,CAAC,CAC5CI,IAAI,CAAEC,IAAI,IAAK;IACd,IAAI;MACF,OAAOA,IAAI,CAAC,CAAC;IACf,CAAC,CAAC,OAAOC,CAAC,EAAE;MACVL,OAAO,CAACM,KAAK,CAAC,kCAAkC,EAAED,CAAC,CAAC;MACpD,MAAMA,CAAC,CAAC,CAAC;IACX;EACF,CAAC,CAAC,CACDE,KAAK,CAAEC,GAAG,IAAK;IACdR,OAAO,CAACM,KAAK,CAAC,8BAA8B,EAAEE,GAAG,CAAC;IAClD,MAAMA,GAAG,CAAC,CAAC;EACb,CAAC,CAAC;EACJ,OAAON,GAAG;AACZ,CAAC;AAED,OAAO,MAAMO,YAAY,GAAIC,QAAgB,IAAsB;EACjEV,OAAO,CAACC,GAAG,CAAC,sCAAsC,CAAC;EACnD,IAAIC,GAAG,GAAGP,IAAI,CAACc,YAAY,CAACC,QAAQ,CAAC,CAClCP,IAAI,CAAEC,IAAI,IAAK;IACd,IAAI;MACF,IAAI,CAACA,IAAI,IAAIA,IAAI,CAACO,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/BX,OAAO,CAACC,GAAG,CAAC,uBAAuB,CAAC;QACpC,OAAO,EAAE,CAAC,CAAC;MACb;MAEAD,OAAO,CAACC,GAAG,CAAC,iCAAiC,EAAEG,IAAI,CAAC,CAAC,CAAC;;MAEtD,MAAMQ,WAAW,GAAGC,IAAI,CAACC,KAAK,CAACV,IAAI,CAAC;MACpC,IAAIQ,WAAW,IAAIA,WAAW,CAACG,MAAM,IAAIH,WAAW,CAACI,GAAG,EAAE;QACxD,MAAMC,OAAO,GAAGL,WAAW,CAACI,GAAG;QAC/BhB,OAAO,CAACC,GAAG,CAAC,oBAAoB,EAAEgB,OAAO,CAAC,CAAC,CAAC;QAC5C,OAAOA,OAAO;MAChB;MAEA,OAAO,EAAE;IACX,CAAC,CAAC,OAAOZ,CAAC,EAAE;MACVL,OAAO,CAACM,KAAK,CAAC,oCAAoC,EAAED,CAAC,CAAC;MACtD,MAAMA,CAAC;IACT;EACF,CAAC,CAAC,CACDE,KAAK,CAAEC,GAAG,IAAK;IACdR,OAAO,CAACM,KAAK,CAAC,2BAA2B,EAAEE,GAAG,CAAC;IAC/C,MAAMA,GAAG;EACX,CAAC,CAAC;EACJ,OAAON,GAAG;AACZ,CAAC;AAED,OAAO,MAAMgB,wBAAwB,GAAIR,QAAgB,IAAsB;EAC7E,OAAO,IAAIS,OAAO,CAAC,CAACC,OAAO,EAAEC,MAAM,KAAK;IACtC,IAAIC,YAAY,GAAG,EAAE;IACrB,IAAIC,MAAM,GAAG,IAAI;IAEjB,MAAMC,OAAO,GAAGA,CAAA,KAAM;MACpBD,MAAM,GAAG,KAAK;MACd3B,kBAAkB,CAAC6B,kBAAkB,CAAC,iBAAiB,CAAC;MACxD7B,kBAAkB,CAAC6B,kBAAkB,CAAC,sBAAsB,CAAC;MAC7D7B,kBAAkB,CAAC6B,kBAAkB,CAAC,eAAe,CAAC;IACxD,CAAC;IAED,MAAMC,YAAY,GAAIC,KAAa,IAAK;MACtC,IAAIJ,MAAM,EAAED,YAAY,IAAIK,KAAK;MACjC3B,OAAO,CAACC,GAAG,CAAC,iBAAiB,EAAE0B,KAAK,CAAC;IACvC,CAAC;IAED,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;MAC9B,IAAIL,MAAM,EAAE;QACVC,OAAO,CAAC,CAAC;QACTJ,OAAO,CAACE,YAAY,CAAC;MACvB;IACF,CAAC;IAED,MAAMO,YAAY,GAAIvB,KAAa,IAAK;MACtC,IAAIiB,MAAM,EAAE;QACRC,OAAO,CAAC,CAAC;QACT,IAAIlB,KAAK,CAACwB,QAAQ,CAAC,KAAK,CAAC,EAAE;UACvB;UACA9B,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;UACxCmB,OAAO,CAACE,YAAY,CAAC;QACzB,CAAC,MAAM;UACHtB,OAAO,CAACM,KAAK,CAAC,eAAe,EAAEA,KAAK,CAAC;UACrCe,MAAM,CAAC,IAAIU,KAAK,CAACzB,KAAK,IAAI,sBAAsB,CAAC,CAAC;QACtD;MACJ;IACF,CAAC;IAEDV,kBAAkB,CAACoC,WAAW,CAAC,iBAAiB,EAAEN,YAAY,CAAC;IAC/D9B,kBAAkB,CAACoC,WAAW,CAAC,sBAAsB,EAAEJ,iBAAiB,CAAC;IACzEhC,kBAAkB,CAACoC,WAAW,CAAC,eAAe,EAAEH,YAAY,CAAC;IAE7DlC,IAAI,CAACsC,YAAY,CAACvB,QAAQ,CAAC,CAC1BH,KAAK,CAACD,KAAK,IAAI;MACd,IAAIiB,MAAM,EAAE;QACRC,OAAO,CAAC,CAAC;QACT,IAAIlB,KAAK,CAAC4B,OAAO,CAACJ,QAAQ,CAAC,KAAK,CAAC,EAAE;UAC/BV,OAAO,CAACE,YAAY,CAAC;QACzB,CAAC,MAAM;UACHD,MAAM,CAACf,KAAK,CAAC;QACjB;MACJ;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;AACJ,CAAC;AAQD,OAAO,MAAM2B,YAAY,GAAGA,CAACvB,QAAgB,EAAEyB,SAA0B,KAAiB;EACxF,IAAIZ,MAAM,GAAG,IAAI;EAEjB,MAAMC,OAAO,GAAGA,CAAA,KAAM;IACpBD,MAAM,GAAG,KAAK;IACd3B,kBAAkB,CAAC6B,kBAAkB,CAAC,iBAAiB,CAAC;IACxD7B,kBAAkB,CAAC6B,kBAAkB,CAAC,sBAAsB,CAAC;IAC7D7B,kBAAkB,CAAC6B,kBAAkB,CAAC,eAAe,CAAC;EACxD,CAAC;EAED,MAAMC,YAAY,GAAIC,KAAa,IAAK;IACtC,IAAIJ,MAAM,IAAIY,SAAS,CAACC,OAAO,EAAE;MAC/BD,SAAS,CAACC,OAAO,CAACT,KAAK,CAAC;IAC1B;EACF,CAAC;EAED,MAAMC,iBAAiB,GAAGA,CAAA,KAAM;IAC9B,IAAIL,MAAM,EAAE;MACVC,OAAO,CAAC,CAAC;MACT,IAAIW,SAAS,CAACE,UAAU,EAAE;QACxBF,SAAS,CAACE,UAAU,CAAC,CAAC;MACxB;IACF;EACF,CAAC;EAED,MAAMR,YAAY,GAAIvB,KAAa,IAAK;IACtC,IAAIiB,MAAM,EAAE;MACVC,OAAO,CAAC,CAAC;MACT,IAAIlB,KAAK,CAACwB,QAAQ,CAAC,KAAK,CAAC,EAAE;QACzB;QACA9B,OAAO,CAACC,GAAG,CAAC,2BAA2B,CAAC;QACxC,IAAIkC,SAAS,CAACE,UAAU,EAAE;UACxBF,SAAS,CAACE,UAAU,CAAC,CAAC;QACxB;MACF,CAAC,MAAM;QACLrC,OAAO,CAACM,KAAK,CAAC,eAAe,EAAEA,KAAK,CAAC;QACrC,IAAI6B,SAAS,CAACG,OAAO,EAAE;UACrBH,SAAS,CAACG,OAAO,CAAC,IAAIP,KAAK,CAACzB,KAAK,IAAI,sBAAsB,CAAC,CAAC;QAC/D;MACF;IACF;EACF,CAAC;EAEDV,kBAAkB,CAACoC,WAAW,CAAC,iBAAiB,EAAEN,YAAY,CAAC;EAC/D9B,kBAAkB,CAACoC,WAAW,CAAC,sBAAsB,EAAEJ,iBAAiB,CAAC;EACzEhC,kBAAkB,CAACoC,WAAW,CAAC,eAAe,EAAEH,YAAY,CAAC;EAE7DlC,IAAI,CAACsC,YAAY,CAACvB,QAAQ,CAAC,CACxBH,KAAK,CAACD,KAAK,IAAI;IACd,IAAIiB,MAAM,EAAE;MACVC,OAAO,CAAC,CAAC;MACT,IAAIlB,KAAK,CAAC4B,OAAO,CAACJ,QAAQ,CAAC,KAAK,CAAC,EAAE;QACjC,IAAIK,SAAS,CAACE,UAAU,EAAE;UACxBF,SAAS,CAACE,UAAU,CAAC,CAAC;QACxB;MACF,CAAC,MAAM,IAAIF,SAAS,CAACG,OAAO,EAAE;QAC5BH,SAAS,CAACG,OAAO,CAAChC,KAAK,CAAC;MAC1B;IACF;EACF,CAAC,CAAC;;EAEJ;EACA,OAAOkB,OAAO;AAChB,CAAC","ignoreList":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@functionland/react-native-fula",
3
- "version": "1.55.1",
3
+ "version": "1.55.2",
4
4
  "description": "This package is a bridge to use the Fula libp2p protocols in the react-native which is using wnfs",
5
5
  "type": "module",
6
6
  "main": "lib/commonjs/index",
@@ -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
  };