@omnicross/core 0.1.1 → 0.1.3
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/ApiConverter.cjs +3 -778
- package/dist/ApiConverter.js +12 -751
- package/dist/{CompletionService-DtOF_War.d.cts → CompletionService-D3a47vdU.d.cts} +2 -1
- package/dist/{CompletionService-7fCmKAP3.d.ts → CompletionService-DdWaAxq0.d.ts} +2 -1
- package/dist/auth/GeminiCodeAssistProjectResolver.cjs +32 -60
- package/dist/auth/GeminiCodeAssistProjectResolver.js +11 -10
- package/dist/builtin-web-fetch-77JZUZGM.cjs +100 -0
- package/dist/builtin-web-fetch-IGLBX2XY.js +100 -0
- package/dist/chunk-2DCNB7DF.cjs +514 -0
- package/dist/chunk-2FMI2B6V.cjs +6196 -0
- package/dist/chunk-3OPYJG76.cjs +266 -0
- package/dist/chunk-3QOSDDNI.cjs +130 -0
- package/dist/chunk-46RLHI7D.js +0 -0
- package/dist/chunk-46ZIFWYG.cjs +277 -0
- package/dist/chunk-4DECIFU7.js +6196 -0
- package/dist/chunk-4IH4EL7M.cjs +9 -0
- package/dist/chunk-4VAVYUZS.cjs +991 -0
- package/dist/chunk-5ENKBSWO.js +311 -0
- package/dist/chunk-5ERIZW3D.js +44 -0
- package/dist/chunk-5HTVET6E.js +514 -0
- package/dist/chunk-5ZQBEOMD.js +764 -0
- package/dist/chunk-6RPZADX3.cjs +92 -0
- package/dist/chunk-7VU7V2E4.js +0 -0
- package/dist/chunk-7YN22L2H.cjs +87 -0
- package/dist/chunk-A2YMUCBT.cjs +105 -0
- package/dist/chunk-AEOZIDEB.cjs +32 -0
- package/dist/chunk-AQ5TNQB7.js +13 -0
- package/dist/chunk-AVYJ4YBN.js +58 -0
- package/dist/chunk-BO4RFWBR.js +89 -0
- package/dist/chunk-C72S6TTV.cjs +49 -0
- package/dist/chunk-C7PSERMH.js +87 -0
- package/dist/chunk-CDHS2QDC.js +179 -0
- package/dist/chunk-CWM2ZDU5.js +130 -0
- package/dist/chunk-CZHZGRU7.js +383 -0
- package/dist/chunk-DK4A7DLE.js +266 -0
- package/dist/chunk-DQ5VAYZ6.cjs +42 -0
- package/dist/chunk-DRWHTIIZ.js +13 -0
- package/dist/chunk-DWKQZ2SK.cjs +254 -0
- package/dist/chunk-EYZYXJTJ.cjs +1 -0
- package/dist/chunk-FFALUUZZ.cjs +235 -0
- package/dist/chunk-FMOBD2OQ.js +39 -0
- package/dist/chunk-FTQ7IQUC.js +991 -0
- package/dist/chunk-FZ46M34D.cjs +1 -0
- package/dist/chunk-G2UTNSGU.js +277 -0
- package/dist/chunk-GBHYAGX3.cjs +26 -0
- package/dist/chunk-GMMT7RVN.cjs +39 -0
- package/dist/chunk-H5JUT3KV.js +105 -0
- package/dist/chunk-HQP3K7PU.cjs +431 -0
- package/dist/chunk-HUZZZ3JL.js +32 -0
- package/dist/chunk-IAXWICZU.js +69 -0
- package/dist/chunk-JMJBSACD.cjs +147 -0
- package/dist/chunk-JO5NLTLY.js +46 -0
- package/dist/chunk-JWC6APFQ.js +23 -0
- package/dist/chunk-KUU2RNG6.cjs +46 -0
- package/dist/chunk-L74VDN4A.cjs +32 -0
- package/dist/chunk-MQNDWYPN.js +235 -0
- package/dist/chunk-MZNPGW5Q.js +26 -0
- package/dist/chunk-N5QFKSDO.js +56 -0
- package/dist/chunk-NYUNU75A.cjs +44 -0
- package/dist/chunk-NZYN7C3P.cjs +179 -0
- package/dist/chunk-Q27JY5RG.cjs +126 -0
- package/dist/chunk-QBZJ7P2T.cjs +13 -0
- package/dist/chunk-QWBWGODS.cjs +69 -0
- package/dist/chunk-QXD4MV2X.cjs +23 -0
- package/dist/chunk-R3HK6R4B.cjs +13 -0
- package/dist/chunk-RPII3E6Z.cjs +145 -0
- package/dist/chunk-RSJ3TWJQ.cjs +186 -0
- package/dist/chunk-S4WBV25P.js +913 -0
- package/dist/chunk-S6JGLF3G.cjs +89 -0
- package/dist/chunk-SUEGJ75D.cjs +764 -0
- package/dist/chunk-SVNDB62D.cjs +58 -0
- package/dist/chunk-SVXC36MU.cjs +383 -0
- package/dist/chunk-TKJMZBAH.js +32 -0
- package/dist/chunk-UBWEBKRC.js +42 -0
- package/dist/chunk-UNEFIWXI.cjs +32 -0
- package/dist/chunk-VQY5W4YW.cjs +311 -0
- package/dist/chunk-VVEHS2LI.js +431 -0
- package/dist/chunk-WNY4WMRF.js +32 -0
- package/dist/chunk-XEKD23J5.js +9 -0
- package/dist/chunk-XTEI64OU.js +145 -0
- package/dist/chunk-XX6NQJMA.js +92 -0
- package/dist/chunk-Y6OM7EV7.cjs +56 -0
- package/dist/chunk-Y7FO65VT.js +147 -0
- package/dist/chunk-YGXJGRFI.cjs +913 -0
- package/dist/chunk-YMFAJFQT.cjs +173 -0
- package/dist/chunk-Z7LUNECE.js +49 -0
- package/dist/chunk-Z7Y2NPHY.js +186 -0
- package/dist/chunk-ZJZAOKI7.js +254 -0
- package/dist/chunk-ZLX3KGXX.js +173 -0
- package/dist/chunk-ZY6KU6P3.js +126 -0
- package/dist/completion/ApiKeyPoolService.cjs +23 -48
- package/dist/completion/ApiKeyPoolService.d.cts +150 -2
- package/dist/completion/ApiKeyPoolService.d.ts +150 -2
- package/dist/completion/BuiltinToolExecutor.cjs +9 -324
- package/dist/completion/BuiltinToolExecutor.js +6 -290
- package/dist/completion/CompletionService.cjs +45 -3487
- package/dist/completion/CompletionService.d.cts +3 -2
- package/dist/completion/CompletionService.d.ts +3 -2
- package/dist/completion/CompletionService.js +41 -3457
- package/dist/completion/NativeSearchInjector.cjs +8 -192
- package/dist/completion/NativeSearchInjector.js +7 -162
- package/dist/completion/ProviderSearchInjector.cjs +12 -39
- package/dist/completion/native-search-types.cjs +13 -66
- package/dist/completion/native-search-types.js +7 -31
- package/dist/completion/openrouter-headers.cjs +12 -71
- package/dist/completion/openrouter-headers.d.cts +9 -12
- package/dist/completion/openrouter-headers.d.ts +9 -12
- package/dist/completion/openrouter-headers.js +7 -36
- package/dist/completion/openrouter-models.cjs +11 -67
- package/dist/completion/openrouter-models.js +5 -34
- package/dist/completion/types.cjs +1 -18
- package/dist/completion/url-builder.cjs +24 -138
- package/dist/completion/url-builder.js +12 -92
- package/dist/completion.cjs +62 -3989
- package/dist/completion.d.cts +3 -2
- package/dist/completion.d.ts +3 -2
- package/dist/completion.js +70 -3953
- package/dist/index.cjs +319 -10429
- package/dist/index.d.cts +49 -12
- package/dist/index.d.ts +49 -12
- package/dist/index.js +248 -10269
- package/dist/logger-4GvQNzhE.d.cts +22 -0
- package/dist/logger-4GvQNzhE.d.ts +22 -0
- package/dist/outbound-api/routeResolver.cjs +10 -217
- package/dist/outbound-api/routeResolver.d.cts +10 -3
- package/dist/outbound-api/routeResolver.d.ts +10 -3
- package/dist/outbound-api/routeResolver.js +9 -187
- package/dist/outbound-api/subscriptionRegistryPort.cjs +7 -37
- package/dist/outbound-api/subscriptionRegistryPort.d.cts +2 -1
- package/dist/outbound-api/subscriptionRegistryPort.d.ts +2 -1
- package/dist/outbound-api/subscriptionRegistryPort.js +4 -8
- package/dist/outbound-api/types.cjs +5 -17
- package/dist/outbound-api/types.d.cts +12 -144
- package/dist/outbound-api/types.d.ts +12 -144
- package/dist/outbound-api/types.js +6 -0
- package/dist/outbound-api.cjs +197 -5265
- package/dist/outbound-api.d.cts +787 -25
- package/dist/outbound-api.d.ts +787 -25
- package/dist/outbound-api.js +173 -5195
- package/dist/pipeline/AuthSource.cjs +1 -18
- package/dist/pipeline/AuthSource.d.cts +23 -1
- package/dist/pipeline/AuthSource.d.ts +23 -1
- package/dist/pipeline/LlmConfigProviderAuth.cjs +5 -166
- package/dist/pipeline/LlmConfigProviderAuth.d.cts +2 -1
- package/dist/pipeline/LlmConfigProviderAuth.d.ts +2 -1
- package/dist/pipeline/LlmConfigProviderAuth.js +5 -139
- package/dist/pipeline/SubscriptionAccountHealth.cjs +22 -0
- package/dist/pipeline/SubscriptionAccountHealth.d.cts +235 -0
- package/dist/pipeline/SubscriptionAccountHealth.d.ts +235 -0
- package/dist/pipeline/SubscriptionAccountHealth.js +22 -0
- package/dist/pipeline/SubscriptionAuthSource.cjs +6 -128
- package/dist/pipeline/SubscriptionAuthSource.d.cts +3 -2
- package/dist/pipeline/SubscriptionAuthSource.d.ts +3 -2
- package/dist/pipeline/SubscriptionAuthSource.js +5 -99
- package/dist/pipeline/SubscriptionAuthStrategy.cjs +1 -18
- package/dist/pipeline/SubscriptionAuthStrategy.d.cts +24 -1
- package/dist/pipeline/SubscriptionAuthStrategy.d.ts +24 -1
- package/dist/pipeline/auditSink.cjs +14 -0
- package/dist/pipeline/auditSink.d.cts +48 -0
- package/dist/pipeline/auditSink.d.ts +48 -0
- package/dist/pipeline/auditSink.js +14 -0
- package/dist/pipeline/billingEmit.cjs +14 -0
- package/dist/pipeline/billingEmit.d.cts +49 -0
- package/dist/pipeline/billingEmit.d.ts +49 -0
- package/dist/pipeline/billingEmit.js +14 -0
- package/dist/pipeline/executeProviderCall.cjs +5 -69
- package/dist/pipeline/executeProviderCall.js +3 -42
- package/dist/pipeline/resolveProviderChain.cjs +5 -46
- package/dist/pipeline/resolveProviderChain.js +3 -19
- package/dist/pipeline/resolveSubscriptionChain.cjs +5 -67
- package/dist/pipeline/resolveSubscriptionChain.js +3 -40
- package/dist/ports/gemini-code-assist-resolver.cjs +7 -37
- package/dist/ports/gemini-code-assist-resolver.js +4 -8
- package/dist/ports/pricing-store.cjs +1 -0
- package/dist/ports/pricing-store.d.cts +50 -0
- package/dist/ports/pricing-store.d.ts +50 -0
- package/dist/ports/pricing-store.js +0 -0
- package/dist/ports/provider-config-source.cjs +1 -18
- package/dist/ports/usage-event-store.cjs +1 -0
- package/dist/ports/usage-event-store.d.cts +54 -0
- package/dist/ports/usage-event-store.d.ts +54 -0
- package/dist/ports/usage-event-store.js +0 -0
- package/dist/ports/web-search-backend.cjs +1 -18
- package/dist/ports.cjs +1 -18
- package/dist/ports.d.cts +13 -2
- package/dist/ports.d.ts +13 -2
- package/dist/provider-proxy/ProviderProxy.cjs +47 -4643
- package/dist/provider-proxy/ProviderProxy.d.cts +2 -1
- package/dist/provider-proxy/ProviderProxy.d.ts +2 -1
- package/dist/provider-proxy/ProviderProxy.js +42 -4613
- package/dist/provider-proxy/identity/SubscriptionIdentityStore.cjs +15 -0
- package/dist/provider-proxy/identity/SubscriptionIdentityStore.d.cts +121 -0
- package/dist/provider-proxy/identity/SubscriptionIdentityStore.d.ts +121 -0
- package/dist/provider-proxy/identity/SubscriptionIdentityStore.js +15 -0
- package/dist/provider-proxy/identity/fingerprintHeaders.cjs +20 -0
- package/dist/provider-proxy/identity/fingerprintHeaders.d.cts +89 -0
- package/dist/provider-proxy/identity/fingerprintHeaders.d.ts +89 -0
- package/dist/provider-proxy/identity/fingerprintHeaders.js +20 -0
- package/dist/provider-proxy/ingress/providerProxyShared.cjs +42 -2941
- package/dist/provider-proxy/ingress/providerProxyShared.d.cts +13 -3
- package/dist/provider-proxy/ingress/providerProxyShared.d.ts +13 -3
- package/dist/provider-proxy/ingress/providerProxyShared.js +48 -2914
- package/dist/provider-proxy/matchText.cjs +13 -72
- package/dist/provider-proxy/matchText.d.cts +14 -1
- package/dist/provider-proxy/matchText.d.ts +14 -1
- package/dist/provider-proxy/matchText.js +8 -39
- package/dist/provider-proxy/types.cjs +1 -18
- package/dist/provider-proxy/types.d.cts +25 -1
- package/dist/provider-proxy/types.d.ts +25 -1
- package/dist/provider-proxy.cjs +42 -4655
- package/dist/provider-proxy.d.cts +2 -1
- package/dist/provider-proxy.d.ts +2 -1
- package/dist/provider-proxy.js +46 -4628
- package/dist/{routeResolver-HE-ZO0fO.d.ts → routeResolver-B1NglTfe.d.ts} +36 -10
- package/dist/{routeResolver-BrbK6ja9.d.cts → routeResolver-CbG5uBgm.d.cts} +36 -10
- package/dist/serializeError.cjs +5 -81
- package/dist/serializeError.js +3 -54
- package/dist/sse-parser.cjs +7 -455
- package/dist/sse-parser.js +4 -426
- package/dist/transformer/TransformerChainExecutor.cjs +4 -318
- package/dist/transformer/TransformerChainExecutor.js +4 -291
- package/dist/transformer/TransformerService.cjs +5 -289
- package/dist/transformer/TransformerService.js +3 -262
- package/dist/transformer/anthropicBetaInject.cjs +7 -50
- package/dist/transformer/anthropicBetaInject.js +4 -21
- package/dist/transformer/transformers/AnthropicTransformer.cjs +3 -1014
- package/dist/transformer/transformers/AnthropicTransformer.js +3 -987
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.cjs +4 -1106
- package/dist/transformer/transformers/GeminiCodeAssistTransformer.js +7 -1079
- package/dist/transformer/transformers/GeminiTransformer.cjs +4 -1010
- package/dist/transformer/transformers/GeminiTransformer.js +4 -983
- package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +3 -535
- package/dist/transformer/transformers/OpenAIResponseTransformer.js +3 -510
- package/dist/transformer/transformers/OpenCodeGoTransformer.cjs +5 -72
- package/dist/transformer/transformers/OpenCodeGoTransformer.js +3 -45
- package/dist/transformer/transformers/ReasoningTransformer.cjs +3 -270
- package/dist/transformer/transformers/ReasoningTransformer.js +2 -249
- package/dist/transformer/transformers.cjs +10 -3177
- package/dist/transformer/transformers.js +23 -3158
- package/dist/transformer/types.cjs +1 -18
- package/dist/transformer.cjs +13 -3726
- package/dist/transformer.js +17 -3706
- package/dist/types-6OUY_xfA.d.ts +830 -0
- package/dist/types-aBFFXoBz.d.cts +830 -0
- package/dist/usage/pricing-engine.cjs +6 -0
- package/dist/usage/pricing-engine.d.cts +83 -0
- package/dist/usage/pricing-engine.d.ts +83 -0
- package/dist/usage/pricing-engine.js +6 -0
- package/dist/usage/usage-recorder.cjs +6 -0
- package/dist/usage/usage-recorder.d.cts +91 -0
- package/dist/usage/usage-recorder.d.ts +91 -0
- package/dist/usage/usage-recorder.js +6 -0
- package/dist/usage.cjs +11 -0
- package/dist/usage.d.cts +8 -0
- package/dist/usage.d.ts +8 -0
- package/dist/usage.js +11 -0
- package/package.json +4 -2
- package/dist/ApiKeyPoolService-BmMkau07.d.cts +0 -170
- package/dist/ApiKeyPoolService-BmMkau07.d.ts +0 -170
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
|
+
|
|
3
|
+
var _chunkA2YMUCBTcjs = require('./chunk-A2YMUCBT.cjs');
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkUNEFIWXIcjs = require('./chunk-UNEFIWXI.cjs');
|
|
8
|
+
|
|
9
|
+
// src/completion/header-builder.ts
|
|
10
|
+
function getProviderHeaders(provider, apiKey) {
|
|
11
|
+
const format = _chunkA2YMUCBTcjs.resolveApiFormat.call(void 0, provider);
|
|
12
|
+
let headers;
|
|
13
|
+
switch (format) {
|
|
14
|
+
case "anthropic":
|
|
15
|
+
headers = {
|
|
16
|
+
"Content-Type": "application/json",
|
|
17
|
+
// Third-party Anthropic-Messages relays often gate on a Bearer token
|
|
18
|
+
// rather than x-api-key; `provider.useBearer` opts into that.
|
|
19
|
+
...provider.useBearer ? { Authorization: `Bearer ${apiKey}` } : { "x-api-key": apiKey },
|
|
20
|
+
"anthropic-version": "2025-01-10"
|
|
21
|
+
// Required for extended thinking feature
|
|
22
|
+
};
|
|
23
|
+
break;
|
|
24
|
+
case "google":
|
|
25
|
+
headers = {
|
|
26
|
+
"Content-Type": "application/json",
|
|
27
|
+
"x-goog-api-key": apiKey
|
|
28
|
+
};
|
|
29
|
+
break;
|
|
30
|
+
case "azure-openai":
|
|
31
|
+
headers = {
|
|
32
|
+
"Content-Type": "application/json",
|
|
33
|
+
"api-key": apiKey
|
|
34
|
+
};
|
|
35
|
+
break;
|
|
36
|
+
case "openai":
|
|
37
|
+
case "openai-response":
|
|
38
|
+
default:
|
|
39
|
+
headers = {
|
|
40
|
+
"Content-Type": "application/json",
|
|
41
|
+
"Authorization": `Bearer ${apiKey}`
|
|
42
|
+
};
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
if (_chunkUNEFIWXIcjs.isOpenRouterProvider.call(void 0, provider)) {
|
|
46
|
+
return { ...headers, ..._chunkUNEFIWXIcjs.OPENROUTER_APP_HEADERS };
|
|
47
|
+
}
|
|
48
|
+
return headers;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// src/pipeline/LlmConfigProviderAuth.ts
|
|
52
|
+
function isReportableStatus(status) {
|
|
53
|
+
return status === 429 || status === 529 || status === 401 || status === 403;
|
|
54
|
+
}
|
|
55
|
+
var LlmConfigProviderAuth = class {
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* The current resolved key. Mutable so a Phase-3 caller can read the
|
|
62
|
+
* rotated key after `onResult`; this phase it is only set at construction
|
|
63
|
+
* and updated inside `onResult` (mirroring the inline re-point in
|
|
64
|
+
* `callWithPoolReporting`).
|
|
65
|
+
*/
|
|
66
|
+
|
|
67
|
+
constructor(opts) {
|
|
68
|
+
this.provider = opts.provider;
|
|
69
|
+
this.apiKey = opts.apiKey;
|
|
70
|
+
this.apiKeyPool = _nullishCoalesce(opts.apiKeyPool, () => ( null));
|
|
71
|
+
this.providerId = opts.providerId;
|
|
72
|
+
this.sessionId = opts.sessionId;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Merge the provider auth headers (and content-type / OpenRouter app
|
|
76
|
+
* headers) into `headers`, exactly as a direct `getProviderHeaders` call
|
|
77
|
+
* would produce them. `hints` are accepted for contract symmetry but the
|
|
78
|
+
* provider-key path does not vary headers by URL/model.
|
|
79
|
+
*/
|
|
80
|
+
applyHeaders(headers, _hints) {
|
|
81
|
+
const authHeaders = getProviderHeaders(this.provider, this.apiKey);
|
|
82
|
+
for (const [k, v] of Object.entries(authHeaders)) {
|
|
83
|
+
headers[k] = v;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* React to the final HTTP status — the pool-rotation seam (design D5).
|
|
88
|
+
*
|
|
89
|
+
* Reproduces `callWithPoolReporting`'s reportable + success branches:
|
|
90
|
+
* - reportable status (429/529/401/403) on a pool-backed request →
|
|
91
|
+
* `reportError(providerId, sessionId, status)`; when it hands back a
|
|
92
|
+
* `newKey` the session was re-bound, so we adopt it (`this.apiKey`) and
|
|
93
|
+
* return `{ rebound: true, newKey }`. When no key is available it returns
|
|
94
|
+
* `{ rebound: false }` (the session is still cooled/disabled by the report).
|
|
95
|
+
* - success / any 2xx → `reportSuccess(sessionId)`; `{ rebound: false }`.
|
|
96
|
+
* - non-reportable, non-success, or non-pool request → no-op
|
|
97
|
+
* `{ rebound: false }`.
|
|
98
|
+
*
|
|
99
|
+
* NOTE: no caller invokes this in Phase 2; it is unit-tested in isolation.
|
|
100
|
+
*/
|
|
101
|
+
async onResult(status) {
|
|
102
|
+
const pool = this.apiKeyPool;
|
|
103
|
+
const providerId = this.providerId;
|
|
104
|
+
const sessionId = this.sessionId;
|
|
105
|
+
if (!pool || !providerId || !sessionId) {
|
|
106
|
+
return { rebound: false };
|
|
107
|
+
}
|
|
108
|
+
if (isReportableStatus(status)) {
|
|
109
|
+
const newKey = await pool.reportError(providerId, sessionId, status);
|
|
110
|
+
if (newKey) {
|
|
111
|
+
this.apiKey = newKey;
|
|
112
|
+
return { rebound: true, newKey };
|
|
113
|
+
}
|
|
114
|
+
return { rebound: false };
|
|
115
|
+
}
|
|
116
|
+
if (status !== null && status >= 200 && status < 300) {
|
|
117
|
+
pool.reportSuccess(sessionId);
|
|
118
|
+
}
|
|
119
|
+
return { rebound: false };
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
exports.getProviderHeaders = getProviderHeaders; exports.LlmConfigProviderAuth = LlmConfigProviderAuth;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/outbound-api/subscriptionRegistryPort.ts
|
|
2
|
+
var _registry = null;
|
|
3
|
+
function setSubscriptionRegistryForOutbound(registry) {
|
|
4
|
+
_registry = registry;
|
|
5
|
+
}
|
|
6
|
+
function getSubscriptionRegistryForOutbound() {
|
|
7
|
+
return _registry;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.setSubscriptionRegistryForOutbound = setSubscriptionRegistryForOutbound; exports.getSubscriptionRegistryForOutbound = getSubscriptionRegistryForOutbound;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/provider-proxy/matchText.ts
|
|
2
|
+
var MATCH_TEXT_PER_MESSAGE_CAP = 8192;
|
|
3
|
+
var MATCH_TEXT_RECENT_MESSAGES = 6;
|
|
4
|
+
function flattenMatchText(value) {
|
|
5
|
+
if (typeof value === "string") return value;
|
|
6
|
+
if (Array.isArray(value)) {
|
|
7
|
+
const parts = [];
|
|
8
|
+
for (const item of value) {
|
|
9
|
+
const text = flattenMatchText(item);
|
|
10
|
+
if (text) parts.push(text);
|
|
11
|
+
}
|
|
12
|
+
return parts.join("\n");
|
|
13
|
+
}
|
|
14
|
+
if (value && typeof value === "object") {
|
|
15
|
+
const obj = value;
|
|
16
|
+
if (obj.type === "tool_result" && obj.content !== void 0) {
|
|
17
|
+
return flattenMatchText(obj.content);
|
|
18
|
+
}
|
|
19
|
+
if (typeof obj.text === "string") return obj.text;
|
|
20
|
+
}
|
|
21
|
+
return "";
|
|
22
|
+
}
|
|
23
|
+
function collectMatchText(anthropicBody) {
|
|
24
|
+
const messages = Array.isArray(anthropicBody.messages) ? anthropicBody.messages : [];
|
|
25
|
+
const slices = [];
|
|
26
|
+
const sys = flattenMatchText(anthropicBody.system).trim();
|
|
27
|
+
if (sys) slices.push(sys.slice(0, MATCH_TEXT_PER_MESSAGE_CAP));
|
|
28
|
+
const recent = [];
|
|
29
|
+
for (let i = messages.length - 1; i >= 0 && recent.length < MATCH_TEXT_RECENT_MESSAGES; i--) {
|
|
30
|
+
const message = messages[i];
|
|
31
|
+
if (!message || typeof message !== "object") continue;
|
|
32
|
+
const role = message.role;
|
|
33
|
+
if (role !== "user" && role !== "system") continue;
|
|
34
|
+
const text = flattenMatchText(message.content).trim();
|
|
35
|
+
if (text) recent.push(text.slice(0, MATCH_TEXT_PER_MESSAGE_CAP));
|
|
36
|
+
}
|
|
37
|
+
for (let i = recent.length - 1; i >= 0; i--) slices.push(recent[i]);
|
|
38
|
+
return slices;
|
|
39
|
+
}
|
|
40
|
+
function deriveSubscriptionSessionKey(anthropicBody) {
|
|
41
|
+
const system = flattenMatchText(anthropicBody.system).trim().slice(0, MATCH_TEXT_PER_MESSAGE_CAP);
|
|
42
|
+
const messages = Array.isArray(anthropicBody.messages) ? anthropicBody.messages : [];
|
|
43
|
+
let firstUser = "";
|
|
44
|
+
for (const message of messages) {
|
|
45
|
+
if (message && typeof message === "object" && message.role === "user") {
|
|
46
|
+
firstUser = flattenMatchText(message.content).trim().slice(0, MATCH_TEXT_PER_MESSAGE_CAP);
|
|
47
|
+
break;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const anchor = `${system}\0${firstUser}`;
|
|
51
|
+
if (!system && !firstUser) return void 0;
|
|
52
|
+
return fnv1a(anchor);
|
|
53
|
+
}
|
|
54
|
+
function fnv1a(str) {
|
|
55
|
+
let h = 2166136261;
|
|
56
|
+
for (let i = 0; i < str.length; i++) {
|
|
57
|
+
h ^= str.charCodeAt(i);
|
|
58
|
+
h = Math.imul(h, 16777619);
|
|
59
|
+
}
|
|
60
|
+
return (h >>> 0).toString(16).padStart(8, "0");
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
exports.MATCH_TEXT_PER_MESSAGE_CAP = MATCH_TEXT_PER_MESSAGE_CAP; exports.MATCH_TEXT_RECENT_MESSAGES = MATCH_TEXT_RECENT_MESSAGES; exports.flattenMatchText = flattenMatchText; exports.collectMatchText = collectMatchText; exports.deriveSubscriptionSessionKey = deriveSubscriptionSessionKey;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/pipeline/resolveProviderChain.ts
|
|
2
|
+
async function resolveProviderChain(llmConfig, providerId, model) {
|
|
3
|
+
const cachedChain = await llmConfig.resolveTransformerChain(providerId, model);
|
|
4
|
+
const mainTransformer = await llmConfig.getMainTransformer(providerId);
|
|
5
|
+
const chain = {
|
|
6
|
+
providerTransformers: [...cachedChain.providerTransformers],
|
|
7
|
+
modelTransformers: [...cachedChain.modelTransformers]
|
|
8
|
+
};
|
|
9
|
+
if (mainTransformer) {
|
|
10
|
+
const alreadyInChain = chain.providerTransformers.some(
|
|
11
|
+
(t) => t.name === mainTransformer.name
|
|
12
|
+
);
|
|
13
|
+
if (!alreadyInChain) {
|
|
14
|
+
chain.providerTransformers.unshift(mainTransformer);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const hasTransformers = chain.providerTransformers.length > 0 || chain.modelTransformers.length > 0;
|
|
18
|
+
return { chain, mainTransformer, hasTransformers };
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
exports.resolveProviderChain = resolveProviderChain;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});// src/ports/gemini-code-assist-resolver.ts
|
|
2
|
+
var resolver = null;
|
|
3
|
+
function setGeminiCodeAssistResolver(impl) {
|
|
4
|
+
resolver = impl;
|
|
5
|
+
}
|
|
6
|
+
function getGeminiCodeAssistResolver() {
|
|
7
|
+
return resolver;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
exports.setGeminiCodeAssistResolver = setGeminiCodeAssistResolver; exports.getGeminiCodeAssistResolver = getGeminiCodeAssistResolver;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
var _chunk6RPZADX3cjs = require('./chunk-6RPZADX3.cjs');
|
|
5
|
+
|
|
6
|
+
// src/provider-proxy/identity/SubscriptionIdentityStore.ts
|
|
7
|
+
var CC_HEADER_TTL_MS = 7 * 24 * 60 * 60 * 1e3;
|
|
8
|
+
var KEY_SEP = "\0";
|
|
9
|
+
function normalizeUa(ua) {
|
|
10
|
+
if (typeof ua !== "string") return void 0;
|
|
11
|
+
const trimmed = ua.trim();
|
|
12
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
13
|
+
}
|
|
14
|
+
var SubscriptionIdentityStore = (_class = class {
|
|
15
|
+
__init() {this.identities = /* @__PURE__ */ new Map()}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
__init2() {this.persistence = null}
|
|
21
|
+
constructor(opts = {}) {;_class.prototype.__init.call(this);_class.prototype.__init2.call(this);
|
|
22
|
+
this.now = _nullishCoalesce(opts.now, () => ( Date.now));
|
|
23
|
+
this.enabled = _nullishCoalesce(opts.enabled, () => ( false));
|
|
24
|
+
this.ua = normalizeUa(opts.ua);
|
|
25
|
+
this.ccHeaderTtlMs = _nullishCoalesce(opts.ccHeaderTtlMs, () => ( CC_HEADER_TTL_MS));
|
|
26
|
+
}
|
|
27
|
+
/** Whether capture/replay is engaged (config flag). */
|
|
28
|
+
isEnabled() {
|
|
29
|
+
return this.enabled;
|
|
30
|
+
}
|
|
31
|
+
/** The operator UA baseline (piece 4), or undefined when unset. */
|
|
32
|
+
uaBaseline() {
|
|
33
|
+
return this.ua;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Re-apply config to the LIVE shared instance (bootstrap, mirroring the health
|
|
37
|
+
* tracker's `configure`). Only defined fields override; `ua: null` clears the
|
|
38
|
+
* baseline.
|
|
39
|
+
*/
|
|
40
|
+
configure(opts) {
|
|
41
|
+
if (opts.enabled !== void 0) this.enabled = opts.enabled;
|
|
42
|
+
if (opts.ua !== void 0) this.ua = normalizeUa(_nullishCoalesce(opts.ua, () => ( void 0)));
|
|
43
|
+
}
|
|
44
|
+
/** Install (or clear) the write-through persistence port (P2). */
|
|
45
|
+
setPersistence(port) {
|
|
46
|
+
this.persistence = port;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Boot seed (P2, D5): install a PERSISTED identity for an account, but NEVER
|
|
50
|
+
* over a live in-memory capture (a re-captured identity from this session wins).
|
|
51
|
+
* A no-op for an empty/absent identity. Does NOT write back through the port.
|
|
52
|
+
*/
|
|
53
|
+
seed(providerId, accountId, identity) {
|
|
54
|
+
if (!accountId || !identity) return;
|
|
55
|
+
const headers = _chunk6RPZADX3cjs.sanitizeFrozenHeaders.call(void 0, _nullishCoalesce(identity.headers, () => ( {})));
|
|
56
|
+
if (Object.keys(headers).length === 0) return;
|
|
57
|
+
const key = this.key(providerId, accountId);
|
|
58
|
+
if (this.identities.has(key)) return;
|
|
59
|
+
this.identities.set(key, {
|
|
60
|
+
headers,
|
|
61
|
+
capturedAt: typeof identity.capturedAt === "number" ? identity.capturedAt : this.now()
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Capture a real client's fingerprint headers for an account. First-seen ⇒
|
|
66
|
+
* FREEZE the whole (sanitized) bag. Already-frozen ⇒ within the TTL, no change
|
|
67
|
+
* (stable identity); past the TTL, refresh the NON-stainless headers from the
|
|
68
|
+
* new observation while keeping stainless frozen-stable (P2). An empty/absent
|
|
69
|
+
* account id or an empty sanitized bag is a no-op (so an account with no
|
|
70
|
+
* fingerprint headers never freezes an empty identity → the caller falls back
|
|
71
|
+
* to the UA baseline). Fires the persistence port on a freeze/refresh.
|
|
72
|
+
*/
|
|
73
|
+
capture(providerId, accountId, incoming, now = this.now()) {
|
|
74
|
+
if (!accountId) return;
|
|
75
|
+
const clean = _chunk6RPZADX3cjs.sanitizeFrozenHeaders.call(void 0, incoming);
|
|
76
|
+
if (Object.keys(clean).length === 0) return;
|
|
77
|
+
const key = this.key(providerId, accountId);
|
|
78
|
+
const existing = this.identities.get(key);
|
|
79
|
+
if (!existing) {
|
|
80
|
+
const frozen = { headers: clean, capturedAt: now };
|
|
81
|
+
this.identities.set(key, frozen);
|
|
82
|
+
this.emitPersist(providerId, accountId, frozen);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
if (now - existing.capturedAt < this.ccHeaderTtlMs) return;
|
|
86
|
+
const refreshed = {
|
|
87
|
+
headers: _chunk6RPZADX3cjs.refreshNonStainless.call(void 0, existing.headers, clean),
|
|
88
|
+
capturedAt: now
|
|
89
|
+
};
|
|
90
|
+
this.identities.set(key, refreshed);
|
|
91
|
+
this.emitPersist(providerId, accountId, refreshed);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The frozen identity headers for an account, or `undefined` when none is
|
|
95
|
+
* frozen (or the frozen set is empty). Returns a COPY (the caller merges it into
|
|
96
|
+
* a mutable outbound header bag).
|
|
97
|
+
*/
|
|
98
|
+
replay(providerId, accountId) {
|
|
99
|
+
if (!accountId) return void 0;
|
|
100
|
+
const frozen = this.identities.get(this.key(providerId, accountId));
|
|
101
|
+
if (!frozen || Object.keys(frozen.headers).length === 0) return void 0;
|
|
102
|
+
return { ...frozen.headers };
|
|
103
|
+
}
|
|
104
|
+
/** Whether an identity is frozen for an account (admin coarse status — D7). */
|
|
105
|
+
hasIdentity(providerId, accountId) {
|
|
106
|
+
const frozen = this.identities.get(this.key(providerId, accountId));
|
|
107
|
+
return !!frozen && Object.keys(frozen.headers).length > 0;
|
|
108
|
+
}
|
|
109
|
+
/** The freeze/refresh time for an account's identity (admin coarse status). */
|
|
110
|
+
capturedAt(providerId, accountId) {
|
|
111
|
+
return _optionalChain([this, 'access', _ => _.identities, 'access', _2 => _2.get, 'call', _3 => _3(this.key(providerId, accountId)), 'optionalAccess', _4 => _4.capturedAt]);
|
|
112
|
+
}
|
|
113
|
+
emitPersist(providerId, accountId, identity) {
|
|
114
|
+
if (!this.persistence) return;
|
|
115
|
+
try {
|
|
116
|
+
this.persistence.persist(providerId, accountId, {
|
|
117
|
+
headers: { ...identity.headers },
|
|
118
|
+
capturedAt: identity.capturedAt
|
|
119
|
+
});
|
|
120
|
+
} catch (e) {
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
key(providerId, accountId) {
|
|
124
|
+
return `${providerId}${KEY_SEP}${accountId}`;
|
|
125
|
+
}
|
|
126
|
+
}, _class);
|
|
127
|
+
var _shared = null;
|
|
128
|
+
function getSharedIdentityStore() {
|
|
129
|
+
if (!_shared) _shared = new SubscriptionIdentityStore();
|
|
130
|
+
return _shared;
|
|
131
|
+
}
|
|
132
|
+
function setSharedIdentityStore(instance) {
|
|
133
|
+
_shared = instance;
|
|
134
|
+
}
|
|
135
|
+
function __resetSharedIdentityStoreForTests() {
|
|
136
|
+
_shared = null;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
exports.CC_HEADER_TTL_MS = CC_HEADER_TTL_MS; exports.SubscriptionIdentityStore = SubscriptionIdentityStore; exports.getSharedIdentityStore = getSharedIdentityStore; exports.setSharedIdentityStore = setSharedIdentityStore; exports.__resetSharedIdentityStoreForTests = __resetSharedIdentityStoreForTests;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; } var _class;
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
var _chunkYGXJGRFIcjs = require('./chunk-YGXJGRFI.cjs');
|
|
7
|
+
|
|
8
|
+
// src/transformer/transformers/GeminiCodeAssistTransformer.ts
|
|
9
|
+
var DEFAULT_CODE_ASSIST_ENDPOINT = "https://cloudcode-pa.googleapis.com";
|
|
10
|
+
var DEFAULT_CODE_ASSIST_API_VERSION = "v1internal";
|
|
11
|
+
function resolveCodeAssistEndpoint() {
|
|
12
|
+
return (process.env.CODE_ASSIST_ENDPOINT || DEFAULT_CODE_ASSIST_ENDPOINT).replace(/\/+$/, "");
|
|
13
|
+
}
|
|
14
|
+
function resolveCodeAssistApiVersion() {
|
|
15
|
+
return process.env.CODE_ASSIST_API_VERSION || DEFAULT_CODE_ASSIST_API_VERSION;
|
|
16
|
+
}
|
|
17
|
+
function buildCodeAssistUrl(stream) {
|
|
18
|
+
const base = resolveCodeAssistEndpoint();
|
|
19
|
+
const version = resolveCodeAssistApiVersion();
|
|
20
|
+
const method = stream ? "streamGenerateContent?alt=sse" : "generateContent";
|
|
21
|
+
return `${base}/${version}:${method}`;
|
|
22
|
+
}
|
|
23
|
+
function generateUserPromptId() {
|
|
24
|
+
const c = globalThis.crypto;
|
|
25
|
+
if (_optionalChain([c, 'optionalAccess', _ => _.randomUUID])) return c.randomUUID();
|
|
26
|
+
return `omnicross-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;
|
|
27
|
+
}
|
|
28
|
+
function peelResponseEnvelope(parsed) {
|
|
29
|
+
if (parsed && typeof parsed === "object" && "response" in parsed) {
|
|
30
|
+
return parsed.response;
|
|
31
|
+
}
|
|
32
|
+
return parsed;
|
|
33
|
+
}
|
|
34
|
+
async function unwrapCodeAssistResponse(response) {
|
|
35
|
+
const contentType = _nullishCoalesce(response.headers.get("Content-Type"), () => ( ""));
|
|
36
|
+
if (contentType.includes("stream") || contentType.includes("text/event-stream")) {
|
|
37
|
+
const sourceBody = response.body;
|
|
38
|
+
if (!sourceBody) return response;
|
|
39
|
+
const decoder = new TextDecoder();
|
|
40
|
+
const encoder = new TextEncoder();
|
|
41
|
+
const peeled = new ReadableStream({
|
|
42
|
+
async start(controller) {
|
|
43
|
+
const reader = sourceBody.getReader();
|
|
44
|
+
let buffer = "";
|
|
45
|
+
const processLine = (line) => {
|
|
46
|
+
if (!line.startsWith("data:")) {
|
|
47
|
+
if (line.length > 0) controller.enqueue(encoder.encode(`${line}
|
|
48
|
+
`));
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const payload = line.slice(line.indexOf(":") + 1).trim();
|
|
52
|
+
if (!payload || payload === "[DONE]") {
|
|
53
|
+
controller.enqueue(encoder.encode(`${line}
|
|
54
|
+
`));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
try {
|
|
58
|
+
const parsed = JSON.parse(payload);
|
|
59
|
+
const inner2 = peelResponseEnvelope(parsed);
|
|
60
|
+
controller.enqueue(encoder.encode(`data: ${JSON.stringify(inner2)}
|
|
61
|
+
`));
|
|
62
|
+
} catch (e) {
|
|
63
|
+
controller.enqueue(encoder.encode(`${line}
|
|
64
|
+
`));
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
try {
|
|
68
|
+
while (true) {
|
|
69
|
+
const { done, value } = await reader.read();
|
|
70
|
+
if (done) {
|
|
71
|
+
if (buffer) processLine(buffer);
|
|
72
|
+
break;
|
|
73
|
+
}
|
|
74
|
+
buffer += decoder.decode(value, { stream: true });
|
|
75
|
+
const lines = buffer.split("\n");
|
|
76
|
+
buffer = lines.pop() || "";
|
|
77
|
+
for (const line of lines) processLine(line);
|
|
78
|
+
}
|
|
79
|
+
} catch (err) {
|
|
80
|
+
controller.error(err);
|
|
81
|
+
} finally {
|
|
82
|
+
controller.close();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
return new Response(peeled, {
|
|
87
|
+
status: response.status,
|
|
88
|
+
statusText: response.statusText,
|
|
89
|
+
headers: response.headers
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
const raw = await response.json().catch(() => null);
|
|
93
|
+
const inner = peelResponseEnvelope(raw);
|
|
94
|
+
return new Response(JSON.stringify(inner), {
|
|
95
|
+
status: response.status,
|
|
96
|
+
statusText: response.statusText,
|
|
97
|
+
headers: response.headers
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
var GeminiCodeAssistTransformer = (_class = class {constructor() { _class.prototype.__init.call(this);_class.prototype.__init2.call(this); }
|
|
101
|
+
static __initStatic() {this.TransformerName = "gemini-code-assist"}
|
|
102
|
+
__init() {this.name = "gemini-code-assist"}
|
|
103
|
+
|
|
104
|
+
/** Code Assist has no fixed `/models/:modelAndAction` endpoint pattern — the
|
|
105
|
+
* URL is built per-request in `transformRequestIn`. Left undefined so the
|
|
106
|
+
* TransformerService does NOT treat this as an endpoint (reverse) transformer. */
|
|
107
|
+
__init2() {this.endPoint = void 0}
|
|
108
|
+
/**
|
|
109
|
+
* unified → Code Assist envelope.
|
|
110
|
+
*
|
|
111
|
+
* Builds the inner public-Gemini body via the shared `buildRequestBody`, then
|
|
112
|
+
* wraps it as `{ model, project, user_prompt_id, request: <inner> }` and sets
|
|
113
|
+
* the Code Assist URL + Bearer-only headers.
|
|
114
|
+
*
|
|
115
|
+
* The resolved Code Assist `project` is threaded in via `provider.geminiProject`
|
|
116
|
+
* (stashed by the subscription dispatch seam — see SubscriptionDispatcher /
|
|
117
|
+
* openaiResponsesIngress). `undefined` is the valid fresh free-tier value.
|
|
118
|
+
*/
|
|
119
|
+
async transformRequestIn(request, provider, _context) {
|
|
120
|
+
const inner = _chunkYGXJGRFIcjs.buildRequestBody.call(void 0, request);
|
|
121
|
+
const envelope = {
|
|
122
|
+
model: request.model,
|
|
123
|
+
project: provider.geminiProject,
|
|
124
|
+
user_prompt_id: generateUserPromptId(),
|
|
125
|
+
request: inner
|
|
126
|
+
};
|
|
127
|
+
const url = buildCodeAssistUrl(Boolean(request.stream));
|
|
128
|
+
const headers = {
|
|
129
|
+
"x-goog-api-key": void 0,
|
|
130
|
+
"X-Goog-Api-Key": void 0
|
|
131
|
+
};
|
|
132
|
+
return {
|
|
133
|
+
body: envelope,
|
|
134
|
+
config: { url, headers }
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Code Assist request → unified (endpoint-decode parity with GeminiTransformer).
|
|
139
|
+
* Peels the top-level `request` envelope first, then delegates to the shared
|
|
140
|
+
* gemini request decoder. Not used on the subscription dispatch path (the
|
|
141
|
+
* endpoint transformer there is Anthropic/OpenAI-Response), but provided for
|
|
142
|
+
* completeness so this transformer is a drop-in for the gemini one.
|
|
143
|
+
*/
|
|
144
|
+
async transformRequestOut(request, _context) {
|
|
145
|
+
const r = request;
|
|
146
|
+
const inner = r && typeof r === "object" && "request" in r ? r.request : r;
|
|
147
|
+
if (inner && typeof inner === "object" && !("model" in inner) && "model" in r) {
|
|
148
|
+
inner.model = r.model;
|
|
149
|
+
}
|
|
150
|
+
return _chunkYGXJGRFIcjs.transformRequestOut.call(void 0, inner);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Code Assist response → OpenAI-compatible. PEEL the `.response` envelope from
|
|
154
|
+
* the body / each SSE chunk, then DELEGATE to the existing gemini parser.
|
|
155
|
+
*/
|
|
156
|
+
async transformResponseOut(response, _context) {
|
|
157
|
+
const unwrapped = await unwrapCodeAssistResponse(response);
|
|
158
|
+
return _chunkYGXJGRFIcjs.transformResponseOut.call(void 0, unwrapped, this.name, this.logger);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* OpenAI-compatible response → Code Assist (endpoint-encode parity). Re-wraps
|
|
162
|
+
* the standard gemini response under the top-level `response` key after the
|
|
163
|
+
* shared gemini encoder produces a public-Gemini body. Symmetric with
|
|
164
|
+
* `transformResponseOut`'s peel.
|
|
165
|
+
*/
|
|
166
|
+
async transformResponseIn(response, _context) {
|
|
167
|
+
const geminiResponse = await _chunkYGXJGRFIcjs.transformResponseIn.call(void 0, response, this.logger);
|
|
168
|
+
const contentType = _nullishCoalesce(geminiResponse.headers.get("Content-Type"), () => ( ""));
|
|
169
|
+
if (contentType.includes("text/event-stream")) {
|
|
170
|
+
return geminiResponse;
|
|
171
|
+
}
|
|
172
|
+
const data = await geminiResponse.json().catch(() => null);
|
|
173
|
+
return new Response(JSON.stringify({ response: data }), {
|
|
174
|
+
status: geminiResponse.status,
|
|
175
|
+
statusText: geminiResponse.statusText,
|
|
176
|
+
headers: { "Content-Type": "application/json" }
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}, _class.__initStatic(), _class);
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
exports.resolveCodeAssistEndpoint = resolveCodeAssistEndpoint; exports.resolveCodeAssistApiVersion = resolveCodeAssistApiVersion; exports.buildCodeAssistUrl = buildCodeAssistUrl; exports.GeminiCodeAssistTransformer = GeminiCodeAssistTransformer;
|