@omnicross/core 0.1.2 → 0.1.4
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/LICENSE +21 -21
- package/NOTICE +57 -57
- package/README.md +15 -15
- package/dist/auth/GeminiCodeAssistProjectResolver.cjs +6 -1
- package/dist/auth/GeminiCodeAssistProjectResolver.js +6 -1
- package/dist/chunk-3QFXFCHG.js +33 -0
- package/dist/chunk-4IH4EL7M.cjs +9 -0
- package/dist/chunk-4YINUUKQ.cjs +33 -0
- package/dist/chunk-5ENKBSWO.js +311 -0
- package/dist/chunk-6RPZADX3.cjs +92 -0
- package/dist/chunk-7Y47UCF2.js +142 -0
- package/dist/chunk-AEOZIDEB.cjs +32 -0
- package/dist/chunk-APYG5QD7.cjs +50 -0
- package/dist/{chunk-MNYKI4CI.js → chunk-BPKCU575.js} +29 -0
- package/dist/{chunk-SN3YWBX7.cjs → chunk-DKPXN34V.cjs} +2108 -538
- package/dist/{chunk-4NBS6KPV.cjs → chunk-DQ5VAYZ6.cjs} +7 -8
- package/dist/chunk-E3UCVHLP.cjs +142 -0
- package/dist/chunk-FCR77GYM.cjs +33 -0
- package/dist/{chunk-74TMJA7Z.js → chunk-HRRYG2AX.js} +8 -4
- package/dist/chunk-HUZZZ3JL.js +32 -0
- package/dist/{chunk-KUU2RNG6.cjs → chunk-HYN75H6G.cjs} +3 -0
- package/dist/{chunk-QOCNX236.js → chunk-IAXWICZU.js} +24 -1
- package/dist/{chunk-JO5NLTLY.js → chunk-IK3KE3AU.js} +3 -0
- package/dist/{chunk-V5KPWNYX.cjs → chunk-JMJBSACD.cjs} +3 -3
- package/dist/chunk-K5NM7VAH.js +33 -0
- package/dist/{chunk-N3V2J5ZO.cjs → chunk-KFI44N2R.cjs} +8 -4
- package/dist/chunk-L74VDN4A.cjs +32 -0
- package/dist/chunk-OCEUVQHW.cjs +112 -0
- package/dist/chunk-OE6TDIWW.js +22 -0
- package/dist/chunk-OZFM4X3S.js +18 -0
- package/dist/{chunk-LKZJEL6E.cjs → chunk-Q27JY5RG.cjs} +6 -4
- package/dist/{chunk-SPVWWUHX.cjs → chunk-QWBWGODS.cjs} +24 -1
- package/dist/{chunk-2FEVTJWG.js → chunk-QYTT6GE3.js} +1929 -359
- package/dist/{chunk-UYPEN5XE.cjs → chunk-RGTR7CIO.cjs} +6 -6
- package/dist/chunk-RPII3E6Z.cjs +145 -0
- package/dist/{chunk-XBSYYZIY.cjs → chunk-SNYBEXLB.cjs} +31 -2
- package/dist/{chunk-2DCNB7DF.cjs → chunk-SU2GCLAC.cjs} +30 -10
- package/dist/{chunk-5HTVET6E.js → chunk-TIER4SUC.js} +24 -4
- package/dist/chunk-TKJMZBAH.js +32 -0
- package/dist/{chunk-ZSVQT3PW.js → chunk-UBWEBKRC.js} +5 -6
- package/dist/chunk-UHGVBFU3.js +385 -0
- package/dist/chunk-UIBD2YY5.cjs +22 -0
- package/dist/chunk-UNEFIWXI.cjs +32 -0
- package/dist/chunk-VACWOIRE.cjs +385 -0
- package/dist/{chunk-O466Y272.js → chunk-VPBAUQ2M.js} +7 -7
- package/dist/chunk-VQY5W4YW.cjs +311 -0
- package/dist/chunk-WLYIIEAF.js +50 -0
- package/dist/chunk-WNY4WMRF.js +32 -0
- package/dist/chunk-XEKD23J5.js +9 -0
- package/dist/chunk-XK5CIRMQ.js +112 -0
- package/dist/chunk-XSVNC2UD.cjs +18 -0
- package/dist/chunk-XTEI64OU.js +145 -0
- package/dist/chunk-XX6NQJMA.js +92 -0
- package/dist/{chunk-745DV5FL.js → chunk-Y7FO65VT.js} +3 -3
- package/dist/{chunk-PXUJF5HS.js → chunk-ZY6KU6P3.js} +4 -2
- package/dist/completion/CompletionService.cjs +30 -17
- package/dist/completion/CompletionService.js +29 -16
- package/dist/completion/NativeSearchInjector.cjs +3 -3
- package/dist/completion/NativeSearchInjector.js +2 -2
- package/dist/completion/openrouter-headers.cjs +3 -6
- package/dist/completion/openrouter-headers.d.cts +9 -12
- package/dist/completion/openrouter-headers.d.ts +9 -12
- package/dist/completion/openrouter-headers.js +2 -5
- package/dist/completion/openrouter-models.cjs +4 -3
- package/dist/completion/openrouter-models.js +2 -1
- package/dist/completion.cjs +30 -17
- package/dist/completion.js +29 -16
- package/dist/index.cjs +151 -20
- package/dist/index.d.cts +44 -10
- package/dist/index.d.ts +44 -10
- package/dist/index.js +160 -29
- package/dist/keyPolicy-Cp0FntZl.d.cts +90 -0
- package/dist/keyPolicy-Cp0FntZl.d.ts +90 -0
- package/dist/outbound-api/auditCapture.cjs +9 -0
- package/dist/outbound-api/auditCapture.d.cts +52 -0
- package/dist/outbound-api/auditCapture.d.ts +52 -0
- package/dist/outbound-api/auditCapture.js +9 -0
- package/dist/outbound-api/auditRedact.cjs +8 -0
- package/dist/outbound-api/auditRedact.d.cts +30 -0
- package/dist/outbound-api/auditRedact.d.ts +30 -0
- package/dist/outbound-api/auditRedact.js +8 -0
- package/dist/outbound-api/billingCapture.cjs +8 -0
- package/dist/outbound-api/billingCapture.d.cts +61 -0
- package/dist/outbound-api/billingCapture.d.ts +61 -0
- package/dist/outbound-api/billingCapture.js +8 -0
- package/dist/outbound-api/quotaWarn.cjs +12 -0
- package/dist/outbound-api/quotaWarn.d.cts +43 -0
- package/dist/outbound-api/quotaWarn.d.ts +43 -0
- package/dist/outbound-api/quotaWarn.js +12 -0
- package/dist/outbound-api/routeResolver.cjs +5 -2
- package/dist/outbound-api/routeResolver.d.cts +9 -2
- package/dist/outbound-api/routeResolver.d.ts +9 -2
- package/dist/outbound-api/routeResolver.js +4 -1
- package/dist/outbound-api/types.cjs +6 -1
- 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 +144 -17
- package/dist/outbound-api.d.cts +655 -25
- package/dist/outbound-api.d.ts +655 -25
- package/dist/outbound-api.js +148 -21
- package/dist/pipeline/AuthSource.d.cts +29 -1
- package/dist/pipeline/AuthSource.d.ts +29 -1
- package/dist/pipeline/LlmConfigProviderAuth.cjs +3 -3
- package/dist/pipeline/LlmConfigProviderAuth.js +2 -2
- 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 +2 -2
- package/dist/pipeline/SubscriptionAuthSource.d.cts +3 -2
- package/dist/pipeline/SubscriptionAuthSource.d.ts +3 -2
- package/dist/pipeline/SubscriptionAuthSource.js +1 -1
- package/dist/pipeline/SubscriptionAuthStrategy.d.cts +30 -1
- package/dist/pipeline/SubscriptionAuthStrategy.d.ts +30 -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/auditUsageStash.cjs +10 -0
- package/dist/pipeline/auditUsageStash.d.cts +37 -0
- package/dist/pipeline/auditUsageStash.d.ts +37 -0
- package/dist/pipeline/auditUsageStash.js +10 -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 +2 -2
- package/dist/pipeline/executeProviderCall.js +1 -1
- package/dist/pipeline/upstreamFetch.cjs +14 -0
- package/dist/pipeline/upstreamFetch.d.cts +83 -0
- package/dist/pipeline/upstreamFetch.d.ts +83 -0
- package/dist/pipeline/upstreamFetch.js +14 -0
- package/dist/pipeline/webhookEmit.cjs +10 -0
- package/dist/pipeline/webhookEmit.d.cts +36 -0
- package/dist/pipeline/webhookEmit.d.ts +36 -0
- package/dist/pipeline/webhookEmit.js +10 -0
- package/dist/ports/usage-event-store.d.cts +26 -1
- package/dist/ports/usage-event-store.d.ts +26 -1
- package/dist/ports.d.cts +8 -1
- package/dist/ports.d.ts +8 -1
- package/dist/provider-proxy/ProviderProxy.cjs +30 -17
- package/dist/provider-proxy/ProviderProxy.js +29 -16
- 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 +30 -17
- package/dist/provider-proxy/ingress/providerProxyShared.d.cts +11 -2
- package/dist/provider-proxy/ingress/providerProxyShared.d.ts +11 -2
- package/dist/provider-proxy/ingress/providerProxyShared.js +29 -16
- package/dist/provider-proxy/matchText.cjs +4 -2
- package/dist/provider-proxy/matchText.d.cts +14 -1
- package/dist/provider-proxy/matchText.d.ts +14 -1
- package/dist/provider-proxy/matchText.js +3 -1
- package/dist/provider-proxy/types.d.cts +30 -0
- package/dist/provider-proxy/types.d.ts +30 -0
- package/dist/provider-proxy.cjs +30 -17
- package/dist/provider-proxy.js +29 -16
- package/dist/{routeResolver-HE-ZO0fO.d.ts → routeResolver-C4T7yClx.d.ts} +36 -10
- package/dist/{routeResolver-BrbK6ja9.d.cts → routeResolver-CB3tvJKy.d.cts} +36 -10
- package/dist/transformer/transformers/OpenAIResponseTransformer.cjs +2 -2
- package/dist/transformer/transformers/OpenAIResponseTransformer.js +1 -1
- package/dist/transformer/transformers.cjs +7 -7
- package/dist/transformer/transformers.js +8 -8
- package/dist/transformer.cjs +9 -9
- package/dist/transformer.js +8 -8
- package/dist/types-B8Arpxn0.d.cts +754 -0
- package/dist/types-lgPYQuZS.d.ts +754 -0
- package/dist/usage/usage-recorder.cjs +3 -2
- package/dist/usage/usage-recorder.d.cts +19 -1
- package/dist/usage/usage-recorder.d.ts +19 -1
- package/dist/usage/usage-recorder.js +2 -1
- package/dist/usage.cjs +3 -2
- package/dist/usage.js +2 -1
- package/package.json +64 -62
- package/dist/chunk-3MEACFK3.js +0 -193
- package/dist/chunk-6VIXXLMX.cjs +0 -14
- package/dist/chunk-E3WHL7CO.js +0 -14
- package/dist/chunk-G2FUJNA2.cjs +0 -193
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BillingEvent, BillingConfig } from '@omnicross/contracts/billing-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* billingEmit — the module-slot sink + capture-gate port for `@omnicross/core`
|
|
5
|
+
* (billing-event-stream, design D4/D7).
|
|
6
|
+
*
|
|
7
|
+
* The outbound server's post-response billing hook calls {@link publishBillingEvent}
|
|
8
|
+
* with an assembled {@link BillingEvent}. The concrete `BillingPublisher` (the
|
|
9
|
+
* durable-first jsonl ledger + built-in POST) lives in the DAEMON and registers
|
|
10
|
+
* itself as the sink at bootstrap via {@link setBillingSink}. Core imports NOTHING
|
|
11
|
+
* from the daemon — exactly the `setWebhookSink` / `setAuditSink` precedent.
|
|
12
|
+
*
|
|
13
|
+
* A SECOND slot holds the active {@link BillingConfig} ({@link setBillingCaptureConfig}
|
|
14
|
+
* / {@link getBillingCaptureConfig}). The capture hook reads it to GATE assembly:
|
|
15
|
+
* absent/`enabled:false` ⇒ the hook does nothing (not even event assembly), so
|
|
16
|
+
* billing-disabled is byte-identical zero regression. The daemon sets BOTH slots
|
|
17
|
+
* together (config + sink) when billing is enabled and clears BOTH when disabled.
|
|
18
|
+
*
|
|
19
|
+
* HARD CONTRACT (design D7 / risk "a billing POST blocking the request path"):
|
|
20
|
+
* {@link publishBillingEvent} NEVER throws and NEVER awaits — it hands the event
|
|
21
|
+
* to the sink (which durably appends + enqueues delivery and returns immediately)
|
|
22
|
+
* and swallows any sink error, so a slow/failing/throwing publisher can never
|
|
23
|
+
* affect the relay path. Absent a sink it is a pure no-op.
|
|
24
|
+
*
|
|
25
|
+
* @module @omnicross/core/pipeline/billingEmit
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** The sink the daemon registers; it MUST durably-append-and-return (never block/throw). */
|
|
29
|
+
type BillingSink = (event: BillingEvent) => void;
|
|
30
|
+
/** Install (or clear, with `null`) the billing sink. Idempotent; last write wins. */
|
|
31
|
+
declare function setBillingSink(fn: BillingSink | null): void;
|
|
32
|
+
/**
|
|
33
|
+
* Install (or clear, with `null`) the active billing config. `null` (or an
|
|
34
|
+
* `enabled:false` config) disables the capture entirely — the hook does no work.
|
|
35
|
+
*/
|
|
36
|
+
declare function setBillingCaptureConfig(config: BillingConfig | null): void;
|
|
37
|
+
/** The active billing config, or `null` when billing is disabled/unset. */
|
|
38
|
+
declare function getBillingCaptureConfig(): BillingConfig | null;
|
|
39
|
+
/**
|
|
40
|
+
* Publish one billing event to the registered sink. A no-op when no sink is set
|
|
41
|
+
* (zero regression). NEVER throws (a misbehaving sink is swallowed) and NEVER
|
|
42
|
+
* awaits (the sink durably appends + enqueues delivery, then returns) — so no
|
|
43
|
+
* relay path is ever delayed.
|
|
44
|
+
*/
|
|
45
|
+
declare function publishBillingEvent(event: BillingEvent): void;
|
|
46
|
+
/** TEST SEAM — clear both slots so a suite starts from the no-billing baseline. */
|
|
47
|
+
declare function __resetBillingSinkForTests(): void;
|
|
48
|
+
|
|
49
|
+
export { type BillingSink, __resetBillingSinkForTests, getBillingCaptureConfig, publishBillingEvent, setBillingCaptureConfig, setBillingSink };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { BillingEvent, BillingConfig } from '@omnicross/contracts/billing-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* billingEmit — the module-slot sink + capture-gate port for `@omnicross/core`
|
|
5
|
+
* (billing-event-stream, design D4/D7).
|
|
6
|
+
*
|
|
7
|
+
* The outbound server's post-response billing hook calls {@link publishBillingEvent}
|
|
8
|
+
* with an assembled {@link BillingEvent}. The concrete `BillingPublisher` (the
|
|
9
|
+
* durable-first jsonl ledger + built-in POST) lives in the DAEMON and registers
|
|
10
|
+
* itself as the sink at bootstrap via {@link setBillingSink}. Core imports NOTHING
|
|
11
|
+
* from the daemon — exactly the `setWebhookSink` / `setAuditSink` precedent.
|
|
12
|
+
*
|
|
13
|
+
* A SECOND slot holds the active {@link BillingConfig} ({@link setBillingCaptureConfig}
|
|
14
|
+
* / {@link getBillingCaptureConfig}). The capture hook reads it to GATE assembly:
|
|
15
|
+
* absent/`enabled:false` ⇒ the hook does nothing (not even event assembly), so
|
|
16
|
+
* billing-disabled is byte-identical zero regression. The daemon sets BOTH slots
|
|
17
|
+
* together (config + sink) when billing is enabled and clears BOTH when disabled.
|
|
18
|
+
*
|
|
19
|
+
* HARD CONTRACT (design D7 / risk "a billing POST blocking the request path"):
|
|
20
|
+
* {@link publishBillingEvent} NEVER throws and NEVER awaits — it hands the event
|
|
21
|
+
* to the sink (which durably appends + enqueues delivery and returns immediately)
|
|
22
|
+
* and swallows any sink error, so a slow/failing/throwing publisher can never
|
|
23
|
+
* affect the relay path. Absent a sink it is a pure no-op.
|
|
24
|
+
*
|
|
25
|
+
* @module @omnicross/core/pipeline/billingEmit
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
/** The sink the daemon registers; it MUST durably-append-and-return (never block/throw). */
|
|
29
|
+
type BillingSink = (event: BillingEvent) => void;
|
|
30
|
+
/** Install (or clear, with `null`) the billing sink. Idempotent; last write wins. */
|
|
31
|
+
declare function setBillingSink(fn: BillingSink | null): void;
|
|
32
|
+
/**
|
|
33
|
+
* Install (or clear, with `null`) the active billing config. `null` (or an
|
|
34
|
+
* `enabled:false` config) disables the capture entirely — the hook does no work.
|
|
35
|
+
*/
|
|
36
|
+
declare function setBillingCaptureConfig(config: BillingConfig | null): void;
|
|
37
|
+
/** The active billing config, or `null` when billing is disabled/unset. */
|
|
38
|
+
declare function getBillingCaptureConfig(): BillingConfig | null;
|
|
39
|
+
/**
|
|
40
|
+
* Publish one billing event to the registered sink. A no-op when no sink is set
|
|
41
|
+
* (zero regression). NEVER throws (a misbehaving sink is swallowed) and NEVER
|
|
42
|
+
* awaits (the sink durably appends + enqueues delivery, then returns) — so no
|
|
43
|
+
* relay path is ever delayed.
|
|
44
|
+
*/
|
|
45
|
+
declare function publishBillingEvent(event: BillingEvent): void;
|
|
46
|
+
/** TEST SEAM — clear both slots so a suite starts from the no-billing baseline. */
|
|
47
|
+
declare function __resetBillingSinkForTests(): void;
|
|
48
|
+
|
|
49
|
+
export { type BillingSink, __resetBillingSinkForTests, getBillingCaptureConfig, publishBillingEvent, setBillingCaptureConfig, setBillingSink };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__resetBillingSinkForTests,
|
|
3
|
+
getBillingCaptureConfig,
|
|
4
|
+
publishBillingEvent,
|
|
5
|
+
setBillingCaptureConfig,
|
|
6
|
+
setBillingSink
|
|
7
|
+
} from "../chunk-TKJMZBAH.js";
|
|
8
|
+
export {
|
|
9
|
+
__resetBillingSinkForTests,
|
|
10
|
+
getBillingCaptureConfig,
|
|
11
|
+
publishBillingEvent,
|
|
12
|
+
setBillingCaptureConfig,
|
|
13
|
+
setBillingSink
|
|
14
|
+
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkHYN75H6Gcjs = require('../chunk-HYN75H6G.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
exports.executeProviderCall =
|
|
6
|
+
exports.executeProviderCall = _chunkHYN75H6Gcjs.executeProviderCall;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
var _chunkOCEUVQHWcjs = require('../chunk-OCEUVQHW.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
exports.__resetUpstreamProxyForTests = _chunkOCEUVQHWcjs.__resetUpstreamProxyForTests; exports.bumpUpstreamProxyGeneration = _chunkOCEUVQHWcjs.bumpUpstreamProxyGeneration; exports.fetchUpstream = _chunkOCEUVQHWcjs.fetchUpstream; exports.resolveUpstreamDispatcher = _chunkOCEUVQHWcjs.resolveUpstreamDispatcher; exports.setUpstreamProxyResolver = _chunkOCEUVQHWcjs.setUpstreamProxyResolver;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ProxyConfig } from '@omnicross/contracts/account-tokens-types';
|
|
2
|
+
import { Dispatcher } from 'undici';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* upstreamFetch — the single proxy-aware egress seam for `@omnicross/core`
|
|
6
|
+
* (upstream-proxy).
|
|
7
|
+
*
|
|
8
|
+
* Every outbound UPSTREAM call (relay ingress `fetchFn` closures, the OAuth
|
|
9
|
+
* token-refresh `FetchLike`, the Gemini Code Assist handshake) routes through
|
|
10
|
+
* {@link fetchUpstream}. When a proxy resolves for the call it attaches an
|
|
11
|
+
* undici {@link Dispatcher} (`ProxyAgent` for http/https, an `Agent` with a
|
|
12
|
+
* socks5 connector for socks5); ABSENT any proxy it is a BARE `fetch` — the
|
|
13
|
+
* dispatcher option is never set, so behavior is byte-identical to the
|
|
14
|
+
* pre-change code (the zero-regression guarantee).
|
|
15
|
+
*
|
|
16
|
+
* Core stays config/account-agnostic: it only knows opaque `providerId` /
|
|
17
|
+
* `accountId` strings + a {@link ProxyConfig} descriptor. The daemon injects the
|
|
18
|
+
* layered lookup via {@link setUpstreamProxyResolver} — the same module-slot
|
|
19
|
+
* pattern as `setSubscriptionRegistryForOutbound`. Core never imports config or
|
|
20
|
+
* account material.
|
|
21
|
+
*
|
|
22
|
+
* Dispatchers are CACHED by resolved-proxy identity (one instance reused, not
|
|
23
|
+
* per-request, so keep-alive holds and sockets don't leak). A config change bumps
|
|
24
|
+
* a generation via {@link bumpUpstreamProxyGeneration} (also called by
|
|
25
|
+
* `setUpstreamProxyResolver`) which disposes the old dispatchers and rebuilds on
|
|
26
|
+
* next use.
|
|
27
|
+
*
|
|
28
|
+
* FROZEN SEAM: `#7` (client fingerprint) attaches per-account TLS/agent behavior
|
|
29
|
+
* at this SAME dispatcher point — do not fork a second egress path.
|
|
30
|
+
*
|
|
31
|
+
* @module @omnicross/core/pipeline/upstreamFetch
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/** The opaque call context the resolver maps to a proxy (precedence input). */
|
|
35
|
+
interface UpstreamProxyContext {
|
|
36
|
+
/** The subscription provider id (`claude`/`codex`/`gemini`/`opencodego`) or `'byo'`. */
|
|
37
|
+
providerId?: string;
|
|
38
|
+
/** The selected pooled account id (per-account override input). */
|
|
39
|
+
accountId?: string;
|
|
40
|
+
/**
|
|
41
|
+
* The target upstream URL. Injected by {@link fetchUpstream} so the resolver can
|
|
42
|
+
* apply host-based bypass (loopback / `NO_PROXY`). Callers of the ingress helpers
|
|
43
|
+
* do NOT set this — it is filled from the fetch `url`.
|
|
44
|
+
*/
|
|
45
|
+
url?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The layered proxy lookup the daemon injects. Applies precedence
|
|
49
|
+
* account > provider > global > env and returns the WINNING `ProxyConfig`, or
|
|
50
|
+
* `undefined` for a direct (non-proxied) call.
|
|
51
|
+
*/
|
|
52
|
+
type UpstreamProxyResolver = (ctx: UpstreamProxyContext) => ProxyConfig | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Inject (or clear, with `null`) the layered proxy resolver. Idempotent — last
|
|
55
|
+
* write wins. Bumps the dispatcher generation so a resolver swap (or a config
|
|
56
|
+
* edit that re-registers) rebuilds dispatchers from the new lookup and disposes
|
|
57
|
+
* the old ones.
|
|
58
|
+
*/
|
|
59
|
+
declare function setUpstreamProxyResolver(fn: UpstreamProxyResolver | null): void;
|
|
60
|
+
/**
|
|
61
|
+
* Invalidate every cached dispatcher (config change / admin edit). Old
|
|
62
|
+
* dispatchers are `close()`d best-effort so in-flight sockets drain; new calls
|
|
63
|
+
* rebuild from the current resolver output.
|
|
64
|
+
*/
|
|
65
|
+
declare function bumpUpstreamProxyGeneration(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Resolve the dispatcher for one call. Returns `undefined` (⇒ bare fetch) when
|
|
68
|
+
* no resolver is registered, the resolver returns undefined, or the descriptor
|
|
69
|
+
* is malformed. A resolver throw is swallowed → direct call (egress never breaks
|
|
70
|
+
* on a proxy-lookup error).
|
|
71
|
+
*/
|
|
72
|
+
declare function resolveUpstreamDispatcher(ctx: UpstreamProxyContext): Dispatcher | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Proxy-aware `fetch`. Attaches the resolved undici dispatcher ONLY when a proxy
|
|
75
|
+
* applies; otherwise it is a BARE `fetch(url, init)` — byte-identical to the
|
|
76
|
+
* pre-change egress (zero-regression). The `dispatcher` option is undici-specific
|
|
77
|
+
* (Node's global fetch IS undici); the cast threads it without a DOM-lib type.
|
|
78
|
+
*/
|
|
79
|
+
declare function fetchUpstream(url: string, init: RequestInit, ctx?: UpstreamProxyContext): Promise<Response>;
|
|
80
|
+
/** TEST SEAM — clear the resolver + cache so a suite starts from the direct-fetch baseline. */
|
|
81
|
+
declare function __resetUpstreamProxyForTests(): void;
|
|
82
|
+
|
|
83
|
+
export { type UpstreamProxyContext, type UpstreamProxyResolver, __resetUpstreamProxyForTests, bumpUpstreamProxyGeneration, fetchUpstream, resolveUpstreamDispatcher, setUpstreamProxyResolver };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { ProxyConfig } from '@omnicross/contracts/account-tokens-types';
|
|
2
|
+
import { Dispatcher } from 'undici';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* upstreamFetch — the single proxy-aware egress seam for `@omnicross/core`
|
|
6
|
+
* (upstream-proxy).
|
|
7
|
+
*
|
|
8
|
+
* Every outbound UPSTREAM call (relay ingress `fetchFn` closures, the OAuth
|
|
9
|
+
* token-refresh `FetchLike`, the Gemini Code Assist handshake) routes through
|
|
10
|
+
* {@link fetchUpstream}. When a proxy resolves for the call it attaches an
|
|
11
|
+
* undici {@link Dispatcher} (`ProxyAgent` for http/https, an `Agent` with a
|
|
12
|
+
* socks5 connector for socks5); ABSENT any proxy it is a BARE `fetch` — the
|
|
13
|
+
* dispatcher option is never set, so behavior is byte-identical to the
|
|
14
|
+
* pre-change code (the zero-regression guarantee).
|
|
15
|
+
*
|
|
16
|
+
* Core stays config/account-agnostic: it only knows opaque `providerId` /
|
|
17
|
+
* `accountId` strings + a {@link ProxyConfig} descriptor. The daemon injects the
|
|
18
|
+
* layered lookup via {@link setUpstreamProxyResolver} — the same module-slot
|
|
19
|
+
* pattern as `setSubscriptionRegistryForOutbound`. Core never imports config or
|
|
20
|
+
* account material.
|
|
21
|
+
*
|
|
22
|
+
* Dispatchers are CACHED by resolved-proxy identity (one instance reused, not
|
|
23
|
+
* per-request, so keep-alive holds and sockets don't leak). A config change bumps
|
|
24
|
+
* a generation via {@link bumpUpstreamProxyGeneration} (also called by
|
|
25
|
+
* `setUpstreamProxyResolver`) which disposes the old dispatchers and rebuilds on
|
|
26
|
+
* next use.
|
|
27
|
+
*
|
|
28
|
+
* FROZEN SEAM: `#7` (client fingerprint) attaches per-account TLS/agent behavior
|
|
29
|
+
* at this SAME dispatcher point — do not fork a second egress path.
|
|
30
|
+
*
|
|
31
|
+
* @module @omnicross/core/pipeline/upstreamFetch
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
/** The opaque call context the resolver maps to a proxy (precedence input). */
|
|
35
|
+
interface UpstreamProxyContext {
|
|
36
|
+
/** The subscription provider id (`claude`/`codex`/`gemini`/`opencodego`) or `'byo'`. */
|
|
37
|
+
providerId?: string;
|
|
38
|
+
/** The selected pooled account id (per-account override input). */
|
|
39
|
+
accountId?: string;
|
|
40
|
+
/**
|
|
41
|
+
* The target upstream URL. Injected by {@link fetchUpstream} so the resolver can
|
|
42
|
+
* apply host-based bypass (loopback / `NO_PROXY`). Callers of the ingress helpers
|
|
43
|
+
* do NOT set this — it is filled from the fetch `url`.
|
|
44
|
+
*/
|
|
45
|
+
url?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The layered proxy lookup the daemon injects. Applies precedence
|
|
49
|
+
* account > provider > global > env and returns the WINNING `ProxyConfig`, or
|
|
50
|
+
* `undefined` for a direct (non-proxied) call.
|
|
51
|
+
*/
|
|
52
|
+
type UpstreamProxyResolver = (ctx: UpstreamProxyContext) => ProxyConfig | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Inject (or clear, with `null`) the layered proxy resolver. Idempotent — last
|
|
55
|
+
* write wins. Bumps the dispatcher generation so a resolver swap (or a config
|
|
56
|
+
* edit that re-registers) rebuilds dispatchers from the new lookup and disposes
|
|
57
|
+
* the old ones.
|
|
58
|
+
*/
|
|
59
|
+
declare function setUpstreamProxyResolver(fn: UpstreamProxyResolver | null): void;
|
|
60
|
+
/**
|
|
61
|
+
* Invalidate every cached dispatcher (config change / admin edit). Old
|
|
62
|
+
* dispatchers are `close()`d best-effort so in-flight sockets drain; new calls
|
|
63
|
+
* rebuild from the current resolver output.
|
|
64
|
+
*/
|
|
65
|
+
declare function bumpUpstreamProxyGeneration(): void;
|
|
66
|
+
/**
|
|
67
|
+
* Resolve the dispatcher for one call. Returns `undefined` (⇒ bare fetch) when
|
|
68
|
+
* no resolver is registered, the resolver returns undefined, or the descriptor
|
|
69
|
+
* is malformed. A resolver throw is swallowed → direct call (egress never breaks
|
|
70
|
+
* on a proxy-lookup error).
|
|
71
|
+
*/
|
|
72
|
+
declare function resolveUpstreamDispatcher(ctx: UpstreamProxyContext): Dispatcher | undefined;
|
|
73
|
+
/**
|
|
74
|
+
* Proxy-aware `fetch`. Attaches the resolved undici dispatcher ONLY when a proxy
|
|
75
|
+
* applies; otherwise it is a BARE `fetch(url, init)` — byte-identical to the
|
|
76
|
+
* pre-change egress (zero-regression). The `dispatcher` option is undici-specific
|
|
77
|
+
* (Node's global fetch IS undici); the cast threads it without a DOM-lib type.
|
|
78
|
+
*/
|
|
79
|
+
declare function fetchUpstream(url: string, init: RequestInit, ctx?: UpstreamProxyContext): Promise<Response>;
|
|
80
|
+
/** TEST SEAM — clear the resolver + cache so a suite starts from the direct-fetch baseline. */
|
|
81
|
+
declare function __resetUpstreamProxyForTests(): void;
|
|
82
|
+
|
|
83
|
+
export { type UpstreamProxyContext, type UpstreamProxyResolver, __resetUpstreamProxyForTests, bumpUpstreamProxyGeneration, fetchUpstream, resolveUpstreamDispatcher, setUpstreamProxyResolver };
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__resetUpstreamProxyForTests,
|
|
3
|
+
bumpUpstreamProxyGeneration,
|
|
4
|
+
fetchUpstream,
|
|
5
|
+
resolveUpstreamDispatcher,
|
|
6
|
+
setUpstreamProxyResolver
|
|
7
|
+
} from "../chunk-XK5CIRMQ.js";
|
|
8
|
+
export {
|
|
9
|
+
__resetUpstreamProxyForTests,
|
|
10
|
+
bumpUpstreamProxyGeneration,
|
|
11
|
+
fetchUpstream,
|
|
12
|
+
resolveUpstreamDispatcher,
|
|
13
|
+
setUpstreamProxyResolver
|
|
14
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
var _chunkUIBD2YY5cjs = require('../chunk-UIBD2YY5.cjs');
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
exports.__resetWebhookSinkForTests = _chunkUIBD2YY5cjs.__resetWebhookSinkForTests; exports.emitWebhookEvent = _chunkUIBD2YY5cjs.emitWebhookEvent; exports.setWebhookSink = _chunkUIBD2YY5cjs.setWebhookSink;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { WebhookEvent } from '@omnicross/contracts/webhook-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* webhookEmit — the module-slot emit port for `@omnicross/core`
|
|
5
|
+
* (webhook-notifications, design D2).
|
|
6
|
+
*
|
|
7
|
+
* Core SOURCES (the wire quota path in `outboundApiRouter`, the relay/dispatch
|
|
8
|
+
* error path) call {@link emitWebhookEvent}. The concrete `WebhookDispatcher`
|
|
9
|
+
* (config/secrets/HTTP/HMAC) lives in the DAEMON and registers itself as the
|
|
10
|
+
* sink at bootstrap via {@link setWebhookSink}. Core imports NOTHING from the
|
|
11
|
+
* daemon — exactly the `setSharedAccountHealth` / `setUpstreamProxyResolver`
|
|
12
|
+
* precedent.
|
|
13
|
+
*
|
|
14
|
+
* HARD CONTRACT (design D2 / risk "a webhook blocking the request path"):
|
|
15
|
+
* {@link emitWebhookEvent} NEVER throws and NEVER awaits. It hands the event to
|
|
16
|
+
* the sink (which enqueues and returns immediately) — a slow/failing/throwing
|
|
17
|
+
* sink can never affect the caller. Absent a sink it is a pure no-op, so a
|
|
18
|
+
* no-webhook-config daemon is byte-identical to before this change.
|
|
19
|
+
*
|
|
20
|
+
* @module @omnicross/core/pipeline/webhookEmit
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/** The sink the daemon registers; it MUST enqueue-and-return (never block). */
|
|
24
|
+
type WebhookSink = (event: WebhookEvent) => void;
|
|
25
|
+
/** Install (or clear, with `null`) the webhook sink. Idempotent; last write wins. */
|
|
26
|
+
declare function setWebhookSink(fn: WebhookSink | null): void;
|
|
27
|
+
/**
|
|
28
|
+
* Emit a webhook event to the registered sink. A no-op when no sink is set
|
|
29
|
+
* (zero regression). NEVER throws (a misbehaving sink is swallowed) and NEVER
|
|
30
|
+
* awaits (the sink enqueues + returns) — so no request path is ever delayed.
|
|
31
|
+
*/
|
|
32
|
+
declare function emitWebhookEvent(event: WebhookEvent): void;
|
|
33
|
+
/** TEST SEAM — clear the sink so a suite starts from the no-sink baseline. */
|
|
34
|
+
declare function __resetWebhookSinkForTests(): void;
|
|
35
|
+
|
|
36
|
+
export { type WebhookSink, __resetWebhookSinkForTests, emitWebhookEvent, setWebhookSink };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { WebhookEvent } from '@omnicross/contracts/webhook-types';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* webhookEmit — the module-slot emit port for `@omnicross/core`
|
|
5
|
+
* (webhook-notifications, design D2).
|
|
6
|
+
*
|
|
7
|
+
* Core SOURCES (the wire quota path in `outboundApiRouter`, the relay/dispatch
|
|
8
|
+
* error path) call {@link emitWebhookEvent}. The concrete `WebhookDispatcher`
|
|
9
|
+
* (config/secrets/HTTP/HMAC) lives in the DAEMON and registers itself as the
|
|
10
|
+
* sink at bootstrap via {@link setWebhookSink}. Core imports NOTHING from the
|
|
11
|
+
* daemon — exactly the `setSharedAccountHealth` / `setUpstreamProxyResolver`
|
|
12
|
+
* precedent.
|
|
13
|
+
*
|
|
14
|
+
* HARD CONTRACT (design D2 / risk "a webhook blocking the request path"):
|
|
15
|
+
* {@link emitWebhookEvent} NEVER throws and NEVER awaits. It hands the event to
|
|
16
|
+
* the sink (which enqueues and returns immediately) — a slow/failing/throwing
|
|
17
|
+
* sink can never affect the caller. Absent a sink it is a pure no-op, so a
|
|
18
|
+
* no-webhook-config daemon is byte-identical to before this change.
|
|
19
|
+
*
|
|
20
|
+
* @module @omnicross/core/pipeline/webhookEmit
|
|
21
|
+
*/
|
|
22
|
+
|
|
23
|
+
/** The sink the daemon registers; it MUST enqueue-and-return (never block). */
|
|
24
|
+
type WebhookSink = (event: WebhookEvent) => void;
|
|
25
|
+
/** Install (or clear, with `null`) the webhook sink. Idempotent; last write wins. */
|
|
26
|
+
declare function setWebhookSink(fn: WebhookSink | null): void;
|
|
27
|
+
/**
|
|
28
|
+
* Emit a webhook event to the registered sink. A no-op when no sink is set
|
|
29
|
+
* (zero regression). NEVER throws (a misbehaving sink is swallowed) and NEVER
|
|
30
|
+
* awaits (the sink enqueues + returns) — so no request path is ever delayed.
|
|
31
|
+
*/
|
|
32
|
+
declare function emitWebhookEvent(event: WebhookEvent): void;
|
|
33
|
+
/** TEST SEAM — clear the sink so a suite starts from the no-sink baseline. */
|
|
34
|
+
declare function __resetWebhookSinkForTests(): void;
|
|
35
|
+
|
|
36
|
+
export { type WebhookSink, __resetWebhookSinkForTests, emitWebhookEvent, setWebhookSink };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UsageEventInput, UsageDateRange, UsageTotals, ModelUsageRow, ApiKeyUsageRow, MessageUsageRow, SessionCacheStats } from '@omnicross/contracts/usage-stats-types';
|
|
1
|
+
import { UsageEventInput, UsageDateRange, UsageTotals, ModelUsageRow, ApiKeyUsageRow, UsageTimeBucket, UsageTimeSeriesBucket, MessageUsageRow, SessionCacheStats } from '@omnicross/contracts/usage-stats-types';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* `UsageEventStore` — core-owned port for usage-event persistence + aggregation.
|
|
@@ -20,6 +20,31 @@ interface UsageEventStore {
|
|
|
20
20
|
getByModel(range: UsageDateRange): Promise<ModelUsageRow[]>;
|
|
21
21
|
/** Per-API-key breakdown over a date range. */
|
|
22
22
|
getByApiKey(range: UsageDateRange): Promise<ApiKeyUsageRow[]>;
|
|
23
|
+
/**
|
|
24
|
+
* ONE scan of a single key's events (`ts < endTs`, EXCLUSIVE) summing its
|
|
25
|
+
* `costUsd` into all three windows at once: `totalUsd` (whole history),
|
|
26
|
+
* `dailyUsd` (`ts >= dayStartTs`) and `weeklyUsd` (`ts >= weekStartTs`). Used by
|
|
27
|
+
* the outbound key-policy spend tracker to LAZILY seed a key on first use (once
|
|
28
|
+
* per newly-seen key, NOT per request — a single pass, not three). A key with
|
|
29
|
+
* no attributed events yields all zeros.
|
|
30
|
+
*/
|
|
31
|
+
getSpendByKey(query: {
|
|
32
|
+
apiKeyId: string;
|
|
33
|
+
dayStartTs: number;
|
|
34
|
+
weekStartTs: number;
|
|
35
|
+
endTs: number;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
totalUsd: number;
|
|
38
|
+
dailyUsd: number;
|
|
39
|
+
weeklyUsd: number;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Time-series aggregation over `range`, bucketed at `bucket` granularity using
|
|
43
|
+
* the store host's LOCAL-time boundaries. EVERY bucket in the range is
|
|
44
|
+
* returned (empty ones zero-filled), ascending by `bucketStartTs`; an empty
|
|
45
|
+
* range (`startTs >= endTs`) returns `[]`.
|
|
46
|
+
*/
|
|
47
|
+
getTimeSeries(range: UsageDateRange, bucket: UsageTimeBucket): Promise<UsageTimeSeriesBucket[]>;
|
|
23
48
|
/** Message-level rows for one session. */
|
|
24
49
|
getMessagesForSession(sessionId: string): Promise<MessageUsageRow[]>;
|
|
25
50
|
/** Cumulative cache hit/miss stats for one session. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { UsageEventInput, UsageDateRange, UsageTotals, ModelUsageRow, ApiKeyUsageRow, MessageUsageRow, SessionCacheStats } from '@omnicross/contracts/usage-stats-types';
|
|
1
|
+
import { UsageEventInput, UsageDateRange, UsageTotals, ModelUsageRow, ApiKeyUsageRow, UsageTimeBucket, UsageTimeSeriesBucket, MessageUsageRow, SessionCacheStats } from '@omnicross/contracts/usage-stats-types';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* `UsageEventStore` — core-owned port for usage-event persistence + aggregation.
|
|
@@ -20,6 +20,31 @@ interface UsageEventStore {
|
|
|
20
20
|
getByModel(range: UsageDateRange): Promise<ModelUsageRow[]>;
|
|
21
21
|
/** Per-API-key breakdown over a date range. */
|
|
22
22
|
getByApiKey(range: UsageDateRange): Promise<ApiKeyUsageRow[]>;
|
|
23
|
+
/**
|
|
24
|
+
* ONE scan of a single key's events (`ts < endTs`, EXCLUSIVE) summing its
|
|
25
|
+
* `costUsd` into all three windows at once: `totalUsd` (whole history),
|
|
26
|
+
* `dailyUsd` (`ts >= dayStartTs`) and `weeklyUsd` (`ts >= weekStartTs`). Used by
|
|
27
|
+
* the outbound key-policy spend tracker to LAZILY seed a key on first use (once
|
|
28
|
+
* per newly-seen key, NOT per request — a single pass, not three). A key with
|
|
29
|
+
* no attributed events yields all zeros.
|
|
30
|
+
*/
|
|
31
|
+
getSpendByKey(query: {
|
|
32
|
+
apiKeyId: string;
|
|
33
|
+
dayStartTs: number;
|
|
34
|
+
weekStartTs: number;
|
|
35
|
+
endTs: number;
|
|
36
|
+
}): Promise<{
|
|
37
|
+
totalUsd: number;
|
|
38
|
+
dailyUsd: number;
|
|
39
|
+
weeklyUsd: number;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Time-series aggregation over `range`, bucketed at `bucket` granularity using
|
|
43
|
+
* the store host's LOCAL-time boundaries. EVERY bucket in the range is
|
|
44
|
+
* returned (empty ones zero-filled), ascending by `bucketStartTs`; an empty
|
|
45
|
+
* range (`startTs >= endTs`) returns `[]`.
|
|
46
|
+
*/
|
|
47
|
+
getTimeSeries(range: UsageDateRange, bucket: UsageTimeBucket): Promise<UsageTimeSeriesBucket[]>;
|
|
23
48
|
/** Message-level rows for one session. */
|
|
24
49
|
getMessagesForSession(sessionId: string): Promise<MessageUsageRow[]>;
|
|
25
50
|
/** Cumulative cache hit/miss stats for one session. */
|
package/dist/ports.d.cts
CHANGED
|
@@ -5,7 +5,7 @@ export { ProviderConfigSource } from './ports/provider-config-source.cjs';
|
|
|
5
5
|
export { UsageEventStore } from './ports/usage-event-store.cjs';
|
|
6
6
|
export { WebSearchBackend } from './ports/web-search-backend.cjs';
|
|
7
7
|
export { UsageRecorderImport as UsageSink } from './provider-proxy/types.cjs';
|
|
8
|
-
export {
|
|
8
|
+
export { O as OutboundCredentialStore } from './types-B8Arpxn0.cjs';
|
|
9
9
|
import '@omnicross/contracts/pricing-types';
|
|
10
10
|
import '@omnicross/contracts/llm-config';
|
|
11
11
|
import './transformer/types.cjs';
|
|
@@ -20,4 +20,11 @@ import './completion/ApiKeyPoolService.cjs';
|
|
|
20
20
|
import './pipeline/AuthSource.cjs';
|
|
21
21
|
import './pipeline/SubscriptionAuthSource.cjs';
|
|
22
22
|
import './pipeline/SubscriptionAuthStrategy.cjs';
|
|
23
|
+
import '@omnicross/contracts/account-tokens-types';
|
|
24
|
+
import '@omnicross/contracts/audit-types';
|
|
25
|
+
import '@omnicross/contracts/billing-types';
|
|
26
|
+
import '@omnicross/contracts/health-logging-types';
|
|
27
|
+
import '@omnicross/contracts/voucher-types';
|
|
28
|
+
import '@omnicross/contracts/webhook-types';
|
|
23
29
|
import './ProviderProxy-CnMQYN59.cjs';
|
|
30
|
+
import './keyPolicy-Cp0FntZl.cjs';
|
package/dist/ports.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export { ProviderConfigSource } from './ports/provider-config-source.js';
|
|
|
5
5
|
export { UsageEventStore } from './ports/usage-event-store.js';
|
|
6
6
|
export { WebSearchBackend } from './ports/web-search-backend.js';
|
|
7
7
|
export { UsageRecorderImport as UsageSink } from './provider-proxy/types.js';
|
|
8
|
-
export {
|
|
8
|
+
export { O as OutboundCredentialStore } from './types-lgPYQuZS.js';
|
|
9
9
|
import '@omnicross/contracts/pricing-types';
|
|
10
10
|
import '@omnicross/contracts/llm-config';
|
|
11
11
|
import './transformer/types.js';
|
|
@@ -20,4 +20,11 @@ import './completion/ApiKeyPoolService.js';
|
|
|
20
20
|
import './pipeline/AuthSource.js';
|
|
21
21
|
import './pipeline/SubscriptionAuthSource.js';
|
|
22
22
|
import './pipeline/SubscriptionAuthStrategy.js';
|
|
23
|
+
import '@omnicross/contracts/account-tokens-types';
|
|
24
|
+
import '@omnicross/contracts/audit-types';
|
|
25
|
+
import '@omnicross/contracts/billing-types';
|
|
26
|
+
import '@omnicross/contracts/health-logging-types';
|
|
27
|
+
import '@omnicross/contracts/voucher-types';
|
|
28
|
+
import '@omnicross/contracts/webhook-types';
|
|
23
29
|
import './ProviderProxy-C-xqrkKi.js';
|
|
30
|
+
import './keyPolicy-Cp0FntZl.js';
|
|
@@ -1,40 +1,53 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true});
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
require('../chunk-SPVWWUHX.cjs');
|
|
4
|
+
var _chunkDKPXN34Vcjs = require('../chunk-DKPXN34V.cjs');
|
|
6
5
|
require('../chunk-HQP3K7PU.cjs');
|
|
7
6
|
require('../chunk-FZ46M34D.cjs');
|
|
8
|
-
require('../chunk-46ZIFWYG.cjs');
|
|
9
|
-
require('../chunk-GBHYAGX3.cjs');
|
|
10
7
|
require('../chunk-3OPYJG76.cjs');
|
|
11
|
-
require('../chunk-
|
|
12
|
-
require('../chunk-7YN22L2H.cjs');
|
|
13
|
-
require('../chunk-2DCNB7DF.cjs');
|
|
14
|
-
require('../chunk-C72S6TTV.cjs');
|
|
8
|
+
require('../chunk-RGTR7CIO.cjs');
|
|
15
9
|
require('../chunk-DWKQZ2SK.cjs');
|
|
16
10
|
require('../chunk-4VAVYUZS.cjs');
|
|
11
|
+
require('../chunk-7YN22L2H.cjs');
|
|
12
|
+
require('../chunk-SU2GCLAC.cjs');
|
|
13
|
+
require('../chunk-C72S6TTV.cjs');
|
|
17
14
|
require('../chunk-EYZYXJTJ.cjs');
|
|
18
15
|
require('../chunk-YMFAJFQT.cjs');
|
|
19
|
-
require('../chunk-
|
|
16
|
+
require('../chunk-SNYBEXLB.cjs');
|
|
17
|
+
require('../chunk-46ZIFWYG.cjs');
|
|
18
|
+
require('../chunk-GBHYAGX3.cjs');
|
|
19
|
+
require('../chunk-RPII3E6Z.cjs');
|
|
20
|
+
require('../chunk-6RPZADX3.cjs');
|
|
21
|
+
require('../chunk-QWBWGODS.cjs');
|
|
22
|
+
require('../chunk-UIBD2YY5.cjs');
|
|
20
23
|
require('../chunk-R3HK6R4B.cjs');
|
|
21
|
-
require('../chunk-
|
|
22
|
-
require('../chunk-
|
|
24
|
+
require('../chunk-HYN75H6G.cjs');
|
|
25
|
+
require('../chunk-Q27JY5RG.cjs');
|
|
23
26
|
require('../chunk-QXD4MV2X.cjs');
|
|
24
27
|
require('../chunk-NYUNU75A.cjs');
|
|
25
|
-
require('../chunk-
|
|
28
|
+
require('../chunk-VQY5W4YW.cjs');
|
|
29
|
+
require('../chunk-KFI44N2R.cjs');
|
|
26
30
|
require('../chunk-SVNDB62D.cjs');
|
|
27
|
-
require('../chunk-
|
|
28
|
-
require('../chunk-
|
|
31
|
+
require('../chunk-APYG5QD7.cjs');
|
|
32
|
+
require('../chunk-L74VDN4A.cjs');
|
|
33
|
+
require('../chunk-4YINUUKQ.cjs');
|
|
34
|
+
require('../chunk-VACWOIRE.cjs');
|
|
29
35
|
require('../chunk-QBZJ7P2T.cjs');
|
|
36
|
+
require('../chunk-4IH4EL7M.cjs');
|
|
37
|
+
require('../chunk-A2YMUCBT.cjs');
|
|
38
|
+
require('../chunk-E3UCVHLP.cjs');
|
|
39
|
+
require('../chunk-FCR77GYM.cjs');
|
|
40
|
+
require('../chunk-AEOZIDEB.cjs');
|
|
41
|
+
require('../chunk-XSVNC2UD.cjs');
|
|
30
42
|
require('../chunk-SUEGJ75D.cjs');
|
|
31
43
|
require('../chunk-RSJ3TWJQ.cjs');
|
|
32
44
|
require('../chunk-YGXJGRFI.cjs');
|
|
45
|
+
require('../chunk-OCEUVQHW.cjs');
|
|
33
46
|
require('../chunk-NZYN7C3P.cjs');
|
|
34
|
-
require('../chunk-
|
|
35
|
-
require('../chunk-6VIXXLMX.cjs');
|
|
47
|
+
require('../chunk-JMJBSACD.cjs');
|
|
36
48
|
require('../chunk-GMMT7RVN.cjs');
|
|
49
|
+
require('../chunk-UNEFIWXI.cjs');
|
|
37
50
|
|
|
38
51
|
|
|
39
52
|
|
|
40
|
-
exports.ProviderProxy =
|
|
53
|
+
exports.ProviderProxy = _chunkDKPXN34Vcjs.ProviderProxy; exports.isLoopbackAddress = _chunkDKPXN34Vcjs.isLoopbackAddress;
|