@farthershore/business/codegen exports
Every public export and declaration from @farthershore/business/codegen.
Every public export and declaration from @farthershore/business/codegen.
Import from @farthershore/business/codegen. This reference is extracted from the published declaration surface for version 3.2.0. Read the collection's guides for workflows, prerequisites and failure handling.
Generate the canonical functional Business SDK program for a value-model IR.
Every declaration is assigned one stable identifier and all relationships
reuse those branded refs; no stringly-typed cross-reference is emitted.
Declaration source: packages/business/dist/types/codegen/index.d.ts#L7.
export declare function irToValueModelSource(ir: ManifestIrDocument__3d04599c0d50): string;
These declarations explain types reachable from the public exports above. They are source evidence, not supported package imports. Suffixed names are documentation identifiers that preserve distinct lexical bindings. Standard-library and third-party types (for example Promise, React and Zod) remain external boundaries; their implementation declarations are not expanded here.
Declaration source: packages/business/dist/types/ir-types.d.ts#L323.
export type ActionSpecJson__e01b08e9d184 = {
id: string;
title?: string;
kind: "query" | "mutation";
actorType?: string;
subject?: {
type: string;
from: "header" | "path_param";
name: string;
};
inputSchemaRef?: string;
audit?: "none" | "metadata" | "full";
resource?: {
resource: string;
effect: "create" | "delete";
};
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L304.
export type BackendDefinitionJson__10a9a390d24d = {
name?: string;
slug?: string;
transport?: {
mode?: BackendTransportModeJson__ce5a0a6d1c03;
runner?: BackendRunnerJson__0e11128e42f5;
};
/**
* Gateway->backend request signing. Emitted for every declared backend; the
* builder helper defaults omission to `{ required: true }` (HARD default).
*/
verification?: {
required?: boolean;
};
/** Meter allow-list. Omitted = all business meters allowed. */
meters?: string[];
/** Marks the default backend when a business declares more than one. */
default?: boolean;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L303.
export type BackendRunnerJson__0e11128e42f5 = "embedded" | "sidecar";
Declaration source: packages/business/dist/types/ir-types.d.ts#L302.
export type BackendTransportModeJson__ce5a0a6d1c03 = "direct" | "tunnel";
Declaration source: packages/business/dist/types/ir-types.d.ts#L383.
export type BusinessBlockJson__a04690090fc8 = {
visibility?: "public" | "private";
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L363.
export type BusinessChangeApprovalRiskJson__e8db37f1738a = "safe" | "non_blocking" | "economic_risk" | "blocking";
Declaration source: packages/business/dist/types/ir-types.d.ts#L362.
export type BusinessCleanupPolicyModeJson__41a5ae49826e = "report" | "pull_request";
Declaration source: packages/business/dist/types/ir-types.d.ts#L375.
export type BusinessCustomerContextJson__e5b9539124a5 = {
context_tokens?: {
enabled?: boolean;
};
portal_auth?: {
strategy: CustomerPortalAuthStrategyJson__c8cec76b5a5a;
};
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L364.
export type BusinessPoliciesJson__0d51efe66230 = {
cleanup?: {
enabled?: boolean;
mode?: BusinessCleanupPolicyModeJson__41a5ae49826e;
};
change_approval?: {
auto_merge_max_risk?: "none" | "safe" | "non_blocking";
require_human_for?: BusinessChangeApprovalRiskJson__e8db37f1738a[];
};
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L395.
export type BusinessSpecJson__7ce46a3ce9fb = {
business: BusinessBlockJson__a04690090fc8;
gateway?: {
authHeader?: string;
upstreamAuth?: {
type: "none" | "static_bearer";
token?: string;
};
};
metering?: {
meters?: MeterDefinitionJson__a744b09a0a2a[];
billOn4xx?: boolean;
};
/** BYO-Backend V1 — first-class backend declarations keyed by backend id.
* Emitted only when at least one backend is declared (so single-backend /
* no-backend products keep their pre-BYOB irHash). */
backend?: Record<string, BackendDefinitionJson__10a9a390d24d>;
resources?: CountedResourceJson__90d0b7f16d08[];
/** Repo-owned custom permission subjects. Emitted (sorted by subject) only
* when at least one permission-carrying group is declared, so businesses
* without permission groups keep their pre-cutover irHash. */
permissions?: PermissionSubjectJson__d124b4a2259d[];
policies?: BusinessPoliciesJson__0d51efe66230;
customer_context?: BusinessCustomerContextJson__e5b9539124a5;
plans?: PlanSpecJson__47392a63c977[];
/** Advanced/internal platform-schema blocks (usage, billing,
* environments, lifecycle, ephemeral, …) are validated by the platform
* schema but are not authorable through the functional SDK. */
[key: string]: unknown;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L3.
export type CacheProfile__876a201699a6 = "long" | "short" | "blocking";
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L92.
export type CommerceAuthoringSnapshot__60159f2d0d70 = Readonly<{
schemaVersion: 1;
measures: readonly Readonly<{
key: string;
}>[];
dimensions: readonly Readonly<{
key: string;
values?: readonly string[];
}>[];
providers: readonly Readonly<{
key: string;
models: readonly string[];
}>[];
meters: readonly Readonly<{
key: string;
measures: readonly string[];
dimensions: readonly string[];
}>[];
pricingPolicies: readonly LoweredPricingPolicy__51372c7aeb1f[];
plans: readonly LoweredPlan__acc0ad17968f[];
meterRouteBindings: readonly Readonly<{
key: string;
/** Served route keys — ONE per declared operation of the bound `route()`
* (`servedRouteKey`: the gateway route id, e.g. `POST /v1/chat`),
* sorted. Never a bare path. */
routeKeys: readonly string[];
reports: readonly string[];
caps?: readonly Readonly<{
measurementKey: string;
maximum: number;
}>[];
maxOutputUnits?: Readonly<{
measurementKey: string;
maximum: number;
adapter?: Readonly<{
knob: "max_output_units";
parser: "json_body_max_output_units_v1";
mutator: "json_body_max_output_units_v1";
}>;
}>;
}>[];
}>;
Declaration source: packages/business/dist/types/ir-types.d.ts#L354.
export type CountedResourceCountSourceJson__7b01580d882e = "reported" | "action_inferred";
Declaration source: packages/business/dist/types/ir-types.d.ts#L355.
export type CountedResourceJson__90d0b7f16d08 = {
name: string;
display?: string;
scope?: CountedResourceScopeJson__5c4e2863f653;
subjectType?: string;
countSource?: CountedResourceCountSourceJson__7b01580d882e;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L353.
export type CountedResourceScopeJson__5c4e2863f653 = "subscription" | "subject";
Declaration source: packages/business/dist/types/ir-types.d.ts#L374.
export type CustomerPortalAuthStrategyJson__c8cec76b5a5a = "clerk" | "test-personas";
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L5.
export type ExactCatalogTiers__367557c966f6 = Readonly<{
strategy: "graduated" | "volume_retroactive";
tiers: readonly Readonly<{
upTo: string | null;
rate: ExactRate__d20ab6d469eb;
}>[];
}>;
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L13.
export type ExactQuoteBounds__e9cf817917c1 = Readonly<{
kind: "backend_quoted";
min: ExactRate__d20ab6d469eb;
max: ExactRate__d20ab6d469eb;
}>;
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L1.
export type ExactRate__d20ab6d469eb = Readonly<{
num: string;
den: string;
}>;
Declaration source: packages/business/dist/types/ir-types.d.ts#L142.
export type FrontendIntegrationBodyJson__412664c4c97a = {
kind: "none";
} | {
kind: "json";
maxBytes: number;
} | {
kind: "text";
maxBytes: number;
contentTypes: string[];
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L159.
export type FrontendIntegrationInjectionJson__0aad8e29552d = {
secretRef: string;
location: "header";
name: string;
template: "{value}" | "Bearer {value}";
} | {
secretRef: string;
location: "query";
name: string;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L141.
export type FrontendIntegrationMethodJson__404791a522ea = "GET" | "HEAD" | "POST" | "PUT" | "PATCH" | "DELETE";
Declaration source: packages/business/dist/types/ir-types.d.ts#L152.
export type FrontendIntegrationOperationJson__e8605b7d664b = {
method: FrontendIntegrationMethodJson__404791a522ea;
path: string;
headers: string[];
query: string[];
body: FrontendIntegrationBodyJson__412664c4c97a;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L170.
export type FrontendIntegrationSpecJson__46198141209a = {
id: string;
upstream: string;
request: {
operations: FrontendIntegrationOperationJson__e8605b7d664b[];
};
injection: FrontendIntegrationInjectionJson__0aad8e29552d;
response: {
kind: "json";
contentTypes: string[];
maxBytes: number;
jsonPointers: string[];
responseHeaders: string[];
};
};
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L19.
export type FundingBucketKind__eced6b195b95 = "included" | "prepaid" | "promo" | "referral";
Declaration source: packages/business/dist/types/ir-types.d.ts#L1.
export type HttpMethod__7ba25e3979be = "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | "HEAD" | "OPTIONS";
Declaration source: packages/business/dist/types/ir-types.d.ts#L40.
export type LimitScopeJson__215e4eb2041c = {
endpoint?: string;
apiKey?: string;
workspace?: string;
region?: string;
};
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L21.
export type LoweredCatalogCondition__91bc16beb904 = Readonly<{
dimensionKey: string;
value: string;
}>;
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L25.
export type LoweredCatalogItem__4eb2f217a7cb = Readonly<{
provider: string;
model: string;
}>;
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L53.
export type LoweredFundingBucket__ee3504094266 = Readonly<{
kind: FundingBucketKind__eced6b195b95;
currency: "usd";
amountMinor: number;
topUp?: boolean;
display?: Readonly<{
kind: "multiplier";
factor: number;
baseMinor: number;
}>;
}>;
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L64.
export type LoweredPlan__acc0ad17968f = Readonly<{
key: string;
kind: PlanKindName__d0fd9bcc38b8;
price?: Readonly<{
currency: "usd";
interval: "month" | "year";
recurringFeeMinor: number;
}>;
usagePricing?: Readonly<{
kind: PricingBindingKind__ff438801f484;
pricingPolicyKey: string;
version?: number;
}>;
funding?: Readonly<{
buckets: readonly LoweredFundingBucket__ee3504094266[];
}>;
lifecycle?: Readonly<{
trialDays: number;
}>;
spendPolicy?: Readonly<{
disclosure?: "opaque" | "transparent";
rail?: "x402";
onExhaustion: Readonly<{
behavior: "block" | "overage";
pricingPolicyKey?: string;
}>;
}>;
}>;
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L29.
export type LoweredPricingCatalogEntry__1d1b855a7ba8 = Readonly<{
key: string;
item?: LoweredCatalogItem__4eb2f217a7cb;
measurementKey: string;
where?: readonly LoweredCatalogCondition__91bc16beb904[];
rate?: ExactRate__d20ab6d469eb;
tiers?: ExactCatalogTiers__367557c966f6;
quote?: ExactQuoteBounds__e9cf817917c1;
}>;
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L38.
export type LoweredPricingModifier__1c95de5a5c16 = Readonly<{
multiplier: ExactRate__d20ab6d469eb;
when: Readonly<{
dimensionKey: string;
operator: "eq";
value: string;
}>;
}>;
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L46.
export type LoweredPricingPolicy__51372c7aeb1f = Readonly<{
key: string;
meterKey: string;
currency: "usd";
catalog: readonly LoweredPricingCatalogEntry__1d1b855a7ba8[];
modifiers: readonly LoweredPricingModifier__1c95de5a5c16[];
}>;
Declaration source: packages/business/dist/types/ir-types.d.ts#L425.
export type ManifestIrDocument__3d04599c0d50 = {
irVersion: 1;
sdkVersion: string;
business: BusinessSpecJson__7ce46a3ce9fb;
routes: RouteLayerJson__1ae1dfa1e3a3[];
frontendIntegrations: FrontendIntegrationSpecJson__46198141209a[];
commerce: CommerceAuthoringSnapshot__60159f2d0d70;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L4.
export type MeterDefinitionJson__a744b09a0a2a = {
key: string;
display: string;
unit?: string;
routeDefault?: number;
enforcementType?: "exact_pre_request" | "estimated_then_settled" | "postpaid" | "strict_concurrency";
aggregation?: "SUM" | "COUNT" | "MAX" | "UNIQUE_COUNT" | "LATEST";
window?: "minute" | "hour" | "day" | "month" | "billing_period";
valueProperty?: string;
uniqueProperty?: string;
groupBy?: string[];
eventCode?: string;
/** Token category this meter measures, when it is a token meter. T5 covers
* the full token-accounting vocabulary: the input/output/total axes, the
* cache axes (`cached_read_input` / `cache_creation_input`), `context`, the
* output-budget axes (`max_output` / `estimated_output` / `actual_output`),
* and `streaming_output`. Mirrors `TOKEN_CATEGORIES` in contracts. */
tokenCategory?: "input" | "output" | "total" | "cached_read_input" | "cache_creation_input" | "context" | "max_output" | "estimated_output" | "actual_output" | "streaming_output";
/** How the gateway RESERVES units for this meter on an estimate-then-settle
* path: `reserve_max` (conservative worst-case) / `estimate` (heuristic) /
* `count_actual` (no reserve). T5 — authored per token category to its
* use-case: hard quota → `reserve_max` (optionally capped by
* `reserveCeiling`); soft billing → `estimate`; spend → `reserve_max`. */
reserveStrategy?: "reserve_max" | "estimate" | "count_actual";
/** T5 — optional configured reservation CEILING (meter's native unit) for a
* conservative `reserve_max` strategy that must not hold the full theoretical
* worst case. Positive integer. Omit ⇒ unbounded worst-case reserve. */
reserveCeiling?: number;
/** Key of a meter this one is paired with (e.g. an `input` token meter pairs
* with its `output` meter) so settlement / observability correlate the pair. */
pairsWith?: string;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L2.
export type MutationClass__7be649da1488 = "runtime" | "contractual";
Declaration source: packages/business/dist/types/ir-types.d.ts#L389.
export type PermissionSubjectJson__d124b4a2259d = {
subject: string;
verbs: string[];
escalatory?: string[];
description?: string;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L108.
export type PlanArchiveJson__452830f6517f = {
at?: string;
transitionTo?: string;
strategy?: "auto" | "explicit" | "block";
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L52.
export type PlanCapacityJson__cc200bb824bb = {
maxInputTokens?: number;
maxOutputTokens?: number;
maxContextTokens?: number;
maxPayloadBytes?: number;
enforcement?: "enforce" | "track";
failMode?: "open" | "closed";
/** T9 — confidence input: `declared` (exact) vs `estimated` (tokenizer). */
tokenCountSource?: "declared" | "estimated";
/** T12 — FORWARD-COMPAT scope hint. */
scope?: LimitScopeJson__215e4eb2041c;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L66.
export type PlanKindJson__a2fffc829df1 = "free" | "flat" | "usage" | "prepaid" | "hybrid" | "trial" | "custom";
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L20.
export type PlanKindName__d0fd9bcc38b8 = "free" | "flat" | "usage" | "prepaid" | "hybrid" | "trial" | "custom";
Declaration source: packages/business/dist/types/ir-types.d.ts#L75.
export type PlanLimitJson__7fa99c13f45f = {
dimension: string;
window: PlanLimitWindowJson__34c3ba9c4506;
capacity: number;
enforcement?: "enforce" | "track";
/** A3 — optional WARN threshold as a fraction of `capacity` in [0, 1]. The
* core compiler threads it onto the emitted rate_limit / quota constraint's
* `warnAt`. Advisory only; never denies. Optional + additive. */
warnAt?: number;
strategy?: "fixed_window" | "sliding_window" | "token_bucket";
bucketCapacity?: number;
refillRatePerSecond?: number;
/** T12 — optional FORWARD-COMPAT scope hint. The core compiler threads it onto
* the emitted rate_limit / quota constraint's `scope`. v1 enforcement is
* unchanged. Optional + additive. */
scope?: LimitScopeJson__215e4eb2041c;
reset_trigger?: "billing_period" | "subscription_start";
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L67.
export type PlanLimitWindowJson__34c3ba9c4506 = {
type: "named";
name: "second" | "minute" | "hour" | "day" | "week" | "month";
} | {
type: "custom";
seconds: number;
label?: string;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L113.
export type PlanSpecJson__47392a63c977 = {
key: string;
/** The DECLARED plan kind. Required: a plan is free / flat / usage / …
* because the builder said so, never because of its shape. Usage money
* never lives on the plan; it is commerce-manifest owned. */
kind: PlanKindJson__a2fffc829df1;
description?: string;
details?: string[];
recurring_fee_cents?: number;
billing_interval?: "month" | "year";
trial_days?: number;
max_monthly_spend_cents?: number;
min_monthly_spend_cents?: number;
limits?: PlanLimitJson__7fa99c13f45f[];
/** Additive v2 direct grants using stable route ids. */
routeGrants?: string[];
/** Named managed-frontend integrations this plan permits. */
frontendIntegrationGrants?: string[];
resource_limits?: Record<string, number>;
/** A3 — per-request capacity ceiling. Compiles to a `{ kind: "capacity" }`
* ConstraintSpec the gateway enforces (413 `request_too_large`). */
capacity?: PlanCapacityJson__cc200bb824bb;
overageBehavior?: "block" | "allow_and_bill";
selfServeEnabled?: boolean;
archive?: PlanArchiveJson__452830f6517f;
/** Escape hatch: future fields ride through here. `variants` was removed and is rejected at validation. */
[key: string]: unknown;
};
Declaration source: packages/business/dist/types/commerce/lowered-types.d.ts#L18.
export type PricingBindingKind__ff438801f484 = "current" | "current_with_contract_terms" | "fixed_version";
Declaration source: packages/business/dist/types/ir-types.d.ts#L267.
export type RouteChargeableOutcomesJson__ba3a3aead9e9 = "success_only" | "success_and_partial" | "attempted" | "trusted_actual_usage_only";
Declaration source: packages/business/dist/types/ir-types.d.ts#L225.
export type RouteDefinitionJson__16a975e76419 = {
match: {
method: HttpMethod__7ba25e3979be;
path: string;
};
metering?: {
defaults?: Record<string, number>;
reports?: string[];
onStatusCodes?: string | number[];
/** The authoritative billable units arrive through the attested
* post-stream reporter. The in-band gateway event remains reserve-only. */
postStreamBilling?: boolean;
};
/** Explicit billing semantics belong to the route, not the metering block;
* contracts reparses route layers strictly enough to strip unknown nested
* keys, which would silently turn authored free operations into inferred
* billable metered operations. */
usagePolicy?: RouteUsagePolicyJson__bd930ebf5713;
unmetered?: boolean;
inheritDefaultMeters?: boolean;
action?: string;
/** Repo-owned custom permissions — stamped by lowering when this route is a
* member of a permission-carrying `fs.group`. The gateway gates the route
* on `<permissionSubject>:read|write`; metering/grant identity (`action` /
* canonical method+path) is untouched. Never authored directly on a route. */
permissionSubject?: string;
/** Repo-owned custom permissions — gateway-required verb override for this
* operation (`<permissionSubject>:<permissionVerb>` instead of the
* method-derived read/write). Present only with `permissionSubject`. */
permissionVerb?: string;
/** BYO-Backend V1 — route→backend binding id. Omitted = the sole / default
* backend (single-backend businesses stay zero-config). */
backend?: string;
/** Canonical per-route auth/timeout/retry policy (FAR-680). Omitted when no
* policy intent was authored — keeps the IR (and irHash) byte-identical. */
policy?: RoutePolicyJson__2cd59104f8e6;
/** FAR-684 — canonical per-route rate/quota overrides, normalized from
* `rateLimit` / `quota` sugar. Omitted when the route authored none — keeps
* the IR (and irHash) byte-identical. */
limits?: RouteLimitJson__077809c9f639[];
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L340.
export type RouteLayerJson__1ae1dfa1e3a3 = {
description?: string;
mutation_class?: MutationClass__7be649da1488;
cacheProfile?: CacheProfile__876a201699a6;
routes: RouteDefinitionJson__16a975e76419[];
runtime?: {
rollout_key?: string;
required_flags?: string[];
};
actions?: ActionSpecJson__e01b08e9d184[];
/** Layer-level default backend binding; exact routes may override it. */
backend?: string;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L99.
export type RouteLimitJson__077809c9f639 = {
dimension: string;
window: PlanLimitWindowJson__34c3ba9c4506;
capacity: number;
enforcement?: "enforce" | "track";
strategy?: "fixed_window" | "sliding_window" | "token_bucket";
bucketCapacity?: number;
refillRatePerSecond?: number;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L206.
export type RoutePolicyJson__2cd59104f8e6 = {
authMode?: "public" | "required";
timeoutMs?: number;
idleTimeoutMs?: number;
retry?: RouteRetryPolicyJson__6044d092c471;
/** Consumer-principal subject requirement the gateway enforces (403
* `member_subject_required` / `service_subject_required`). OMITTED when the
* route imposes no requirement ("any") — absence-vs-presence is the only
* irHash signal, so a route with no subject requirement stays byte-identical. */
subject?: "member" | "service";
/** CALLABILITY axis — allowlist of credential surfaces the gateway admits.
* OMITTED = all admitted (the implicit "hybrid" state). Emitted as a
* non-empty, deduped, canonically-sorted array so the irHash is stable. */
surfaces?: RouteSurface__b5c8a54b503c[];
/** VISIBILITY axis — true excludes the route from generated docs + grantable
* API-key scopes, and makes a callability deny return 404 (not 403). OMITTED
* when the route is visible, so a listed route stays byte-identical. */
hidden?: boolean;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L186.
export type RouteRetryOnJson__0096ba141bc1 = "network" | "5xx";
Declaration source: packages/business/dist/types/ir-types.d.ts#L189.
export type RouteRetryPolicyJson__6044d092c471 = {
maxAttempts: number;
retryOn: RouteRetryOnJson__0096ba141bc1[];
backoff: {
base: number;
max: number;
jitter: number;
};
budgetRatio: number;
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L205.
export type RouteSurface__b5c8a54b503c = "ui" | "api" | "agent" | "webhook" | "cli";
Declaration source: packages/business/dist/types/ir-types.d.ts#L278.
export type RouteTrafficClassJson__0fcb4c4bf86d = "customer_operation" | "control_plane" | "admin_internal" | "background_job" | "webhook" | "healthcheck" | "unclassified";
Declaration source: packages/business/dist/types/ir-types.d.ts#L281.
export type RouteUsagePolicyJson__bd930ebf5713 = {
trafficClass: RouteTrafficClassJson__0fcb4c4bf86d;
policySource: RouteUsagePolicySourceJson__956c2e9dd016;
limitParticipation: {
profile: RouteUsagePolicyLimitProfileJson__5436ffa8006e;
pools?: string[];
scopes?: Array<Record<string, unknown>>;
metrics?: string[];
};
customerBillingPolicy: {
customerBillable: boolean;
meterKey?: string;
chargeableOutcomes: RouteChargeableOutcomesJson__ba3a3aead9e9;
invoiceBehavior?: string;
};
providerCostPolicy: {
providerCostTracked: boolean;
declaredProviderHint?: string;
declaredModelHint?: string;
};
};
Declaration source: packages/business/dist/types/ir-types.d.ts#L280.
export type RouteUsagePolicyLimitProfileJson__5436ffa8006e = "customer_usage" | "business_capacity" | "control_plane" | "admin_internal" | "platform_abuse_only" | "healthcheck" | "none";
Declaration source: packages/business/dist/types/ir-types.d.ts#L279.
export type RouteUsagePolicySourceJson__956c2e9dd016 = "declared" | "inherited" | "defaulted" | "inferred";