instantsearch.js 4.87.0 → 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.
- package/cjs/connectors/chat/connectChat.js +4 -4
- package/cjs/index.js +2 -2
- package/cjs/lib/ai-lite/abstract-chat.js +823 -0
- package/cjs/lib/ai-lite/index.js +57 -0
- package/cjs/lib/ai-lite/stream-parser.js +138 -0
- package/cjs/lib/ai-lite/transport.js +218 -0
- package/cjs/lib/ai-lite/types.js +1 -0
- package/cjs/lib/ai-lite/utils.js +85 -0
- package/cjs/lib/chat/chat.js +3 -3
- package/cjs/lib/version.js +1 -1
- package/dist/instantsearch.development.d.ts +1561 -169
- package/dist/instantsearch.development.js +9110 -4563
- package/dist/instantsearch.development.js.map +1 -1
- package/dist/instantsearch.production.d.ts +1561 -169
- package/dist/instantsearch.production.min.d.ts +1561 -169
- package/dist/instantsearch.production.min.js +2 -2
- package/dist/instantsearch.production.min.js.map +1 -1
- package/es/connectors/chat/connectChat.d.ts +14 -14
- package/es/connectors/chat/connectChat.js +1 -1
- package/es/connectors/frequently-bought-together/connectFrequentlyBoughtTogether.d.ts +2 -2
- package/es/connectors/geo-search/connectGeoSearch.d.ts +1 -1
- package/es/connectors/hits/connectHits.d.ts +1 -1
- package/es/connectors/hits/connectHitsWithInsights.d.ts +1 -1
- package/es/connectors/infinite-hits/connectInfiniteHits.d.ts +1 -1
- package/es/connectors/infinite-hits/connectInfiniteHitsWithInsights.d.ts +1 -1
- package/es/connectors/looking-similar/connectLookingSimilar.d.ts +2 -2
- package/es/connectors/related-products/connectRelatedProducts.d.ts +2 -2
- package/es/connectors/trending-items/connectTrendingItems.d.ts +2 -2
- package/es/lib/ai-lite/abstract-chat.d.ts +89 -0
- package/es/lib/ai-lite/abstract-chat.js +818 -0
- package/es/lib/ai-lite/index.d.ts +11 -0
- package/es/lib/ai-lite/index.js +18 -0
- package/es/lib/ai-lite/stream-parser.d.ts +18 -0
- package/es/lib/ai-lite/stream-parser.js +131 -0
- package/es/lib/ai-lite/transport.d.ts +24 -0
- package/es/lib/ai-lite/transport.js +214 -0
- package/es/lib/ai-lite/types.d.ts +362 -0
- package/es/lib/ai-lite/types.js +1 -0
- package/es/lib/ai-lite/utils.d.ts +12 -0
- package/es/lib/ai-lite/utils.js +76 -0
- package/es/lib/chat/chat.d.ts +2 -2
- package/es/lib/chat/chat.js +1 -1
- package/es/lib/version.d.ts +1 -1
- package/es/lib/version.js +1 -1
- package/es/widgets/chat/chat.d.ts +14 -14
- package/es/widgets/filter-suggestions/filter-suggestions.d.ts +5 -5
- package/es/widgets/frequently-bought-together/frequently-bought-together.d.ts +3 -3
- package/es/widgets/geo-search/geo-search.d.ts +1 -1
- package/es/widgets/hits/hits.d.ts +1 -1
- package/es/widgets/infinite-hits/infinite-hits.d.ts +1 -1
- package/es/widgets/looking-similar/looking-similar.d.ts +3 -3
- package/es/widgets/related-products/related-products.d.ts +3 -3
- package/es/widgets/trending-items/trending-items.d.ts +3 -3
- 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);
|