@omnicross/core 0.1.0 → 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 +24 -0
- package/dist/ApiConverter.d.cts +82 -0
- package/dist/ApiConverter.d.ts +82 -0
- package/dist/ApiConverter.js +24 -0
- package/dist/BuiltinToolExecutor-BluWyeob.d.ts +81 -0
- package/dist/BuiltinToolExecutor-CS2WpXhM.d.cts +81 -0
- package/dist/CompletionService-D3a47vdU.d.cts +213 -0
- package/dist/CompletionService-DdWaAxq0.d.ts +213 -0
- package/dist/{ProviderProxy-f_8ziIhW.d.cts → ProviderProxy-C-xqrkKi.d.ts} +7 -2
- package/dist/{ProviderProxy-vjt8sQQk.d.ts → ProviderProxy-CnMQYN59.d.cts} +7 -2
- 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 +12 -0
- package/dist/completion/BuiltinToolExecutor.d.cts +4 -0
- package/dist/completion/BuiltinToolExecutor.d.ts +4 -0
- package/dist/completion/BuiltinToolExecutor.js +12 -0
- package/dist/completion/CompletionService.cjs +38 -0
- package/dist/completion/CompletionService.d.cts +22 -0
- package/dist/completion/CompletionService.d.ts +22 -0
- package/dist/completion/CompletionService.js +38 -0
- package/dist/completion/NativeSearchInjector.cjs +12 -0
- package/dist/completion/NativeSearchInjector.d.cts +42 -0
- package/dist/completion/NativeSearchInjector.d.ts +42 -0
- package/dist/completion/NativeSearchInjector.js +12 -0
- package/dist/completion/ProviderSearchInjector.cjs +60 -0
- package/dist/completion/ProviderSearchInjector.d.cts +47 -0
- package/dist/completion/ProviderSearchInjector.d.ts +47 -0
- package/dist/completion/ProviderSearchInjector.js +60 -0
- package/dist/completion/native-search-types.cjs +14 -0
- package/dist/completion/native-search-types.d.cts +3 -0
- package/dist/completion/native-search-types.d.ts +3 -0
- package/dist/completion/native-search-types.js +14 -0
- package/dist/completion/openrouter-headers.cjs +16 -0
- package/dist/completion/openrouter-headers.d.cts +44 -0
- package/dist/completion/openrouter-headers.d.ts +44 -0
- package/dist/completion/openrouter-headers.js +16 -0
- package/dist/completion/openrouter-models.cjs +29 -0
- package/dist/completion/openrouter-models.d.cts +27 -0
- package/dist/completion/openrouter-models.d.ts +27 -0
- package/dist/completion/openrouter-models.js +29 -0
- package/dist/completion/types.cjs +1 -0
- package/dist/completion/types.d.cts +3 -0
- package/dist/completion/types.d.ts +3 -0
- package/dist/completion/types.js +0 -0
- package/dist/completion/url-builder.cjs +24 -0
- package/dist/completion/url-builder.d.cts +87 -0
- package/dist/completion/url-builder.d.ts +87 -0
- package/dist/completion/url-builder.js +24 -0
- package/dist/completion.cjs +55 -3989
- package/dist/completion.d.cts +150 -8
- package/dist/completion.d.ts +150 -8
- package/dist/completion.js +63 -3953
- package/dist/index.cjs +197 -10428
- package/dist/index.d.cts +35 -91
- package/dist/index.d.ts +35 -91
- package/dist/index.js +125 -10267
- package/dist/logger-4GvQNzhE.d.cts +22 -0
- package/dist/logger-4GvQNzhE.d.ts +22 -0
- package/dist/outbound-api/routeResolver.cjs +11 -0
- package/dist/outbound-api/routeResolver.d.cts +19 -0
- package/dist/outbound-api/routeResolver.d.ts +19 -0
- package/dist/outbound-api/routeResolver.js +11 -0
- package/dist/outbound-api/subscriptionRegistryPort.cjs +7 -37
- package/dist/outbound-api/subscriptionRegistryPort.d.cts +7 -3
- package/dist/outbound-api/subscriptionRegistryPort.d.ts +7 -3
- package/dist/outbound-api/subscriptionRegistryPort.js +4 -8
- package/dist/outbound-api/types.cjs +1 -0
- package/dist/{types-CbCN2NQP.d.ts → outbound-api/types.d.cts} +18 -3
- package/dist/{types-CGGrKqC_.d.cts → outbound-api/types.d.ts} +18 -3
- package/dist/outbound-api/types.js +0 -0
- package/dist/outbound-api.cjs +35 -5220
- package/dist/outbound-api.d.cts +16 -88
- package/dist/outbound-api.d.ts +16 -88
- package/dist/outbound-api.js +54 -5193
- package/dist/pipeline/AuthSource.cjs +1 -0
- package/dist/pipeline/AuthSource.d.cts +101 -0
- package/dist/pipeline/AuthSource.d.ts +101 -0
- package/dist/pipeline/AuthSource.js +0 -0
- package/dist/pipeline/LlmConfigProviderAuth.cjs +8 -0
- package/dist/pipeline/LlmConfigProviderAuth.d.cts +87 -0
- package/dist/pipeline/LlmConfigProviderAuth.d.ts +87 -0
- package/dist/pipeline/LlmConfigProviderAuth.js +8 -0
- package/dist/pipeline/SubscriptionAuthSource.cjs +6 -128
- package/dist/pipeline/SubscriptionAuthSource.d.cts +165 -3
- package/dist/pipeline/SubscriptionAuthSource.d.ts +165 -3
- package/dist/pipeline/SubscriptionAuthSource.js +5 -99
- package/dist/pipeline/SubscriptionAuthStrategy.cjs +1 -18
- package/dist/pipeline/executeProviderCall.cjs +6 -0
- package/dist/pipeline/executeProviderCall.d.cts +149 -0
- package/dist/pipeline/executeProviderCall.d.ts +149 -0
- package/dist/pipeline/executeProviderCall.js +6 -0
- package/dist/pipeline/resolveProviderChain.cjs +6 -0
- package/dist/pipeline/resolveProviderChain.d.cts +58 -0
- package/dist/pipeline/resolveProviderChain.d.ts +58 -0
- package/dist/pipeline/resolveProviderChain.js +6 -0
- package/dist/pipeline/resolveSubscriptionChain.cjs +6 -0
- package/dist/pipeline/resolveSubscriptionChain.d.cts +68 -0
- package/dist/pipeline/resolveSubscriptionChain.d.ts +68 -0
- package/dist/pipeline/resolveSubscriptionChain.js +6 -0
- 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 -0
- package/dist/ports/provider-config-source.d.cts +51 -0
- package/dist/ports/provider-config-source.d.ts +51 -0
- package/dist/ports/provider-config-source.js +0 -0
- 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 -0
- package/dist/ports/web-search-backend.d.cts +29 -0
- package/dist/ports/web-search-backend.d.ts +29 -0
- package/dist/ports/web-search-backend.js +0 -0
- package/dist/ports.cjs +1 -18
- package/dist/ports.d.cts +16 -8
- package/dist/ports.d.ts +16 -8
- package/dist/provider-proxy/ProviderProxy.cjs +40 -0
- package/dist/provider-proxy/ProviderProxy.d.cts +17 -0
- package/dist/provider-proxy/ProviderProxy.d.ts +17 -0
- package/dist/provider-proxy/ProviderProxy.js +40 -0
- package/dist/provider-proxy/ingress/providerProxyShared.cjs +35 -2941
- package/dist/provider-proxy/ingress/providerProxyShared.d.cts +7 -3
- package/dist/provider-proxy/ingress/providerProxyShared.d.ts +7 -3
- 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 +407 -8
- package/dist/provider-proxy/types.d.ts +407 -8
- package/dist/provider-proxy.cjs +35 -4654
- package/dist/provider-proxy.d.cts +10 -6
- package/dist/provider-proxy.d.ts +10 -6
- package/dist/provider-proxy.js +39 -4627
- package/dist/routeResolver-BrbK6ja9.d.cts +88 -0
- package/dist/routeResolver-HE-ZO0fO.d.ts +88 -0
- 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 +8 -0
- package/dist/transformer/anthropicBetaInject.d.cts +20 -0
- package/dist/transformer/anthropicBetaInject.d.ts +20 -0
- package/dist/transformer/anthropicBetaInject.js +8 -0
- package/dist/transformer/transformers/AnthropicTransformer.cjs +6 -0
- package/dist/transformer/transformers/AnthropicTransformer.d.cts +148 -0
- package/dist/transformer/transformers/AnthropicTransformer.d.ts +148 -0
- package/dist/transformer/transformers/AnthropicTransformer.js +6 -0
- 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 +6 -0
- package/dist/transformer/transformers/ReasoningTransformer.d.cts +47 -0
- package/dist/transformer/transformers/ReasoningTransformer.d.ts +47 -0
- package/dist/transformer/transformers/ReasoningTransformer.js +6 -0
- package/dist/transformer/transformers.cjs +39 -0
- package/dist/transformer/transformers.d.cts +100 -0
- package/dist/transformer/transformers.d.ts +100 -0
- package/dist/transformer/transformers.js +39 -0
- package/dist/transformer/types.cjs +1 -18
- package/dist/transformer.cjs +13 -3726
- package/dist/transformer.d.cts +8 -31
- package/dist/transformer.d.ts +8 -31
- package/dist/transformer.js +17 -3706
- package/dist/types-BScIHmPr.d.cts +153 -0
- package/dist/types-BScIHmPr.d.ts +153 -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 +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 +3 -3
- package/dist/ApiKeyPoolService-BmMkau07.d.cts +0 -170
- package/dist/ApiKeyPoolService-BmMkau07.d.ts +0 -170
- package/dist/SubscriptionAuthSource-Cr4fVEYY.d.cts +0 -264
- package/dist/SubscriptionAuthSource-D89zmiSS.d.ts +0 -264
- package/dist/index-BTSmc9Sm.d.ts +0 -645
- package/dist/index-DXazdTzZ.d.cts +0 -645
- package/dist/types-DCzHkhJt.d.ts +0 -467
- package/dist/types-DZIQbgp0.d.cts +0 -467
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuthSource — unified outbound-authentication strategy for the provider
|
|
3
|
+
* request pipeline.
|
|
4
|
+
*
|
|
5
|
+
* Phase 2 of the `provider-request-pipeline` OpenSpec change (design D3).
|
|
6
|
+
*
|
|
7
|
+
* The three consumer paths (the wire-format proxy handler, the host engine
|
|
8
|
+
* adapter, TransformerHandler) each authenticate differently:
|
|
9
|
+
*
|
|
10
|
+
* - provider-key (+ ApiKeyPool failover) — LLM-config provider rows
|
|
11
|
+
* - subscription `AuthStrategy` (+ 401 refresh + fallback) — code-cli OAuth
|
|
12
|
+
* - OAuth pass-through — SDK forwards its own Bearer
|
|
13
|
+
*
|
|
14
|
+
* `AuthSource` is the single contract that unifies these. THIS PHASE ONLY
|
|
15
|
+
* DEFINES the interface and provides three behavior-preserving WRAPPERS
|
|
16
|
+
* (`LlmConfigProviderAuth`, `SubscriptionAuthSource`, `OAuthPassThroughAuth`)
|
|
17
|
+
* around the existing logic. NO caller is routed through it yet — the core
|
|
18
|
+
* (`executeProviderCall`) is NOT changed to consume `ctx.auth`, and
|
|
19
|
+
* the host handler's branch structure is UNCHANGED. Wiring (and
|
|
20
|
+
* the `onResult` pool-rotation integration) is Phase 3.
|
|
21
|
+
*
|
|
22
|
+
* @module pipeline/AuthSource
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Hints an `AuthSource` may need to vary header formatting per request.
|
|
26
|
+
*
|
|
27
|
+
* Mirrors the subscription-side `AuthApplyHints` (which uses optional
|
|
28
|
+
* `upstreamUrl` / `resolvedModel`) but with REQUIRED fields, since the
|
|
29
|
+
* pipeline always knows both at the point it applies headers. Adapters that
|
|
30
|
+
* wrap the looser subscription shape map these across at the boundary.
|
|
31
|
+
*/
|
|
32
|
+
interface AuthApplyHints {
|
|
33
|
+
/** Resolved upstream URL the request will be sent to. */
|
|
34
|
+
upstreamUrl: string;
|
|
35
|
+
/** Resolved model id for the request. */
|
|
36
|
+
model: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Result of {@link AuthSource.onResult}.
|
|
40
|
+
*
|
|
41
|
+
* `rebound` is `true` when the auth source rotated to a different credential
|
|
42
|
+
* (e.g. ApiKeyPool re-bound the session to a new key after a 429). `newKey`
|
|
43
|
+
* carries the freshly-resolved key string when a rotation produced one, so a
|
|
44
|
+
* caller MAY retry the same call once with it. Mirrors the
|
|
45
|
+
* `{ newKey | null }` contract of `ApiKeyPoolService.reportError` lifted into
|
|
46
|
+
* a structured shape.
|
|
47
|
+
*/
|
|
48
|
+
interface AuthResultOutcome {
|
|
49
|
+
/** Whether the credential was rotated/re-bound as a result of this status. */
|
|
50
|
+
rebound: boolean;
|
|
51
|
+
/** The new resolved key when a rotation produced one; omitted otherwise. */
|
|
52
|
+
newKey?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A pluggable outbound-authentication source for one provider request.
|
|
56
|
+
*
|
|
57
|
+
* Implementations OWN exactly the auth concern: which headers carry the
|
|
58
|
+
* credential, how to recover from a 401, where the request should be sent
|
|
59
|
+
* (when the credential dictates the endpoint), and how to react to a final
|
|
60
|
+
* HTTP status (pool rotation / refresh). The pipeline core composes the rest.
|
|
61
|
+
*/
|
|
62
|
+
interface AuthSource {
|
|
63
|
+
/**
|
|
64
|
+
* Inject the authentication headers for this request, mutating `headers`
|
|
65
|
+
* in place. Implementations MAY refresh expiring tokens here.
|
|
66
|
+
*
|
|
67
|
+
* NOTE (Phase 2 boundary, see report): exactly WHAT this owns vs what the
|
|
68
|
+
* ingress assembles (content-type, OpenRouter app headers, proxy auth
|
|
69
|
+
* stripping) is intentionally left to the caller this phase. The wrappers
|
|
70
|
+
* preserve their source's CURRENT header behavior verbatim.
|
|
71
|
+
*/
|
|
72
|
+
applyHeaders(headers: Record<string, string>, hints: AuthApplyHints): Promise<void> | void;
|
|
73
|
+
/**
|
|
74
|
+
* Called when the upstream returns 401. Return `true` to ask the caller to
|
|
75
|
+
* retry once with freshly-applied headers; `false` to surface the 401.
|
|
76
|
+
* Optional — sources without a refresh notion omit it.
|
|
77
|
+
*/
|
|
78
|
+
onUnauthorized?(): Promise<boolean>;
|
|
79
|
+
/**
|
|
80
|
+
* Resolve the upstream URL the request should target, when the credential
|
|
81
|
+
* dictates it (e.g. a subscription profile's per-model endpoint). Returns
|
|
82
|
+
* `undefined` when the source does not override the URL (the ingress keeps
|
|
83
|
+
* its own URL logic). Optional.
|
|
84
|
+
*/
|
|
85
|
+
resolveUpstreamUrl?(model: string): string | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* React to a final HTTP status (pool participation seam — design D5).
|
|
88
|
+
*
|
|
89
|
+
* For the provider-key source this reports the status to the
|
|
90
|
+
* `ApiKeyPoolService` (cooldown / disable / re-bind) and returns whether it
|
|
91
|
+
* rotated plus any new key. THIS PHASE ONLY: `onResult` is implemented and
|
|
92
|
+
* unit-tested in isolation; NO caller invokes it yet. Phase 3 wires it into
|
|
93
|
+
* `fetchWithRetry`. Optional.
|
|
94
|
+
*
|
|
95
|
+
* @param status The final HTTP status, or `null` for non-HTTP failures
|
|
96
|
+
* (e.g. network errors). Non-reportable statuses no-op.
|
|
97
|
+
*/
|
|
98
|
+
onResult?(status: number | null): Promise<AuthResultOutcome>;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export type { AuthApplyHints, AuthResultOutcome, AuthSource };
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AuthSource — unified outbound-authentication strategy for the provider
|
|
3
|
+
* request pipeline.
|
|
4
|
+
*
|
|
5
|
+
* Phase 2 of the `provider-request-pipeline` OpenSpec change (design D3).
|
|
6
|
+
*
|
|
7
|
+
* The three consumer paths (the wire-format proxy handler, the host engine
|
|
8
|
+
* adapter, TransformerHandler) each authenticate differently:
|
|
9
|
+
*
|
|
10
|
+
* - provider-key (+ ApiKeyPool failover) — LLM-config provider rows
|
|
11
|
+
* - subscription `AuthStrategy` (+ 401 refresh + fallback) — code-cli OAuth
|
|
12
|
+
* - OAuth pass-through — SDK forwards its own Bearer
|
|
13
|
+
*
|
|
14
|
+
* `AuthSource` is the single contract that unifies these. THIS PHASE ONLY
|
|
15
|
+
* DEFINES the interface and provides three behavior-preserving WRAPPERS
|
|
16
|
+
* (`LlmConfigProviderAuth`, `SubscriptionAuthSource`, `OAuthPassThroughAuth`)
|
|
17
|
+
* around the existing logic. NO caller is routed through it yet — the core
|
|
18
|
+
* (`executeProviderCall`) is NOT changed to consume `ctx.auth`, and
|
|
19
|
+
* the host handler's branch structure is UNCHANGED. Wiring (and
|
|
20
|
+
* the `onResult` pool-rotation integration) is Phase 3.
|
|
21
|
+
*
|
|
22
|
+
* @module pipeline/AuthSource
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Hints an `AuthSource` may need to vary header formatting per request.
|
|
26
|
+
*
|
|
27
|
+
* Mirrors the subscription-side `AuthApplyHints` (which uses optional
|
|
28
|
+
* `upstreamUrl` / `resolvedModel`) but with REQUIRED fields, since the
|
|
29
|
+
* pipeline always knows both at the point it applies headers. Adapters that
|
|
30
|
+
* wrap the looser subscription shape map these across at the boundary.
|
|
31
|
+
*/
|
|
32
|
+
interface AuthApplyHints {
|
|
33
|
+
/** Resolved upstream URL the request will be sent to. */
|
|
34
|
+
upstreamUrl: string;
|
|
35
|
+
/** Resolved model id for the request. */
|
|
36
|
+
model: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Result of {@link AuthSource.onResult}.
|
|
40
|
+
*
|
|
41
|
+
* `rebound` is `true` when the auth source rotated to a different credential
|
|
42
|
+
* (e.g. ApiKeyPool re-bound the session to a new key after a 429). `newKey`
|
|
43
|
+
* carries the freshly-resolved key string when a rotation produced one, so a
|
|
44
|
+
* caller MAY retry the same call once with it. Mirrors the
|
|
45
|
+
* `{ newKey | null }` contract of `ApiKeyPoolService.reportError` lifted into
|
|
46
|
+
* a structured shape.
|
|
47
|
+
*/
|
|
48
|
+
interface AuthResultOutcome {
|
|
49
|
+
/** Whether the credential was rotated/re-bound as a result of this status. */
|
|
50
|
+
rebound: boolean;
|
|
51
|
+
/** The new resolved key when a rotation produced one; omitted otherwise. */
|
|
52
|
+
newKey?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* A pluggable outbound-authentication source for one provider request.
|
|
56
|
+
*
|
|
57
|
+
* Implementations OWN exactly the auth concern: which headers carry the
|
|
58
|
+
* credential, how to recover from a 401, where the request should be sent
|
|
59
|
+
* (when the credential dictates the endpoint), and how to react to a final
|
|
60
|
+
* HTTP status (pool rotation / refresh). The pipeline core composes the rest.
|
|
61
|
+
*/
|
|
62
|
+
interface AuthSource {
|
|
63
|
+
/**
|
|
64
|
+
* Inject the authentication headers for this request, mutating `headers`
|
|
65
|
+
* in place. Implementations MAY refresh expiring tokens here.
|
|
66
|
+
*
|
|
67
|
+
* NOTE (Phase 2 boundary, see report): exactly WHAT this owns vs what the
|
|
68
|
+
* ingress assembles (content-type, OpenRouter app headers, proxy auth
|
|
69
|
+
* stripping) is intentionally left to the caller this phase. The wrappers
|
|
70
|
+
* preserve their source's CURRENT header behavior verbatim.
|
|
71
|
+
*/
|
|
72
|
+
applyHeaders(headers: Record<string, string>, hints: AuthApplyHints): Promise<void> | void;
|
|
73
|
+
/**
|
|
74
|
+
* Called when the upstream returns 401. Return `true` to ask the caller to
|
|
75
|
+
* retry once with freshly-applied headers; `false` to surface the 401.
|
|
76
|
+
* Optional — sources without a refresh notion omit it.
|
|
77
|
+
*/
|
|
78
|
+
onUnauthorized?(): Promise<boolean>;
|
|
79
|
+
/**
|
|
80
|
+
* Resolve the upstream URL the request should target, when the credential
|
|
81
|
+
* dictates it (e.g. a subscription profile's per-model endpoint). Returns
|
|
82
|
+
* `undefined` when the source does not override the URL (the ingress keeps
|
|
83
|
+
* its own URL logic). Optional.
|
|
84
|
+
*/
|
|
85
|
+
resolveUpstreamUrl?(model: string): string | undefined;
|
|
86
|
+
/**
|
|
87
|
+
* React to a final HTTP status (pool participation seam — design D5).
|
|
88
|
+
*
|
|
89
|
+
* For the provider-key source this reports the status to the
|
|
90
|
+
* `ApiKeyPoolService` (cooldown / disable / re-bind) and returns whether it
|
|
91
|
+
* rotated plus any new key. THIS PHASE ONLY: `onResult` is implemented and
|
|
92
|
+
* unit-tested in isolation; NO caller invokes it yet. Phase 3 wires it into
|
|
93
|
+
* `fetchWithRetry`. Optional.
|
|
94
|
+
*
|
|
95
|
+
* @param status The final HTTP status, or `null` for non-HTTP failures
|
|
96
|
+
* (e.g. network errors). Non-reportable statuses no-op.
|
|
97
|
+
*/
|
|
98
|
+
onResult?(status: number | null): Promise<AuthResultOutcome>;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export type { AuthApplyHints, AuthResultOutcome, AuthSource };
|
|
File without changes
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
var _chunkLKZJEL6Ecjs = require('../chunk-LKZJEL6E.cjs');
|
|
4
|
+
require('../chunk-A2YMUCBT.cjs');
|
|
5
|
+
require('../chunk-6VIXXLMX.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
exports.LlmConfigProviderAuth = _chunkLKZJEL6Ecjs.LlmConfigProviderAuth;
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { LLMProvider } from '@omnicross/contracts/llm-config';
|
|
2
|
+
import { ApiKeyPoolService } from '../completion/ApiKeyPoolService.cjs';
|
|
3
|
+
import { AuthSource, AuthApplyHints, AuthResultOutcome } from './AuthSource.cjs';
|
|
4
|
+
import '../logger-4GvQNzhE.cjs';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* LlmConfigProviderAuth — `AuthSource` for LLM-config provider rows.
|
|
8
|
+
*
|
|
9
|
+
* Phase 2 of the `provider-request-pipeline` OpenSpec change (design D3, task 4.2).
|
|
10
|
+
*
|
|
11
|
+
* Wraps the two pieces that authenticate a normal (non-subscription) provider
|
|
12
|
+
* request today:
|
|
13
|
+
*
|
|
14
|
+
* - `getProviderHeaders(provider, apiKey)` — the format-specific auth
|
|
15
|
+
* headers (x-api-key / Authorization Bearer / x-goog-api-key / api-key)
|
|
16
|
+
* plus content-type and the OpenRouter app-attribution headers. `applyHeaders`
|
|
17
|
+
* merges these into the caller's header object VERBATIM (same output as a
|
|
18
|
+
* direct `getProviderHeaders` call).
|
|
19
|
+
* - `ApiKeyPoolService` — session-affine key selection + 429/529/401/403
|
|
20
|
+
* rotation. `onResult` reproduces the reportable-status branch of
|
|
21
|
+
* the host engine adapter's `callWithPoolReporting` (report → re-bind →
|
|
22
|
+
* return the new key) and the success branch (`reportSuccess`).
|
|
23
|
+
*
|
|
24
|
+
* IMPORTANT (Phase 2 scope): this class is DEFINED + unit-tested in isolation
|
|
25
|
+
* only. NO caller routes through it yet — `executeProviderCall` is unchanged
|
|
26
|
+
* and the rotation INTEGRATION is Phase 3 (D5). Do not wire `onResult` into a
|
|
27
|
+
* fetch loop in this phase.
|
|
28
|
+
*
|
|
29
|
+
* @module pipeline/LlmConfigProviderAuth
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
interface LlmConfigProviderAuthOptions {
|
|
33
|
+
/** Provider row whose auth format + key drives header assembly. */
|
|
34
|
+
provider: LLMProvider;
|
|
35
|
+
/** Resolved API key string to authenticate with (post env-ref resolution). */
|
|
36
|
+
apiKey: string;
|
|
37
|
+
/**
|
|
38
|
+
* Pool service for rotation, when this request is pool-backed. Omit (or pass
|
|
39
|
+
* `null`) for legacy single-key requests — `onResult` then never touches the
|
|
40
|
+
* pool (matching `fromPool === false`).
|
|
41
|
+
*/
|
|
42
|
+
apiKeyPool?: ApiKeyPoolService | null;
|
|
43
|
+
/** Provider id the pool should report/select against (the ACTUAL provider
|
|
44
|
+
* whose key was resolved, post-routing). Required for pool participation. */
|
|
45
|
+
providerId?: string;
|
|
46
|
+
/** Session id for pool affinity + rebind. Required for pool participation. */
|
|
47
|
+
sessionId?: string | null;
|
|
48
|
+
}
|
|
49
|
+
declare class LlmConfigProviderAuth implements AuthSource {
|
|
50
|
+
private readonly provider;
|
|
51
|
+
private readonly apiKeyPool;
|
|
52
|
+
private readonly providerId;
|
|
53
|
+
private readonly sessionId;
|
|
54
|
+
/**
|
|
55
|
+
* The current resolved key. Mutable so a Phase-3 caller can read the
|
|
56
|
+
* rotated key after `onResult`; this phase it is only set at construction
|
|
57
|
+
* and updated inside `onResult` (mirroring the inline re-point in
|
|
58
|
+
* `callWithPoolReporting`).
|
|
59
|
+
*/
|
|
60
|
+
apiKey: string;
|
|
61
|
+
constructor(opts: LlmConfigProviderAuthOptions);
|
|
62
|
+
/**
|
|
63
|
+
* Merge the provider auth headers (and content-type / OpenRouter app
|
|
64
|
+
* headers) into `headers`, exactly as a direct `getProviderHeaders` call
|
|
65
|
+
* would produce them. `hints` are accepted for contract symmetry but the
|
|
66
|
+
* provider-key path does not vary headers by URL/model.
|
|
67
|
+
*/
|
|
68
|
+
applyHeaders(headers: Record<string, string>, _hints: AuthApplyHints): void;
|
|
69
|
+
/**
|
|
70
|
+
* React to the final HTTP status — the pool-rotation seam (design D5).
|
|
71
|
+
*
|
|
72
|
+
* Reproduces `callWithPoolReporting`'s reportable + success branches:
|
|
73
|
+
* - reportable status (429/529/401/403) on a pool-backed request →
|
|
74
|
+
* `reportError(providerId, sessionId, status)`; when it hands back a
|
|
75
|
+
* `newKey` the session was re-bound, so we adopt it (`this.apiKey`) and
|
|
76
|
+
* return `{ rebound: true, newKey }`. When no key is available it returns
|
|
77
|
+
* `{ rebound: false }` (the session is still cooled/disabled by the report).
|
|
78
|
+
* - success / any 2xx → `reportSuccess(sessionId)`; `{ rebound: false }`.
|
|
79
|
+
* - non-reportable, non-success, or non-pool request → no-op
|
|
80
|
+
* `{ rebound: false }`.
|
|
81
|
+
*
|
|
82
|
+
* NOTE: no caller invokes this in Phase 2; it is unit-tested in isolation.
|
|
83
|
+
*/
|
|
84
|
+
onResult(status: number | null): Promise<AuthResultOutcome>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export { LlmConfigProviderAuth, type LlmConfigProviderAuthOptions };
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { LLMProvider } from '@omnicross/contracts/llm-config';
|
|
2
|
+
import { ApiKeyPoolService } from '../completion/ApiKeyPoolService.js';
|
|
3
|
+
import { AuthSource, AuthApplyHints, AuthResultOutcome } from './AuthSource.js';
|
|
4
|
+
import '../logger-4GvQNzhE.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* LlmConfigProviderAuth — `AuthSource` for LLM-config provider rows.
|
|
8
|
+
*
|
|
9
|
+
* Phase 2 of the `provider-request-pipeline` OpenSpec change (design D3, task 4.2).
|
|
10
|
+
*
|
|
11
|
+
* Wraps the two pieces that authenticate a normal (non-subscription) provider
|
|
12
|
+
* request today:
|
|
13
|
+
*
|
|
14
|
+
* - `getProviderHeaders(provider, apiKey)` — the format-specific auth
|
|
15
|
+
* headers (x-api-key / Authorization Bearer / x-goog-api-key / api-key)
|
|
16
|
+
* plus content-type and the OpenRouter app-attribution headers. `applyHeaders`
|
|
17
|
+
* merges these into the caller's header object VERBATIM (same output as a
|
|
18
|
+
* direct `getProviderHeaders` call).
|
|
19
|
+
* - `ApiKeyPoolService` — session-affine key selection + 429/529/401/403
|
|
20
|
+
* rotation. `onResult` reproduces the reportable-status branch of
|
|
21
|
+
* the host engine adapter's `callWithPoolReporting` (report → re-bind →
|
|
22
|
+
* return the new key) and the success branch (`reportSuccess`).
|
|
23
|
+
*
|
|
24
|
+
* IMPORTANT (Phase 2 scope): this class is DEFINED + unit-tested in isolation
|
|
25
|
+
* only. NO caller routes through it yet — `executeProviderCall` is unchanged
|
|
26
|
+
* and the rotation INTEGRATION is Phase 3 (D5). Do not wire `onResult` into a
|
|
27
|
+
* fetch loop in this phase.
|
|
28
|
+
*
|
|
29
|
+
* @module pipeline/LlmConfigProviderAuth
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
interface LlmConfigProviderAuthOptions {
|
|
33
|
+
/** Provider row whose auth format + key drives header assembly. */
|
|
34
|
+
provider: LLMProvider;
|
|
35
|
+
/** Resolved API key string to authenticate with (post env-ref resolution). */
|
|
36
|
+
apiKey: string;
|
|
37
|
+
/**
|
|
38
|
+
* Pool service for rotation, when this request is pool-backed. Omit (or pass
|
|
39
|
+
* `null`) for legacy single-key requests — `onResult` then never touches the
|
|
40
|
+
* pool (matching `fromPool === false`).
|
|
41
|
+
*/
|
|
42
|
+
apiKeyPool?: ApiKeyPoolService | null;
|
|
43
|
+
/** Provider id the pool should report/select against (the ACTUAL provider
|
|
44
|
+
* whose key was resolved, post-routing). Required for pool participation. */
|
|
45
|
+
providerId?: string;
|
|
46
|
+
/** Session id for pool affinity + rebind. Required for pool participation. */
|
|
47
|
+
sessionId?: string | null;
|
|
48
|
+
}
|
|
49
|
+
declare class LlmConfigProviderAuth implements AuthSource {
|
|
50
|
+
private readonly provider;
|
|
51
|
+
private readonly apiKeyPool;
|
|
52
|
+
private readonly providerId;
|
|
53
|
+
private readonly sessionId;
|
|
54
|
+
/**
|
|
55
|
+
* The current resolved key. Mutable so a Phase-3 caller can read the
|
|
56
|
+
* rotated key after `onResult`; this phase it is only set at construction
|
|
57
|
+
* and updated inside `onResult` (mirroring the inline re-point in
|
|
58
|
+
* `callWithPoolReporting`).
|
|
59
|
+
*/
|
|
60
|
+
apiKey: string;
|
|
61
|
+
constructor(opts: LlmConfigProviderAuthOptions);
|
|
62
|
+
/**
|
|
63
|
+
* Merge the provider auth headers (and content-type / OpenRouter app
|
|
64
|
+
* headers) into `headers`, exactly as a direct `getProviderHeaders` call
|
|
65
|
+
* would produce them. `hints` are accepted for contract symmetry but the
|
|
66
|
+
* provider-key path does not vary headers by URL/model.
|
|
67
|
+
*/
|
|
68
|
+
applyHeaders(headers: Record<string, string>, _hints: AuthApplyHints): void;
|
|
69
|
+
/**
|
|
70
|
+
* React to the final HTTP status — the pool-rotation seam (design D5).
|
|
71
|
+
*
|
|
72
|
+
* Reproduces `callWithPoolReporting`'s reportable + success branches:
|
|
73
|
+
* - reportable status (429/529/401/403) on a pool-backed request →
|
|
74
|
+
* `reportError(providerId, sessionId, status)`; when it hands back a
|
|
75
|
+
* `newKey` the session was re-bound, so we adopt it (`this.apiKey`) and
|
|
76
|
+
* return `{ rebound: true, newKey }`. When no key is available it returns
|
|
77
|
+
* `{ rebound: false }` (the session is still cooled/disabled by the report).
|
|
78
|
+
* - success / any 2xx → `reportSuccess(sessionId)`; `{ rebound: false }`.
|
|
79
|
+
* - non-reportable, non-success, or non-pool request → no-op
|
|
80
|
+
* `{ rebound: false }`.
|
|
81
|
+
*
|
|
82
|
+
* NOTE: no caller invokes this in Phase 2; it is unit-tested in isolation.
|
|
83
|
+
*/
|
|
84
|
+
onResult(status: number | null): Promise<AuthResultOutcome>;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
export { LlmConfigProviderAuth, type LlmConfigProviderAuthOptions };
|
|
@@ -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;
|