@pairsystems/goodmem-client 1.0.1-beta.2 → 1.0.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.
package/dist/client.js CHANGED
@@ -11,6 +11,7 @@ var _MemoriesApi = _interopRequireDefault(require("./api/MemoriesApi.js"));
11
11
  var _SpacesApi = _interopRequireDefault(require("./api/SpacesApi.js"));
12
12
  var _SystemApi = _interopRequireDefault(require("./api/SystemApi.js"));
13
13
  var _UsersApi = _interopRequireDefault(require("./api/UsersApi.js"));
14
+ var _streaming = require("./streaming.js");
14
15
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
15
16
  function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
16
17
  function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
@@ -44,6 +45,9 @@ var Client = exports.Client = /*#__PURE__*/function () {
44
45
  this._spacesApi = new _SpacesApi["default"](this._apiClient);
45
46
  this._systemApi = new _SystemApi["default"](this._apiClient);
46
47
  this._usersApi = new _UsersApi["default"](this._apiClient);
48
+
49
+ // Initialize streaming client
50
+ this._streamingClient = new _streaming.StreamingClient(this._apiClient);
47
51
  }
48
52
 
49
53
  /**
@@ -156,5 +160,16 @@ var Client = exports.Client = /*#__PURE__*/function () {
156
160
  value: function getUsersApi() {
157
161
  return this._usersApi;
158
162
  }
163
+
164
+ /**
165
+ * Gets the Streaming Client for memory streaming operations.
166
+ *
167
+ * @returns {StreamingClient} The StreamingClient instance
168
+ */
169
+ }, {
170
+ key: "getStreamingClient",
171
+ value: function getStreamingClient() {
172
+ return this._streamingClient;
173
+ }
159
174
  }]);
160
175
  }();
package/dist/index.js CHANGED
@@ -339,4 +339,5 @@ var _RerankersApi = _interopRequireDefault(require("./api/RerankersApi"));
339
339
  var _SpacesApi = _interopRequireDefault(require("./api/SpacesApi"));
340
340
  var _SystemApi = _interopRequireDefault(require("./api/SystemApi"));
341
341
  var _UsersApi = _interopRequireDefault(require("./api/UsersApi"));
342
+ var _streaming = require("./streaming.js");
342
343
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
@@ -0,0 +1,649 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.StreamingClient = exports.StreamError = void 0;
7
+ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
8
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
9
+ function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
10
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
11
+ function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
12
+ function _wrapNativeSuper(t) { var r = "function" == typeof Map ? new Map() : void 0; return _wrapNativeSuper = function _wrapNativeSuper(t) { if (null === t || !_isNativeFunction(t)) return t; if ("function" != typeof t) throw new TypeError("Super expression must either be null or a function"); if (void 0 !== r) { if (r.has(t)) return r.get(t); r.set(t, Wrapper); } function Wrapper() { return _construct(t, arguments, _getPrototypeOf(this).constructor); } return Wrapper.prototype = Object.create(t.prototype, { constructor: { value: Wrapper, enumerable: !1, writable: !0, configurable: !0 } }), _setPrototypeOf(Wrapper, t); }, _wrapNativeSuper(t); }
13
+ function _construct(t, e, r) { if (_isNativeReflectConstruct()) return Reflect.construct.apply(null, arguments); var o = [null]; o.push.apply(o, e); var p = new (t.bind.apply(t, o))(); return r && _setPrototypeOf(p, r.prototype), p; }
14
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
15
+ function _isNativeFunction(t) { try { return -1 !== Function.toString.call(t).indexOf("[native code]"); } catch (n) { return "function" == typeof t; } }
16
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
17
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
18
+ function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
19
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
20
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
21
+ function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
22
+ function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { if (r) i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n;else { var o = function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); }; o("next", 0), o("throw", 1), o("return", 2); } }, _regeneratorDefine2(e, r, n, t); }
23
+ function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
24
+ function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
25
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
26
+ function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
27
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
28
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
29
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
30
+ function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
31
+ function _asyncIterator(r) { var n, t, o, e = 2; for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { if (t && null != (n = r[t])) return n.call(r); if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); t = "@@asyncIterator", o = "@@iterator"; } throw new TypeError("Object is not async iterable"); }
32
+ function AsyncFromSyncIterator(r) { function AsyncFromSyncIteratorContinuation(r) { if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); var n = r.done; return Promise.resolve(r.value).then(function (r) { return { value: r, done: n }; }); } return AsyncFromSyncIterator = function AsyncFromSyncIterator(r) { this.s = r, this.n = r.next; }, AsyncFromSyncIterator.prototype = { s: null, n: null, next: function next() { return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); }, "return": function _return(r) { var n = this.s["return"]; return void 0 === n ? Promise.resolve({ value: r, done: !0 }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); }, "throw": function _throw(r) { var n = this.s["return"]; return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); } }, new AsyncFromSyncIterator(r); }
33
+ function _awaitAsyncGenerator(e) { return new _OverloadYield(e, 0); }
34
+ function _wrapAsyncGenerator(e) { return function () { return new AsyncGenerator(e.apply(this, arguments)); }; }
35
+ function AsyncGenerator(e) { var r, t; function resume(r, t) { try { var n = e[r](t), o = n.value, u = o instanceof _OverloadYield; Promise.resolve(u ? o.v : o).then(function (t) { if (u) { var i = "return" === r ? "return" : "next"; if (!o.k || t.done) return resume(i, t); t = e[i](t).value; } settle(n.done ? "return" : "normal", t); }, function (e) { resume("throw", e); }); } catch (e) { settle("throw", e); } } function settle(e, n) { switch (e) { case "return": r.resolve({ value: n, done: !0 }); break; case "throw": r.reject(n); break; default: r.resolve({ value: n, done: !1 }); } (r = r.next) ? resume(r.key, r.arg) : t = null; } this._invoke = function (e, n) { return new Promise(function (o, u) { var i = { key: e, arg: n, resolve: o, reject: u, next: null }; t ? t = t.next = i : (r = t = i, resume(e, n)); }); }, "function" != typeof e["return"] && (this["return"] = void 0); }
36
+ AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () { return this; }, AsyncGenerator.prototype.next = function (e) { return this._invoke("next", e); }, AsyncGenerator.prototype["throw"] = function (e) { return this._invoke("throw", e); }, AsyncGenerator.prototype["return"] = function (e) { return this._invoke("return", e); };
37
+ function _OverloadYield(e, d) { this.v = e, this.k = d; }
38
+ /**
39
+ * GoodMem JavaScript Streaming Client
40
+ *
41
+ * This module provides streaming support for memory retrieval operations,
42
+ * ported from the Go client implementation.
43
+ *
44
+ * @module StreamingClient
45
+ * @version 1.0.0
46
+ */
47
+ /**
48
+ * StreamingClient provides streaming support for memory retrieval operations
49
+ */
50
+ var StreamingClient = exports.StreamingClient = /*#__PURE__*/function () {
51
+ /**
52
+ * Creates a new streaming client instance
53
+ * @param {ApiClient} client - The main API client instance
54
+ */
55
+ function StreamingClient(client) {
56
+ _classCallCheck(this, StreamingClient);
57
+ this.client = client;
58
+ }
59
+
60
+ /**
61
+ * Streaming formats supported by the client
62
+ * @readonly
63
+ * @enum {string}
64
+ */
65
+ return _createClass(StreamingClient, [{
66
+ key: "retrieveMemoryStream",
67
+ value: (
68
+ /**
69
+ * Starts streaming memory retrieval
70
+ * @param {AbortSignal} signal - Abort signal for cancellation
71
+ * @param {MemoryStreamRequest} request - The streaming request parameters
72
+ * @returns {Promise<AsyncIterableIterator<MemoryStreamResponse>>} Async iterator of streaming events
73
+ */
74
+ function () {
75
+ var _retrieveMemoryStream = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee(signal, request) {
76
+ var baseURL, endpoint, params, fullURL, headers, response, errorText;
77
+ return _regenerator().w(function (_context) {
78
+ while (1) switch (_context.n) {
79
+ case 0:
80
+ if (request) {
81
+ _context.n = 1;
82
+ break;
83
+ }
84
+ throw new Error('Request cannot be null');
85
+ case 1:
86
+ if (request.message) {
87
+ _context.n = 2;
88
+ break;
89
+ }
90
+ throw new Error('Message is required');
91
+ case 2:
92
+ if (!request.format) {
93
+ request.format = StreamingClient.StreamingFormat.NDJSON;
94
+ }
95
+
96
+ // Build URL and query parameters
97
+ baseURL = this.client.basePath || 'http://localhost:8080';
98
+ endpoint = "".concat(baseURL, "/v1/memories:retrieve");
99
+ params = new URLSearchParams();
100
+ params.append('message', request.message);
101
+ if (request.spaceIds && request.spaceIds.length > 0) {
102
+ params.append('spaceIds', request.spaceIds.join(','));
103
+ }
104
+ if (request.requestedSize !== undefined) {
105
+ params.append('requestedSize', request.requestedSize.toString());
106
+ }
107
+ if (request.fetchMemory !== undefined) {
108
+ params.append('fetchMemory', request.fetchMemory.toString());
109
+ }
110
+ if (request.fetchMemoryContent !== undefined) {
111
+ params.append('fetchMemoryContent', request.fetchMemoryContent.toString());
112
+ }
113
+ if (request.generateAbstract !== undefined) {
114
+ params.append('generateAbstract', request.generateAbstract.toString());
115
+ }
116
+ fullURL = "".concat(endpoint, "?").concat(params.toString()); // Set appropriate headers
117
+ headers = {
118
+ 'Accept': request.format === StreamingClient.StreamingFormat.SSE ? 'text/event-stream' : 'application/x-ndjson'
119
+ }; // Add authentication headers
120
+ if (this.client.defaultHeaders) {
121
+ Object.assign(headers, this.client.defaultHeaders);
122
+ }
123
+
124
+ // Make the fetch request
125
+ _context.n = 3;
126
+ return fetch(fullURL, {
127
+ method: 'GET',
128
+ headers: headers,
129
+ signal: signal
130
+ });
131
+ case 3:
132
+ response = _context.v;
133
+ if (response.ok) {
134
+ _context.n = 5;
135
+ break;
136
+ }
137
+ _context.n = 4;
138
+ return response.text();
139
+ case 4:
140
+ errorText = _context.v;
141
+ throw new StreamError(errorText, response.status);
142
+ case 5:
143
+ if (!(request.format === StreamingClient.StreamingFormat.SSE)) {
144
+ _context.n = 6;
145
+ break;
146
+ }
147
+ return _context.a(2, this._processSSEStream(response));
148
+ case 6:
149
+ return _context.a(2, this._processNDJSONStream(response));
150
+ case 7:
151
+ return _context.a(2);
152
+ }
153
+ }, _callee, this);
154
+ }));
155
+ function retrieveMemoryStream(_x, _x2) {
156
+ return _retrieveMemoryStream.apply(this, arguments);
157
+ }
158
+ return retrieveMemoryStream;
159
+ }()
160
+ /**
161
+ * Processes NDJSON streaming response
162
+ * @private
163
+ * @param {Response} response - The fetch response
164
+ * @returns {AsyncIterableIterator<MemoryStreamResponse>} Async iterator of events
165
+ */
166
+ )
167
+ }, {
168
+ key: "_processNDJSONStream",
169
+ value: function _processNDJSONStream(response) {
170
+ return _wrapAsyncGenerator(/*#__PURE__*/_regenerator().m(function _callee2() {
171
+ var reader, decoder, buffer, _yield$_awaitAsyncGen, done, value, lines, _iterator2, _step2, line, event, _event, _t, _t2, _t3;
172
+ return _regenerator().w(function (_context2) {
173
+ while (1) switch (_context2.n) {
174
+ case 0:
175
+ reader = response.body.getReader();
176
+ decoder = new TextDecoder();
177
+ buffer = '';
178
+ _context2.p = 1;
179
+ case 2:
180
+ if (!true) {
181
+ _context2.n = 15;
182
+ break;
183
+ }
184
+ _context2.n = 3;
185
+ return _awaitAsyncGenerator(reader.read());
186
+ case 3:
187
+ _yield$_awaitAsyncGen = _context2.v;
188
+ done = _yield$_awaitAsyncGen.done;
189
+ value = _yield$_awaitAsyncGen.value;
190
+ if (!done) {
191
+ _context2.n = 4;
192
+ break;
193
+ }
194
+ return _context2.a(3, 15);
195
+ case 4:
196
+ buffer += decoder.decode(value, {
197
+ stream: true
198
+ });
199
+
200
+ // Process complete lines
201
+ lines = buffer.split('\n');
202
+ buffer = lines.pop() || ''; // Keep the last incomplete line
203
+ _iterator2 = _createForOfIteratorHelper(lines);
204
+ _context2.p = 5;
205
+ _iterator2.s();
206
+ case 6:
207
+ if ((_step2 = _iterator2.n()).done) {
208
+ _context2.n = 11;
209
+ break;
210
+ }
211
+ line = _step2.value;
212
+ if (!line.trim()) {
213
+ _context2.n = 10;
214
+ break;
215
+ }
216
+ _context2.p = 7;
217
+ event = JSON.parse(line);
218
+ _context2.n = 8;
219
+ return event;
220
+ case 8:
221
+ _context2.n = 10;
222
+ break;
223
+ case 9:
224
+ _context2.p = 9;
225
+ _t = _context2.v;
226
+ // Skip invalid JSON lines
227
+ console.warn('Failed to parse JSON line:', line, _t);
228
+ case 10:
229
+ _context2.n = 6;
230
+ break;
231
+ case 11:
232
+ _context2.n = 13;
233
+ break;
234
+ case 12:
235
+ _context2.p = 12;
236
+ _t2 = _context2.v;
237
+ _iterator2.e(_t2);
238
+ case 13:
239
+ _context2.p = 13;
240
+ _iterator2.f();
241
+ return _context2.f(13);
242
+ case 14:
243
+ _context2.n = 2;
244
+ break;
245
+ case 15:
246
+ if (!buffer.trim()) {
247
+ _context2.n = 19;
248
+ break;
249
+ }
250
+ _context2.p = 16;
251
+ _event = JSON.parse(buffer);
252
+ _context2.n = 17;
253
+ return _event;
254
+ case 17:
255
+ _context2.n = 19;
256
+ break;
257
+ case 18:
258
+ _context2.p = 18;
259
+ _t3 = _context2.v;
260
+ console.warn('Failed to parse final JSON:', buffer, _t3);
261
+ case 19:
262
+ _context2.p = 19;
263
+ reader.releaseLock();
264
+ return _context2.f(19);
265
+ case 20:
266
+ return _context2.a(2);
267
+ }
268
+ }, _callee2, null, [[16, 18], [7, 9], [5, 12, 13, 14], [1,, 19, 20]]);
269
+ }))();
270
+ }
271
+
272
+ /**
273
+ * Processes Server-Sent Events streaming response
274
+ * @private
275
+ * @param {Response} response - The fetch response
276
+ * @returns {AsyncIterableIterator<MemoryStreamResponse>} Async iterator of events
277
+ */
278
+ }, {
279
+ key: "_processSSEStream",
280
+ value: function _processSSEStream(response) {
281
+ var _this = this;
282
+ return _wrapAsyncGenerator(/*#__PURE__*/_regenerator().m(function _callee3() {
283
+ var reader, decoder, buffer, _yield$_awaitAsyncGen2, done, value, events, _iterator3, _step3, eventText, event, _event2, _t4;
284
+ return _regenerator().w(function (_context3) {
285
+ while (1) switch (_context3.n) {
286
+ case 0:
287
+ reader = response.body.getReader();
288
+ decoder = new TextDecoder();
289
+ buffer = '';
290
+ _context3.p = 1;
291
+ case 2:
292
+ if (!true) {
293
+ _context3.n = 12;
294
+ break;
295
+ }
296
+ _context3.n = 3;
297
+ return _awaitAsyncGenerator(reader.read());
298
+ case 3:
299
+ _yield$_awaitAsyncGen2 = _context3.v;
300
+ done = _yield$_awaitAsyncGen2.done;
301
+ value = _yield$_awaitAsyncGen2.value;
302
+ if (!done) {
303
+ _context3.n = 4;
304
+ break;
305
+ }
306
+ return _context3.a(3, 12);
307
+ case 4:
308
+ buffer += decoder.decode(value, {
309
+ stream: true
310
+ });
311
+
312
+ // Process complete events (separated by double newlines)
313
+ events = buffer.split('\n\n');
314
+ buffer = events.pop() || ''; // Keep the last incomplete event
315
+ _iterator3 = _createForOfIteratorHelper(events);
316
+ _context3.p = 5;
317
+ _iterator3.s();
318
+ case 6:
319
+ if ((_step3 = _iterator3.n()).done) {
320
+ _context3.n = 8;
321
+ break;
322
+ }
323
+ eventText = _step3.value;
324
+ if (!eventText.trim()) {
325
+ _context3.n = 7;
326
+ break;
327
+ }
328
+ event = _this._parseSSEEvent(eventText);
329
+ if (!event) {
330
+ _context3.n = 7;
331
+ break;
332
+ }
333
+ _context3.n = 7;
334
+ return event;
335
+ case 7:
336
+ _context3.n = 6;
337
+ break;
338
+ case 8:
339
+ _context3.n = 10;
340
+ break;
341
+ case 9:
342
+ _context3.p = 9;
343
+ _t4 = _context3.v;
344
+ _iterator3.e(_t4);
345
+ case 10:
346
+ _context3.p = 10;
347
+ _iterator3.f();
348
+ return _context3.f(10);
349
+ case 11:
350
+ _context3.n = 2;
351
+ break;
352
+ case 12:
353
+ if (!buffer.trim()) {
354
+ _context3.n = 13;
355
+ break;
356
+ }
357
+ _event2 = _this._parseSSEEvent(buffer);
358
+ if (!_event2) {
359
+ _context3.n = 13;
360
+ break;
361
+ }
362
+ _context3.n = 13;
363
+ return _event2;
364
+ case 13:
365
+ _context3.p = 13;
366
+ reader.releaseLock();
367
+ return _context3.f(13);
368
+ case 14:
369
+ return _context3.a(2);
370
+ }
371
+ }, _callee3, null, [[5, 9, 10, 11], [1,, 13, 14]]);
372
+ }))();
373
+ }
374
+
375
+ /**
376
+ * Parses a single SSE event
377
+ * @private
378
+ * @param {string} eventText - The raw SSE event text
379
+ * @returns {MemoryStreamResponse|null} Parsed event or null if invalid
380
+ */
381
+ }, {
382
+ key: "_parseSSEEvent",
383
+ value: function _parseSSEEvent(eventText) {
384
+ var lines = eventText.split('\n');
385
+ var eventType = '';
386
+ var data = '';
387
+ var _iterator4 = _createForOfIteratorHelper(lines),
388
+ _step4;
389
+ try {
390
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
391
+ var line = _step4.value;
392
+ if (line.startsWith('event:')) {
393
+ eventType = line.substring(6).trim();
394
+ } else if (line.startsWith('data:')) {
395
+ data = line.substring(5).trim();
396
+ }
397
+ }
398
+
399
+ // Skip close events and events without data
400
+ } catch (err) {
401
+ _iterator4.e(err);
402
+ } finally {
403
+ _iterator4.f();
404
+ }
405
+ if (eventType === 'close' || !data) {
406
+ return null;
407
+ }
408
+ try {
409
+ return JSON.parse(data);
410
+ } catch (parseError) {
411
+ console.warn('Failed to parse SSE event data:', data, parseError);
412
+ return null;
413
+ }
414
+ }
415
+
416
+ /**
417
+ * Provides a simplified interface for memory streaming
418
+ * @param {AbortSignal} signal - Abort signal for cancellation
419
+ * @param {string} message - The search message
420
+ * @param {string[]} spaceIds - Array of space IDs to search
421
+ * @returns {Promise<AsyncIterableIterator<MemoryStreamResponse>>} Async iterator of streaming events
422
+ */
423
+ }, {
424
+ key: "retrieveMemoryStreamSimple",
425
+ value: (function () {
426
+ var _retrieveMemoryStreamSimple = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee4(signal, message, spaceIds) {
427
+ var request;
428
+ return _regenerator().w(function (_context4) {
429
+ while (1) switch (_context4.n) {
430
+ case 0:
431
+ request = {
432
+ message: message,
433
+ spaceIds: spaceIds,
434
+ format: StreamingClient.StreamingFormat.NDJSON
435
+ };
436
+ return _context4.a(2, this.retrieveMemoryStream(signal, request));
437
+ }
438
+ }, _callee4, this);
439
+ }));
440
+ function retrieveMemoryStreamSimple(_x3, _x4, _x5) {
441
+ return _retrieveMemoryStreamSimple.apply(this, arguments);
442
+ }
443
+ return retrieveMemoryStreamSimple;
444
+ }()
445
+ /**
446
+ * Collects all streaming results into an array
447
+ * @param {AbortSignal} signal - Abort signal for cancellation
448
+ * @param {AsyncIterableIterator<MemoryStreamResponse>} stream - The streaming iterator
449
+ * @returns {Promise<MemoryStreamResponse[]>} Array of all streaming events
450
+ */
451
+ )
452
+ }, {
453
+ key: "streamWithTimeout",
454
+ value: (
455
+ /**
456
+ * Provides streaming with a timeout
457
+ * @param {string} message - The search message
458
+ * @param {string[]} spaceIds - Array of space IDs to search
459
+ * @param {number} timeoutMs - Timeout in milliseconds
460
+ * @returns {Promise<MemoryStreamResponse[]>} Array of streaming events
461
+ */
462
+ function () {
463
+ var _streamWithTimeout = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee5(message, spaceIds, timeoutMs) {
464
+ var controller, timeoutId, stream, results, _t5;
465
+ return _regenerator().w(function (_context5) {
466
+ while (1) switch (_context5.n) {
467
+ case 0:
468
+ controller = new AbortController();
469
+ timeoutId = setTimeout(function () {
470
+ return controller.abort();
471
+ }, timeoutMs);
472
+ _context5.p = 1;
473
+ _context5.n = 2;
474
+ return this.retrieveMemoryStreamSimple(controller.signal, message, spaceIds);
475
+ case 2:
476
+ stream = _context5.v;
477
+ _context5.n = 3;
478
+ return StreamingClient.collectStreamResults(controller.signal, stream);
479
+ case 3:
480
+ results = _context5.v;
481
+ clearTimeout(timeoutId);
482
+ return _context5.a(2, results);
483
+ case 4:
484
+ _context5.p = 4;
485
+ _t5 = _context5.v;
486
+ clearTimeout(timeoutId);
487
+ if (!(_t5.name === 'AbortError' || _t5.message === 'Operation was aborted')) {
488
+ _context5.n = 5;
489
+ break;
490
+ }
491
+ throw new Error('Streaming operation timed out');
492
+ case 5:
493
+ throw _t5;
494
+ case 6:
495
+ return _context5.a(2);
496
+ }
497
+ }, _callee5, this, [[1, 4]]);
498
+ }));
499
+ function streamWithTimeout(_x6, _x7, _x8) {
500
+ return _streamWithTimeout.apply(this, arguments);
501
+ }
502
+ return streamWithTimeout;
503
+ }())
504
+ }], [{
505
+ key: "collectStreamResults",
506
+ value: (function () {
507
+ var _collectStreamResults = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee6(signal, stream) {
508
+ var results, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, event, _t6, _t7;
509
+ return _regenerator().w(function (_context6) {
510
+ while (1) switch (_context6.n) {
511
+ case 0:
512
+ results = [];
513
+ _context6.p = 1;
514
+ _iteratorAbruptCompletion = false;
515
+ _didIteratorError = false;
516
+ _context6.p = 2;
517
+ _iterator = _asyncIterator(stream);
518
+ case 3:
519
+ _context6.n = 4;
520
+ return _iterator.next();
521
+ case 4:
522
+ if (!(_iteratorAbruptCompletion = !(_step = _context6.v).done)) {
523
+ _context6.n = 7;
524
+ break;
525
+ }
526
+ event = _step.value;
527
+ if (!(signal && signal.aborted)) {
528
+ _context6.n = 5;
529
+ break;
530
+ }
531
+ throw new Error('Operation was aborted');
532
+ case 5:
533
+ results.push(event);
534
+ case 6:
535
+ _iteratorAbruptCompletion = false;
536
+ _context6.n = 3;
537
+ break;
538
+ case 7:
539
+ _context6.n = 9;
540
+ break;
541
+ case 8:
542
+ _context6.p = 8;
543
+ _t6 = _context6.v;
544
+ _didIteratorError = true;
545
+ _iteratorError = _t6;
546
+ case 9:
547
+ _context6.p = 9;
548
+ _context6.p = 10;
549
+ if (!(_iteratorAbruptCompletion && _iterator["return"] != null)) {
550
+ _context6.n = 11;
551
+ break;
552
+ }
553
+ _context6.n = 11;
554
+ return _iterator["return"]();
555
+ case 11:
556
+ _context6.p = 11;
557
+ if (!_didIteratorError) {
558
+ _context6.n = 12;
559
+ break;
560
+ }
561
+ throw _iteratorError;
562
+ case 12:
563
+ return _context6.f(11);
564
+ case 13:
565
+ return _context6.f(9);
566
+ case 14:
567
+ _context6.n = 17;
568
+ break;
569
+ case 15:
570
+ _context6.p = 15;
571
+ _t7 = _context6.v;
572
+ if (!(_t7.name === 'AbortError' || _t7.message === 'Operation was aborted')) {
573
+ _context6.n = 16;
574
+ break;
575
+ }
576
+ throw _t7;
577
+ case 16:
578
+ throw _t7;
579
+ case 17:
580
+ return _context6.a(2, results);
581
+ }
582
+ }, _callee6, null, [[10,, 11, 13], [2, 8, 9, 14], [1, 15]]);
583
+ }));
584
+ function collectStreamResults(_x9, _x0) {
585
+ return _collectStreamResults.apply(this, arguments);
586
+ }
587
+ return collectStreamResults;
588
+ }())
589
+ }]);
590
+ }();
591
+ /**
592
+ * Request parameters for streaming memory retrieval
593
+ * @typedef {Object} MemoryStreamRequest
594
+ * @property {string} message - The search message
595
+ * @property {string[]} [spaceIds] - Array of space IDs to search
596
+ * @property {number} [requestedSize] - Maximum number of results to return
597
+ * @property {boolean} [fetchMemory] - Whether to fetch memory content
598
+ * @property {boolean} [fetchMemoryContent] - Whether to fetch memory content details
599
+ * @property {boolean} [generateAbstract] - Whether to generate abstract
600
+ * @property {string} [format] - Streaming format (ndjson or sse)
601
+ */
602
+ /**
603
+ * Streaming response event
604
+ * @typedef {Object} MemoryStreamResponse
605
+ * @property {Object} [resultSetBoundary] - Result set boundary information
606
+ * @property {StreamRetrievedItem} [retrievedItem] - Retrieved item data
607
+ * @property {Object} [abstractReply] - Abstract reply data
608
+ * @property {Object} [memoryDefinition] - Memory definition data
609
+ * @property {Object} [status] - Status information
610
+ */
611
+ /**
612
+ * Retrieved item in streaming format
613
+ * @typedef {Object} StreamRetrievedItem
614
+ * @property {Object} [memory] - Memory data
615
+ * @property {StreamChunkReference} [chunk] - Chunk reference data
616
+ */
617
+ /**
618
+ * Chunk reference with relevance score
619
+ * @typedef {Object} StreamChunkReference
620
+ * @property {string} resultSetId - Result set identifier
621
+ * @property {Object} chunk - Chunk data
622
+ * @property {number} memoryIndex - Memory index
623
+ * @property {number} relevanceScore - Relevance score
624
+ */
625
+ /**
626
+ * Error that occurred during streaming
627
+ */
628
+ _defineProperty(StreamingClient, "StreamingFormat", {
629
+ NDJSON: 'ndjson',
630
+ SSE: 'sse'
631
+ });
632
+ var StreamError = exports.StreamError = /*#__PURE__*/function (_Error) {
633
+ /**
634
+ * Creates a new StreamError
635
+ * @param {string} message - Error message
636
+ * @param {number} code - HTTP status code
637
+ */
638
+ function StreamError(message, code) {
639
+ var _this2;
640
+ _classCallCheck(this, StreamError);
641
+ _this2 = _callSuper(this, StreamError, ["Streaming error (code ".concat(code, "): ").concat(message)]);
642
+ _this2.name = 'StreamError';
643
+ _this2.code = code;
644
+ _this2.message = message;
645
+ return _this2;
646
+ }
647
+ _inherits(StreamError, _Error);
648
+ return _createClass(StreamError);
649
+ }(/*#__PURE__*/_wrapNativeSuper(Error)); // Export the classes and types
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pairsystems/goodmem-client",
3
- "version": "1.0.1-beta.2",
3
+ "version": "1.0.2",
4
4
  "description": "JavaScript client for GoodMem API",
5
5
  "license": "Unlicense",
6
6
  "main": "dist/index.js",