openai-ws-opencode 0.1.26 → 0.1.27
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/README.md +4 -0
- package/bin/setup.js +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.js +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +22 -12
- package/dist/plugin.js.map +1 -1
- package/dist/testing.d.ts +96 -2
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +18 -2
- package/dist/testing.js.map +1 -1
- package/dist/transport/breaker.d.ts +41 -0
- package/dist/transport/breaker.d.ts.map +1 -0
- package/dist/transport/breaker.js +207 -0
- package/dist/transport/breaker.js.map +1 -0
- package/dist/transport/bridge.d.ts +6 -1
- package/dist/transport/bridge.d.ts.map +1 -1
- package/dist/transport/bridge.js +274 -72
- package/dist/transport/bridge.js.map +1 -1
- package/dist/transport/config.d.ts +37 -1
- package/dist/transport/config.d.ts.map +1 -1
- package/dist/transport/config.js +318 -6
- package/dist/transport/config.js.map +1 -1
- package/dist/transport/coordinator.d.ts +223 -0
- package/dist/transport/coordinator.d.ts.map +1 -0
- package/dist/transport/coordinator.js +506 -0
- package/dist/transport/coordinator.js.map +1 -0
- package/dist/transport/errors.d.ts +24 -0
- package/dist/transport/errors.d.ts.map +1 -0
- package/dist/transport/errors.js +49 -0
- package/dist/transport/errors.js.map +1 -0
- package/dist/transport/pool.d.ts +114 -7
- package/dist/transport/pool.d.ts.map +1 -1
- package/dist/transport/pool.js +473 -188
- package/dist/transport/pool.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -11,6 +11,8 @@ Standalone OpenCode provider plugin for routing OpenAI Responses API streaming r
|
|
|
11
11
|
- Auth-aware model discovery at auth-load time: Codex backend models for ChatGPT OAuth, OpenAI `/v1/models` IDs for API keys, bundled table fallback for both
|
|
12
12
|
- Setup-time promotion of live Codex WebSocket models, including newly released GPT-5 families without package updates
|
|
13
13
|
- WebSocket-to-SSE bridge so OpenCode can keep using its normal streaming path
|
|
14
|
+
- Priority service tier pinned on WebSocket and HTTP fallback requests
|
|
15
|
+
- Bounded socket admission, reconnects, inbound queues, and circuit breaking for high-concurrency use
|
|
14
16
|
|
|
15
17
|
## Install
|
|
16
18
|
|
|
@@ -31,6 +33,8 @@ The setup command is idempotent. It adds the npm plugin entry and a fallback `pr
|
|
|
31
33
|
|
|
32
34
|
At setup and runtime the plugin attempts short best-effort model discovery for the selected auth mode. ChatGPT/Codex OAuth uses `https://chatgpt.com/backend-api/codex/models`, accepts provider `models` or `data` catalogs, and maps flat or nested model metadata. API-key auth uses `https://api.openai.com/v1/models` to discover GPT-5 family IDs. Setup writes discovered WebSocket-capable models into `opencode.json`; runtime refreshes the active provider from the authenticated catalog. Both paths remain fail-soft and fall back to the bundled table if discovery is unavailable.
|
|
33
35
|
|
|
36
|
+
The transport allows one active turn per session scope. A concurrent turn for the same session fails fast to HTTP fallback; independent sessions can use separate sockets in parallel.
|
|
37
|
+
|
|
34
38
|
Set `OPENAI_WS_OPENCODE_SKIP_CATALOG=1` to skip runtime catalog lookups and use only the bundled fallback table plus your config overrides.
|
|
35
39
|
|
|
36
40
|
## Manual config
|
package/bin/setup.js
CHANGED
|
@@ -20,7 +20,7 @@ var CODEX_CLI_NPM_ENDPOINT = "https://registry.npmjs.org/@openai/codex";
|
|
|
20
20
|
var OPENAI_MODELS_ENDPOINT = `${OPENAI_API_BASE}/models`;
|
|
21
21
|
var OPENAI_WS_BETA = "responses_websockets=2026-02-06";
|
|
22
22
|
var CODEX_ORIGINATOR = "opencode";
|
|
23
|
-
var USER_AGENT = "openai-ws-opencode/0.1.
|
|
23
|
+
var USER_AGENT = "openai-ws-opencode/0.1.27";
|
|
24
24
|
|
|
25
25
|
// src/models/catalog.ts
|
|
26
26
|
var DEFAULT_TIMEOUT_MS = 800;
|
package/dist/constants.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export declare const OPENAI_WS_URL = "wss://api.openai.com/v1/responses";
|
|
|
11
11
|
export declare const CODEX_WS_URL = "wss://chatgpt.com/backend-api/codex/responses";
|
|
12
12
|
export declare const OPENAI_WS_BETA = "responses_websockets=2026-02-06";
|
|
13
13
|
export declare const CODEX_ORIGINATOR = "opencode";
|
|
14
|
-
export declare const USER_AGENT = "openai-ws-opencode/0.1.
|
|
14
|
+
export declare const USER_AGENT = "openai-ws-opencode/0.1.27";
|
|
15
15
|
export declare const CODEX_OAUTH_SCOPE = "openid profile email offline_access";
|
|
16
16
|
export declare const OAUTH_PORT = 1455;
|
|
17
17
|
export declare const X_CODEX_TURN_STATE_HEADER = "x-codex-turn-state";
|
package/dist/constants.js
CHANGED
|
@@ -11,7 +11,7 @@ export const OPENAI_WS_URL = "wss://api.openai.com/v1/responses";
|
|
|
11
11
|
export const CODEX_WS_URL = "wss://chatgpt.com/backend-api/codex/responses";
|
|
12
12
|
export const OPENAI_WS_BETA = "responses_websockets=2026-02-06";
|
|
13
13
|
export const CODEX_ORIGINATOR = "opencode";
|
|
14
|
-
export const USER_AGENT = "openai-ws-opencode/0.1.
|
|
14
|
+
export const USER_AGENT = "openai-ws-opencode/0.1.27";
|
|
15
15
|
export const CODEX_OAUTH_SCOPE = "openid profile email offline_access";
|
|
16
16
|
export const OAUTH_PORT = 1455;
|
|
17
17
|
export const X_CODEX_TURN_STATE_HEADER = "x-codex-turn-state";
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAA;AA6ExD,QAAA,MAAM,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,MAAM,EAAE,MAAM,qBAAqB,CAAA;AA6ExD,QAAA,MAAM,qBAAqB,EAAE,MAkK5B,CAAA;AAED,eAAe,qBAAqB,CAAA"}
|
package/dist/plugin.js
CHANGED
|
@@ -118,12 +118,17 @@ const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
|
118
118
|
try {
|
|
119
119
|
const body = JSON.parse(init?.body);
|
|
120
120
|
if (body.stream !== false) {
|
|
121
|
-
return bridgeWebSocket(identity.wsUrl, identity.wsHeaders, body, false, context, init?.signal ?? undefined, (fallbackSignal) =>
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
121
|
+
return bridgeWebSocket(identity.wsUrl, identity.wsHeaders, body, false, context, init?.signal ?? undefined, (fallbackSignal, fallbackContext) => {
|
|
122
|
+
const httpBody = prepareHttpFallbackBody(body, false);
|
|
123
|
+
if (fallbackContext?.clearPreviousResponseId)
|
|
124
|
+
delete httpBody.previous_response_id;
|
|
125
|
+
return globalThis.fetch(input, {
|
|
126
|
+
...init,
|
|
127
|
+
signal: fallbackSignal,
|
|
128
|
+
body: JSON.stringify(httpBody),
|
|
129
|
+
headers: httpAuthHeaders(context.forwardHeaders, { type: "api", apiKey }),
|
|
130
|
+
});
|
|
131
|
+
});
|
|
127
132
|
}
|
|
128
133
|
}
|
|
129
134
|
catch { }
|
|
@@ -175,12 +180,17 @@ const OpenAIWebSocketPlugin = async ({ client }) => {
|
|
|
175
180
|
const body = JSON.parse(init?.body);
|
|
176
181
|
if (body.stream !== false) {
|
|
177
182
|
const rewrittenUrl = url.pathname.includes("/v1/responses") ? new URL(CODEX_API_ENDPOINT) : url;
|
|
178
|
-
return bridgeWebSocket(identity.wsUrl, identity.wsHeaders, body, true, context, init?.signal ?? undefined, (fallbackSignal) =>
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
183
|
+
return bridgeWebSocket(identity.wsUrl, identity.wsHeaders, body, true, context, init?.signal ?? undefined, (fallbackSignal, fallbackContext) => {
|
|
184
|
+
const httpBody = prepareHttpFallbackBody(body, true);
|
|
185
|
+
if (fallbackContext?.clearPreviousResponseId)
|
|
186
|
+
delete httpBody.previous_response_id;
|
|
187
|
+
return globalThis.fetch(rewrittenUrl, {
|
|
188
|
+
...init,
|
|
189
|
+
signal: fallbackSignal,
|
|
190
|
+
body: JSON.stringify(httpBody),
|
|
191
|
+
headers: httpAuthHeaders(context.forwardHeaders, { type: "oauth", accessToken, accountId }),
|
|
192
|
+
});
|
|
193
|
+
});
|
|
184
194
|
}
|
|
185
195
|
}
|
|
186
196
|
catch { }
|
package/dist/plugin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AACA,OAAO,MAAM,MAAM,aAAa,CAAA;AAChC,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,uBAAuB,EACvB,eAAe,EACf,WAAW,GACZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,WAAW,EAAwB,MAAM,kBAAkB,CAAA;AAC1G,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAC5E,OAAO,EAAE,8BAA8B,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACjH,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AACnF,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAA;AAC5G,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAMpG,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACnG,CAAC;AAED,MAAM,qBAAqB,GAAG;IAC5B,OAAO,EAAE,8BAA8B;IACvC,KAAK,EAAE,8BAA8B;IACrC,MAAM,EAAE,wBAAwB;CACjC,CAAA;AAED,SAAS,eAAe,CAAC,OAAgB;IACvC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;QACvC,IAAI,KAAK,EAAE,KAAK,EAAE,OAAO;YAAE,OAAO,KAAK,CAAC,KAAK,CAAA;IAC/C,CAAC;IACD,OAAO,qBAAqB,CAAA;AAC9B,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAc;IACtC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAA;AACzE,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAe,EAAE,MAAW;IAC1D,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAA;IACpC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,cAAc,EAAE,CAAC;QAC9E,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAA;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACrD,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAA;IAC5D,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QACpB,IAAI,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE;QACzB,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,OAAO;YAC7C,MAAM,EAAE,MAAM,CAAC,YAAY;YAC3B,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;YACvC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpC;KACF,CAAC,CAAA;IACF,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,EAAE,CAAA;AACxD,CAAC;AAED,SAAS,YAAY,CAAC,GAAQ,EAAE,IAAkB;IAChD,OAAO,CACL,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,MAAM;QACtC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,8BAA8B,CAAC,CAAC;QACjG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAC9B,CAAA;AACH,CAAC;AAED,MAAM,qBAAqB,GAAW,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;IACzD,MAAM,KAAK,GAAU;QACnB,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,WAAW;gBAAE,OAAM;YAClD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,EAAE,CAAC,CAAA;YACvC,OAAO,CAAC,uBAAuB,CAAC,GAAG,KAAK,CAAC,SAAS,CAAA;YAClD,OAAO,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,KAAK,CAAA;YAC5C,OAAO,CAAC,qBAAqB,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,EAAE,IAAK,KAAK,CAAC,KAAa,CAAC,OAAO,CAAA;YAC/E,OAAO,CAAC,2BAA2B,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAClE,CAAC;QAED,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACtC,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,KAAK,WAAW;gBAAE,OAAM;YAClD,MAAM,KAAK,GAAG,KAAK,CAAC,KAA0E,CAAA;YAC9F,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAK,KAAK,CAAC,KAAa,CAAC,OAAO,CAAC,CAAA;YACpF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAA;YACjC,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAA;YAC1F,MAAM,cAAc,GAAG,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC;gBACpD,CAAC,CAAC,OAAO,CAAC,KAAK;gBACf,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC;oBACpC,CAAC,CAAC,YAAY,CAAC,KAAK;oBACpB,CAAC,CAAC,YAAY,CAAC,OAAO,CAAA;YAC1B,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAA;YACtF,KAAK,CAAC,KAAK,GAAG;gBACZ,OAAO;gBACP,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC;gBACxC,MAAM;aACP,CAAA;QACH,CAAC;QAED,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACzB,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;gBACrC,MAAM,gBAAgB,GAAI,KAAa,CAAC,UAAU,EAAE,IAAI,EAAE,EAAE,CAAA;gBAC5D,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,eAAe,KAAK,gBAAgB,IAAI,IAAI,CAAC,aAAa,KAAK,gBAAgB,CAAC,CAAA;gBAChH,OAAM;YACR,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACpC,IAAI,SAAS,KAAK,0BAA0B,IAAI,SAAS,KAAK,iBAAiB,EAAE,CAAC;gBAChF,gBAAgB,EAAE,CAAA;YACpB,CAAC;QACH,CAAC;QAED,IAAI,EAAE;YACJ,QAAQ,EAAE,WAAW;YACrB,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ;gBAC5B,MAAM,IAAI,GAAG,CAAC,MAAM,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAiB,CAAA;gBAErE,IAAI,CAAC,IAAI;oBAAE,OAAO,EAAE,CAAA;gBAEpB,IAAI,IAAI,EAAE,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;oBACrC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAA;oBACvB,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,UAAU,GAAG,MAAM,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;wBACxD,QAAQ,CAAC,MAAM,GAAG,sBAAsB,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAa,CAAQ,CAAA;oBACrF,CAAC;oBACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAA;oBAC3D,8BAA8B,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;oBAClE,oBAAoB,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;oBACxD,OAAO;wBACL,MAAM;wBACN,OAAO,EAAE,eAAe;wBACxB,KAAK,CAAC,KAAK,CAAC,KAAwB,EAAE,IAAkB;4BACtD,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;4BAC1G,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;4BACtD,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;gCAC5B,IAAI,CAAC;oCACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAc,CAA4B,CAAA;oCACxE,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;wCAC1B,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,EAAE;4CAC9I,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;4CACrD,IAAI,eAAe,EAAE,uBAAuB;gDAAE,OAAO,QAAQ,CAAC,oBAAoB,CAAA;4CAClF,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE;gDAC7B,GAAG,IAAI;gDACP,MAAM,EAAE,cAAc;gDACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;gDAC9B,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;6CAC1E,CAAC,CAAA;wCACJ,CAAC,CAAC,CAAA;oCACJ,CAAC;gCACH,CAAC;gCAAC,MAAM,CAAC,CAAA,CAAC;4BACZ,CAAC;4BAED,IAAI,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gCAC5E,IAAI,CAAC;oCACH,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAA;gCACjG,CAAC;gCAAC,MAAM,CAAC,CAAA,CAAC;4BACZ,CAAC;4BACD,OAAO,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE;gCAC7B,GAAG,IAAI;gCACP,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;6BAC1E,CAAC,CAAA;wBACJ,CAAC;qBACF,CAAA;gBACH,CAAC;gBAED,IAAI,IAAI,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;oBAC3B,IAAI,WAAwD,CAAA;oBAC5D,IAAI,CAAC;wBACH,WAAW,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;oBACpD,CAAC;oBAAC,MAAM,CAAC;wBACP,IAAI,QAAQ;4BAAE,QAAQ,CAAC,MAAM,GAAG,qBAAqB,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAa,CAAQ,CAAA;wBAC/F,OAAO,EAAE,CAAA;oBACX,CAAC;oBACD,IAAI,QAAQ,EAAE,CAAC;wBACb,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,CAAA;wBACnH,QAAQ,CAAC,MAAM,GAAG,qBAAqB,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAa,CAAQ,CAAA;oBACjF,CAAC;oBACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,WAAW,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,CAAA;oBACpI,8BAA8B,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;oBAChF,oBAAoB,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC,SAAS,CAAC,CAAA;oBACtE,OAAO;wBACL,MAAM,EAAE,WAAW,CAAC,WAAW;wBAC/B,OAAO,EAAE,cAAc;wBACvB,KAAK,CAAC,KAAK,CAAC,KAAwB,EAAE,IAAkB;4BACtD,MAAM,WAAW,GAAG,CAAC,MAAM,OAAO,EAAE,CAA0B,CAAA;4BAC9D,IAAI,WAAW,EAAE,IAAI,KAAK,OAAO;gCAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAA;4BAC5F,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAA;4BAC9E,MAAM,QAAQ,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;4BAC7E,8BAA8B,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;4BAClE,MAAM,GAAG,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,YAAY,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;4BAC1G,MAAM,OAAO,GAAG,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;4BACtD,IAAI,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;gCAC5B,IAAI,CAAC;oCACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,IAAc,CAA4B,CAAA;oCACxE,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;wCAC1B,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;wCAC/F,OAAO,eAAe,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,IAAI,SAAS,EAAE,CAAC,cAAc,EAAE,eAAe,EAAE,EAAE;4CAC7I,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;4CACpD,IAAI,eAAe,EAAE,uBAAuB;gDAAE,OAAO,QAAQ,CAAC,oBAAoB,CAAA;4CAClF,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE;gDACpC,GAAG,IAAI;gDACP,MAAM,EAAE,cAAc;gDACtB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;gDAC9B,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;6CAC5F,CAAC,CAAA;wCACJ,CAAC,CAAC,CAAA;oCACJ,CAAC;gCACH,CAAC;gCAAC,MAAM,CAAC,CAAA,CAAC;4BACZ,CAAC;4BAED,IAAI,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,MAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gCAC5E,IAAI,CAAC;oCACH,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,EAAE,CAAA;gCAChG,CAAC;gCAAC,MAAM,CAAC,CAAA,CAAC;4BACZ,CAAC;4BAED,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;4BAC/F,OAAO,UAAU,CAAC,KAAK,CAAC,YAAY,EAAE;gCACpC,GAAG,IAAI;gCACP,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC;6BAC5F,CAAC,CAAA;wBACJ,CAAC;qBACF,CAAA;gBACH,CAAC;gBAED,OAAO,EAAE,CAAA;YACX,CAAC;YACD,OAAO,EAAE,YAAY;SACtB;KACF,CAAA;IAED,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED,eAAe,qBAAqB,CAAA"}
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,9 +1,103 @@
|
|
|
1
1
|
export { oauthTesting } from "./auth/oauth.js";
|
|
2
2
|
export { prepareBody, prepareHttpFallbackBody } from "./transport/body.js";
|
|
3
3
|
export { apiKeyWebSocketHeaders, oauthWebSocketHeaders, extractTransportContext, transportIdentity } from "./transport/headers.js";
|
|
4
|
-
export { connectionPool, readyState, ensureWarmConnection, invalidateStaleAuthConnections, resetPoolForTesting, resetWebSocketConstructorForTesting, setWebSocketConstructorForTesting, } from "./transport/pool.js";
|
|
4
|
+
export { connectionPool, readyState, ensureWarmConnection, invalidateStaleAuthConnections, resetPoolForTesting, resetWebSocketConstructorForTesting, setWebSocketConstructorForTesting, getTransportSnapshotForTesting, } from "./transport/pool.js";
|
|
5
5
|
export { bridgeWebSocket } from "./transport/bridge.js";
|
|
6
6
|
export { fallbackCodexClientVersion, fetchCodexCatalog, fetchOpenAIModelIds, resetCatalogCacheForTesting, resolveCodexClientVersion } from "./models/catalog.js";
|
|
7
7
|
export { resolveModels, resolveModelsForApiKey, resolveModelsForOAuth, providerConfig } from "./models/resolve.js";
|
|
8
|
-
export { transportConfig } from "./transport/config.js";
|
|
8
|
+
export { resolveTransportConfig, transportConfig, type TransportConfig, } from "./transport/config.js";
|
|
9
|
+
import type { TransportConfig } from "./transport/config.js";
|
|
10
|
+
/** Override transport config and resync the process coordinator. */
|
|
11
|
+
export declare function setTransportConfigForTesting(partial: Partial<TransportConfig>): void;
|
|
12
|
+
/** Restore original boot-latched config and resync the process coordinator. */
|
|
13
|
+
export declare function resetTransportConfigForTesting(): void;
|
|
14
|
+
/** Fixed-cardinality coordinator snapshot (no secrets / raw IDs). */
|
|
15
|
+
export declare function transportSnapshot(): {
|
|
16
|
+
physicalSockets: number;
|
|
17
|
+
connecting: number;
|
|
18
|
+
prewarming: number;
|
|
19
|
+
sessions: number;
|
|
20
|
+
accountEntries: number;
|
|
21
|
+
rateEntries: number;
|
|
22
|
+
queuedInboundBytes: number;
|
|
23
|
+
queuedInboundMessages: number;
|
|
24
|
+
queueOverflows: number;
|
|
25
|
+
providerQueues: {
|
|
26
|
+
codex: {
|
|
27
|
+
bytes: number;
|
|
28
|
+
messages: number;
|
|
29
|
+
};
|
|
30
|
+
openai: {
|
|
31
|
+
bytes: number;
|
|
32
|
+
messages: number;
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
counters: {
|
|
36
|
+
admissionMissesByReason: {
|
|
37
|
+
provider_breaker: number;
|
|
38
|
+
session_busy: number;
|
|
39
|
+
session_cooldown: number;
|
|
40
|
+
provider_cap: number;
|
|
41
|
+
process_cap: number;
|
|
42
|
+
account_cap: number;
|
|
43
|
+
connect_cap: number;
|
|
44
|
+
handshake_rate: number;
|
|
45
|
+
memory_guard: number;
|
|
46
|
+
connect_failure: number;
|
|
47
|
+
handshake_timeout: number;
|
|
48
|
+
stale_auth: number;
|
|
49
|
+
};
|
|
50
|
+
httpByReason: {
|
|
51
|
+
provider_breaker: number;
|
|
52
|
+
session_busy: number;
|
|
53
|
+
session_cooldown: number;
|
|
54
|
+
provider_cap: number;
|
|
55
|
+
process_cap: number;
|
|
56
|
+
account_cap: number;
|
|
57
|
+
connect_cap: number;
|
|
58
|
+
handshake_rate: number;
|
|
59
|
+
memory_guard: number;
|
|
60
|
+
connect_failure: number;
|
|
61
|
+
handshake_timeout: number;
|
|
62
|
+
provider_connection_limit: number;
|
|
63
|
+
previous_response_not_found: number;
|
|
64
|
+
};
|
|
65
|
+
leaseAttempts: number;
|
|
66
|
+
leaseAdmissions: number;
|
|
67
|
+
connectAttempts: number;
|
|
68
|
+
connectSuccesses: number;
|
|
69
|
+
connectFailures: number;
|
|
70
|
+
connectTimeouts: number;
|
|
71
|
+
prewarmAttempts: number;
|
|
72
|
+
prewarmDeferred: number;
|
|
73
|
+
prewarmFailures: number;
|
|
74
|
+
authStaleRejects: number;
|
|
75
|
+
sessionCooldowns: number;
|
|
76
|
+
fallbacks: number;
|
|
77
|
+
maxAgeRetires: number;
|
|
78
|
+
};
|
|
79
|
+
distributions: {
|
|
80
|
+
handshakeLatencyMs: {
|
|
81
|
+
bounds: number[];
|
|
82
|
+
counts: number[];
|
|
83
|
+
};
|
|
84
|
+
socketLifetimeMs: {
|
|
85
|
+
bounds: number[];
|
|
86
|
+
counts: number[];
|
|
87
|
+
};
|
|
88
|
+
turnsPerConnection: {
|
|
89
|
+
bounds: number[];
|
|
90
|
+
counts: number[];
|
|
91
|
+
};
|
|
92
|
+
inboundQueueHighWaterBytes: {
|
|
93
|
+
bounds: number[];
|
|
94
|
+
counts: number[];
|
|
95
|
+
};
|
|
96
|
+
inboundQueueHighWaterMessages: {
|
|
97
|
+
bounds: number[];
|
|
98
|
+
counts: number[];
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
breaker: import("./transport/breaker.js").TransportBreakerSnapshot;
|
|
102
|
+
};
|
|
9
103
|
//# sourceMappingURL=testing.d.ts.map
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClI,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,mCAAmC,EACnC,iCAAiC,
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClI,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,mCAAmC,EACnC,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAChK,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAClH,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAA;AAE9B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAU5D,oEAAoE;AACpE,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,QAG7E;AAED,+EAA+E;AAC/E,wBAAgB,8BAA8B,SAG7C;AAED,qEAAqE;AACrE,wBAAgB,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAEhC"}
|
package/dist/testing.js
CHANGED
|
@@ -1,9 +1,25 @@
|
|
|
1
1
|
export { oauthTesting } from "./auth/oauth.js";
|
|
2
2
|
export { prepareBody, prepareHttpFallbackBody } from "./transport/body.js";
|
|
3
3
|
export { apiKeyWebSocketHeaders, oauthWebSocketHeaders, extractTransportContext, transportIdentity } from "./transport/headers.js";
|
|
4
|
-
export { connectionPool, readyState, ensureWarmConnection, invalidateStaleAuthConnections, resetPoolForTesting, resetWebSocketConstructorForTesting, setWebSocketConstructorForTesting, } from "./transport/pool.js";
|
|
4
|
+
export { connectionPool, readyState, ensureWarmConnection, invalidateStaleAuthConnections, resetPoolForTesting, resetWebSocketConstructorForTesting, setWebSocketConstructorForTesting, getTransportSnapshotForTesting, } from "./transport/pool.js";
|
|
5
5
|
export { bridgeWebSocket } from "./transport/bridge.js";
|
|
6
6
|
export { fallbackCodexClientVersion, fetchCodexCatalog, fetchOpenAIModelIds, resetCatalogCacheForTesting, resolveCodexClientVersion } from "./models/catalog.js";
|
|
7
7
|
export { resolveModels, resolveModelsForApiKey, resolveModelsForOAuth, providerConfig } from "./models/resolve.js";
|
|
8
|
-
export { transportConfig } from "./transport/config.js";
|
|
8
|
+
export { resolveTransportConfig, transportConfig, } from "./transport/config.js";
|
|
9
|
+
import { resetTransportConfigForTesting as resetTransportConfigRaw, setTransportConfigForTesting as setTransportConfigRaw, } from "./transport/config.js";
|
|
10
|
+
import { getTransportSnapshotForTesting, syncCoordinatorFromTransportConfig, } from "./transport/pool.js";
|
|
11
|
+
/** Override transport config and resync the process coordinator. */
|
|
12
|
+
export function setTransportConfigForTesting(partial) {
|
|
13
|
+
setTransportConfigRaw(partial);
|
|
14
|
+
syncCoordinatorFromTransportConfig();
|
|
15
|
+
}
|
|
16
|
+
/** Restore original boot-latched config and resync the process coordinator. */
|
|
17
|
+
export function resetTransportConfigForTesting() {
|
|
18
|
+
resetTransportConfigRaw();
|
|
19
|
+
syncCoordinatorFromTransportConfig();
|
|
20
|
+
}
|
|
21
|
+
/** Fixed-cardinality coordinator snapshot (no secrets / raw IDs). */
|
|
22
|
+
export function transportSnapshot() {
|
|
23
|
+
return getTransportSnapshotForTesting();
|
|
24
|
+
}
|
|
9
25
|
//# sourceMappingURL=testing.js.map
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClI,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,mCAAmC,EACnC,iCAAiC,
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAC1E,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAClI,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,8BAA8B,EAC9B,mBAAmB,EACnB,mCAAmC,EACnC,iCAAiC,EACjC,8BAA8B,GAC/B,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAA;AAChK,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAClH,OAAO,EACL,sBAAsB,EACtB,eAAe,GAEhB,MAAM,uBAAuB,CAAA;AAG9B,OAAO,EACL,8BAA8B,IAAI,uBAAuB,EACzD,4BAA4B,IAAI,qBAAqB,GACtD,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EACL,8BAA8B,EAC9B,kCAAkC,GACnC,MAAM,qBAAqB,CAAA;AAE5B,oEAAoE;AACpE,MAAM,UAAU,4BAA4B,CAAC,OAAiC;IAC5E,qBAAqB,CAAC,OAAO,CAAC,CAAA;IAC9B,kCAAkC,EAAE,CAAA;AACtC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,8BAA8B;IAC5C,uBAAuB,EAAE,CAAA;IACzB,kCAAkC,EAAE,CAAA;AACtC,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,iBAAiB;IAC/B,OAAO,8BAA8B,EAAE,CAAA;AACzC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export type BreakerState = "closed" | "open" | "half-open";
|
|
2
|
+
export type AllowResult = {
|
|
3
|
+
allowed: boolean;
|
|
4
|
+
reason: string;
|
|
5
|
+
state: BreakerState;
|
|
6
|
+
probeToken?: number;
|
|
7
|
+
};
|
|
8
|
+
export type TransportBreakerSnapshot = {
|
|
9
|
+
entries: number;
|
|
10
|
+
closed: number;
|
|
11
|
+
open: number;
|
|
12
|
+
halfOpen: number;
|
|
13
|
+
trips: number;
|
|
14
|
+
halfOpenProbes: number;
|
|
15
|
+
closes: number;
|
|
16
|
+
};
|
|
17
|
+
export type TransportBreakerOptions = {
|
|
18
|
+
windowMs?: number;
|
|
19
|
+
minSamples?: number;
|
|
20
|
+
failurePercent?: number;
|
|
21
|
+
openMs?: number;
|
|
22
|
+
jitterMs?: number;
|
|
23
|
+
maxEntries?: number;
|
|
24
|
+
ttlMs?: number;
|
|
25
|
+
halfOpenSuccesses?: number;
|
|
26
|
+
enabled?: boolean;
|
|
27
|
+
now?: () => number;
|
|
28
|
+
random?: () => number;
|
|
29
|
+
};
|
|
30
|
+
export type TransportBreaker = {
|
|
31
|
+
allow: (key: string) => AllowResult;
|
|
32
|
+
recordSuccess: (key: string, token?: number) => void;
|
|
33
|
+
recordFailure: (key: string, detail: {
|
|
34
|
+
eligible: boolean;
|
|
35
|
+
token?: number;
|
|
36
|
+
}) => void;
|
|
37
|
+
snapshot: () => TransportBreakerSnapshot;
|
|
38
|
+
sweep: () => void;
|
|
39
|
+
};
|
|
40
|
+
export declare function createTransportBreaker(opts?: TransportBreakerOptions): TransportBreaker;
|
|
41
|
+
//# sourceMappingURL=breaker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breaker.d.ts","sourceRoot":"","sources":["../../src/transport/breaker.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAA;AAE1D,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,YAAY,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,MAAM,CAAA;CACtB,CAAA;AAqBD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,WAAW,CAAA;IACnC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACpD,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAA;IACnF,QAAQ,EAAE,MAAM,wBAAwB,CAAA;IACxC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB,CAAA;AAED,wBAAgB,sBAAsB,CAAC,IAAI,GAAE,uBAA4B,GAAG,gBAAgB,CAoM3F"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
const DEFAULT_WINDOW_MS = 30_000;
|
|
2
|
+
const DEFAULT_MIN_SAMPLES = 10;
|
|
3
|
+
const DEFAULT_FAILURE_PERCENT = 50;
|
|
4
|
+
const DEFAULT_OPEN_MS = 30_000;
|
|
5
|
+
const DEFAULT_JITTER_MS = 5_000;
|
|
6
|
+
const DEFAULT_MAX_ENTRIES = 4096;
|
|
7
|
+
const DEFAULT_HALF_OPEN_SUCCESSES = 2;
|
|
8
|
+
export function createTransportBreaker(opts = {}) {
|
|
9
|
+
const windowMs = opts.windowMs ?? DEFAULT_WINDOW_MS;
|
|
10
|
+
const minSamples = opts.minSamples ?? DEFAULT_MIN_SAMPLES;
|
|
11
|
+
const failurePercent = opts.failurePercent ?? DEFAULT_FAILURE_PERCENT;
|
|
12
|
+
const openMs = opts.openMs ?? DEFAULT_OPEN_MS;
|
|
13
|
+
const jitterMs = opts.jitterMs ?? DEFAULT_JITTER_MS;
|
|
14
|
+
const maxEntries = opts.maxEntries ?? DEFAULT_MAX_ENTRIES;
|
|
15
|
+
const ttlMs = opts.ttlMs ?? windowMs;
|
|
16
|
+
const halfOpenSuccesses = Math.max(1, opts.halfOpenSuccesses ?? DEFAULT_HALF_OPEN_SUCCESSES);
|
|
17
|
+
const enabled = opts.enabled !== false;
|
|
18
|
+
const nowFn = opts.now ?? Date.now;
|
|
19
|
+
const randomFn = opts.random ?? Math.random;
|
|
20
|
+
const domains = new Map();
|
|
21
|
+
let nextProbeToken = 1;
|
|
22
|
+
let trips = 0;
|
|
23
|
+
let halfOpenProbes = 0;
|
|
24
|
+
let closes = 0;
|
|
25
|
+
function freshEntry() {
|
|
26
|
+
return {
|
|
27
|
+
state: "closed",
|
|
28
|
+
outcomes: [],
|
|
29
|
+
openUntil: 0,
|
|
30
|
+
probeToken: null,
|
|
31
|
+
consecutiveProbeSuccesses: 0,
|
|
32
|
+
lastActivityAt: nowFn(),
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function openDurationMs() {
|
|
36
|
+
const span = Math.max(0, jitterMs);
|
|
37
|
+
return openMs + Math.floor(randomFn() * (span + 1));
|
|
38
|
+
}
|
|
39
|
+
function pruneOutcomes(entry, now) {
|
|
40
|
+
const cut = now - windowMs;
|
|
41
|
+
while (entry.outcomes.length > 0 && entry.outcomes[0].at < cut)
|
|
42
|
+
entry.outcomes.shift();
|
|
43
|
+
}
|
|
44
|
+
function tripOpen(entry, now) {
|
|
45
|
+
entry.state = "open";
|
|
46
|
+
entry.openUntil = now + openDurationMs();
|
|
47
|
+
entry.probeToken = null;
|
|
48
|
+
entry.consecutiveProbeSuccesses = 0;
|
|
49
|
+
trips++;
|
|
50
|
+
}
|
|
51
|
+
function maybeTripFromWindow(entry, now) {
|
|
52
|
+
pruneOutcomes(entry, now);
|
|
53
|
+
const samples = entry.outcomes.length;
|
|
54
|
+
if (samples < minSamples)
|
|
55
|
+
return;
|
|
56
|
+
let failures = 0;
|
|
57
|
+
for (const outcome of entry.outcomes)
|
|
58
|
+
if (outcome.failed)
|
|
59
|
+
failures++;
|
|
60
|
+
if (failures * 100 >= failurePercent * samples)
|
|
61
|
+
tripOpen(entry, now);
|
|
62
|
+
}
|
|
63
|
+
function pushOutcome(entry, now, failed) {
|
|
64
|
+
entry.outcomes.push({ at: now, failed });
|
|
65
|
+
entry.lastActivityAt = now;
|
|
66
|
+
if (entry.state === "closed")
|
|
67
|
+
maybeTripFromWindow(entry, now);
|
|
68
|
+
}
|
|
69
|
+
function sweepAt(now) {
|
|
70
|
+
for (const [key, entry] of domains) {
|
|
71
|
+
if (entry.state !== "closed")
|
|
72
|
+
continue;
|
|
73
|
+
pruneOutcomes(entry, now);
|
|
74
|
+
if (now - entry.lastActivityAt >= ttlMs)
|
|
75
|
+
domains.delete(key);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
function evictOldest(predicate) {
|
|
79
|
+
let victim = null;
|
|
80
|
+
let oldest = Infinity;
|
|
81
|
+
for (const [key, entry] of domains) {
|
|
82
|
+
if (predicate && !predicate(entry))
|
|
83
|
+
continue;
|
|
84
|
+
if (entry.lastActivityAt < oldest) {
|
|
85
|
+
oldest = entry.lastActivityAt;
|
|
86
|
+
victim = key;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (!victim)
|
|
90
|
+
return false;
|
|
91
|
+
domains.delete(victim);
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
function ensureCapacity(now) {
|
|
95
|
+
if (domains.size < maxEntries)
|
|
96
|
+
return;
|
|
97
|
+
sweepAt(now);
|
|
98
|
+
if (domains.size < maxEntries)
|
|
99
|
+
return;
|
|
100
|
+
if (evictOldest((entry) => entry.state === "closed"))
|
|
101
|
+
return;
|
|
102
|
+
evictOldest();
|
|
103
|
+
}
|
|
104
|
+
function entryFor(key, now) {
|
|
105
|
+
let entry = domains.get(key);
|
|
106
|
+
if (entry) {
|
|
107
|
+
entry.lastActivityAt = now;
|
|
108
|
+
return entry;
|
|
109
|
+
}
|
|
110
|
+
ensureCapacity(now);
|
|
111
|
+
entry = freshEntry();
|
|
112
|
+
entry.lastActivityAt = now;
|
|
113
|
+
domains.set(key, entry);
|
|
114
|
+
return entry;
|
|
115
|
+
}
|
|
116
|
+
function decide(allowed, reason, state) {
|
|
117
|
+
return { allowed, reason, state };
|
|
118
|
+
}
|
|
119
|
+
function grantProbe(entry) {
|
|
120
|
+
if (entry.probeToken != null)
|
|
121
|
+
return decide(false, "provider_breaker", "half-open");
|
|
122
|
+
const token = nextProbeToken++;
|
|
123
|
+
entry.probeToken = token;
|
|
124
|
+
halfOpenProbes++;
|
|
125
|
+
return { allowed: true, reason: "probe", state: "half-open", probeToken: token };
|
|
126
|
+
}
|
|
127
|
+
function allowClosedOrOpen(entry, now) {
|
|
128
|
+
if (entry.state === "closed")
|
|
129
|
+
return decide(true, "ok", entry.state);
|
|
130
|
+
if (now < entry.openUntil)
|
|
131
|
+
return decide(false, "provider_breaker", "open");
|
|
132
|
+
entry.state = "half-open";
|
|
133
|
+
entry.probeToken = null;
|
|
134
|
+
entry.consecutiveProbeSuccesses = 0;
|
|
135
|
+
return grantProbe(entry);
|
|
136
|
+
}
|
|
137
|
+
function matchesProbe(entry, token) {
|
|
138
|
+
return entry.state === "half-open" && token != null && entry.probeToken === token;
|
|
139
|
+
}
|
|
140
|
+
function allow(key) {
|
|
141
|
+
const now = nowFn();
|
|
142
|
+
const entry = entryFor(key, now);
|
|
143
|
+
const result = entry.state === "half-open" ? grantProbe(entry) : allowClosedOrOpen(entry, now);
|
|
144
|
+
if (!enabled) {
|
|
145
|
+
return {
|
|
146
|
+
allowed: true,
|
|
147
|
+
reason: "breaker_off",
|
|
148
|
+
state: result.state,
|
|
149
|
+
probeToken: result.probeToken,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
return result;
|
|
153
|
+
}
|
|
154
|
+
function recordSuccess(key, token) {
|
|
155
|
+
const now = nowFn();
|
|
156
|
+
const entry = entryFor(key, now);
|
|
157
|
+
if (matchesProbe(entry, token)) {
|
|
158
|
+
entry.probeToken = null;
|
|
159
|
+
entry.consecutiveProbeSuccesses++;
|
|
160
|
+
entry.lastActivityAt = now;
|
|
161
|
+
if (entry.consecutiveProbeSuccesses >= halfOpenSuccesses) {
|
|
162
|
+
entry.state = "closed";
|
|
163
|
+
entry.outcomes = [];
|
|
164
|
+
entry.consecutiveProbeSuccesses = 0;
|
|
165
|
+
closes++;
|
|
166
|
+
}
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
if (entry.state === "closed")
|
|
170
|
+
pushOutcome(entry, now, false);
|
|
171
|
+
}
|
|
172
|
+
function recordFailure(key, detail) {
|
|
173
|
+
const now = nowFn();
|
|
174
|
+
const entry = entryFor(key, now);
|
|
175
|
+
const { eligible, token } = detail;
|
|
176
|
+
if (matchesProbe(entry, token)) {
|
|
177
|
+
entry.probeToken = null;
|
|
178
|
+
entry.lastActivityAt = now;
|
|
179
|
+
if (eligible)
|
|
180
|
+
tripOpen(entry, now);
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
if (!eligible)
|
|
184
|
+
return;
|
|
185
|
+
if (entry.state === "closed")
|
|
186
|
+
pushOutcome(entry, now, true);
|
|
187
|
+
}
|
|
188
|
+
function snapshot() {
|
|
189
|
+
let closed = 0;
|
|
190
|
+
let open = 0;
|
|
191
|
+
let halfOpen = 0;
|
|
192
|
+
for (const entry of domains.values()) {
|
|
193
|
+
if (entry.state === "open")
|
|
194
|
+
open++;
|
|
195
|
+
else if (entry.state === "half-open")
|
|
196
|
+
halfOpen++;
|
|
197
|
+
else
|
|
198
|
+
closed++;
|
|
199
|
+
}
|
|
200
|
+
return { entries: domains.size, closed, open, halfOpen, trips, halfOpenProbes, closes };
|
|
201
|
+
}
|
|
202
|
+
function sweep() {
|
|
203
|
+
sweepAt(nowFn());
|
|
204
|
+
}
|
|
205
|
+
return { allow, recordSuccess, recordFailure, snapshot, sweep };
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=breaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breaker.js","sourceRoot":"","sources":["../../src/transport/breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import type { TransportContext } from "./headers.js";
|
|
2
|
-
|
|
2
|
+
/** Hint passed to the owner-supplied HTTP fallback callback. */
|
|
3
|
+
export type FallbackFetchContext = {
|
|
4
|
+
/** Set only for typed replay-safe `previous_response_not_found` owner fallback. */
|
|
5
|
+
clearPreviousResponseId?: boolean;
|
|
6
|
+
};
|
|
7
|
+
type FallbackFetch = (signal: AbortSignal, context?: FallbackFetchContext) => Promise<Response>;
|
|
3
8
|
export declare function bridgeWebSocket(wsUrl: string, headers: Record<string, string>, requestBody: Record<string, unknown>, isOAuth: boolean, context?: TransportContext, signal?: AbortSignal, fallbackFetch?: FallbackFetch): Response;
|
|
4
9
|
export {};
|
|
5
10
|
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/transport/bridge.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../../src/transport/bridge.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAEpD,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG;IACjC,mFAAmF;IACnF,uBAAuB,CAAC,EAAE,OAAO,CAAA;CAClC,CAAA;AAED,KAAK,aAAa,GAAG,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAA;AA2L/F,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,gBAAqB,EAC9B,MAAM,CAAC,EAAE,WAAW,EACpB,aAAa,CAAC,EAAE,aAAa,GAC5B,QAAQ,CAkOV"}
|