@openai/agents-openai 0.4.14 → 0.5.0
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/defaults.d.ts +4 -0
- package/dist/defaults.js +15 -1
- package/dist/defaults.js.map +1 -1
- package/dist/defaults.mjs +11 -0
- package/dist/defaults.mjs.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/dist/metadata.js +2 -2
- package/dist/metadata.js.map +1 -1
- package/dist/metadata.mjs +2 -2
- package/dist/metadata.mjs.map +1 -1
- package/dist/openaiProvider.d.ts +7 -0
- package/dist/openaiProvider.js +84 -2
- package/dist/openaiProvider.js.map +1 -1
- package/dist/openaiProvider.mjs +86 -4
- package/dist/openaiProvider.mjs.map +1 -1
- package/dist/openaiResponsesModel.d.ts +28 -1
- package/dist/openaiResponsesModel.js +435 -33
- package/dist/openaiResponsesModel.js.map +1 -1
- package/dist/openaiResponsesModel.mjs +433 -32
- package/dist/openaiResponsesModel.mjs.map +1 -1
- package/dist/responsesTransportUtils.d.ts +29 -0
- package/dist/responsesTransportUtils.js +208 -0
- package/dist/responsesTransportUtils.js.map +1 -0
- package/dist/responsesTransportUtils.mjs +198 -0
- package/dist/responsesTransportUtils.mjs.map +1 -0
- package/dist/responsesWebSocketConnection.d.ts +22 -0
- package/dist/responsesWebSocketConnection.js +273 -0
- package/dist/responsesWebSocketConnection.js.map +1 -0
- package/dist/responsesWebSocketConnection.mjs +259 -0
- package/dist/responsesWebSocketConnection.mjs.map +1 -0
- package/dist/responsesWebSocketSession.d.ts +22 -0
- package/dist/responsesWebSocketSession.js +56 -0
- package/dist/responsesWebSocketSession.js.map +1 -0
- package/dist/responsesWebSocketSession.mjs +53 -0
- package/dist/responsesWebSocketSession.mjs.map +1 -0
- package/package.json +2 -2
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { UserError } from '@openai/agents-core';
|
|
2
|
+
function isRecordLike(value) {
|
|
3
|
+
return typeof value === 'object' && value !== null;
|
|
4
|
+
}
|
|
5
|
+
function isPlainTransportOverrideMapping(value) {
|
|
6
|
+
if (!isRecordLike(value) || Array.isArray(value)) {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
const prototype = Object.getPrototypeOf(value);
|
|
10
|
+
return prototype === Object.prototype || prototype === null;
|
|
11
|
+
}
|
|
12
|
+
function normalizeTransportOverrideMapping(value, fieldName) {
|
|
13
|
+
if (typeof value === 'undefined') {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
if (!isPlainTransportOverrideMapping(value)) {
|
|
17
|
+
throw new UserError(`Responses websocket ${fieldName} must be a mapping.`);
|
|
18
|
+
}
|
|
19
|
+
return { ...value };
|
|
20
|
+
}
|
|
21
|
+
export function splitResponsesTransportOverrides(providerData) {
|
|
22
|
+
if (!isRecordLike(providerData) || Array.isArray(providerData)) {
|
|
23
|
+
return {
|
|
24
|
+
providerData: {},
|
|
25
|
+
overrides: {},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
const { extra_headers, extraHeaders, extra_query, extraQuery, extra_body, extraBody, ...remainingProviderData } = providerData;
|
|
29
|
+
return {
|
|
30
|
+
providerData: { ...remainingProviderData },
|
|
31
|
+
overrides: {
|
|
32
|
+
extraHeaders: normalizeTransportOverrideMapping(typeof extra_headers !== 'undefined' ? extra_headers : extraHeaders, 'extra headers'),
|
|
33
|
+
extraQuery: normalizeTransportOverrideMapping(typeof extra_query !== 'undefined' ? extra_query : extraQuery, 'extra query'),
|
|
34
|
+
extraBody: normalizeTransportOverrideMapping(typeof extra_body !== 'undefined' ? extra_body : extraBody, 'extra_body'),
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function parseHeaderInput(headers) {
|
|
39
|
+
const parsed = {
|
|
40
|
+
entries: [],
|
|
41
|
+
unsetLowercaseNames: [],
|
|
42
|
+
};
|
|
43
|
+
if (!headers) {
|
|
44
|
+
return parsed;
|
|
45
|
+
}
|
|
46
|
+
if (typeof Headers !== 'undefined' && headers instanceof Headers) {
|
|
47
|
+
headers.forEach((value, key) => {
|
|
48
|
+
parsed.entries.push([key, value]);
|
|
49
|
+
});
|
|
50
|
+
return parsed;
|
|
51
|
+
}
|
|
52
|
+
if (isRecordLike(headers) && typeof Headers !== 'undefined') {
|
|
53
|
+
const values = headers.values;
|
|
54
|
+
const nulls = headers.nulls;
|
|
55
|
+
if (values instanceof Headers) {
|
|
56
|
+
values.forEach((value, key) => {
|
|
57
|
+
parsed.entries.push([key, value]);
|
|
58
|
+
});
|
|
59
|
+
if (nulls instanceof Set) {
|
|
60
|
+
for (const maybeHeaderName of nulls) {
|
|
61
|
+
if (typeof maybeHeaderName === 'string') {
|
|
62
|
+
parsed.unsetLowercaseNames.push(maybeHeaderName.toLowerCase());
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return parsed;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(headers)) {
|
|
70
|
+
for (const entry of headers) {
|
|
71
|
+
if (!Array.isArray(entry) || entry.length < 2) {
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
const [key, value] = entry;
|
|
75
|
+
if (typeof key === 'undefined' || value == null) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
parsed.entries.push([String(key), String(value)]);
|
|
79
|
+
}
|
|
80
|
+
return parsed;
|
|
81
|
+
}
|
|
82
|
+
if (!isRecordLike(headers)) {
|
|
83
|
+
return parsed;
|
|
84
|
+
}
|
|
85
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
86
|
+
if (typeof value === 'undefined') {
|
|
87
|
+
continue;
|
|
88
|
+
}
|
|
89
|
+
if (value === null) {
|
|
90
|
+
parsed.unsetLowercaseNames.push(key.toLowerCase());
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
parsed.entries.push([key, String(value)]);
|
|
94
|
+
}
|
|
95
|
+
return parsed;
|
|
96
|
+
}
|
|
97
|
+
export function mergeHeadersIntoRecord(target, headers) {
|
|
98
|
+
const parsed = parseHeaderInput(headers);
|
|
99
|
+
for (const lowercaseName of parsed.unsetLowercaseNames) {
|
|
100
|
+
for (const existingKey of Object.keys(target)) {
|
|
101
|
+
if (existingKey.toLowerCase() === lowercaseName) {
|
|
102
|
+
delete target[existingKey];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
for (const [key, value] of parsed.entries) {
|
|
107
|
+
target[key] = value;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export function createHeaderAccumulator() {
|
|
111
|
+
return {
|
|
112
|
+
blockedLowercaseNames: new Set(),
|
|
113
|
+
valuesByLowercaseName: new Map(),
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
export function applyHeadersToAccumulator(accumulator, headers, options) {
|
|
117
|
+
const allowBlockedOverride = options?.allowBlockedOverride ?? false;
|
|
118
|
+
const parsed = parseHeaderInput(headers);
|
|
119
|
+
for (const lowercaseName of parsed.unsetLowercaseNames) {
|
|
120
|
+
accumulator.valuesByLowercaseName.delete(lowercaseName);
|
|
121
|
+
accumulator.blockedLowercaseNames.add(lowercaseName);
|
|
122
|
+
}
|
|
123
|
+
for (const [key, value] of parsed.entries) {
|
|
124
|
+
const lowercaseKey = key.toLowerCase();
|
|
125
|
+
if (accumulator.blockedLowercaseNames.has(lowercaseKey) &&
|
|
126
|
+
!allowBlockedOverride) {
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
accumulator.valuesByLowercaseName.set(lowercaseKey, { key, value });
|
|
130
|
+
if (allowBlockedOverride) {
|
|
131
|
+
accumulator.blockedLowercaseNames.delete(lowercaseKey);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
export function headerAccumulatorToRecord(accumulator) {
|
|
136
|
+
const headers = {};
|
|
137
|
+
for (const { key, value } of accumulator.valuesByLowercaseName.values()) {
|
|
138
|
+
headers[key] = value;
|
|
139
|
+
}
|
|
140
|
+
return headers;
|
|
141
|
+
}
|
|
142
|
+
export function headerAccumulatorToSDKHeaders(accumulator) {
|
|
143
|
+
const headers = headerAccumulatorToRecord(accumulator);
|
|
144
|
+
for (const lowercaseName of accumulator.blockedLowercaseNames) {
|
|
145
|
+
headers[lowercaseName] = null;
|
|
146
|
+
}
|
|
147
|
+
return headers;
|
|
148
|
+
}
|
|
149
|
+
function appendQueryParamValue(url, key, rawValue) {
|
|
150
|
+
if (typeof rawValue === 'undefined' || rawValue === null) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
if (Array.isArray(rawValue)) {
|
|
154
|
+
for (const value of rawValue) {
|
|
155
|
+
appendQueryParamValue(url, `${key}[]`, value);
|
|
156
|
+
}
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (isPlainTransportOverrideMapping(rawValue)) {
|
|
160
|
+
for (const [nestedKey, nestedValue] of Object.entries(rawValue)) {
|
|
161
|
+
appendQueryParamValue(url, `${key}[${nestedKey}]`, nestedValue);
|
|
162
|
+
}
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
if (rawValue instanceof Date) {
|
|
166
|
+
url.searchParams.append(key, rawValue.toISOString());
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
url.searchParams.append(key, String(rawValue));
|
|
170
|
+
}
|
|
171
|
+
export function mergeQueryParamsIntoURL(url, query) {
|
|
172
|
+
if (!query) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
for (const [key, rawValue] of Object.entries(query)) {
|
|
176
|
+
if (typeof rawValue === 'undefined') {
|
|
177
|
+
continue;
|
|
178
|
+
}
|
|
179
|
+
for (const existingKey of Array.from(url.searchParams.keys())) {
|
|
180
|
+
if (existingKey === key || existingKey.startsWith(`${key}[`)) {
|
|
181
|
+
url.searchParams.delete(existingKey);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
if (rawValue === null) {
|
|
185
|
+
continue;
|
|
186
|
+
}
|
|
187
|
+
appendQueryParamValue(url, key, rawValue);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
export function ensureResponsesWebSocketPath(pathname) {
|
|
191
|
+
const normalizedPath = pathname.replace(/\/+$/, '');
|
|
192
|
+
if (normalizedPath === '/responses' ||
|
|
193
|
+
normalizedPath.endsWith('/responses')) {
|
|
194
|
+
return normalizedPath;
|
|
195
|
+
}
|
|
196
|
+
return `${normalizedPath}/responses`;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=responsesTransportUtils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsesTransportUtils.mjs","sourceRoot":"","sources":["../src/responsesTransportUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export type WebSocketMessageValue = string | Blob | ArrayBuffer | ArrayBufferView;
|
|
2
|
+
export type ResponsesWebSocketInternalErrorCode = 'connection_closed_before_opening' | 'connection_closed_before_terminal_response_event' | 'socket_not_open';
|
|
3
|
+
export declare class ResponsesWebSocketInternalError extends Error {
|
|
4
|
+
readonly code: ResponsesWebSocketInternalErrorCode;
|
|
5
|
+
constructor(code: ResponsesWebSocketInternalErrorCode, message: string);
|
|
6
|
+
}
|
|
7
|
+
export declare function throwIfAborted(signal: AbortSignal | undefined): void;
|
|
8
|
+
export declare function withAbortSignal<T>(promise: Promise<T>, signal: AbortSignal | undefined): Promise<T>;
|
|
9
|
+
export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number | undefined, errorMessage: string): Promise<T>;
|
|
10
|
+
export declare function webSocketFrameToText(frame: WebSocketMessageValue): Promise<string>;
|
|
11
|
+
export declare function shouldWrapNoEventWebSocketError(error: unknown): boolean;
|
|
12
|
+
export declare function isWebSocketNotOpenError(error: unknown): boolean;
|
|
13
|
+
export declare class ResponsesWebSocketConnection {
|
|
14
|
+
#private;
|
|
15
|
+
constructor(socket: WebSocket);
|
|
16
|
+
static connect(url: string, headers: Record<string, string>, signal: AbortSignal | undefined, timeoutMs?: number, timeoutErrorMessage?: string): Promise<ResponsesWebSocketConnection>;
|
|
17
|
+
waitForOpen(signal: AbortSignal | undefined, timeoutMs?: number, timeoutErrorMessage?: string): Promise<void>;
|
|
18
|
+
send(data: string): Promise<void>;
|
|
19
|
+
isReusable(): boolean;
|
|
20
|
+
nextFrame(signal: AbortSignal | undefined): Promise<WebSocketMessageValue | null>;
|
|
21
|
+
close(): Promise<void>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ResponsesWebSocketConnection = exports.ResponsesWebSocketInternalError = void 0;
|
|
7
|
+
exports.throwIfAborted = throwIfAborted;
|
|
8
|
+
exports.withAbortSignal = withAbortSignal;
|
|
9
|
+
exports.withTimeout = withTimeout;
|
|
10
|
+
exports.webSocketFrameToText = webSocketFrameToText;
|
|
11
|
+
exports.shouldWrapNoEventWebSocketError = shouldWrapNoEventWebSocketError;
|
|
12
|
+
exports.isWebSocketNotOpenError = isWebSocketNotOpenError;
|
|
13
|
+
const agents_core_1 = require("@openai/agents-core");
|
|
14
|
+
const openai_1 = __importDefault(require("openai"));
|
|
15
|
+
class ResponsesWebSocketInternalError extends Error {
|
|
16
|
+
code;
|
|
17
|
+
constructor(code, message) {
|
|
18
|
+
super(message);
|
|
19
|
+
this.name = 'ResponsesWebSocketInternalError';
|
|
20
|
+
this.code = code;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.ResponsesWebSocketInternalError = ResponsesWebSocketInternalError;
|
|
24
|
+
function throwIfAborted(signal) {
|
|
25
|
+
if (signal?.aborted) {
|
|
26
|
+
throw new openai_1.default.APIUserAbortError();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async function withAbortSignal(promise, signal) {
|
|
30
|
+
throwIfAborted(signal);
|
|
31
|
+
if (!signal) {
|
|
32
|
+
return promise;
|
|
33
|
+
}
|
|
34
|
+
return await new Promise((resolve, reject) => {
|
|
35
|
+
const onAbort = () => {
|
|
36
|
+
reject(new openai_1.default.APIUserAbortError());
|
|
37
|
+
};
|
|
38
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
39
|
+
promise.then((value) => {
|
|
40
|
+
signal.removeEventListener('abort', onAbort);
|
|
41
|
+
resolve(value);
|
|
42
|
+
}, (error) => {
|
|
43
|
+
signal.removeEventListener('abort', onAbort);
|
|
44
|
+
reject(error);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async function withTimeout(promise, timeoutMs, errorMessage) {
|
|
49
|
+
if (typeof timeoutMs !== 'number' ||
|
|
50
|
+
!Number.isFinite(timeoutMs) ||
|
|
51
|
+
timeoutMs <= 0) {
|
|
52
|
+
return await promise;
|
|
53
|
+
}
|
|
54
|
+
return await new Promise((resolve, reject) => {
|
|
55
|
+
const timeoutId = setTimeout(() => {
|
|
56
|
+
reject(new Error(errorMessage));
|
|
57
|
+
}, timeoutMs);
|
|
58
|
+
promise.then((value) => {
|
|
59
|
+
clearTimeout(timeoutId);
|
|
60
|
+
resolve(value);
|
|
61
|
+
}, (error) => {
|
|
62
|
+
clearTimeout(timeoutId);
|
|
63
|
+
reject(error);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
async function webSocketFrameToText(frame) {
|
|
68
|
+
if (typeof frame === 'string') {
|
|
69
|
+
return frame;
|
|
70
|
+
}
|
|
71
|
+
if (typeof Blob !== 'undefined' && frame instanceof Blob) {
|
|
72
|
+
return await frame.text();
|
|
73
|
+
}
|
|
74
|
+
if (frame instanceof ArrayBuffer) {
|
|
75
|
+
return new TextDecoder().decode(new Uint8Array(frame));
|
|
76
|
+
}
|
|
77
|
+
if (ArrayBuffer.isView(frame)) {
|
|
78
|
+
return new TextDecoder().decode(new Uint8Array(frame.buffer, frame.byteOffset, frame.byteLength));
|
|
79
|
+
}
|
|
80
|
+
throw new Error('Unsupported websocket frame type for Responses API.');
|
|
81
|
+
}
|
|
82
|
+
function shouldWrapNoEventWebSocketError(error) {
|
|
83
|
+
if (error instanceof ResponsesWebSocketInternalError) {
|
|
84
|
+
return (error.code === 'connection_closed_before_opening' ||
|
|
85
|
+
error.code === 'connection_closed_before_terminal_response_event');
|
|
86
|
+
}
|
|
87
|
+
if (!(error instanceof Error)) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
return (error.message === 'Responses websocket connection closed before opening.' ||
|
|
91
|
+
error.message ===
|
|
92
|
+
'Responses websocket connection closed before a terminal response event.');
|
|
93
|
+
}
|
|
94
|
+
function isWebSocketNotOpenError(error) {
|
|
95
|
+
if (error instanceof ResponsesWebSocketInternalError) {
|
|
96
|
+
return error.code === 'socket_not_open';
|
|
97
|
+
}
|
|
98
|
+
if (!(error instanceof Error)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (error.message === 'Responses websocket is not open.') {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
// Native WebSocket implementations can throw InvalidStateError/DOMException
|
|
105
|
+
// if the socket closes after the readyState check but before send().
|
|
106
|
+
if (error.name === 'InvalidStateError') {
|
|
107
|
+
return true;
|
|
108
|
+
}
|
|
109
|
+
// `ws` throws a plain Error with this message shape for send races.
|
|
110
|
+
if (error.message.startsWith('WebSocket is not open: readyState ')) {
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
class ResponsesWebSocketConnection {
|
|
116
|
+
#socket;
|
|
117
|
+
#messages = [];
|
|
118
|
+
#waiters = [];
|
|
119
|
+
#closed = false;
|
|
120
|
+
#error;
|
|
121
|
+
#closedPromise;
|
|
122
|
+
#resolveClosed;
|
|
123
|
+
constructor(socket) {
|
|
124
|
+
this.#socket = socket;
|
|
125
|
+
this.#closedPromise = new Promise((resolve) => {
|
|
126
|
+
this.#resolveClosed = resolve;
|
|
127
|
+
});
|
|
128
|
+
this.#socket.addEventListener('message', this.#onMessage);
|
|
129
|
+
this.#socket.addEventListener('error', this.#onError);
|
|
130
|
+
this.#socket.addEventListener('close', this.#onClose);
|
|
131
|
+
}
|
|
132
|
+
static async connect(url, headers, signal, timeoutMs, timeoutErrorMessage) {
|
|
133
|
+
const WebSocketCtor = globalThis.WebSocket;
|
|
134
|
+
if (!WebSocketCtor) {
|
|
135
|
+
throw new agents_core_1.UserError('Responses websocket transport requires a global WebSocket implementation.');
|
|
136
|
+
}
|
|
137
|
+
let socket;
|
|
138
|
+
try {
|
|
139
|
+
socket = new WebSocketCtor(url, { headers });
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
const wrappedError = new agents_core_1.UserError('Responses websocket transport requires a WebSocket implementation that supports custom headers.');
|
|
143
|
+
wrappedError.cause = error;
|
|
144
|
+
throw wrappedError;
|
|
145
|
+
}
|
|
146
|
+
const connection = new ResponsesWebSocketConnection(socket);
|
|
147
|
+
try {
|
|
148
|
+
await connection.waitForOpen(signal, timeoutMs, timeoutErrorMessage);
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
await connection.close();
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
return connection;
|
|
155
|
+
}
|
|
156
|
+
async waitForOpen(signal, timeoutMs, timeoutErrorMessage) {
|
|
157
|
+
if (this.#socket.readyState === this.#socket.OPEN) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
if (this.#error) {
|
|
161
|
+
throw this.#error;
|
|
162
|
+
}
|
|
163
|
+
if (this.#closed ||
|
|
164
|
+
this.#socket.readyState === this.#socket.CLOSED ||
|
|
165
|
+
this.#socket.readyState === this.#socket.CLOSING) {
|
|
166
|
+
throw new ResponsesWebSocketInternalError('connection_closed_before_opening', 'Responses websocket connection closed before opening.');
|
|
167
|
+
}
|
|
168
|
+
const openPromise = new Promise((resolve, reject) => {
|
|
169
|
+
const onOpen = () => {
|
|
170
|
+
cleanup();
|
|
171
|
+
resolve();
|
|
172
|
+
};
|
|
173
|
+
const onError = () => {
|
|
174
|
+
cleanup();
|
|
175
|
+
reject(this.#error ??
|
|
176
|
+
new Error('Responses websocket connection failed to open.'));
|
|
177
|
+
};
|
|
178
|
+
const onClose = () => {
|
|
179
|
+
cleanup();
|
|
180
|
+
reject(this.#error ??
|
|
181
|
+
new ResponsesWebSocketInternalError('connection_closed_before_opening', 'Responses websocket connection closed before opening.'));
|
|
182
|
+
};
|
|
183
|
+
const cleanup = () => {
|
|
184
|
+
this.#socket.removeEventListener('open', onOpen);
|
|
185
|
+
this.#socket.removeEventListener('error', onError);
|
|
186
|
+
this.#socket.removeEventListener('close', onClose);
|
|
187
|
+
};
|
|
188
|
+
this.#socket.addEventListener('open', onOpen);
|
|
189
|
+
this.#socket.addEventListener('error', onError);
|
|
190
|
+
this.#socket.addEventListener('close', onClose);
|
|
191
|
+
});
|
|
192
|
+
await withAbortSignal(withTimeout(openPromise, timeoutMs, timeoutErrorMessage ??
|
|
193
|
+
`Responses websocket connection timed out before opening after ${timeoutMs}ms.`), signal);
|
|
194
|
+
}
|
|
195
|
+
async send(data) {
|
|
196
|
+
if (this.#socket.readyState !== this.#socket.OPEN) {
|
|
197
|
+
throw new ResponsesWebSocketInternalError('socket_not_open', 'Responses websocket is not open.');
|
|
198
|
+
}
|
|
199
|
+
this.#socket.send(data);
|
|
200
|
+
}
|
|
201
|
+
isReusable() {
|
|
202
|
+
return (!this.#closed &&
|
|
203
|
+
!this.#error &&
|
|
204
|
+
this.#socket.readyState === this.#socket.OPEN);
|
|
205
|
+
}
|
|
206
|
+
async nextFrame(signal) {
|
|
207
|
+
throwIfAborted(signal);
|
|
208
|
+
return await withAbortSignal(this.#nextFrameInternal(), signal);
|
|
209
|
+
}
|
|
210
|
+
async close() {
|
|
211
|
+
if (!this.#closed) {
|
|
212
|
+
try {
|
|
213
|
+
this.#socket.close();
|
|
214
|
+
}
|
|
215
|
+
catch {
|
|
216
|
+
// Ignore close errors and wait for the socket to settle.
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
await this.#closedPromise;
|
|
220
|
+
}
|
|
221
|
+
async #nextFrameInternal() {
|
|
222
|
+
if (this.#messages.length > 0) {
|
|
223
|
+
return this.#messages.shift() ?? null;
|
|
224
|
+
}
|
|
225
|
+
if (this.#error) {
|
|
226
|
+
throw this.#error;
|
|
227
|
+
}
|
|
228
|
+
if (this.#closed) {
|
|
229
|
+
return null;
|
|
230
|
+
}
|
|
231
|
+
return await new Promise((resolve, reject) => {
|
|
232
|
+
this.#waiters.push({ resolve, reject });
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
#onMessage = (event) => {
|
|
236
|
+
const data = event.data;
|
|
237
|
+
const waiter = this.#waiters.shift();
|
|
238
|
+
if (waiter) {
|
|
239
|
+
waiter.resolve(data);
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
this.#messages.push(data);
|
|
243
|
+
};
|
|
244
|
+
#onError = (event) => {
|
|
245
|
+
const maybeError = event?.error;
|
|
246
|
+
const maybeMessage = event?.message;
|
|
247
|
+
this.#error =
|
|
248
|
+
maybeError instanceof Error
|
|
249
|
+
? maybeError
|
|
250
|
+
: new Error(typeof maybeMessage === 'string' && maybeMessage.length > 0
|
|
251
|
+
? maybeMessage
|
|
252
|
+
: 'Responses websocket connection error.');
|
|
253
|
+
const waiters = this.#waiters.splice(0);
|
|
254
|
+
for (const waiter of waiters) {
|
|
255
|
+
waiter.reject(this.#error);
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
#onClose = () => {
|
|
259
|
+
this.#closed = true;
|
|
260
|
+
this.#resolveClosed();
|
|
261
|
+
const waiters = this.#waiters.splice(0);
|
|
262
|
+
for (const waiter of waiters) {
|
|
263
|
+
if (this.#error) {
|
|
264
|
+
waiter.reject(this.#error);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
waiter.resolve(null);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
exports.ResponsesWebSocketConnection = ResponsesWebSocketConnection;
|
|
273
|
+
//# sourceMappingURL=responsesWebSocketConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"responsesWebSocketConnection.js","sourceRoot":"","sources":["../src/responsesWebSocketConnection.ts"],"names":[],"mappings":"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"}
|