This repository has been archived on 2026-03-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw-extensions/wecom/node_modules/@mistralai/mistralai/lib/event-streams.js
T

129 lines
4.3 KiB
JavaScript

"use strict";
/*
* Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventStream = void 0;
class EventStream extends ReadableStream {
constructor(responseBody, parse) {
const upstream = responseBody.getReader();
let buffer = new Uint8Array();
super({
async pull(downstream) {
try {
while (true) {
const match = findBoundary(buffer);
if (!match) {
const chunk = await upstream.read();
if (chunk.done)
return downstream.close();
buffer = concatBuffer(buffer, chunk.value);
continue;
}
const message = buffer.slice(0, match.index);
buffer = buffer.slice(match.index + match.length);
const item = parseMessage(message, parse);
if (item?.value)
return downstream.enqueue(item.value);
if (item?.done) {
await upstream.cancel("done");
return downstream.close();
}
}
}
catch (e) {
downstream.error(e);
await upstream.cancel(e);
}
},
cancel: reason => upstream.cancel(reason),
});
}
// Polyfill for older browsers
[Symbol.asyncIterator]() {
const fn = ReadableStream.prototype[Symbol.asyncIterator];
if (typeof fn === "function")
return fn.call(this);
const reader = this.getReader();
return {
next: async () => {
const r = await reader.read();
if (r.done) {
reader.releaseLock();
return { done: true, value: undefined };
}
return { done: false, value: r.value };
},
throw: async (e) => {
await reader.cancel(e);
reader.releaseLock();
return { done: true, value: undefined };
},
return: async () => {
await reader.cancel("done");
reader.releaseLock();
return { done: true, value: undefined };
},
[Symbol.asyncIterator]() {
return this;
},
};
}
}
exports.EventStream = EventStream;
function concatBuffer(a, b) {
const c = new Uint8Array(a.length + b.length);
c.set(a, 0);
c.set(b, a.length);
return c;
}
/** Finds the first (CR,LF,CR,LF) or (CR,CR) or (LF,LF) */
function findBoundary(buf) {
const len = buf.length;
for (let i = 0; i < len; i++) {
if (i <= len - 4
&& buf[i] === 13 && buf[i + 1] === 10 && buf[i + 2] === 13
&& buf[i + 3] === 10) {
return { index: i, length: 4 };
}
if (i <= len - 2 && buf[i] === 13 && buf[i + 1] === 13) {
return { index: i, length: 2 };
}
if (i <= len - 2 && buf[i] === 10 && buf[i + 1] === 10) {
return { index: i, length: 2 };
}
}
return null;
}
function parseMessage(chunk, parse) {
const text = new TextDecoder().decode(chunk);
const lines = text.split(/\r\n|\r|\n/);
const dataLines = [];
const ret = {};
let ignore = true;
for (const line of lines) {
if (!line || line.startsWith(":"))
continue;
ignore = false;
const i = line.indexOf(":");
const field = line.slice(0, i);
const value = line[i + 1] === " " ? line.slice(i + 2) : line.slice(i + 1);
if (field === "data")
dataLines.push(value);
else if (field === "event")
ret.event = value;
else if (field === "id")
ret.id = value;
else if (field === "retry") {
const n = Number(value);
if (!isNaN(n))
ret.retry = n;
}
}
if (ignore)
return;
if (dataLines.length)
ret.data = dataLines.join("\n");
return parse(ret);
}
//# sourceMappingURL=event-streams.js.map