instantsearch.js 4.86.1 → 4.87.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/cjs/connectors/autocomplete/connectAutocomplete.js +13 -5
  2. package/cjs/connectors/chat/connectChat.js +92 -20
  3. package/cjs/connectors/filter-suggestions/connectFilterSuggestions.js +255 -0
  4. package/cjs/connectors/index.js +7 -0
  5. package/cjs/connectors/index.umd.js +7 -0
  6. package/cjs/index.js +2 -2
  7. package/cjs/lib/ai-lite/abstract-chat.js +823 -0
  8. package/cjs/lib/ai-lite/index.js +57 -0
  9. package/cjs/lib/ai-lite/stream-parser.js +138 -0
  10. package/cjs/lib/ai-lite/transport.js +218 -0
  11. package/cjs/lib/ai-lite/types.js +1 -0
  12. package/cjs/lib/ai-lite/utils.js +85 -0
  13. package/cjs/lib/chat/chat.js +6 -6
  14. package/cjs/lib/chat/index.js +5 -2
  15. package/cjs/lib/version.js +1 -1
  16. package/cjs/widgets/autocomplete/autocomplete.js +15 -6
  17. package/cjs/widgets/chat/chat.js +32 -3
  18. package/cjs/widgets/filter-suggestions/filter-suggestions.js +131 -0
  19. package/cjs/widgets/index.js +7 -0
  20. package/cjs/widgets/index.umd.js +7 -0
  21. package/dist/instantsearch.development.d.ts +2551 -346
  22. package/dist/instantsearch.development.js +9408 -4314
  23. package/dist/instantsearch.development.js.map +1 -1
  24. package/dist/instantsearch.production.d.ts +2551 -346
  25. package/dist/instantsearch.production.min.d.ts +2551 -346
  26. package/dist/instantsearch.production.min.js +2 -2
  27. package/dist/instantsearch.production.min.js.map +1 -1
  28. package/es/connectors/autocomplete/connectAutocomplete.d.ts +10 -0
  29. package/es/connectors/autocomplete/connectAutocomplete.js +13 -5
  30. package/es/connectors/chat/connectChat.d.ts +24 -14
  31. package/es/connectors/chat/connectChat.js +90 -18
  32. package/es/connectors/filter-suggestions/connectFilterSuggestions.d.ts +95 -0
  33. package/es/connectors/filter-suggestions/connectFilterSuggestions.js +249 -0
  34. package/es/connectors/frequently-bought-together/connectFrequentlyBoughtTogether.d.ts +2 -2
  35. package/es/connectors/geo-search/connectGeoSearch.d.ts +1 -1
  36. package/es/connectors/hits/connectHits.d.ts +1 -1
  37. package/es/connectors/hits/connectHitsWithInsights.d.ts +1 -1
  38. package/es/connectors/index.d.ts +1 -0
  39. package/es/connectors/index.js +2 -1
  40. package/es/connectors/index.umd.d.ts +1 -0
  41. package/es/connectors/index.umd.js +2 -1
  42. package/es/connectors/infinite-hits/connectInfiniteHits.d.ts +1 -1
  43. package/es/connectors/infinite-hits/connectInfiniteHitsWithInsights.d.ts +1 -1
  44. package/es/connectors/looking-similar/connectLookingSimilar.d.ts +2 -2
  45. package/es/connectors/related-products/connectRelatedProducts.d.ts +2 -2
  46. package/es/connectors/trending-items/connectTrendingItems.d.ts +2 -2
  47. package/es/lib/ai-lite/abstract-chat.d.ts +89 -0
  48. package/es/lib/ai-lite/abstract-chat.js +818 -0
  49. package/es/lib/ai-lite/index.d.ts +11 -0
  50. package/es/lib/ai-lite/index.js +18 -0
  51. package/es/lib/ai-lite/stream-parser.d.ts +18 -0
  52. package/es/lib/ai-lite/stream-parser.js +131 -0
  53. package/es/lib/ai-lite/transport.d.ts +24 -0
  54. package/es/lib/ai-lite/transport.js +214 -0
  55. package/es/lib/ai-lite/types.d.ts +362 -0
  56. package/es/lib/ai-lite/types.js +1 -0
  57. package/es/lib/ai-lite/utils.d.ts +12 -0
  58. package/es/lib/ai-lite/utils.js +76 -0
  59. package/es/lib/chat/chat.d.ts +3 -3
  60. package/es/lib/chat/chat.js +4 -4
  61. package/es/lib/chat/index.d.ts +3 -0
  62. package/es/lib/chat/index.js +4 -1
  63. package/es/lib/version.d.ts +1 -1
  64. package/es/lib/version.js +1 -1
  65. package/es/widgets/autocomplete/autocomplete.d.ts +2 -1
  66. package/es/widgets/autocomplete/autocomplete.js +15 -6
  67. package/es/widgets/chat/chat.d.ts +22 -14
  68. package/es/widgets/chat/chat.js +33 -4
  69. package/es/widgets/filter-suggestions/filter-suggestions.d.ts +689 -0
  70. package/es/widgets/filter-suggestions/filter-suggestions.js +124 -0
  71. package/es/widgets/frequently-bought-together/frequently-bought-together.d.ts +3 -3
  72. package/es/widgets/geo-search/geo-search.d.ts +1 -1
  73. package/es/widgets/hits/hits.d.ts +1 -1
  74. package/es/widgets/index.d.ts +1 -0
  75. package/es/widgets/index.js +2 -1
  76. package/es/widgets/index.umd.d.ts +1 -0
  77. package/es/widgets/index.umd.js +2 -1
  78. package/es/widgets/infinite-hits/infinite-hits.d.ts +1 -1
  79. package/es/widgets/looking-similar/looking-similar.d.ts +3 -3
  80. package/es/widgets/related-products/related-products.d.ts +3 -3
  81. package/es/widgets/trending-items/trending-items.d.ts +3 -3
  82. package/package.json +6 -7
@@ -0,0 +1,11 @@
1
+ /**
2
+ * ai-lite module - a minimal reimplementation of the 'ai' package.
3
+ *
4
+ * This module provides the core chat functionality needed for InstantSearch
5
+ * without the full weight of the Vercel AI SDK.
6
+ */
7
+ export { AbstractChat } from './abstract-chat';
8
+ export { DefaultChatTransport, HttpChatTransport } from './transport';
9
+ export { generateId, lastAssistantMessageIsCompleteWithToolCalls, SerialJobExecutor, } from './utils';
10
+ export { parseJsonEventStream, processStream } from './stream-parser';
11
+ export type { ChatStatus, UIMessage, UIMessagePart, UIMessageChunk, UIDataTypes, UITools, UITool, ProviderMetadata, TextUIPart, ReasoningUIPart, ToolUIPart, DynamicToolUIPart, SourceUrlUIPart, SourceDocumentUIPart, FileUIPart, StepStartUIPart, DataUIPart, InferUIMessageMetadata, InferUIMessageData, InferUIMessageTools, InferUIMessageToolCall, InferUIMessageChunk, ChatState, ChatTransport, ChatRequestOptions, HttpChatTransportInitOptions, PrepareSendMessagesRequest, PrepareReconnectToStreamRequest, Resolvable, FetchFunction, ChatInit, IdGenerator, ChatOnErrorCallback, ChatOnToolCallCallback, ChatOnFinishCallback, ChatOnDataCallback, CreateUIMessage, } from './types';
@@ -0,0 +1,18 @@
1
+ /**
2
+ * ai-lite module - a minimal reimplementation of the 'ai' package.
3
+ *
4
+ * This module provides the core chat functionality needed for InstantSearch
5
+ * without the full weight of the Vercel AI SDK.
6
+ */
7
+
8
+ // Classes
9
+ export { AbstractChat } from "./abstract-chat.js";
10
+ export { DefaultChatTransport, HttpChatTransport } from "./transport.js";
11
+
12
+ // Utilities
13
+ export { generateId, lastAssistantMessageIsCompleteWithToolCalls, SerialJobExecutor } from "./utils.js";
14
+
15
+ // Stream parsing
16
+ export { parseJsonEventStream, processStream } from "./stream-parser.js";
17
+
18
+ // Types
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Stream parser for parsing SSE (Server-Sent Events) streams.
3
+ * The AI SDK 5 format uses SSE with JSON payloads prefixed by "data: ".
4
+ */
5
+ import type { UIMessageChunk } from './types';
6
+ /**
7
+ * Parse a stream of bytes as SSE (Server-Sent Events) and convert to UIMessageChunk events.
8
+ * Handles the "data: " prefix used by the AI SDK 5 streaming format.
9
+ *
10
+ * @param stream - The input stream of raw bytes
11
+ * @returns A ReadableStream of parsed UIMessageChunk events
12
+ */
13
+ export declare function parseJsonEventStream(stream: ReadableStream<Uint8Array>): ReadableStream<UIMessageChunk>;
14
+ /**
15
+ * Process a ReadableStream using a callback for each value.
16
+ * This is a non-async alternative to for-await-of iteration.
17
+ */
18
+ export declare function processStream<T>(stream: ReadableStream<T>, onChunk: (chunk: T) => void | Promise<void>, onDone: () => void, onError: (error: Error) => void): void;
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Stream parser for parsing SSE (Server-Sent Events) streams.
3
+ * The AI SDK 5 format uses SSE with JSON payloads prefixed by "data: ".
4
+ */
5
+
6
+ /**
7
+ * Parse a stream of bytes as SSE (Server-Sent Events) and convert to UIMessageChunk events.
8
+ * Handles the "data: " prefix used by the AI SDK 5 streaming format.
9
+ *
10
+ * @param stream - The input stream of raw bytes
11
+ * @returns A ReadableStream of parsed UIMessageChunk events
12
+ */
13
+ export function parseJsonEventStream(stream) {
14
+ var decoder = new TextDecoder();
15
+ var buffer = '';
16
+ return new ReadableStream({
17
+ start: function start(controller) {
18
+ var reader = stream.getReader();
19
+ var processChunk = function processChunk() {
20
+ reader.read().then(function (_ref) {
21
+ var done = _ref.done,
22
+ value = _ref.value;
23
+ if (done) {
24
+ // Process any remaining data in the buffer
25
+ if (buffer.trim()) {
26
+ var jsonData = extractJsonFromLine(buffer.trim());
27
+ if (jsonData) {
28
+ try {
29
+ var chunk = JSON.parse(jsonData);
30
+ controller.enqueue(chunk);
31
+ } catch (_unused) {
32
+ // Ignore parsing errors for incomplete data at end
33
+ }
34
+ }
35
+ }
36
+ controller.close();
37
+ return;
38
+ }
39
+
40
+ // Decode the chunk and add to buffer
41
+ buffer += decoder.decode(value, {
42
+ stream: true
43
+ });
44
+
45
+ // Process complete lines
46
+ var lines = buffer.split('\n');
47
+ // Keep the last potentially incomplete line in the buffer
48
+ buffer = lines.pop() || '';
49
+ for (var i = 0; i < lines.length; i++) {
50
+ var trimmedLine = lines[i].trim();
51
+ // eslint-disable-next-line no-continue
52
+ if (!trimmedLine) continue;
53
+
54
+ // Extract JSON from SSE data line or plain JSON
55
+ var _jsonData = extractJsonFromLine(trimmedLine);
56
+ // eslint-disable-next-line no-continue
57
+ if (!_jsonData) continue;
58
+ try {
59
+ var _chunk = JSON.parse(_jsonData);
60
+ controller.enqueue(_chunk);
61
+ } catch (_unused2) {
62
+ // Skip malformed lines
63
+ }
64
+ }
65
+
66
+ // Continue reading
67
+ processChunk();
68
+ }, function (error) {
69
+ controller.error(error);
70
+ });
71
+ };
72
+ processChunk();
73
+ }
74
+ });
75
+ }
76
+
77
+ /**
78
+ * Extract JSON data from an SSE line or plain JSON line.
79
+ * Handles both "data: {...}" SSE format and plain "{...}" NDJSON format.
80
+ */
81
+ function extractJsonFromLine(line) {
82
+ // Handle SSE format: "data: {...}"
83
+ if (line.startsWith('data:')) {
84
+ var data = line.slice(5).trim();
85
+ // Skip SSE stream termination signal
86
+ if (data === '[DONE]') return null;
87
+ return data;
88
+ }
89
+
90
+ // Handle plain JSON (NDJSON format)
91
+ if (line.startsWith('{')) {
92
+ return line;
93
+ }
94
+
95
+ // Skip other SSE fields (event:, id:, retry:, etc.)
96
+ return null;
97
+ }
98
+
99
+ /**
100
+ * Process a ReadableStream using a callback for each value.
101
+ * This is a non-async alternative to for-await-of iteration.
102
+ */
103
+ export function processStream(stream, onChunk, onDone, onError) {
104
+ var reader = stream.getReader();
105
+ var read = function read() {
106
+ reader.read().then(function (_ref2) {
107
+ var done = _ref2.done,
108
+ value = _ref2.value;
109
+ if (done) {
110
+ reader.releaseLock();
111
+ onDone();
112
+ return;
113
+ }
114
+ var result = onChunk(value);
115
+ if (result && typeof result.then === 'function') {
116
+ result.then(function () {
117
+ return read();
118
+ }, function (error) {
119
+ reader.releaseLock();
120
+ onError(error);
121
+ });
122
+ } else {
123
+ read();
124
+ }
125
+ }, function (error) {
126
+ reader.releaseLock();
127
+ onError(error);
128
+ });
129
+ };
130
+ read();
131
+ }
@@ -0,0 +1,24 @@
1
+ import type { ChatTransport, HttpChatTransportInitOptions, UIMessage, UIMessageChunk, FetchFunction, PrepareSendMessagesRequest, PrepareReconnectToStreamRequest, Resolvable } from './types';
2
+ /**
3
+ * Abstract base class for HTTP-based chat transports.
4
+ */
5
+ export declare abstract class HttpChatTransport<TUIMessage extends UIMessage> implements ChatTransport<TUIMessage> {
6
+ protected api: string;
7
+ protected credentials: Resolvable<RequestCredentials> | undefined;
8
+ protected headers: Resolvable<Record<string, string> | Headers> | undefined;
9
+ protected body: Resolvable<object> | undefined;
10
+ protected fetch?: FetchFunction;
11
+ protected prepareSendMessagesRequest?: PrepareSendMessagesRequest<TUIMessage>;
12
+ protected prepareReconnectToStreamRequest?: PrepareReconnectToStreamRequest;
13
+ constructor({ api, credentials, headers, body, fetch: customFetch, prepareSendMessagesRequest, prepareReconnectToStreamRequest, }: HttpChatTransportInitOptions<TUIMessage>);
14
+ sendMessages({ abortSignal, chatId, messages, requestMetadata, trigger, messageId, headers: requestHeaders, body: requestBody, }: Parameters<ChatTransport<TUIMessage>['sendMessages']>[0]): Promise<ReadableStream<UIMessageChunk>>;
15
+ reconnectToStream({ chatId, headers: requestHeaders, body: requestBody, }: Parameters<ChatTransport<TUIMessage>['reconnectToStream']>[0]): Promise<ReadableStream<UIMessageChunk> | null>;
16
+ protected abstract processResponseStream(stream: ReadableStream<Uint8Array>): ReadableStream<UIMessageChunk>;
17
+ }
18
+ /**
19
+ * Default chat transport implementation using NDJSON streaming.
20
+ */
21
+ export declare class DefaultChatTransport<TUIMessage extends UIMessage> extends HttpChatTransport<TUIMessage> {
22
+ constructor(options?: HttpChatTransportInitOptions<TUIMessage>);
23
+ protected processResponseStream(stream: ReadableStream<Uint8Array>): ReadableStream<UIMessageChunk>;
24
+ }
@@ -0,0 +1,214 @@
1
+ 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); }
2
+ 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); }
3
+ function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
4
+ function _createSuper(t) { var r = _isNativeReflectConstruct(); return function () { var e, o = _getPrototypeOf(t); if (r) { var s = _getPrototypeOf(this).constructor; e = Reflect.construct(o, arguments, s); } else e = o.apply(this, arguments); return _possibleConstructorReturn(this, e); }; }
5
+ 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); }
6
+ function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
7
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
8
+ function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
9
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
10
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
11
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
12
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
13
+ 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; } }
14
+ 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; }
15
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
16
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
17
+ function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
18
+ 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); } }
19
+ function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
20
+ 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; }
21
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
22
+ 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); }
23
+ /**
24
+ * HTTP transport implementation for chat.
25
+ */
26
+ import { parseJsonEventStream } from "./stream-parser.js";
27
+ import { resolveValue } from "./utils.js";
28
+ /**
29
+ * Abstract base class for HTTP-based chat transports.
30
+ */
31
+ export var HttpChatTransport = /*#__PURE__*/function () {
32
+ function HttpChatTransport(_ref) {
33
+ var _ref$api = _ref.api,
34
+ api = _ref$api === void 0 ? '/api/chat' : _ref$api,
35
+ credentials = _ref.credentials,
36
+ headers = _ref.headers,
37
+ body = _ref.body,
38
+ customFetch = _ref.fetch,
39
+ prepareSendMessagesRequest = _ref.prepareSendMessagesRequest,
40
+ prepareReconnectToStreamRequest = _ref.prepareReconnectToStreamRequest;
41
+ _classCallCheck(this, HttpChatTransport);
42
+ _defineProperty(this, "api", void 0);
43
+ _defineProperty(this, "credentials", void 0);
44
+ _defineProperty(this, "headers", void 0);
45
+ _defineProperty(this, "body", void 0);
46
+ _defineProperty(this, "fetch", void 0);
47
+ _defineProperty(this, "prepareSendMessagesRequest", void 0);
48
+ _defineProperty(this, "prepareReconnectToStreamRequest", void 0);
49
+ this.api = api;
50
+ this.credentials = credentials;
51
+ this.headers = headers;
52
+ this.body = body;
53
+ this.fetch = customFetch;
54
+ this.prepareSendMessagesRequest = prepareSendMessagesRequest;
55
+ this.prepareReconnectToStreamRequest = prepareReconnectToStreamRequest;
56
+ }
57
+ _createClass(HttpChatTransport, [{
58
+ key: "sendMessages",
59
+ value: function sendMessages(_ref2) {
60
+ var _this$fetch,
61
+ _this = this;
62
+ var abortSignal = _ref2.abortSignal,
63
+ chatId = _ref2.chatId,
64
+ messages = _ref2.messages,
65
+ requestMetadata = _ref2.requestMetadata,
66
+ trigger = _ref2.trigger,
67
+ messageId = _ref2.messageId,
68
+ requestHeaders = _ref2.headers,
69
+ requestBody = _ref2.body;
70
+ var fetchFn = (_this$fetch = this.fetch) !== null && _this$fetch !== void 0 ? _this$fetch : fetch;
71
+
72
+ // Resolve configurable values
73
+ return Promise.all([resolveValue(this.credentials), resolveValue(this.headers), resolveValue(this.body)]).then(function (_ref3) {
74
+ var _ref4 = _slicedToArray(_ref3, 3),
75
+ resolvedCredentials = _ref4[0],
76
+ resolvedHeaders = _ref4[1],
77
+ resolvedBody = _ref4[2];
78
+ // Build default request options
79
+ var api = _this.api;
80
+ var body = _objectSpread(_objectSpread({
81
+ id: chatId,
82
+ messages: messages
83
+ }, resolvedBody), requestBody);
84
+ var headers = _objectSpread(_objectSpread({
85
+ 'Content-Type': 'application/json'
86
+ }, resolvedHeaders instanceof Headers ? Object.fromEntries(resolvedHeaders.entries()) : resolvedHeaders), requestHeaders instanceof Headers ? Object.fromEntries(requestHeaders.entries()) : requestHeaders);
87
+ var credentials = resolvedCredentials;
88
+
89
+ // Apply custom preparation if provided
90
+ var prepareRequestBody = _objectSpread(_objectSpread({}, resolvedBody), requestBody);
91
+ var preparePromise = _this.prepareSendMessagesRequest ? Promise.resolve(_this.prepareSendMessagesRequest({
92
+ id: chatId,
93
+ messages: messages,
94
+ requestMetadata: requestMetadata,
95
+ body: prepareRequestBody,
96
+ credentials: resolvedCredentials,
97
+ headers: resolvedHeaders,
98
+ api: _this.api,
99
+ trigger: trigger,
100
+ messageId: messageId
101
+ })) : Promise.resolve(null);
102
+ return preparePromise.then(function (prepared) {
103
+ if (prepared) {
104
+ body = prepared.body;
105
+ if (prepared.api) api = prepared.api;
106
+ if (prepared.headers) {
107
+ headers = _objectSpread({
108
+ 'Content-Type': 'application/json'
109
+ }, prepared.headers instanceof Headers ? Object.fromEntries(prepared.headers.entries()) : prepared.headers);
110
+ }
111
+ if (prepared.credentials) credentials = prepared.credentials;
112
+ }
113
+ return fetchFn(api, {
114
+ method: 'POST',
115
+ headers: headers,
116
+ body: JSON.stringify(body),
117
+ signal: abortSignal,
118
+ credentials: credentials
119
+ }).then(function (response) {
120
+ if (!response.ok) {
121
+ throw new Error("HTTP error: ".concat(response.status, " ").concat(response.statusText));
122
+ }
123
+ if (!response.body) {
124
+ throw new Error('Response body is empty');
125
+ }
126
+ return _this.processResponseStream(response.body);
127
+ });
128
+ });
129
+ });
130
+ }
131
+ }, {
132
+ key: "reconnectToStream",
133
+ value: function reconnectToStream(_ref5) {
134
+ var _this$fetch2,
135
+ _this2 = this;
136
+ var chatId = _ref5.chatId,
137
+ requestHeaders = _ref5.headers,
138
+ requestBody = _ref5.body;
139
+ var fetchFn = (_this$fetch2 = this.fetch) !== null && _this$fetch2 !== void 0 ? _this$fetch2 : fetch;
140
+
141
+ // Resolve configurable values
142
+ return Promise.all([resolveValue(this.credentials), resolveValue(this.headers), resolveValue(this.body)]).then(function (_ref6) {
143
+ var _ref7 = _slicedToArray(_ref6, 3),
144
+ resolvedCredentials = _ref7[0],
145
+ resolvedHeaders = _ref7[1],
146
+ resolvedBody = _ref7[2];
147
+ // Build default request options
148
+ var api = _this2.api;
149
+ var headers = _objectSpread(_objectSpread({}, resolvedHeaders instanceof Headers ? Object.fromEntries(resolvedHeaders.entries()) : resolvedHeaders), requestHeaders instanceof Headers ? Object.fromEntries(requestHeaders.entries()) : requestHeaders);
150
+ var credentials = resolvedCredentials;
151
+
152
+ // Apply custom preparation if provided
153
+ var prepareRequestBody = _objectSpread(_objectSpread({}, resolvedBody), requestBody);
154
+ var preparePromise = _this2.prepareReconnectToStreamRequest ? Promise.resolve(_this2.prepareReconnectToStreamRequest({
155
+ id: chatId,
156
+ requestMetadata: undefined,
157
+ body: prepareRequestBody,
158
+ credentials: resolvedCredentials,
159
+ headers: resolvedHeaders,
160
+ api: _this2.api
161
+ })) : Promise.resolve(null);
162
+ return preparePromise.then(function (prepared) {
163
+ if (prepared) {
164
+ if (prepared.api) api = prepared.api;
165
+ if (prepared.headers) {
166
+ headers = prepared.headers instanceof Headers ? Object.fromEntries(prepared.headers.entries()) : prepared.headers;
167
+ }
168
+ if (prepared.credentials) credentials = prepared.credentials;
169
+ }
170
+
171
+ // GET request for reconnection
172
+ return fetchFn("".concat(api, "?chatId=").concat(chatId), {
173
+ method: 'GET',
174
+ headers: headers,
175
+ credentials: credentials
176
+ }).then(function (response) {
177
+ if (!response.ok) {
178
+ // 404 means no stream to reconnect to, which is not an error
179
+ if (response.status === 404) {
180
+ return null;
181
+ }
182
+ throw new Error("HTTP error: ".concat(response.status, " ").concat(response.statusText));
183
+ }
184
+ if (!response.body) {
185
+ return null;
186
+ }
187
+ return _this2.processResponseStream(response.body);
188
+ });
189
+ });
190
+ });
191
+ }
192
+ }]);
193
+ return HttpChatTransport;
194
+ }();
195
+
196
+ /**
197
+ * Default chat transport implementation using NDJSON streaming.
198
+ */
199
+ export var DefaultChatTransport = /*#__PURE__*/function (_HttpChatTransport) {
200
+ _inherits(DefaultChatTransport, _HttpChatTransport);
201
+ var _super = _createSuper(DefaultChatTransport);
202
+ function DefaultChatTransport() {
203
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
204
+ _classCallCheck(this, DefaultChatTransport);
205
+ return _super.call(this, options);
206
+ }
207
+ _createClass(DefaultChatTransport, [{
208
+ key: "processResponseStream",
209
+ value: function processResponseStream(stream) {
210
+ return parseJsonEventStream(stream);
211
+ }
212
+ }]);
213
+ return DefaultChatTransport;
214
+ }(HttpChatTransport);