@omnicross/core 0.1.1 → 0.1.2
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 +27 -60
- package/dist/auth/GeminiCodeAssistProjectResolver.js +5 -9
- 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-2FEVTJWG.js +4400 -0
- package/dist/chunk-3MEACFK3.js +193 -0
- package/dist/chunk-3OPYJG76.cjs +266 -0
- package/dist/chunk-46RLHI7D.js +0 -0
- package/dist/chunk-46ZIFWYG.cjs +277 -0
- package/dist/chunk-4NBS6KPV.cjs +43 -0
- package/dist/chunk-4VAVYUZS.cjs +991 -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-6VIXXLMX.cjs +14 -0
- package/dist/chunk-745DV5FL.js +147 -0
- package/dist/chunk-74TMJA7Z.js +53 -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-AQ5TNQB7.js +13 -0
- package/dist/chunk-AVYJ4YBN.js +58 -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-DK4A7DLE.js +266 -0
- package/dist/chunk-DRWHTIIZ.js +13 -0
- package/dist/chunk-DWKQZ2SK.cjs +254 -0
- package/dist/chunk-E3WHL7CO.js +14 -0
- package/dist/chunk-EYZYXJTJ.cjs +1 -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-G2FUJNA2.cjs +193 -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-JO5NLTLY.js +46 -0
- package/dist/chunk-JWC6APFQ.js +23 -0
- package/dist/chunk-KUU2RNG6.cjs +46 -0
- package/dist/chunk-LKZJEL6E.cjs +124 -0
- package/dist/chunk-MNYKI4CI.js +94 -0
- package/dist/chunk-MZNPGW5Q.js +26 -0
- package/dist/chunk-N3V2J5ZO.cjs +53 -0
- package/dist/chunk-NYUNU75A.cjs +44 -0
- package/dist/chunk-NZYN7C3P.cjs +179 -0
- package/dist/chunk-O466Y272.js +235 -0
- package/dist/chunk-PXUJF5HS.js +124 -0
- package/dist/chunk-QBZJ7P2T.cjs +13 -0
- package/dist/chunk-QOCNX236.js +46 -0
- package/dist/chunk-QXD4MV2X.cjs +23 -0
- package/dist/chunk-R3HK6R4B.cjs +13 -0
- package/dist/chunk-RSJ3TWJQ.cjs +186 -0
- package/dist/chunk-S4WBV25P.js +913 -0
- package/dist/chunk-SN3YWBX7.cjs +4400 -0
- package/dist/chunk-SPVWWUHX.cjs +46 -0
- package/dist/chunk-SUEGJ75D.cjs +764 -0
- package/dist/chunk-SVNDB62D.cjs +58 -0
- package/dist/chunk-UYPEN5XE.cjs +235 -0
- package/dist/chunk-V5KPWNYX.cjs +147 -0
- package/dist/chunk-VVEHS2LI.js +431 -0
- package/dist/chunk-XBSYYZIY.cjs +94 -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-ZSVQT3PW.js +43 -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 +38 -3487
- package/dist/completion/CompletionService.d.cts +3 -2
- package/dist/completion/CompletionService.d.ts +3 -2
- package/dist/completion/CompletionService.js +34 -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 +15 -71
- package/dist/completion/openrouter-headers.js +8 -34
- package/dist/completion/openrouter-models.cjs +10 -67
- package/dist/completion/openrouter-models.js +4 -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 +55 -3989
- package/dist/completion.d.cts +3 -2
- package/dist/completion.d.ts +3 -2
- package/dist/completion.js +63 -3953
- package/dist/index.cjs +197 -10429
- package/dist/index.d.cts +9 -2
- package/dist/index.d.ts +9 -2
- package/dist/index.js +125 -10268
- package/dist/logger-4GvQNzhE.d.cts +22 -0
- package/dist/logger-4GvQNzhE.d.ts +22 -0
- package/dist/outbound-api/routeResolver.cjs +7 -217
- package/dist/outbound-api/routeResolver.d.cts +2 -1
- package/dist/outbound-api/routeResolver.d.ts +2 -1
- package/dist/outbound-api/routeResolver.js +6 -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 +1 -18
- package/dist/outbound-api/types.d.cts +2 -1
- package/dist/outbound-api/types.d.ts +2 -1
- package/dist/outbound-api.cjs +35 -5221
- package/dist/outbound-api.d.cts +2 -1
- package/dist/outbound-api.d.ts +2 -1
- package/dist/outbound-api.js +54 -5194
- package/dist/pipeline/AuthSource.cjs +1 -18
- 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/SubscriptionAuthSource.cjs +6 -128
- package/dist/pipeline/SubscriptionAuthSource.js +5 -99
- package/dist/pipeline/SubscriptionAuthStrategy.cjs +1 -18
- 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 +29 -0
- package/dist/ports/usage-event-store.d.ts +29 -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 +6 -1
- package/dist/ports.d.ts +6 -1
- package/dist/provider-proxy/ProviderProxy.cjs +40 -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 +35 -4613
- package/dist/provider-proxy/ingress/providerProxyShared.cjs +35 -2941
- package/dist/provider-proxy/ingress/providerProxyShared.d.cts +2 -1
- package/dist/provider-proxy/ingress/providerProxyShared.d.ts +2 -1
- package/dist/provider-proxy/ingress/providerProxyShared.js +41 -2914
- package/dist/provider-proxy/matchText.cjs +11 -72
- package/dist/provider-proxy/matchText.js +6 -39
- package/dist/provider-proxy/types.cjs +1 -18
- package/dist/provider-proxy/types.d.cts +2 -1
- package/dist/provider-proxy/types.d.ts +2 -1
- package/dist/provider-proxy.cjs +35 -4655
- package/dist/provider-proxy.d.cts +2 -1
- package/dist/provider-proxy.d.ts +2 -1
- package/dist/provider-proxy.js +39 -4628
- 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/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 +73 -0
- package/dist/usage/usage-recorder.d.ts +73 -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 +1 -1
- package/dist/ApiKeyPoolService-BmMkau07.d.cts +0 -170
- package/dist/ApiKeyPoolService-BmMkau07.d.ts +0 -170
|
@@ -1,18 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __copyProps = (to, from, except, desc) => {
|
|
7
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
-
for (let key of __getOwnPropNames(from))
|
|
9
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
-
}
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
-
|
|
16
|
-
// src/pipeline/AuthSource.ts
|
|
17
|
-
var AuthSource_exports = {};
|
|
18
|
-
module.exports = __toCommonJS(AuthSource_exports);
|
|
1
|
+
"use strict";
|
|
@@ -1,169 +1,8 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
19
2
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
LlmConfigProviderAuth: () => LlmConfigProviderAuth
|
|
24
|
-
});
|
|
25
|
-
module.exports = __toCommonJS(LlmConfigProviderAuth_exports);
|
|
3
|
+
var _chunkLKZJEL6Ecjs = require('../chunk-LKZJEL6E.cjs');
|
|
4
|
+
require('../chunk-A2YMUCBT.cjs');
|
|
5
|
+
require('../chunk-6VIXXLMX.cjs');
|
|
26
6
|
|
|
27
|
-
// src/openrouter.ts
|
|
28
|
-
function isOpenRouterProvider(provider) {
|
|
29
|
-
const baseUrl = (provider.api_base_url || "").toLowerCase();
|
|
30
|
-
return baseUrl.includes("openrouter.ai");
|
|
31
|
-
}
|
|
32
|
-
var OPENROUTER_APP_HEADERS = {
|
|
33
|
-
"HTTP-Referer": "https://omnicross.dev",
|
|
34
|
-
"X-Title": "omnicross"
|
|
35
|
-
};
|
|
36
7
|
|
|
37
|
-
|
|
38
|
-
var import_endpoint_resolver = require("@omnicross/contracts/endpoint-resolver");
|
|
39
|
-
function resolveApiFormat(provider) {
|
|
40
|
-
if (provider.apiFormat) {
|
|
41
|
-
return provider.apiFormat;
|
|
42
|
-
}
|
|
43
|
-
if (provider.chatApiFormat) {
|
|
44
|
-
return provider.chatApiFormat;
|
|
45
|
-
}
|
|
46
|
-
if (provider.apiType === "claudecode" || provider.apiType === "anthropic") {
|
|
47
|
-
return "anthropic";
|
|
48
|
-
}
|
|
49
|
-
if (provider.apiType === "google") {
|
|
50
|
-
return "google";
|
|
51
|
-
}
|
|
52
|
-
return "openai";
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// src/completion/header-builder.ts
|
|
56
|
-
function getProviderHeaders(provider, apiKey) {
|
|
57
|
-
const format = resolveApiFormat(provider);
|
|
58
|
-
let headers;
|
|
59
|
-
switch (format) {
|
|
60
|
-
case "anthropic":
|
|
61
|
-
headers = {
|
|
62
|
-
"Content-Type": "application/json",
|
|
63
|
-
"x-api-key": apiKey,
|
|
64
|
-
"anthropic-version": "2025-01-10"
|
|
65
|
-
// Required for extended thinking feature
|
|
66
|
-
};
|
|
67
|
-
break;
|
|
68
|
-
case "google":
|
|
69
|
-
headers = {
|
|
70
|
-
"Content-Type": "application/json",
|
|
71
|
-
"x-goog-api-key": apiKey
|
|
72
|
-
};
|
|
73
|
-
break;
|
|
74
|
-
case "azure-openai":
|
|
75
|
-
headers = {
|
|
76
|
-
"Content-Type": "application/json",
|
|
77
|
-
"api-key": apiKey
|
|
78
|
-
};
|
|
79
|
-
break;
|
|
80
|
-
case "openai":
|
|
81
|
-
case "openai-response":
|
|
82
|
-
default:
|
|
83
|
-
headers = {
|
|
84
|
-
"Content-Type": "application/json",
|
|
85
|
-
"Authorization": `Bearer ${apiKey}`
|
|
86
|
-
};
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
if (isOpenRouterProvider(provider)) {
|
|
90
|
-
return { ...headers, ...OPENROUTER_APP_HEADERS };
|
|
91
|
-
}
|
|
92
|
-
return headers;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
// src/pipeline/LlmConfigProviderAuth.ts
|
|
96
|
-
function isReportableStatus(status) {
|
|
97
|
-
return status === 429 || status === 529 || status === 401 || status === 403;
|
|
98
|
-
}
|
|
99
|
-
var LlmConfigProviderAuth = class {
|
|
100
|
-
provider;
|
|
101
|
-
apiKeyPool;
|
|
102
|
-
providerId;
|
|
103
|
-
sessionId;
|
|
104
|
-
/**
|
|
105
|
-
* The current resolved key. Mutable so a Phase-3 caller can read the
|
|
106
|
-
* rotated key after `onResult`; this phase it is only set at construction
|
|
107
|
-
* and updated inside `onResult` (mirroring the inline re-point in
|
|
108
|
-
* `callWithPoolReporting`).
|
|
109
|
-
*/
|
|
110
|
-
apiKey;
|
|
111
|
-
constructor(opts) {
|
|
112
|
-
this.provider = opts.provider;
|
|
113
|
-
this.apiKey = opts.apiKey;
|
|
114
|
-
this.apiKeyPool = opts.apiKeyPool ?? null;
|
|
115
|
-
this.providerId = opts.providerId;
|
|
116
|
-
this.sessionId = opts.sessionId;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Merge the provider auth headers (and content-type / OpenRouter app
|
|
120
|
-
* headers) into `headers`, exactly as a direct `getProviderHeaders` call
|
|
121
|
-
* would produce them. `hints` are accepted for contract symmetry but the
|
|
122
|
-
* provider-key path does not vary headers by URL/model.
|
|
123
|
-
*/
|
|
124
|
-
applyHeaders(headers, _hints) {
|
|
125
|
-
const authHeaders = getProviderHeaders(this.provider, this.apiKey);
|
|
126
|
-
for (const [k, v] of Object.entries(authHeaders)) {
|
|
127
|
-
headers[k] = v;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
/**
|
|
131
|
-
* React to the final HTTP status — the pool-rotation seam (design D5).
|
|
132
|
-
*
|
|
133
|
-
* Reproduces `callWithPoolReporting`'s reportable + success branches:
|
|
134
|
-
* - reportable status (429/529/401/403) on a pool-backed request →
|
|
135
|
-
* `reportError(providerId, sessionId, status)`; when it hands back a
|
|
136
|
-
* `newKey` the session was re-bound, so we adopt it (`this.apiKey`) and
|
|
137
|
-
* return `{ rebound: true, newKey }`. When no key is available it returns
|
|
138
|
-
* `{ rebound: false }` (the session is still cooled/disabled by the report).
|
|
139
|
-
* - success / any 2xx → `reportSuccess(sessionId)`; `{ rebound: false }`.
|
|
140
|
-
* - non-reportable, non-success, or non-pool request → no-op
|
|
141
|
-
* `{ rebound: false }`.
|
|
142
|
-
*
|
|
143
|
-
* NOTE: no caller invokes this in Phase 2; it is unit-tested in isolation.
|
|
144
|
-
*/
|
|
145
|
-
async onResult(status) {
|
|
146
|
-
const pool = this.apiKeyPool;
|
|
147
|
-
const providerId = this.providerId;
|
|
148
|
-
const sessionId = this.sessionId;
|
|
149
|
-
if (!pool || !providerId || !sessionId) {
|
|
150
|
-
return { rebound: false };
|
|
151
|
-
}
|
|
152
|
-
if (isReportableStatus(status)) {
|
|
153
|
-
const newKey = await pool.reportError(providerId, sessionId, status);
|
|
154
|
-
if (newKey) {
|
|
155
|
-
this.apiKey = newKey;
|
|
156
|
-
return { rebound: true, newKey };
|
|
157
|
-
}
|
|
158
|
-
return { rebound: false };
|
|
159
|
-
}
|
|
160
|
-
if (status !== null && status >= 200 && status < 300) {
|
|
161
|
-
pool.reportSuccess(sessionId);
|
|
162
|
-
}
|
|
163
|
-
return { rebound: false };
|
|
164
|
-
}
|
|
165
|
-
};
|
|
166
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
167
|
-
0 && (module.exports = {
|
|
168
|
-
LlmConfigProviderAuth
|
|
169
|
-
});
|
|
8
|
+
exports.LlmConfigProviderAuth = _chunkLKZJEL6Ecjs.LlmConfigProviderAuth;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LLMProvider } from '@omnicross/contracts/llm-config';
|
|
2
|
-
import {
|
|
2
|
+
import { ApiKeyPoolService } from '../completion/ApiKeyPoolService.cjs';
|
|
3
3
|
import { AuthSource, AuthApplyHints, AuthResultOutcome } from './AuthSource.cjs';
|
|
4
|
+
import '../logger-4GvQNzhE.cjs';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* LlmConfigProviderAuth — `AuthSource` for LLM-config provider rows.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LLMProvider } from '@omnicross/contracts/llm-config';
|
|
2
|
-
import {
|
|
2
|
+
import { ApiKeyPoolService } from '../completion/ApiKeyPoolService.js';
|
|
3
3
|
import { AuthSource, AuthApplyHints, AuthResultOutcome } from './AuthSource.js';
|
|
4
|
+
import '../logger-4GvQNzhE.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* LlmConfigProviderAuth — `AuthSource` for LLM-config provider rows.
|
|
@@ -1,142 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
var OPENROUTER_APP_HEADERS = {
|
|
7
|
-
"HTTP-Referer": "https://omnicross.dev",
|
|
8
|
-
"X-Title": "omnicross"
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
// src/completion/url-builder.ts
|
|
12
|
-
import { resolveProviderEndpoint as resolveProviderEndpointShared } from "@omnicross/contracts/endpoint-resolver";
|
|
13
|
-
function resolveApiFormat(provider) {
|
|
14
|
-
if (provider.apiFormat) {
|
|
15
|
-
return provider.apiFormat;
|
|
16
|
-
}
|
|
17
|
-
if (provider.chatApiFormat) {
|
|
18
|
-
return provider.chatApiFormat;
|
|
19
|
-
}
|
|
20
|
-
if (provider.apiType === "claudecode" || provider.apiType === "anthropic") {
|
|
21
|
-
return "anthropic";
|
|
22
|
-
}
|
|
23
|
-
if (provider.apiType === "google") {
|
|
24
|
-
return "google";
|
|
25
|
-
}
|
|
26
|
-
return "openai";
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
// src/completion/header-builder.ts
|
|
30
|
-
function getProviderHeaders(provider, apiKey) {
|
|
31
|
-
const format = resolveApiFormat(provider);
|
|
32
|
-
let headers;
|
|
33
|
-
switch (format) {
|
|
34
|
-
case "anthropic":
|
|
35
|
-
headers = {
|
|
36
|
-
"Content-Type": "application/json",
|
|
37
|
-
"x-api-key": apiKey,
|
|
38
|
-
"anthropic-version": "2025-01-10"
|
|
39
|
-
// Required for extended thinking feature
|
|
40
|
-
};
|
|
41
|
-
break;
|
|
42
|
-
case "google":
|
|
43
|
-
headers = {
|
|
44
|
-
"Content-Type": "application/json",
|
|
45
|
-
"x-goog-api-key": apiKey
|
|
46
|
-
};
|
|
47
|
-
break;
|
|
48
|
-
case "azure-openai":
|
|
49
|
-
headers = {
|
|
50
|
-
"Content-Type": "application/json",
|
|
51
|
-
"api-key": apiKey
|
|
52
|
-
};
|
|
53
|
-
break;
|
|
54
|
-
case "openai":
|
|
55
|
-
case "openai-response":
|
|
56
|
-
default:
|
|
57
|
-
headers = {
|
|
58
|
-
"Content-Type": "application/json",
|
|
59
|
-
"Authorization": `Bearer ${apiKey}`
|
|
60
|
-
};
|
|
61
|
-
break;
|
|
62
|
-
}
|
|
63
|
-
if (isOpenRouterProvider(provider)) {
|
|
64
|
-
return { ...headers, ...OPENROUTER_APP_HEADERS };
|
|
65
|
-
}
|
|
66
|
-
return headers;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// src/pipeline/LlmConfigProviderAuth.ts
|
|
70
|
-
function isReportableStatus(status) {
|
|
71
|
-
return status === 429 || status === 529 || status === 401 || status === 403;
|
|
72
|
-
}
|
|
73
|
-
var LlmConfigProviderAuth = class {
|
|
74
|
-
provider;
|
|
75
|
-
apiKeyPool;
|
|
76
|
-
providerId;
|
|
77
|
-
sessionId;
|
|
78
|
-
/**
|
|
79
|
-
* The current resolved key. Mutable so a Phase-3 caller can read the
|
|
80
|
-
* rotated key after `onResult`; this phase it is only set at construction
|
|
81
|
-
* and updated inside `onResult` (mirroring the inline re-point in
|
|
82
|
-
* `callWithPoolReporting`).
|
|
83
|
-
*/
|
|
84
|
-
apiKey;
|
|
85
|
-
constructor(opts) {
|
|
86
|
-
this.provider = opts.provider;
|
|
87
|
-
this.apiKey = opts.apiKey;
|
|
88
|
-
this.apiKeyPool = opts.apiKeyPool ?? null;
|
|
89
|
-
this.providerId = opts.providerId;
|
|
90
|
-
this.sessionId = opts.sessionId;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Merge the provider auth headers (and content-type / OpenRouter app
|
|
94
|
-
* headers) into `headers`, exactly as a direct `getProviderHeaders` call
|
|
95
|
-
* would produce them. `hints` are accepted for contract symmetry but the
|
|
96
|
-
* provider-key path does not vary headers by URL/model.
|
|
97
|
-
*/
|
|
98
|
-
applyHeaders(headers, _hints) {
|
|
99
|
-
const authHeaders = getProviderHeaders(this.provider, this.apiKey);
|
|
100
|
-
for (const [k, v] of Object.entries(authHeaders)) {
|
|
101
|
-
headers[k] = v;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* React to the final HTTP status — the pool-rotation seam (design D5).
|
|
106
|
-
*
|
|
107
|
-
* Reproduces `callWithPoolReporting`'s reportable + success branches:
|
|
108
|
-
* - reportable status (429/529/401/403) on a pool-backed request →
|
|
109
|
-
* `reportError(providerId, sessionId, status)`; when it hands back a
|
|
110
|
-
* `newKey` the session was re-bound, so we adopt it (`this.apiKey`) and
|
|
111
|
-
* return `{ rebound: true, newKey }`. When no key is available it returns
|
|
112
|
-
* `{ rebound: false }` (the session is still cooled/disabled by the report).
|
|
113
|
-
* - success / any 2xx → `reportSuccess(sessionId)`; `{ rebound: false }`.
|
|
114
|
-
* - non-reportable, non-success, or non-pool request → no-op
|
|
115
|
-
* `{ rebound: false }`.
|
|
116
|
-
*
|
|
117
|
-
* NOTE: no caller invokes this in Phase 2; it is unit-tested in isolation.
|
|
118
|
-
*/
|
|
119
|
-
async onResult(status) {
|
|
120
|
-
const pool = this.apiKeyPool;
|
|
121
|
-
const providerId = this.providerId;
|
|
122
|
-
const sessionId = this.sessionId;
|
|
123
|
-
if (!pool || !providerId || !sessionId) {
|
|
124
|
-
return { rebound: false };
|
|
125
|
-
}
|
|
126
|
-
if (isReportableStatus(status)) {
|
|
127
|
-
const newKey = await pool.reportError(providerId, sessionId, status);
|
|
128
|
-
if (newKey) {
|
|
129
|
-
this.apiKey = newKey;
|
|
130
|
-
return { rebound: true, newKey };
|
|
131
|
-
}
|
|
132
|
-
return { rebound: false };
|
|
133
|
-
}
|
|
134
|
-
if (status !== null && status >= 200 && status < 300) {
|
|
135
|
-
pool.reportSuccess(sessionId);
|
|
136
|
-
}
|
|
137
|
-
return { rebound: false };
|
|
138
|
-
}
|
|
139
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
LlmConfigProviderAuth
|
|
3
|
+
} from "../chunk-PXUJF5HS.js";
|
|
4
|
+
import "../chunk-H5JUT3KV.js";
|
|
5
|
+
import "../chunk-E3WHL7CO.js";
|
|
140
6
|
export {
|
|
141
7
|
LlmConfigProviderAuth
|
|
142
8
|
};
|
|
@@ -1,131 +1,9 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
19
2
|
|
|
20
|
-
// src/pipeline/SubscriptionAuthSource.ts
|
|
21
|
-
var SubscriptionAuthSource_exports = {};
|
|
22
|
-
__export(SubscriptionAuthSource_exports, {
|
|
23
|
-
SubscriptionAuthSource: () => SubscriptionAuthSource,
|
|
24
|
-
stripAuthHeaders: () => stripAuthHeaders
|
|
25
|
-
});
|
|
26
|
-
module.exports = __toCommonJS(SubscriptionAuthSource_exports);
|
|
27
3
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
if (err == null) return "Unknown error (null)";
|
|
31
|
-
if (err instanceof Error) {
|
|
32
|
-
let msg = err.message || err.name || "Error";
|
|
33
|
-
if (err.cause) {
|
|
34
|
-
msg += ` [cause: ${serializeError(err.cause)}]`;
|
|
35
|
-
}
|
|
36
|
-
const anyErr = err;
|
|
37
|
-
if (anyErr.status != null) msg += ` (status: ${anyErr.status})`;
|
|
38
|
-
else if (anyErr.code != null) msg += ` (code: ${anyErr.code})`;
|
|
39
|
-
return msg;
|
|
40
|
-
}
|
|
41
|
-
if (typeof err === "string") return err || "Empty error string";
|
|
42
|
-
if (typeof err !== "object") return String(err);
|
|
43
|
-
const obj = err;
|
|
44
|
-
if (typeof obj.message === "string" && obj.message) {
|
|
45
|
-
let msg = obj.message;
|
|
46
|
-
if (obj.status != null) msg += ` (status: ${obj.status})`;
|
|
47
|
-
else if (obj.code != null) msg += ` (code: ${obj.code})`;
|
|
48
|
-
if (typeof obj.type === "string") msg += ` [type: ${obj.type}]`;
|
|
49
|
-
return msg;
|
|
50
|
-
}
|
|
51
|
-
if (typeof obj.error === "string" && obj.error) {
|
|
52
|
-
return obj.error;
|
|
53
|
-
}
|
|
54
|
-
if (obj.error && typeof obj.error === "object") {
|
|
55
|
-
const inner = obj.error;
|
|
56
|
-
if (typeof inner.message === "string" && inner.message) {
|
|
57
|
-
let msg = inner.message;
|
|
58
|
-
if (typeof inner.type === "string") msg += ` [type: ${inner.type}]`;
|
|
59
|
-
return msg;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
try {
|
|
63
|
-
const json = JSON.stringify(err, getCircularReplacer(), 2);
|
|
64
|
-
if (json && json.length > 1e3) {
|
|
65
|
-
return json.slice(0, 1e3) + "... (truncated)";
|
|
66
|
-
}
|
|
67
|
-
return json || "Unserializable error";
|
|
68
|
-
} catch {
|
|
69
|
-
return `Unserializable error: ${Object.prototype.toString.call(err)}`;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function getCircularReplacer() {
|
|
73
|
-
const seen = /* @__PURE__ */ new WeakSet();
|
|
74
|
-
return (_key, value) => {
|
|
75
|
-
if (typeof value === "object" && value !== null) {
|
|
76
|
-
if (seen.has(value)) return "[Circular]";
|
|
77
|
-
seen.add(value);
|
|
78
|
-
}
|
|
79
|
-
return value;
|
|
80
|
-
};
|
|
81
|
-
}
|
|
4
|
+
var _chunkN3V2J5ZOcjs = require('../chunk-N3V2J5ZO.cjs');
|
|
5
|
+
require('../chunk-SVNDB62D.cjs');
|
|
82
6
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
delete headers.Authorization;
|
|
87
|
-
delete headers["x-api-key"];
|
|
88
|
-
delete headers["X-Api-Key"];
|
|
89
|
-
delete headers["x-goog-api-key"];
|
|
90
|
-
delete headers["X-Goog-Api-Key"];
|
|
91
|
-
}
|
|
92
|
-
var SubscriptionAuthSource = class {
|
|
93
|
-
constructor(profile) {
|
|
94
|
-
this.profile = profile;
|
|
95
|
-
}
|
|
96
|
-
profile;
|
|
97
|
-
/**
|
|
98
|
-
* Strip any transformer-set auth headers, then delegate to the bound
|
|
99
|
-
* strategy. Mirrors `SubscriptionDispatcher`'s
|
|
100
|
-
* `stripAuthHeaders(...)` + `applyHeadersWithRetry(...)` sequence, including
|
|
101
|
-
* the best-effort swallow-and-warn around a throwing `applyHeaders`.
|
|
102
|
-
*
|
|
103
|
-
* The strategy's looser `AuthApplyHints` (optional `upstreamUrl` /
|
|
104
|
-
* `resolvedModel`) is fed from the pipeline's required `{ upstreamUrl,
|
|
105
|
-
* model }` at the boundary.
|
|
106
|
-
*/
|
|
107
|
-
async applyHeaders(headers, hints) {
|
|
108
|
-
stripAuthHeaders(headers);
|
|
109
|
-
try {
|
|
110
|
-
await this.profile.authStrategy.applyHeaders(headers, {
|
|
111
|
-
upstreamUrl: hints.upstreamUrl,
|
|
112
|
-
resolvedModel: hints.model
|
|
113
|
-
});
|
|
114
|
-
} catch (err) {
|
|
115
|
-
console.warn("[SubscriptionAuthSource] authStrategy.applyHeaders threw:", serializeError(err));
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/** Delegate the 401-refresh decision to the bound strategy. */
|
|
119
|
-
async onUnauthorized() {
|
|
120
|
-
return this.profile.authStrategy.onUnauthorized();
|
|
121
|
-
}
|
|
122
|
-
/** Resolve the upstream URL from the profile, when it provides one. */
|
|
123
|
-
resolveUpstreamUrl(model) {
|
|
124
|
-
return this.profile.resolveUpstreamUrl?.(model);
|
|
125
|
-
}
|
|
126
|
-
};
|
|
127
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
128
|
-
0 && (module.exports = {
|
|
129
|
-
SubscriptionAuthSource,
|
|
130
|
-
stripAuthHeaders
|
|
131
|
-
});
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
exports.SubscriptionAuthSource = _chunkN3V2J5ZOcjs.SubscriptionAuthSource; exports.stripAuthHeaders = _chunkN3V2J5ZOcjs.stripAuthHeaders;
|
|
@@ -1,102 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
if (err.cause) {
|
|
7
|
-
msg += ` [cause: ${serializeError(err.cause)}]`;
|
|
8
|
-
}
|
|
9
|
-
const anyErr = err;
|
|
10
|
-
if (anyErr.status != null) msg += ` (status: ${anyErr.status})`;
|
|
11
|
-
else if (anyErr.code != null) msg += ` (code: ${anyErr.code})`;
|
|
12
|
-
return msg;
|
|
13
|
-
}
|
|
14
|
-
if (typeof err === "string") return err || "Empty error string";
|
|
15
|
-
if (typeof err !== "object") return String(err);
|
|
16
|
-
const obj = err;
|
|
17
|
-
if (typeof obj.message === "string" && obj.message) {
|
|
18
|
-
let msg = obj.message;
|
|
19
|
-
if (obj.status != null) msg += ` (status: ${obj.status})`;
|
|
20
|
-
else if (obj.code != null) msg += ` (code: ${obj.code})`;
|
|
21
|
-
if (typeof obj.type === "string") msg += ` [type: ${obj.type}]`;
|
|
22
|
-
return msg;
|
|
23
|
-
}
|
|
24
|
-
if (typeof obj.error === "string" && obj.error) {
|
|
25
|
-
return obj.error;
|
|
26
|
-
}
|
|
27
|
-
if (obj.error && typeof obj.error === "object") {
|
|
28
|
-
const inner = obj.error;
|
|
29
|
-
if (typeof inner.message === "string" && inner.message) {
|
|
30
|
-
let msg = inner.message;
|
|
31
|
-
if (typeof inner.type === "string") msg += ` [type: ${inner.type}]`;
|
|
32
|
-
return msg;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
try {
|
|
36
|
-
const json = JSON.stringify(err, getCircularReplacer(), 2);
|
|
37
|
-
if (json && json.length > 1e3) {
|
|
38
|
-
return json.slice(0, 1e3) + "... (truncated)";
|
|
39
|
-
}
|
|
40
|
-
return json || "Unserializable error";
|
|
41
|
-
} catch {
|
|
42
|
-
return `Unserializable error: ${Object.prototype.toString.call(err)}`;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function getCircularReplacer() {
|
|
46
|
-
const seen = /* @__PURE__ */ new WeakSet();
|
|
47
|
-
return (_key, value) => {
|
|
48
|
-
if (typeof value === "object" && value !== null) {
|
|
49
|
-
if (seen.has(value)) return "[Circular]";
|
|
50
|
-
seen.add(value);
|
|
51
|
-
}
|
|
52
|
-
return value;
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
// src/pipeline/SubscriptionAuthSource.ts
|
|
57
|
-
function stripAuthHeaders(headers) {
|
|
58
|
-
delete headers.authorization;
|
|
59
|
-
delete headers.Authorization;
|
|
60
|
-
delete headers["x-api-key"];
|
|
61
|
-
delete headers["X-Api-Key"];
|
|
62
|
-
delete headers["x-goog-api-key"];
|
|
63
|
-
delete headers["X-Goog-Api-Key"];
|
|
64
|
-
}
|
|
65
|
-
var SubscriptionAuthSource = class {
|
|
66
|
-
constructor(profile) {
|
|
67
|
-
this.profile = profile;
|
|
68
|
-
}
|
|
69
|
-
profile;
|
|
70
|
-
/**
|
|
71
|
-
* Strip any transformer-set auth headers, then delegate to the bound
|
|
72
|
-
* strategy. Mirrors `SubscriptionDispatcher`'s
|
|
73
|
-
* `stripAuthHeaders(...)` + `applyHeadersWithRetry(...)` sequence, including
|
|
74
|
-
* the best-effort swallow-and-warn around a throwing `applyHeaders`.
|
|
75
|
-
*
|
|
76
|
-
* The strategy's looser `AuthApplyHints` (optional `upstreamUrl` /
|
|
77
|
-
* `resolvedModel`) is fed from the pipeline's required `{ upstreamUrl,
|
|
78
|
-
* model }` at the boundary.
|
|
79
|
-
*/
|
|
80
|
-
async applyHeaders(headers, hints) {
|
|
81
|
-
stripAuthHeaders(headers);
|
|
82
|
-
try {
|
|
83
|
-
await this.profile.authStrategy.applyHeaders(headers, {
|
|
84
|
-
upstreamUrl: hints.upstreamUrl,
|
|
85
|
-
resolvedModel: hints.model
|
|
86
|
-
});
|
|
87
|
-
} catch (err) {
|
|
88
|
-
console.warn("[SubscriptionAuthSource] authStrategy.applyHeaders threw:", serializeError(err));
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/** Delegate the 401-refresh decision to the bound strategy. */
|
|
92
|
-
async onUnauthorized() {
|
|
93
|
-
return this.profile.authStrategy.onUnauthorized();
|
|
94
|
-
}
|
|
95
|
-
/** Resolve the upstream URL from the profile, when it provides one. */
|
|
96
|
-
resolveUpstreamUrl(model) {
|
|
97
|
-
return this.profile.resolveUpstreamUrl?.(model);
|
|
98
|
-
}
|
|
99
|
-
};
|
|
1
|
+
import {
|
|
2
|
+
SubscriptionAuthSource,
|
|
3
|
+
stripAuthHeaders
|
|
4
|
+
} from "../chunk-74TMJA7Z.js";
|
|
5
|
+
import "../chunk-AVYJ4YBN.js";
|
|
100
6
|
export {
|
|
101
7
|
SubscriptionAuthSource,
|
|
102
8
|
stripAuthHeaders
|
|
@@ -1,18 +1 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __copyProps = (to, from, except, desc) => {
|
|
7
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
8
|
-
for (let key of __getOwnPropNames(from))
|
|
9
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
10
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
11
|
-
}
|
|
12
|
-
return to;
|
|
13
|
-
};
|
|
14
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
15
|
-
|
|
16
|
-
// src/pipeline/SubscriptionAuthStrategy.ts
|
|
17
|
-
var SubscriptionAuthStrategy_exports = {};
|
|
18
|
-
module.exports = __toCommonJS(SubscriptionAuthStrategy_exports);
|
|
1
|
+
"use strict";
|