@ionite/core 0.0.23-beta.20260814.1 → 0.0.23-beta.20260825.1
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/index.d.ts +378 -185
- package/dist/index.js +1 -1
- package/dist/server.d.ts +382 -211
- package/dist/server.js +1 -1
- package/dist/shared/core-15896f6h.js +4 -0
- package/package.json +1 -1
- package/dist/shared/core-ymmjvtpm.js +0 -4
package/dist/index.d.ts
CHANGED
|
@@ -504,12 +504,11 @@ declare const warnLogger: Logger;
|
|
|
504
504
|
/** Synchronous, in-memory read surface for one code catalog entity kind. */
|
|
505
505
|
type CodeCatalogNamespace<TEntity> = {
|
|
506
506
|
get(id: string): TEntity | undefined;
|
|
507
|
-
getByExternalId(externalId: string): TEntity | undefined;
|
|
508
507
|
list(): readonly TEntity[];
|
|
509
508
|
};
|
|
510
509
|
/**
|
|
511
510
|
* Normalized, frozen code-declared catalog produced by {@link defineCatalog}. All entities are
|
|
512
|
-
* deep-frozen
|
|
511
|
+
* deep-frozen and id-indexed.
|
|
513
512
|
*/
|
|
514
513
|
type CodeCatalog = {
|
|
515
514
|
groups: CodeCatalogNamespace<Group>;
|
|
@@ -526,6 +525,7 @@ type CodeCatalogInput = {
|
|
|
526
525
|
declare function isCodeCatalog(value: CodeCatalog | CodeCatalogInput): value is CodeCatalog;
|
|
527
526
|
/** Normalize an `authz.catalog` config value: pass through a {@link CodeCatalog}, build one from input. */
|
|
528
527
|
declare function toCodeCatalog(value: CodeCatalog | CodeCatalogInput): CodeCatalog;
|
|
528
|
+
type CatalogEntityKind = "group" | "role" | "permission";
|
|
529
529
|
/**
|
|
530
530
|
* Build a validated, frozen {@link CodeCatalog} from declarative arrays. Call it once at module
|
|
531
531
|
* scope in a pure authz module (no store imports) and wire the result via
|
|
@@ -533,33 +533,52 @@ declare function toCodeCatalog(value: CodeCatalog | CodeCatalogInput): CodeCatal
|
|
|
533
533
|
*
|
|
534
534
|
* Validation (throws {@link Error} at module evaluation on the first violation):
|
|
535
535
|
* - ids are globally unique across groups, roles, AND permissions (one SCIM Groups id space);
|
|
536
|
-
* - `externalId`s (after defaulting to `id`) are globally unique (SCIM `externalId eq` contract);
|
|
537
536
|
* - every group -> group/role/permission reference (string id or embedded object) resolves to an
|
|
538
537
|
* entity declared in the catalog arrays, and every role -> permission reference likewise
|
|
539
538
|
* (`resources` refs are NOT validated here — resources live in the app's `ResourceProvider`);
|
|
540
539
|
* - nested group composition is acyclic;
|
|
541
540
|
* - `recommendedSubjectTypes` is a subset of `assignableSubjectTypes`.
|
|
542
541
|
*
|
|
543
|
-
* Side effects:
|
|
544
|
-
* entity (and its arrays/metadata) is frozen.
|
|
542
|
+
* Side effects: every entity (and its arrays/metadata) is frozen.
|
|
545
543
|
*/
|
|
546
544
|
declare function defineCatalog(input: CodeCatalogInput): CodeCatalog;
|
|
545
|
+
/** Resolve one code entity and its kind from the shared id space. */
|
|
546
|
+
declare function getCodeCatalogEntity(code: CodeCatalog | undefined, id: string): {
|
|
547
|
+
entity: Group | Role | Permission;
|
|
548
|
+
kind: CatalogEntityKind;
|
|
549
|
+
} | undefined;
|
|
550
|
+
/** Return the entity namespace for one catalog kind. */
|
|
551
|
+
declare function catalogEntityStore<TEntity extends Group | Role | Permission>(catalog: AccessCatalogStore, kind: CatalogEntityKind): EntityStore<TEntity>;
|
|
552
|
+
/**
|
|
553
|
+
* Merge a materialized row with its code template. The row owns presentation, receipts, lifecycle,
|
|
554
|
+
* and other runtime metadata; code owns ids, subject scoping, and graph/resource structure.
|
|
555
|
+
*/
|
|
556
|
+
declare function mergeCodeCatalogEntity<TEntity extends Group | Role | Permission>(kind: CatalogEntityKind, code: TEntity, stored: TEntity): TEntity;
|
|
557
|
+
/**
|
|
558
|
+
* Insert a code template into the runtime catalog only when no row exists. Existing rows are never
|
|
559
|
+
* rewritten, preserving IAM-renamed presentation and receipts. `insertIfAbsent` closes the race
|
|
560
|
+
* between the initial read and insert.
|
|
561
|
+
*/
|
|
562
|
+
declare function materializeCodeCatalogEntity<TEntity extends Group | Role | Permission>(kind: CatalogEntityKind, code: TEntity, store: EntityStore<TEntity>): Promise<TEntity>;
|
|
563
|
+
/**
|
|
564
|
+
* Mark materialized code rows as deprecated when their template no longer exists. Callers choose
|
|
565
|
+
* when to run this lifecycle sweep; it never runs during config apply.
|
|
566
|
+
*/
|
|
567
|
+
declare function deprecateRetiredCodeCatalogRows(code: CodeCatalog | undefined, store: AccessCatalogStore, onlyId?: string): Promise<void>;
|
|
547
568
|
/**
|
|
548
|
-
* {@link AccessCatalogStore}-shaped
|
|
549
|
-
*
|
|
550
|
-
*
|
|
551
|
-
* without ever being stored. Returns undefined when neither source is wired.
|
|
569
|
+
* {@link AccessCatalogStore}-shaped read union over code templates and the runtime store. Store rows
|
|
570
|
+
* win presentation for code ids, code owns their structure, and unmaterialized code entities remain
|
|
571
|
+
* visible. Returns undefined when neither source is wired.
|
|
552
572
|
*/
|
|
553
573
|
declare function unionCatalogRead(code: CodeCatalog | undefined, store: AccessCatalogStore | undefined): AccessCatalogStore | undefined;
|
|
554
574
|
import { StandardSchemaV1 as StandardSchemaV15 } from "@standard-schema/spec";
|
|
555
575
|
/**
|
|
556
|
-
* IAM delta egress mode (RemoteConfig/ECI intent). Selects how
|
|
557
|
-
* application are surfaced to the enterprise's IAM/governance layer:
|
|
576
|
+
* IAM delta egress mode (RemoteConfig/ECI intent). Selects how IAM-visible runtime changes that
|
|
577
|
+
* occur inside the application are surfaced to the enterprise's IAM/governance layer:
|
|
558
578
|
*
|
|
559
|
-
* - `'patch'`: outbound SCIM into the IAM tool (per-resource PATCH/
|
|
560
|
-
*
|
|
561
|
-
*
|
|
562
|
-
* enterprise's policy to handle). See the README "IAM delta egress" section.
|
|
579
|
+
* - `'patch'`: outbound SCIM into the IAM tool (per-resource POST/PUT/PATCH/DELETE,
|
|
580
|
+
* correlated by the App-owned id carried as SCIM `externalId`). The IAM tool's view stays fresh as users, materialized entitlement
|
|
581
|
+
* definitions, and access change in the app. See the README "IAM delta egress" section.
|
|
563
582
|
*
|
|
564
583
|
* Origin/trust: every push is authenticated with the app's outgoing workload client (OAuth bearer);
|
|
565
584
|
* the receiver treats the authenticated workload identity as the verified origin. Audit
|
|
@@ -570,55 +589,65 @@ import { StandardSchemaV1 as StandardSchemaV15 } from "@standard-schema/spec";
|
|
|
570
589
|
type IamDeltaMode = "patch";
|
|
571
590
|
/** SCIM resource types the delta patch adapter addresses. */
|
|
572
591
|
type IamDeltaResourceType = "user" | "group";
|
|
592
|
+
/** Destination-owned reference captured from a SCIM User/Group response. */
|
|
593
|
+
type DestinationReference = {
|
|
594
|
+
/** Service-provider-assigned SCIM resource id. */
|
|
595
|
+
providerId: string;
|
|
596
|
+
/** IAM-owned deep link where access to an entitlement can be requested, when supplied. */
|
|
597
|
+
requestUrl?: string;
|
|
598
|
+
};
|
|
573
599
|
/**
|
|
574
|
-
*
|
|
575
|
-
*
|
|
576
|
-
* `tenantId` for multi-tenant isolation.
|
|
600
|
+
* Full IAM delta snapshot supplied by the app's maintenance/reconcile path. It mirrors the entities
|
|
601
|
+
* visible through IAM aggregation: users, durable entitlement definitions, and active access roots.
|
|
577
602
|
*/
|
|
578
|
-
type
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
};
|
|
585
|
-
/**
|
|
586
|
-
* Durable cache of `externalId -> destination provider id` so the patch adapter resolves a resource
|
|
587
|
-
* once and reuses the id for subsequent writes (steady state = one write call, no lookup). The cache
|
|
588
|
-
* is self-healing: a stale id (destination 404/410) is re-resolved via an externalId filter and the
|
|
589
|
-
* mapping refreshed. The SDK NEVER resolves a destination resource by any attribute other than
|
|
590
|
-
* `externalId`.
|
|
591
|
-
*/
|
|
592
|
-
interface IamDeltaIdMapStore {
|
|
593
|
-
get(key: IamDeltaIdMapKey): Promise<string | undefined>;
|
|
594
|
-
set(key: IamDeltaIdMapKey, providerId: string): Promise<void>;
|
|
595
|
-
delete(key: IamDeltaIdMapKey): Promise<void>;
|
|
596
|
-
}
|
|
597
|
-
/** Result of an app-driven full reconcile (re-push of all active roots). */
|
|
603
|
+
type IamDeltaReconcileInput = {
|
|
604
|
+
users?: Iterable<BaseUser> | AsyncIterable<BaseUser>;
|
|
605
|
+
groups?: Iterable<Group> | AsyncIterable<Group>;
|
|
606
|
+
roles?: Iterable<Role> | AsyncIterable<Role>;
|
|
607
|
+
permissions?: Iterable<Permission> | AsyncIterable<Permission>;
|
|
608
|
+
access?: Iterable<AccessChange> | AsyncIterable<AccessChange>;
|
|
609
|
+
};
|
|
610
|
+
/** Result of an app-driven full reconcile (re-push of definitions, users, and active roots). */
|
|
598
611
|
type IamDeltaReconcileResult = {
|
|
599
612
|
pushed: number;
|
|
600
613
|
skipped: number;
|
|
601
614
|
errors: string[];
|
|
602
615
|
};
|
|
603
616
|
/**
|
|
604
|
-
* Projects
|
|
605
|
-
*
|
|
606
|
-
*
|
|
607
|
-
*
|
|
608
|
-
*
|
|
609
|
-
*
|
|
610
|
-
*
|
|
617
|
+
* Projects observed runtime mutations to the configured IAM delta destination. The invariant is:
|
|
618
|
+
* every runtime mutation the SDK observes that would change what IAM full sync shows must also
|
|
619
|
+
* egress through this handle. That includes users, materialized entitlement definitions, and access
|
|
620
|
+
* roots. Code templates are not pushed during config apply.
|
|
621
|
+
*
|
|
622
|
+
* Request-triggered methods resolve when projection completes (or immediately when not ready). They
|
|
623
|
+
* are best-effort egress: the SCIM mutation path awaits them inside the request, but a rejection is
|
|
624
|
+
* caught and reported as degraded egress — it never turns a committed store mutation into a SCIM
|
|
625
|
+
* error. Reactive catalog/resource events use the same methods outside a request and warn on failure.
|
|
611
626
|
*
|
|
612
627
|
* Readiness follows the shared contract: `isReady()` is a synchronous check; `ready(timeout?)`
|
|
613
628
|
* resolves once the emitter first becomes usable.
|
|
614
629
|
*/
|
|
615
630
|
interface IamDeltaEmitter {
|
|
631
|
+
/** Upsert a full SCIM User representation at the destination. */
|
|
632
|
+
onUserUpsert(user: BaseUser): Promise<void>;
|
|
633
|
+
/** Delete a destination User identified strictly by externalId. */
|
|
634
|
+
onUserDelete(externalId: string): Promise<void>;
|
|
635
|
+
/** Upsert a full SCIM Group representation for a group, role, or permission definition. */
|
|
636
|
+
onEntitlementUpsert(entity: Entitlement, type: EntitlementType): Promise<void>;
|
|
637
|
+
/** Delete a destination entitlement Group identified by the App-owned catalog id. */
|
|
638
|
+
onEntitlementDelete(type: EntitlementType, id: string): Promise<void>;
|
|
616
639
|
/** Project a granted root; resolves on completion (or immediately when not ready), rejects on push failure. */
|
|
617
640
|
onGrant(change: AccessChange): Promise<void>;
|
|
618
641
|
/** Project a revoked root; resolves on completion (or immediately when not ready), rejects on push failure. */
|
|
619
642
|
onRevoke(change: AccessChange): Promise<void>;
|
|
620
|
-
/** Re-push
|
|
621
|
-
reconcile(
|
|
643
|
+
/** Re-push the complete IAM-visible snapshot to the destination (app-driven full reconcile). */
|
|
644
|
+
reconcile(input: IamDeltaReconcileInput): Promise<IamDeltaReconcileResult>;
|
|
645
|
+
/**
|
|
646
|
+
* Read a previously captured destination reference without making a network request. Returns
|
|
647
|
+
* undefined until the resource has been resolved or pushed to the configured IAM destination.
|
|
648
|
+
* `correlationId` is a User's `externalId` or an entitlement's App-owned catalog `id`.
|
|
649
|
+
*/
|
|
650
|
+
getDestinationRef(resourceType: IamDeltaResourceType, correlationId: string): Promise<DestinationReference | undefined>;
|
|
622
651
|
isReady(): boolean;
|
|
623
652
|
ready(timeout?: number): Promise<void>;
|
|
624
653
|
}
|
|
@@ -1651,7 +1680,7 @@ interface WorkloadGetToken {
|
|
|
1651
1680
|
/**
|
|
1652
1681
|
* Workload Identity Authentication Interface
|
|
1653
1682
|
*/
|
|
1654
|
-
type Workload = WorkloadConfig & ModuleReadiness & {
|
|
1683
|
+
type Workload = WorkloadConfig & ModuleReadiness & Required<Pick<ModuleReadiness, "isReady" | "ready">> & {
|
|
1655
1684
|
/**
|
|
1656
1685
|
* Returns a token for this workload configuration.
|
|
1657
1686
|
* The optional argument overrides the configured default scope.
|
|
@@ -1737,6 +1766,11 @@ type IAMConfig = {
|
|
|
1737
1766
|
*/
|
|
1738
1767
|
inboundUsers?: IAMInboundUsersConfig;
|
|
1739
1768
|
/**
|
|
1769
|
+
* FrameworkConfig-only fallback that mints an IAM-owned deep link where access to an entitlement
|
|
1770
|
+
* can be requested. A `requestUrl` written back into the catalog row by IAM takes precedence.
|
|
1771
|
+
*/
|
|
1772
|
+
entitlementRequestUrl?: (entitlement: Entitlement, type: EntitlementType, context: IAMEntitlementRequestUrlContext) => string | undefined;
|
|
1773
|
+
/**
|
|
1740
1774
|
* Optional handler defaults. These are merged with per-call overrides in
|
|
1741
1775
|
* `iam.handler`, with per-call values taking precedence.
|
|
1742
1776
|
*/
|
|
@@ -1759,10 +1793,10 @@ type IAMConfig = {
|
|
|
1759
1793
|
* RemoteConfig/ECI intent: how access changes that occur inside the application are surfaced to the
|
|
1760
1794
|
* enterprise IAM/governance layer. Not configurable from application code.
|
|
1761
1795
|
*
|
|
1762
|
-
* `'patch'`: outbound SCIM into the IAM tool keyed
|
|
1763
|
-
* destination base and `deltaAudience` for the outgoing workload client).
|
|
1764
|
-
*
|
|
1765
|
-
*
|
|
1796
|
+
* `'patch'`: outbound SCIM into the IAM tool keyed by the App-owned catalog id carried as SCIM
|
|
1797
|
+
* `externalId` (uses `url` as the destination base and `deltaAudience` for the outgoing workload client). Every observed runtime
|
|
1798
|
+
* mutation that changes the IAM full-sync view egresses: user and entitlement upsert/delete, and
|
|
1799
|
+
* access grant/revoke. See the README "IAM delta egress" section.
|
|
1766
1800
|
*
|
|
1767
1801
|
* When omitted, delta egress is disabled. The SDK only emits the signal; the enterprise's IAM
|
|
1768
1802
|
* tooling owns the response (flag, auto-revoke + notify, or audit). See `IamDeltaMode`.
|
|
@@ -1773,12 +1807,6 @@ type IAMConfig = {
|
|
|
1773
1807
|
* pushes to the destination (`url`). When omitted, the default workload server token is used.
|
|
1774
1808
|
*/
|
|
1775
1809
|
deltaAudience?: string;
|
|
1776
|
-
/**
|
|
1777
|
-
* Durable externalId -> destination provider-id mapping store for `delta:'patch'`. Wired by the
|
|
1778
|
-
* application via `FrameworkStores.deltaIdMapStore` (a code/runtime capability, not a secret), so
|
|
1779
|
-
* the patch adapter resolves each resource once and reuses the id thereafter.
|
|
1780
|
-
*/
|
|
1781
|
-
deltaIdMapStore?: IamDeltaIdMapStore;
|
|
1782
1810
|
};
|
|
1783
1811
|
/**
|
|
1784
1812
|
* Per-endpoint enablement flag carried in RemoteConfig (Ops/ECI intent).
|
|
@@ -1786,6 +1814,10 @@ type IAMConfig = {
|
|
|
1786
1814
|
type IAMEndpointFlag = {
|
|
1787
1815
|
enabled?: boolean;
|
|
1788
1816
|
};
|
|
1817
|
+
type IAMEntitlementRequestUrlContext = {
|
|
1818
|
+
request: Request;
|
|
1819
|
+
tenantId?: string;
|
|
1820
|
+
};
|
|
1789
1821
|
type IAMValidators = {
|
|
1790
1822
|
user: StandardSchemaV15<unknown, User>;
|
|
1791
1823
|
group: StandardSchemaV15<unknown, GroupResource>;
|
|
@@ -1936,9 +1968,9 @@ interface CreateUserOptions {
|
|
|
1936
1968
|
*/
|
|
1937
1969
|
interface CreateGroupOptions {
|
|
1938
1970
|
/**
|
|
1939
|
-
*
|
|
1971
|
+
* App-owned identifier for the group. Sent to the provider as SCIM `externalId`.
|
|
1940
1972
|
*/
|
|
1941
|
-
|
|
1973
|
+
id?: string;
|
|
1942
1974
|
/**
|
|
1943
1975
|
* Initial members to add to the group
|
|
1944
1976
|
*/
|
|
@@ -2071,8 +2103,11 @@ type KmsKey = {
|
|
|
2071
2103
|
/** Personalized per-client view delivered by a secrets source. */
|
|
2072
2104
|
type KmsPoolDocument = {
|
|
2073
2105
|
kind: "kms";
|
|
2074
|
-
/**
|
|
2075
|
-
|
|
2106
|
+
/**
|
|
2107
|
+
* Granted key id per requested slot. `null` means the slot is unfilled. Omitted when the server
|
|
2108
|
+
* has no grant (and no unfilled demand) for this client.
|
|
2109
|
+
*/
|
|
2110
|
+
slots?: (string | null)[];
|
|
2076
2111
|
keys: KmsKey[];
|
|
2077
2112
|
};
|
|
2078
2113
|
type KmsAllocationStrategy = "spread" | "low-quota-first";
|
|
@@ -2081,13 +2116,79 @@ type KmsAllocationPolicy = {
|
|
|
2081
2116
|
maxHoldersPerKey?: number;
|
|
2082
2117
|
/** Grace period during which a gracefully rotated key remains accepted. Defaults to 300 seconds. */
|
|
2083
2118
|
overlapSeconds?: number;
|
|
2119
|
+
/** Allocation exclusion for a cooldown park. Defaults to 300 seconds. */
|
|
2120
|
+
cooldownSeconds?: number;
|
|
2121
|
+
/** Usable-key floor that triggers `kms_pool_low` issuer events. */
|
|
2122
|
+
minKeys?: number;
|
|
2123
|
+
/** Seconds before `notAfter` to emit `kms_key_expiring`. Defaults to 300. */
|
|
2124
|
+
expiryWarnSeconds?: number;
|
|
2125
|
+
};
|
|
2126
|
+
/** Evidence an app submits when a used KMS key failed. The SDK resolves `value` to a key id locally. */
|
|
2127
|
+
type KmsParkReport = {
|
|
2128
|
+
/** The key value the app actually used. Never sent on the wire. */
|
|
2129
|
+
value: string;
|
|
2130
|
+
/** HTTP-style status from the failed call (e.g. 429, 403). */
|
|
2131
|
+
status?: number;
|
|
2132
|
+
reason?: string;
|
|
2084
2133
|
};
|
|
2085
|
-
/**
|
|
2134
|
+
/** Server-decided park outcome. The app never classifies; the vault maps evidence to this. */
|
|
2135
|
+
type KmsParkDisposition = "cooldown" | "suspect";
|
|
2136
|
+
type KmsParkResult = {
|
|
2137
|
+
parked: boolean;
|
|
2138
|
+
/** True when the used value no longer maps to a delivered grant (already rotated away). */
|
|
2139
|
+
stale?: boolean;
|
|
2140
|
+
disposition?: KmsParkDisposition;
|
|
2141
|
+
};
|
|
2142
|
+
/** Client-to-vault park request after local value→id resolution. Never carries the secret value. */
|
|
2143
|
+
type KmsParkRequest = {
|
|
2144
|
+
keyId: string;
|
|
2145
|
+
status?: number;
|
|
2146
|
+
reason?: string;
|
|
2147
|
+
};
|
|
2148
|
+
/** Key material an issuer submits. The vault assigns `id` when omitted; issued keys enter `active`. */
|
|
2149
|
+
type KmsIssuedKey = {
|
|
2150
|
+
id?: string;
|
|
2151
|
+
value: string;
|
|
2152
|
+
notBefore?: string;
|
|
2153
|
+
notAfter?: string;
|
|
2154
|
+
meta?: Record<string, unknown>;
|
|
2155
|
+
};
|
|
2156
|
+
type KmsAddKeysRequest = {
|
|
2157
|
+
keys: KmsIssuedKey[];
|
|
2158
|
+
};
|
|
2159
|
+
type KmsAddKeysResult = {
|
|
2160
|
+
keys: {
|
|
2161
|
+
id: string;
|
|
2162
|
+
}[];
|
|
2163
|
+
};
|
|
2164
|
+
type KmsRevokeKeyRequest = {
|
|
2165
|
+
keyId: string;
|
|
2166
|
+
reason?: string;
|
|
2167
|
+
};
|
|
2168
|
+
type KmsRevokeKeyResult = {
|
|
2169
|
+
revoked: boolean;
|
|
2170
|
+
};
|
|
2171
|
+
type KmsIssuerEventName = "kms_key_parked" | "kms_key_expiring" | "kms_pool_low";
|
|
2172
|
+
type KmsIssuerEvent = {
|
|
2173
|
+
path: string;
|
|
2174
|
+
event: KmsIssuerEventName;
|
|
2175
|
+
requestId?: string;
|
|
2176
|
+
/** Metadata-only. Never the secret value. */
|
|
2177
|
+
keyId?: string;
|
|
2178
|
+
};
|
|
2179
|
+
type KmsIssuerEventListener = (event: KmsIssuerEvent) => void;
|
|
2180
|
+
/** Issuer handle for a named pool. Readiness is `configured && sourceBound`, not slot-grant readiness. */
|
|
2181
|
+
type KmsPoolIssuer = {
|
|
2182
|
+
addKeys(keys: KmsIssuedKey[], timeout?: number): Promise<KmsAddKeysResult>;
|
|
2183
|
+
revokeKey(request: KmsRevokeKeyRequest, timeout?: number): Promise<KmsRevokeKeyResult>;
|
|
2184
|
+
events(listener: KmsIssuerEventListener): () => void;
|
|
2185
|
+
isReady(): boolean;
|
|
2186
|
+
ready(timeout?: number): Promise<void>;
|
|
2187
|
+
};
|
|
2188
|
+
/** Key-material document stored by the vault. Operational assignment and policy state is external. */
|
|
2086
2189
|
type KmsPoolControlDocument = {
|
|
2087
2190
|
kind: "kms";
|
|
2088
2191
|
keys: KmsKey[];
|
|
2089
|
-
assignments: Record<string, string>;
|
|
2090
|
-
policy?: KmsAllocationPolicy;
|
|
2091
2192
|
};
|
|
2092
2193
|
/** ConfigSource-owned pointer to a KMS pool document. */
|
|
2093
2194
|
type KmsPoolConfig = {
|
|
@@ -2099,15 +2200,47 @@ type KmsPoolConfig = {
|
|
|
2099
2200
|
/** ConfigSource-owned named KMS pool declarations. */
|
|
2100
2201
|
type KmsConfig = Record<string, KmsPoolConfig>;
|
|
2101
2202
|
type KmsPoolListener = (current: KmsKey | undefined) => void;
|
|
2203
|
+
/** One requested grant slot. Under-filled slots stay not-ready until the server assigns a distinct key. */
|
|
2204
|
+
type KmsPoolSlot = {
|
|
2205
|
+
/**
|
|
2206
|
+
* Returns this slot's granted key. Calls wait on the pool's shared local subscription until a
|
|
2207
|
+
* grant is available; repeated calls resolve from the local cache and never initiate a vault request.
|
|
2208
|
+
*/
|
|
2209
|
+
value(timeout?: number): Promise<string>;
|
|
2210
|
+
/** Synchronous local-cache read. Returns `undefined` when this slot has no usable grant yet. */
|
|
2211
|
+
current(): string | undefined;
|
|
2212
|
+
/** Notifies immediately and whenever this slot's selected active key changes. */
|
|
2213
|
+
subscribe(listener: KmsPoolListener): () => void;
|
|
2214
|
+
/**
|
|
2215
|
+
* Advises the vault that `report.value` failed. Resolves the value to a key id locally and never
|
|
2216
|
+
* sends the secret on the wire. Slot form is a pool alias; value is always explicit.
|
|
2217
|
+
*/
|
|
2218
|
+
park(report: KmsParkReport, timeout?: number): Promise<KmsParkResult>;
|
|
2219
|
+
isReady(): boolean;
|
|
2220
|
+
ready(timeout?: number): Promise<void>;
|
|
2221
|
+
};
|
|
2102
2222
|
type KmsPool = {
|
|
2103
2223
|
/**
|
|
2104
|
-
* Returns the current granted key. Calls wait on one shared local subscription until a
|
|
2105
|
-
* available; repeated calls resolve from the local cache and never initiate a vault request.
|
|
2224
|
+
* Returns the current granted key for slot 0. Calls wait on one shared local subscription until a
|
|
2225
|
+
* grant is available; repeated calls resolve from the local cache and never initiate a vault request.
|
|
2106
2226
|
*/
|
|
2107
2227
|
value(timeout?: number): Promise<string>;
|
|
2108
|
-
/**
|
|
2228
|
+
/** Synchronous local-cache read of slot 0. Returns `undefined` when no usable grant is cached. */
|
|
2229
|
+
current(): string | undefined;
|
|
2230
|
+
/**
|
|
2231
|
+
* Returns `n` stable slot handles that stay distinct across rotation. Demand is the max `n`
|
|
2232
|
+
* requested in this process and never shrinks. Under-filled slots are not ready until the server
|
|
2233
|
+
* assigns a distinct key.
|
|
2234
|
+
*/
|
|
2235
|
+
unique(n: number): KmsPoolSlot[];
|
|
2236
|
+
/** Timing-safe verification against every delivered active key and usable deprecated overlap keys. */
|
|
2109
2237
|
accepts(candidate: string): boolean;
|
|
2110
|
-
/**
|
|
2238
|
+
/**
|
|
2239
|
+
* Advises the vault that `report.value` failed. Resolves the value to a key id locally (timing-safe)
|
|
2240
|
+
* and sends only the key id. A stale value (no longer in the delivered grant) is a no-op.
|
|
2241
|
+
*/
|
|
2242
|
+
park(report: KmsParkReport, timeout?: number): Promise<KmsParkResult>;
|
|
2243
|
+
/** Notifies immediately and whenever slot 0's selected active key changes. */
|
|
2111
2244
|
subscribe(listener: KmsPoolListener): () => void;
|
|
2112
2245
|
beforeChange(listener: ChangeListener): () => void;
|
|
2113
2246
|
afterChange(listener: ChangeListener): () => void;
|
|
@@ -2122,10 +2255,12 @@ type Kms = ModuleReadiness & {
|
|
|
2122
2255
|
readonly config: Readonly<KmsConfig>;
|
|
2123
2256
|
listPools(): string[];
|
|
2124
2257
|
getPool(name: string): KmsPool;
|
|
2258
|
+
/** Issuer handle for a named pool. Independent of consumer slot grants. */
|
|
2259
|
+
issuer(name: string): KmsPoolIssuer;
|
|
2125
2260
|
};
|
|
2126
2261
|
/** Parse and fail closed on a personalized KMS pool document. */
|
|
2127
2262
|
declare function parseKmsPoolDocument(value: unknown): KmsPoolDocument;
|
|
2128
|
-
/** Parse and fail closed on a
|
|
2263
|
+
/** Parse and fail closed on a vault-stored KMS key-material document. */
|
|
2129
2264
|
declare function parseKmsPoolControlDocument(value: unknown): KmsPoolControlDocument;
|
|
2130
2265
|
type OtelSignalName = "traces" | "metrics" | "logs";
|
|
2131
2266
|
type OtelProtocol = "http/protobuf" | "http/json";
|
|
@@ -2878,6 +3013,7 @@ type InferSecretType<TType> = TType extends SecretTypeDescriptor<infer T> ? T :
|
|
|
2878
3013
|
declare function defineSecretType<T>(input: SecretTypeInput<T> & {
|
|
2879
3014
|
schema: StandardSchemaV17<unknown, T>;
|
|
2880
3015
|
}): SecretTypeDescriptor<T>;
|
|
3016
|
+
declare function defineSecretType<T>(input: SecretTypeInput<T>): SecretTypeDescriptor<T>;
|
|
2881
3017
|
declare function defineSecretType(input: SecretTypeInput<unknown>): SecretTypeDescriptor<unknown>;
|
|
2882
3018
|
declare function defaultSecretContentType(format?: SecretFormat): SecretContentType;
|
|
2883
3019
|
/** Raised before decoding when a stored secret does not match the requested runtime contract. */
|
|
@@ -2906,7 +3042,7 @@ type MetaData = {
|
|
|
2906
3042
|
path: string;
|
|
2907
3043
|
version: number;
|
|
2908
3044
|
created: Date;
|
|
2909
|
-
/** Absent on
|
|
3045
|
+
/** Persisted write contract. Absent only on records written before type became mandatory. */
|
|
2910
3046
|
contentType?: SecretContentType;
|
|
2911
3047
|
};
|
|
2912
3048
|
type SecretsSourceType = "vault" | "azure" | "aws" | "gcp" | "dev";
|
|
@@ -2916,22 +3052,29 @@ type SecretLifecycleRequest = {
|
|
|
2916
3052
|
severity?: SecretRequestSeverity;
|
|
2917
3053
|
incidentRef?: string;
|
|
2918
3054
|
};
|
|
2919
|
-
type SecretEventName = "rotate_requested" | "revoke_requested" | "created" | "updated" | "deleted" | "rotated" | "revoked" | "removed" | "path_removed" | "lease_expiring_soon" | "lease_revoked" | (string & {});
|
|
3055
|
+
type SecretEventName = "rotate_requested" | "revoke_requested" | "created" | "updated" | "deleted" | "rotated" | "revoked" | "removed" | "path_removed" | "lease_expiring_soon" | "lease_revoked" | "kms_key_parked" | "kms_key_expiring" | "kms_pool_low" | (string & {});
|
|
2920
3056
|
type SecretEvent = {
|
|
2921
3057
|
path: string;
|
|
2922
3058
|
event: SecretEventName;
|
|
2923
3059
|
requestId?: string;
|
|
2924
3060
|
issuedAt?: string | number;
|
|
2925
3061
|
expiresAt?: string | number;
|
|
3062
|
+
/** Metadata-only KMS key id. Never the secret value. */
|
|
3063
|
+
keyId?: string;
|
|
2926
3064
|
};
|
|
2927
3065
|
type SecretEventListener = (event: SecretEvent) => void;
|
|
2928
3066
|
type SecretsOperationOptions = {
|
|
2929
3067
|
/** Optional timeout in milliseconds for this secrets operation. */
|
|
2930
3068
|
timeout?: number;
|
|
3069
|
+
/**
|
|
3070
|
+
* Requested distinct KMS grant slots for this client. Carried on LFV/WebSocket/HTTP KMS reads so
|
|
3071
|
+
* the vault can allocate that many unique keys. Omitted demand is treated as one slot.
|
|
3072
|
+
*/
|
|
3073
|
+
kmsSlots?: number;
|
|
2931
3074
|
};
|
|
2932
3075
|
type SecretsWriteOptions = SecretsOperationOptions & {
|
|
2933
|
-
/** Content contract stored with the secret and returned by all transports. */
|
|
2934
|
-
contentType
|
|
3076
|
+
/** Content contract stored with the secret and returned by all transports. Required on every write. */
|
|
3077
|
+
contentType: SecretContentType;
|
|
2935
3078
|
};
|
|
2936
3079
|
type SecretHandle = {
|
|
2937
3080
|
/** Reads the canonical textual representation. Binary secrets reject this accessor. */
|
|
@@ -2963,7 +3106,7 @@ type LfvCallbackHeaders = {
|
|
|
2963
3106
|
signature: string;
|
|
2964
3107
|
};
|
|
2965
3108
|
/**
|
|
2966
|
-
* Original LFV callback bytes and signature headers
|
|
3109
|
+
* Original LFV callback bytes and signature headers handed between App processes. Consumers
|
|
2967
3110
|
* MUST independently verify this envelope against their own configured `verifyJwks`; the transport
|
|
2968
3111
|
* is never a signature trust anchor.
|
|
2969
3112
|
*/
|
|
@@ -2971,24 +3114,28 @@ type LfvCallbackEnvelope = {
|
|
|
2971
3114
|
kind: LfvCallbackKind;
|
|
2972
3115
|
/** Normalized `serverUrl|path` routing key. */
|
|
2973
3116
|
key: string;
|
|
2974
|
-
/** Random process/source identity used to suppress transport echo. */
|
|
2975
|
-
originId: string;
|
|
2976
3117
|
rawBody: string;
|
|
2977
3118
|
headers: LfvCallbackHeaders;
|
|
2978
3119
|
};
|
|
2979
|
-
type LfvCallbackEnvelopeListener = (envelope: LfvCallbackEnvelope) => void | Promise<void>;
|
|
2980
3120
|
/**
|
|
2981
|
-
* Cross-process
|
|
2982
|
-
*
|
|
2983
|
-
*
|
|
3121
|
+
* Cross-process, single-consume mailbox for signed LFV OTP callbacks. The process that receives a
|
|
3122
|
+
* callback with no local waiter parks it by request id; the process that initiated the operation
|
|
3123
|
+
* takes it. TTL is mandatory so abandoned OTPs cannot accumulate.
|
|
2984
3124
|
*/
|
|
2985
3125
|
type LfvCallbackTransport = {
|
|
2986
|
-
|
|
2987
|
-
|
|
3126
|
+
put(requestId: string, envelope: LfvCallbackEnvelope, ttlMs: number): Promise<void>;
|
|
3127
|
+
take(requestId: string): Promise<LfvCallbackEnvelope | undefined>;
|
|
2988
3128
|
};
|
|
2989
3129
|
/** Framework-only LFV runtime wiring. Live transports MUST never be supplied by RemoteConfig. */
|
|
2990
3130
|
type FrameworkLfvConfig = {
|
|
2991
3131
|
callbackTransport?: LfvCallbackTransport;
|
|
3132
|
+
/**
|
|
3133
|
+
* Declare that this process is the only LFV callback receiver. Required when a manager-built
|
|
3134
|
+
* vault+lfv source is applied without `callbackTransport`. ConfigSource bootstrap LFV clients
|
|
3135
|
+
* (mirrored, vault, and lfv ConfigSources) are exempt. Never set this in a multi-replica
|
|
3136
|
+
* deployment: it opts out of the fail-closed transport gate.
|
|
3137
|
+
*/
|
|
3138
|
+
singleProcess?: boolean;
|
|
2992
3139
|
};
|
|
2993
3140
|
type SecretsSource = ReactiveHandle & ModuleReadiness & {
|
|
2994
3141
|
type: SecretsSourceType;
|
|
@@ -3000,7 +3147,7 @@ type SecretsSource = ReactiveHandle & ModuleReadiness & {
|
|
|
3000
3147
|
* Write a secret at the given path.
|
|
3001
3148
|
* Implementations may throw for read-only or unsupported secret sources.
|
|
3002
3149
|
*/
|
|
3003
|
-
putSecret: (path: string, value: Record<string, unknown>, options
|
|
3150
|
+
putSecret: (path: string, value: Record<string, unknown>, options: SecretsWriteOptions) => Promise<void>;
|
|
3004
3151
|
/**
|
|
3005
3152
|
* When set, the secret source supports change detection, reads the current value first, and calls onChange
|
|
3006
3153
|
* immediately with that value before watching for changes.
|
|
@@ -3032,6 +3179,19 @@ type SecretsSource = ReactiveHandle & ModuleReadiness & {
|
|
|
3032
3179
|
*/
|
|
3033
3180
|
requestRevoke(path: string, request?: SecretLifecycleRequest, options?: SecretsOperationOptions): Promise<void>;
|
|
3034
3181
|
/**
|
|
3182
|
+
* Advises the vault that a granted KMS key failed. Carries the resolved key id, never the value.
|
|
3183
|
+
* Non-vault sources throw not-supported.
|
|
3184
|
+
*/
|
|
3185
|
+
parkKmsKey(path: string, request: KmsParkRequest, options?: SecretsOperationOptions): Promise<KmsParkResult>;
|
|
3186
|
+
/**
|
|
3187
|
+
* Issues keys into a managed KMS pool. Non-vault sources throw not-supported.
|
|
3188
|
+
*/
|
|
3189
|
+
addKmsKeys(path: string, request: KmsAddKeysRequest, options?: SecretsOperationOptions): Promise<KmsAddKeysResult>;
|
|
3190
|
+
/**
|
|
3191
|
+
* Hard-revokes a key in a managed KMS pool. Non-vault sources throw not-supported.
|
|
3192
|
+
*/
|
|
3193
|
+
revokeKmsKey(path: string, request: KmsRevokeKeyRequest, options?: SecretsOperationOptions): Promise<KmsRevokeKeyResult>;
|
|
3194
|
+
/**
|
|
3035
3195
|
* Reads metadata for the given path.
|
|
3036
3196
|
*/
|
|
3037
3197
|
getMetadata(path: string, options?: SecretsOperationOptions): Promise<Record<string, unknown>>;
|
|
@@ -3069,7 +3229,7 @@ type Secrets = ModuleReadiness & {
|
|
|
3069
3229
|
/** Reads full secret data + metadata from a named secrets source client. */
|
|
3070
3230
|
getFullSecret<T>(sourceName: string, path: string, options?: SecretsOperationOptions): Promise<Secret<T>>;
|
|
3071
3231
|
/** Writes a secret to a named secrets source client. */
|
|
3072
|
-
putSecret(sourceName: string, path: string, value: Record<string, unknown>, options
|
|
3232
|
+
putSecret(sourceName: string, path: string, value: Record<string, unknown>, options: SecretsWriteOptions): Promise<void>;
|
|
3073
3233
|
/** Deletes a secret from a named secrets source client. */
|
|
3074
3234
|
deleteSecret(sourceName: string, path: string, options?: SecretsOperationOptions): Promise<void>;
|
|
3075
3235
|
/** Lists child paths under a base path for a named secrets source client. */
|
|
@@ -3080,6 +3240,12 @@ type Secrets = ModuleReadiness & {
|
|
|
3080
3240
|
requestRotate(sourceName: string, path: string, request?: SecretLifecycleRequest, options?: SecretsOperationOptions): Promise<void>;
|
|
3081
3241
|
/** Requests revocation for a secret path in a named secrets source client. */
|
|
3082
3242
|
requestRevoke(sourceName: string, path: string, request?: SecretLifecycleRequest, options?: SecretsOperationOptions): Promise<void>;
|
|
3243
|
+
/** Advises a named vault source that a granted KMS key failed. */
|
|
3244
|
+
parkKmsKey(sourceName: string, path: string, request: KmsParkRequest, options?: SecretsOperationOptions): Promise<KmsParkResult>;
|
|
3245
|
+
/** Issues keys into a named vault KMS pool. */
|
|
3246
|
+
addKmsKeys(sourceName: string, path: string, request: KmsAddKeysRequest, options?: SecretsOperationOptions): Promise<KmsAddKeysResult>;
|
|
3247
|
+
/** Hard-revokes a key in a named vault KMS pool. */
|
|
3248
|
+
revokeKmsKey(sourceName: string, path: string, request: KmsRevokeKeyRequest, options?: SecretsOperationOptions): Promise<KmsRevokeKeyResult>;
|
|
3083
3249
|
/** Reads metadata for a secret path in a named secrets source client. */
|
|
3084
3250
|
getMetadata(sourceName: string, path: string, options?: SecretsOperationOptions): Promise<Record<string, unknown>>;
|
|
3085
3251
|
/** Subscribes to secret changes on a named secrets source client. */
|
|
@@ -3320,7 +3486,7 @@ type AzureSecretsConfig = {
|
|
|
3320
3486
|
*/
|
|
3321
3487
|
ttl?: number;
|
|
3322
3488
|
};
|
|
3323
|
-
type ConfigSourceType = "vault" | "azure" | "aws" | "gcp";
|
|
3489
|
+
type ConfigSourceType = "vault" | "azure" | "aws" | "gcp" | "mirror";
|
|
3324
3490
|
type ConfigSourceEnv = {
|
|
3325
3491
|
ION_CONFIG_TYPE?: ConfigSourceType;
|
|
3326
3492
|
ION_VAULT_URL?: string;
|
|
@@ -3336,6 +3502,7 @@ type ConfigSourceEnv = {
|
|
|
3336
3502
|
ION_VAULT_LFV_DELIVERY_ENDPOINT?: string;
|
|
3337
3503
|
ION_VAULT_LFV_VERIFY_JWKS?: string;
|
|
3338
3504
|
ION_VAULT_LFV_EVENTS_ENDPOINT?: string;
|
|
3505
|
+
ION_VAULT_LFV_PATH?: string;
|
|
3339
3506
|
ION_VAULT_LFV_DELIVERY_TIMEOUT?: string;
|
|
3340
3507
|
ION_VAULT_LFV_RETRY_INTERVAL?: string;
|
|
3341
3508
|
ION_VAULT_LFV_WARN_INTERVAL?: string;
|
|
@@ -3360,6 +3527,8 @@ type ConfigSourceEnv = {
|
|
|
3360
3527
|
ION_AWS_WEBHOOK_URL?: string;
|
|
3361
3528
|
ION_AWS_TTL?: string;
|
|
3362
3529
|
ION_GCP_TTL?: string;
|
|
3530
|
+
/** Complete upstream ConfigLocator for `ION_CONFIG_TYPE=mirror`, using existing names after this prefix. */
|
|
3531
|
+
[key: `ION_FROM_${string}`]: string | undefined;
|
|
3363
3532
|
};
|
|
3364
3533
|
type VaultConfigLocator = {
|
|
3365
3534
|
type: "vault";
|
|
@@ -3411,30 +3580,18 @@ type GcpConfigLocator = {
|
|
|
3411
3580
|
type: "gcp";
|
|
3412
3581
|
gcpTtl?: number;
|
|
3413
3582
|
};
|
|
3414
|
-
type
|
|
3415
|
-
|
|
3416
|
-
|
|
3417
|
-
|
|
3418
|
-
|
|
3419
|
-
|
|
3420
|
-
* - `source` (optional): the name of a declared source in `ion.secrets`. When omitted, `ion.secret`
|
|
3421
|
-
* (the default config-source-backed client) is used.
|
|
3422
|
-
* - `path`: the tenant-specific secret path within that source.
|
|
3423
|
-
* - `ttl` (optional): poll interval (ms) for the tenant config subscription.
|
|
3424
|
-
*
|
|
3425
|
-
* This keeps credentials/connection wiring on the root Ionite (ConfigSource-owned) and out of the tenant
|
|
3426
|
-
* store, and forces apps to declare their secrets sources up front rather than spinning them up
|
|
3427
|
-
* ad-hoc per tenant.
|
|
3428
|
-
*/
|
|
3429
|
-
type TenantConfigLocator = {
|
|
3430
|
-
source?: string;
|
|
3431
|
-
path: string;
|
|
3432
|
-
ttl?: number;
|
|
3583
|
+
type MirrorConfigLocator = {
|
|
3584
|
+
type: "mirror";
|
|
3585
|
+
/** Authoritative upstream. Nested mirrors are rejected by runtime validation. */
|
|
3586
|
+
from: ConfigLocator;
|
|
3587
|
+
/** App-owned, write-capable mirror destination. */
|
|
3588
|
+
to: VaultConfigLocator;
|
|
3433
3589
|
};
|
|
3590
|
+
type ConfigLocator = VaultConfigLocator | AwsConfigLocator | AzureConfigLocator | GcpConfigLocator | MirrorConfigLocator;
|
|
3434
3591
|
/**
|
|
3435
|
-
* Minimal handle needed to materialize a
|
|
3436
|
-
* Structurally satisfied by an `Ionite` instance (`ion`): the default `secret` client plus
|
|
3437
|
-
*
|
|
3592
|
+
* Minimal handle needed to materialize a config source from an already-configured secrets source.
|
|
3593
|
+
* Structurally satisfied by an `Ionite` instance (`ion`): the default `secret` client plus optional
|
|
3594
|
+
* named `secrets` sources.
|
|
3438
3595
|
*/
|
|
3439
3596
|
type ConfigSourceResolver = {
|
|
3440
3597
|
secret: SecretsSource;
|
|
@@ -3519,24 +3676,22 @@ type AuthzConfig = {
|
|
|
3519
3676
|
*/
|
|
3520
3677
|
trustedProvisioningClients?: TrustedProvisioningClient[];
|
|
3521
3678
|
/**
|
|
3522
|
-
* Code-declared catalog (Framework-only; a ConfigSource can never supply it).
|
|
3523
|
-
*
|
|
3524
|
-
*
|
|
3525
|
-
*
|
|
3526
|
-
*
|
|
3527
|
-
* `defineCatalog(...)` result; validated/normalized at config apply. See `defineCatalog`.
|
|
3679
|
+
* Code-declared catalog (Framework-only; a ConfigSource can never supply it). Supplies structural
|
|
3680
|
+
* templates for code-authored groups/roles/permissions. Entries remain readable before
|
|
3681
|
+
* materialization, then `catalogStore` rows own runtime presentation and IAM receipts while code
|
|
3682
|
+
* continues to own structure. Accepts declarative arrays or a `defineCatalog(...)` result;
|
|
3683
|
+
* validated/normalized at config apply. See `defineCatalog`.
|
|
3528
3684
|
*/
|
|
3529
3685
|
catalog?: CodeCatalog | CodeCatalogInput;
|
|
3530
|
-
/**
|
|
3686
|
+
/** Runtime authority for grantable entitlement definitions, presentation, lifecycle, and IAM receipts. */
|
|
3531
3687
|
catalogStore?: AccessCatalogStore;
|
|
3532
3688
|
/** Granted roots (source of truth) used by SCIM/IAM orchestration and OAA projection. */
|
|
3533
3689
|
accessStore?: AccessAssignmentStore;
|
|
3534
3690
|
/** Derived closure index for fast `has*` checks; materialized from accessStore + catalogStore. */
|
|
3535
3691
|
accessIndex?: AccessIndex;
|
|
3536
3692
|
/**
|
|
3537
|
-
* Read-through provider over the application's own resource data (teams, projects, ...)
|
|
3538
|
-
*
|
|
3539
|
-
* {@link ResourceProvider}.
|
|
3693
|
+
* Read-through provider over the application's own resource data (teams, projects, ...). The SDK
|
|
3694
|
+
* never stores resources itself; see {@link ResourceProvider}.
|
|
3540
3695
|
*/
|
|
3541
3696
|
resources?: ResourceProvider;
|
|
3542
3697
|
/**
|
|
@@ -3578,7 +3733,7 @@ type FrameworkConfig = {
|
|
|
3578
3733
|
iam?: IAMConfig | null;
|
|
3579
3734
|
workload?: FrameworkWorkloadConfig | null;
|
|
3580
3735
|
secrets?: FrameworkSecretsModuleConfig | null;
|
|
3581
|
-
/** Framework-only
|
|
3736
|
+
/** Framework-only LFV callback wiring (`callbackTransport` and/or `singleProcess`). */
|
|
3582
3737
|
lfv?: FrameworkLfvConfig;
|
|
3583
3738
|
ciam?: CIAMConfig | null;
|
|
3584
3739
|
authz?: AuthzConfig | null;
|
|
@@ -3716,7 +3871,7 @@ type FrameworkStores = {
|
|
|
3716
3871
|
customerStore?: CustomerStore<unknown>;
|
|
3717
3872
|
accessStore?: AccessAssignmentStore<unknown>;
|
|
3718
3873
|
accessIndex?: AccessIndex;
|
|
3719
|
-
/** Code-declared catalog
|
|
3874
|
+
/** Code-declared structural catalog templates. See `AuthzConfig.catalog`. */
|
|
3720
3875
|
catalog?: CodeCatalog | CodeCatalogInput;
|
|
3721
3876
|
catalogStore?: AccessCatalogStore;
|
|
3722
3877
|
/** Read-through {@link ResourceProvider} over the app's own resource data (never SDK-stored). */
|
|
@@ -3729,11 +3884,6 @@ type FrameworkStores = {
|
|
|
3729
3884
|
* provisioned/assigned access (`subjectType: 'workload'`). Authorization works without it.
|
|
3730
3885
|
*/
|
|
3731
3886
|
workloadIdentityStore?: WorkloadIdentityStore<unknown>;
|
|
3732
|
-
/**
|
|
3733
|
-
* Durable externalId -> destination provider-id cache for IAM delta `'patch'` egress. Optional; when
|
|
3734
|
-
* absent, `delta:'patch'` reports not-ready (the adapter requires a mapping store).
|
|
3735
|
-
*/
|
|
3736
|
-
deltaIdMapStore?: IamDeltaIdMapStore;
|
|
3737
3887
|
};
|
|
3738
3888
|
type ModifiableFrameworkConfig = FrameworkConfig & {
|
|
3739
3889
|
setStores(stores: FrameworkStores): void;
|
|
@@ -4091,7 +4241,13 @@ type IoniteBase = {
|
|
|
4091
4241
|
* module (SSO, IAM, Workload, or CIAM) based on the configured URLs.
|
|
4092
4242
|
*/
|
|
4093
4243
|
handler: (request: Request) => Promise<Response>;
|
|
4094
|
-
/**
|
|
4244
|
+
/**
|
|
4245
|
+
* Returns a promise that resolves when configured at least once. With no argument it waits up to
|
|
4246
|
+
* the instance's default bound (`IoniteConfig.readyTimeoutMs`, 30s unless overridden) and then
|
|
4247
|
+
* rejects — config that never arrives is an Ops failure and should fail loudly. Pass `timeout > 0`
|
|
4248
|
+
* for an explicit bound, or `0`/`Infinity` to wait indefinitely. Module handles
|
|
4249
|
+
* (`ion.sso.ready()` etc.) keep the indefinite no-timeout feature-gate semantics.
|
|
4250
|
+
*/
|
|
4095
4251
|
ready(timeout?: number): Promise<void>;
|
|
4096
4252
|
/**
|
|
4097
4253
|
* Narrow bootstrap signal: true once RemoteConfig has been applied at least once, false otherwise.
|
|
@@ -4147,7 +4303,7 @@ type ResolvedRoute = {
|
|
|
4147
4303
|
handler: (request: Request) => Promise<Response>;
|
|
4148
4304
|
};
|
|
4149
4305
|
type RouteFilterResult = "continue" | "not_handled" | Response;
|
|
4150
|
-
/**
|
|
4306
|
+
/** Runtime routing customization hooks for `ion.handler(request)` (which never waits on readiness). */
|
|
4151
4307
|
type RoutingOptions = {
|
|
4152
4308
|
/**
|
|
4153
4309
|
* Runs before routing. Return:
|
|
@@ -4201,16 +4357,16 @@ type CreateTenantRequestBase = {
|
|
|
4201
4357
|
companyId: string;
|
|
4202
4358
|
companyName: string;
|
|
4203
4359
|
environmentType: EnvironmentType;
|
|
4204
|
-
/**
|
|
4205
|
-
configLocator
|
|
4360
|
+
/** Optional until the tenant's ConfigSource has been provisioned. */
|
|
4361
|
+
configLocator?: ConfigLocator;
|
|
4206
4362
|
email?: string;
|
|
4207
4363
|
webhookUrl?: string;
|
|
4208
4364
|
callbackUrl?: string;
|
|
4209
4365
|
};
|
|
4210
4366
|
/**
|
|
4211
|
-
* Body for creating a tenant (`POST ${basePath}`).
|
|
4212
|
-
*
|
|
4213
|
-
* re-applies the record (safe for provisioning retries).
|
|
4367
|
+
* Body for creating a tenant (`POST ${basePath}`). `configLocator` may be supplied immediately or
|
|
4368
|
+
* patched later after the tenant's ConfigSource has been provisioned. Idempotent by `id`:
|
|
4369
|
+
* re-submitting the same `id` re-applies the record (safe for provisioning retries).
|
|
4214
4370
|
*/
|
|
4215
4371
|
type CreateTenantRequest<TExtended extends object = object> = CreateTenantRequestBase & TExtended;
|
|
4216
4372
|
/**
|
|
@@ -4223,7 +4379,7 @@ type UpdateTenantRequest<TExtended extends object = object> = {
|
|
|
4223
4379
|
companyId?: string;
|
|
4224
4380
|
companyName?: string;
|
|
4225
4381
|
environmentType?: EnvironmentType;
|
|
4226
|
-
configLocator?:
|
|
4382
|
+
configLocator?: ConfigLocator;
|
|
4227
4383
|
email?: string;
|
|
4228
4384
|
webhookUrl?: string;
|
|
4229
4385
|
callbackUrl?: string;
|
|
@@ -4300,14 +4456,12 @@ type BaseTenant = {
|
|
|
4300
4456
|
createdAt: Date;
|
|
4301
4457
|
updatedAt: Date;
|
|
4302
4458
|
/**
|
|
4303
|
-
* Serializable
|
|
4304
|
-
*
|
|
4305
|
-
*
|
|
4306
|
-
* runtime presence guard.
|
|
4459
|
+
* Serializable descriptor used to materialize this tenant's ConfigSource. Tenant-management
|
|
4460
|
+
* payloads must contain only credential-free locator fields. Optional until vault/config-source
|
|
4461
|
+
* integration completes; runtime construction must reject or remain unavailable while absent.
|
|
4307
4462
|
*/
|
|
4308
|
-
configLocator
|
|
4463
|
+
configLocator?: ConfigLocator;
|
|
4309
4464
|
};
|
|
4310
|
-
type TenantFactory<TTenant extends BaseTenant = BaseTenant> = (tenant: TTenant) => Ionite;
|
|
4311
4465
|
/**
|
|
4312
4466
|
* A single-flight cache of per-tenant {@link Ionite} instances, supplied by the app.
|
|
4313
4467
|
*
|
|
@@ -4379,6 +4533,14 @@ type BaseUser<TExtended = object> = BaseUserFields & {
|
|
|
4379
4533
|
*/
|
|
4380
4534
|
externalId?: string;
|
|
4381
4535
|
/**
|
|
4536
|
+
* Optional destination service-provider id captured after IAM materializes this user.
|
|
4537
|
+
*/
|
|
4538
|
+
providerId?: string;
|
|
4539
|
+
/**
|
|
4540
|
+
* Optional IAM-owned deep link associated with this user receipt.
|
|
4541
|
+
*/
|
|
4542
|
+
requestUrl?: string;
|
|
4543
|
+
/**
|
|
4382
4544
|
* Optional Enterprise Controlled ID: a system-of-record-owned identity correlator formatted as
|
|
4383
4545
|
* `ecid:<realm>:<opaque>` (realm = the minting authority's id). Correlates this account to a
|
|
4384
4546
|
* single identity across systems. Minted by the enterprise SOR (via an ECI), never by the app;
|
|
@@ -4553,6 +4715,11 @@ interface UserStore<TExtended = object> {
|
|
|
4553
4715
|
*/
|
|
4554
4716
|
get(id: string): Promise<BaseUser<TExtended> | undefined>;
|
|
4555
4717
|
/**
|
|
4718
|
+
* Optional secondary-index lookup for the stable enterprise correlation key. Implementations that
|
|
4719
|
+
* omit it remain correct; callers fall back to paged `list()` scans.
|
|
4720
|
+
*/
|
|
4721
|
+
getByExternalId?(externalId: string): Promise<BaseUser<TExtended> | undefined>;
|
|
4722
|
+
/**
|
|
4556
4723
|
* Retrieve a user based on their SCIM attributes or SSO JWT Claims.
|
|
4557
4724
|
*
|
|
4558
4725
|
* @param user - The user to lookup by SCIM attributes or SSO JWT Claims
|
|
@@ -4588,7 +4755,12 @@ type AuthzEntityBase = {
|
|
|
4588
4755
|
name: string;
|
|
4589
4756
|
displayName?: string;
|
|
4590
4757
|
description: string;
|
|
4591
|
-
|
|
4758
|
+
/** Destination service-provider id captured after IAM materializes this entitlement. */
|
|
4759
|
+
providerId?: string;
|
|
4760
|
+
/** Provenance of the durable catalog row. Code entries are materialized with `source: 'code'`. */
|
|
4761
|
+
source?: "code" | "app" | "scim";
|
|
4762
|
+
/** A retired entitlement may be deleted by IAM after its grants have been removed. */
|
|
4763
|
+
deprecated?: boolean;
|
|
4592
4764
|
metadata?: Record<string, unknown>;
|
|
4593
4765
|
};
|
|
4594
4766
|
type Resource = AuthzEntityBase & {
|
|
@@ -4618,6 +4790,8 @@ type SubjectTypeScoping = {
|
|
|
4618
4790
|
type Permission = AuthzEntityBase & SubjectTypeScoping & {
|
|
4619
4791
|
/** True when this catalog entry should be exposed as requestable access in IAM tooling. */
|
|
4620
4792
|
requestable?: boolean;
|
|
4793
|
+
/** IAM-owned deep link where a principal can request this entitlement, when the destination provides one. */
|
|
4794
|
+
requestUrl?: string;
|
|
4621
4795
|
action?: string;
|
|
4622
4796
|
/** Canonical OAA permission types (maps to OAA `permission_type`). */
|
|
4623
4797
|
permissionTypes?: string[];
|
|
@@ -4629,12 +4803,16 @@ type Permission = AuthzEntityBase & SubjectTypeScoping & {
|
|
|
4629
4803
|
type Role = AuthzEntityBase & SubjectTypeScoping & {
|
|
4630
4804
|
/** True when this catalog entry should be exposed as requestable access in IAM tooling. */
|
|
4631
4805
|
requestable?: boolean;
|
|
4806
|
+
/** IAM-owned deep link where a principal can request this entitlement, when the destination provides one. */
|
|
4807
|
+
requestUrl?: string;
|
|
4632
4808
|
/** Permissions this role confers (definitional). Roles are flat bundles — OAA has no nested-role edge. */
|
|
4633
4809
|
permissions?: Array<string | Permission>;
|
|
4634
4810
|
};
|
|
4635
4811
|
type Group = AuthzEntityBase & SubjectTypeScoping & {
|
|
4636
4812
|
/** True when this catalog entry should be exposed as requestable access in IAM tooling. */
|
|
4637
4813
|
requestable?: boolean;
|
|
4814
|
+
/** IAM-owned deep link where a principal can request this entitlement, when the destination provides one. */
|
|
4815
|
+
requestUrl?: string;
|
|
4638
4816
|
/** Nested child groups composed into this group (definitional). */
|
|
4639
4817
|
groups?: Array<string | Group>;
|
|
4640
4818
|
/** Roles this group confers (group is the principal). Projected as OAA `local_group` role assignments. */
|
|
@@ -4667,6 +4845,14 @@ type AuthzScimGroupType = OaaAccessTargetType;
|
|
|
4667
4845
|
type AuthzScimGroupExtension = {
|
|
4668
4846
|
type?: AuthzScimGroupType;
|
|
4669
4847
|
requestable?: boolean;
|
|
4848
|
+
/** Destination service-provider id written back by IAM. */
|
|
4849
|
+
providerId?: string;
|
|
4850
|
+
/** IAM-owned deep link for requesting this entitlement. Writable by IAM. */
|
|
4851
|
+
requestUrl?: string;
|
|
4852
|
+
/** Catalog-row provenance. Read-only to IAM. */
|
|
4853
|
+
source?: "code" | "app" | "scim";
|
|
4854
|
+
/** Whether the entitlement has been retired and can be deleted. Read-only to IAM. */
|
|
4855
|
+
deprecated?: boolean;
|
|
4670
4856
|
description?: string;
|
|
4671
4857
|
/** Resource ids this entitlement is scoped to (the catalog `Group.resources` binding, by id). */
|
|
4672
4858
|
resources?: string[];
|
|
@@ -4702,23 +4888,22 @@ interface EntityStore<TEntity> {
|
|
|
4702
4888
|
* durability guarantee is required (e.g. SCIM write-through).
|
|
4703
4889
|
*/
|
|
4704
4890
|
set(entity: TEntity): ReadyAccessCatalogEntry<TEntity>;
|
|
4705
|
-
delete(id: string): Promise<void>;
|
|
4706
|
-
list(options?: ListOptions): Promise<ListResult<TEntity>>;
|
|
4707
4891
|
/**
|
|
4708
|
-
*
|
|
4709
|
-
*
|
|
4710
|
-
*
|
|
4711
|
-
* that omit it fall back to scanning `list()`.
|
|
4892
|
+
* Atomic insert-if-absent operation. Catalog materialization uses this so concurrent IAM
|
|
4893
|
+
* presentation edits can never be overwritten by a late code-template insert. Returns the
|
|
4894
|
+
* existing row when one already exists.
|
|
4712
4895
|
*/
|
|
4713
|
-
|
|
4896
|
+
insertIfAbsent(entity: TEntity): ReadyAccessCatalogEntry<TEntity>;
|
|
4897
|
+
delete(id: string): Promise<void>;
|
|
4898
|
+
list(options?: ListOptions): Promise<ListResult<TEntity>>;
|
|
4714
4899
|
}
|
|
4715
4900
|
/** The catalog entity kind a {@link CatalogChange} refers to. */
|
|
4716
4901
|
type CatalogChangeKind = OaaAccessTargetType;
|
|
4717
4902
|
/**
|
|
4718
4903
|
* A reactive catalog change emitted AFTER a durable `set()`/`delete()` lands on the backing store.
|
|
4719
|
-
* `set` carries the persisted entity
|
|
4720
|
-
*
|
|
4721
|
-
*
|
|
4904
|
+
* `set` carries the persisted entity and prior value (`undefined` on insert); `delete` carries the
|
|
4905
|
+
* removed entity so downstream projections can delete the matching provider resource after the
|
|
4906
|
+
* local row is gone. A later full sync remains the reconciliation safety net.
|
|
4722
4907
|
*
|
|
4723
4908
|
* Resource changes are NOT catalog changes: resources live in the application's own store and are
|
|
4724
4909
|
* signaled through {@link ResourceProvider.changed} instead.
|
|
@@ -4727,10 +4912,11 @@ type CatalogChange = {
|
|
|
4727
4912
|
op: "set";
|
|
4728
4913
|
kind: CatalogChangeKind;
|
|
4729
4914
|
entity: Group | Role | Permission;
|
|
4915
|
+
previous: Group | Role | Permission | undefined;
|
|
4730
4916
|
} | {
|
|
4731
4917
|
op: "delete";
|
|
4732
4918
|
kind: CatalogChangeKind;
|
|
4733
|
-
|
|
4919
|
+
entity: Group | Role | Permission;
|
|
4734
4920
|
};
|
|
4735
4921
|
/** Listener invoked with a {@link CatalogChange} after a durable catalog write lands. */
|
|
4736
4922
|
type CatalogChangeListener = (change: CatalogChange) => void;
|
|
@@ -4740,9 +4926,8 @@ type AccessCatalogStore = {
|
|
|
4740
4926
|
permissions: EntityStore<Permission>;
|
|
4741
4927
|
/**
|
|
4742
4928
|
* Reactive change subscription (the catalog analog of {@link ReactiveHandle}). When implemented,
|
|
4743
|
-
* the SDK subscribes once at wiring time and projects each change to OAA
|
|
4744
|
-
*
|
|
4745
|
-
* unsubscribe function.
|
|
4929
|
+
* the SDK subscribes once at wiring time and projects each change to OAA and ready IAM delta.
|
|
4930
|
+
* Stores that omit it rely on later full sync/reconcile. Returns an unsubscribe function.
|
|
4746
4931
|
*/
|
|
4747
4932
|
afterChange?(listener: CatalogChangeListener): () => void;
|
|
4748
4933
|
};
|
|
@@ -4759,20 +4944,8 @@ type ResourceChangeListener = (change: ResourceChange) => void;
|
|
|
4759
4944
|
* Resources are app-domain rows the application already persists in its own database/ORM — they are
|
|
4760
4945
|
* NOT authorization state, so the SDK never stores a copy. Instead the app wires a `ResourceProvider`
|
|
4761
4946
|
* (via `FrameworkStores.resources` / `AuthzConfig.resources`) and the SDK reads through it for
|
|
4762
|
-
* closure expansion
|
|
4763
|
-
*
|
|
4764
|
-
* signal) is the whole integration.
|
|
4765
|
-
*
|
|
4766
|
-
* **Resource-derived entitlements.** `entitlements(resource)` is an app-authored PURE function that
|
|
4767
|
-
* derives the per-resource requestable entitlement {@link Group}s (e.g. "Team X (member)") on demand.
|
|
4768
|
-
* Unlike catalog entitlements (definitions authored as rows in the {@link AccessCatalogStore}),
|
|
4769
|
-
* resource-derived groups are rules, not rows: their definitions are never stored, they appear in
|
|
4770
|
-
* SCIM Groups list/get and OAA projection automatically, and member grants against their ids expand
|
|
4771
|
-
* with the group's `resources` scope like any catalog group (grants against both kinds are stored
|
|
4772
|
-
* identically as access roots). Keep the function next to your catalog entitlement definitions so the
|
|
4773
|
-
* logic stays grep-able and debuggable — it is plain code the SDK calls, not configuration.
|
|
4774
|
-
* `entitlement(id)` is the deliberate, app-authored reverse resolver (derived group id -> group);
|
|
4775
|
-
* both must be provided together.
|
|
4947
|
+
* resource-scoped closure expansion and OAA projection. Grantable entitlements are durable
|
|
4948
|
+
* {@link AccessCatalogStore} rows; resource providers no longer synthesize entitlement definitions.
|
|
4776
4949
|
*/
|
|
4777
4950
|
type ResourceProvider = {
|
|
4778
4951
|
/** Point lookup by resource id (e.g. `'team:t1'`). */
|
|
@@ -4785,22 +4958,9 @@ type ResourceProvider = {
|
|
|
4785
4958
|
*/
|
|
4786
4959
|
children?(id: string): Promise<Resource[]>;
|
|
4787
4960
|
/**
|
|
4788
|
-
* Pure, synchronous derivation of a resource's requestable entitlement {@link Group}s. Called on
|
|
4789
|
-
* demand (results are memoized alongside catalog adjacency and invalidated by `changed`); must be
|
|
4790
|
-
* deterministic for a given resource. Requires `entitlement` to be provided as well.
|
|
4791
|
-
*/
|
|
4792
|
-
entitlements?(resource: Resource): Group[];
|
|
4793
|
-
/**
|
|
4794
|
-
* Reverse resolution of a resource-derived entitlement id to its {@link Group} (or `undefined`
|
|
4795
|
-
* when the id is not a resource-derived entitlement). App-authored on purpose — the id scheme is
|
|
4796
|
-
* the app's, and an explicit resolver keeps derivation traceable. Required when `entitlements` is
|
|
4797
|
-
* provided.
|
|
4798
|
-
*/
|
|
4799
|
-
entitlement?(id: string): Promise<Group | undefined>;
|
|
4800
|
-
/**
|
|
4801
4961
|
* Change signal invoked after the app's own resource write/delete lands. Drives adjacency-cache
|
|
4802
|
-
* invalidation, targeted index reconciliation, and incremental OAA resource projection. Returns
|
|
4803
|
-
* unsubscribe function. Without it, drift is only repaired by a later full reconcile/sync.
|
|
4962
|
+
* invalidation, targeted index reconciliation, and incremental OAA resource projection. Returns
|
|
4963
|
+
* an unsubscribe function. Without it, drift is only repaired by a later full reconcile/sync.
|
|
4804
4964
|
*/
|
|
4805
4965
|
changed?(listener: ResourceChangeListener): () => void;
|
|
4806
4966
|
};
|
|
@@ -5157,6 +5317,10 @@ type ReconcileReport = {
|
|
|
5157
5317
|
*/
|
|
5158
5318
|
type Authz = {
|
|
5159
5319
|
oaa: OaaClient;
|
|
5320
|
+
/** Read the effective catalog union (materialized rows plus unmaterialized code templates). */
|
|
5321
|
+
entitlements: {
|
|
5322
|
+
list(options?: ListOptions): Promise<ListResult<Entitlement>>;
|
|
5323
|
+
};
|
|
5160
5324
|
/** The wired closure index powering `has*`, when the app provided one via stores. */
|
|
5161
5325
|
accessIndex?: AccessIndex;
|
|
5162
5326
|
has(subject: AccessRef<BaseUser>, targetType: OaaAccessTargetType, target: AccessRef<Group | Role | Permission>, resource?: AccessRef<Resource>, subjectType?: SubjectType): Promise<AuthzDecision>;
|
|
@@ -5297,6 +5461,11 @@ type CapabilitiezManifest = {
|
|
|
5297
5461
|
urls: CapabilityEndpointUrls;
|
|
5298
5462
|
modules: Record<ModuleName, ModuleReadinessState>;
|
|
5299
5463
|
capabilities: Record<CapabilityKey, CapabilityState>;
|
|
5464
|
+
/**
|
|
5465
|
+
* True when FrameworkConfig wired a live LFV callback transport. Boolean only — the transport
|
|
5466
|
+
* object, Redis URL, and credentials are never exposed.
|
|
5467
|
+
*/
|
|
5468
|
+
lfvCallbackTransport: boolean;
|
|
5300
5469
|
};
|
|
5301
5470
|
/**
|
|
5302
5471
|
* Fields a {@link ConfigSource} may attach to a thrown error so the SDK can classify load/subscribe
|
|
@@ -5452,6 +5621,14 @@ declare function listGenerator<T>(listFn: (start: number, limit: number) => Prom
|
|
|
5452
5621
|
*/
|
|
5453
5622
|
declare function readyCatalogEntry<TEntity extends object>(entity: TEntity, write: Promise<void>): ReadyAccessCatalogEntry<TEntity>;
|
|
5454
5623
|
/**
|
|
5624
|
+
* Persisted content contract for an ionite RemoteConfig document.
|
|
5625
|
+
*
|
|
5626
|
+
* The descriptor intentionally omits a runtime schema because applications may extend validation
|
|
5627
|
+
* through their configured Standard Schema validators. Use `toRegistryEntry()` when writing the
|
|
5628
|
+
* secret so the serializable content metadata travels across Vault, WebSocket, and LFV transports.
|
|
5629
|
+
*/
|
|
5630
|
+
declare const remoteConfigSecretType: SecretTypeDescriptor<RemoteConfig>;
|
|
5631
|
+
/**
|
|
5455
5632
|
* Typed store-layer conflict (§5.9). Persistence stores throw this instead of a generic `Error` when
|
|
5456
5633
|
* a create/uniqueness invariant is violated, so callers (SCIM, iam-delta, app code) can distinguish a
|
|
5457
5634
|
* genuine conflict (map to HTTP 409, do not retry blindly) from a transient store/network failure
|
|
@@ -5578,12 +5755,14 @@ type IAMAppRegistry = {
|
|
|
5578
5755
|
type IAMAppValidators = {
|
|
5579
5756
|
registerIAMAppPayload: StandardSchemaV110<unknown, RegisterIAMAppPayload>;
|
|
5580
5757
|
};
|
|
5581
|
-
type LfvActionName = "read_secret" | "create_secret" | "update_secret" | "delete_secret" | "request_rotate" | "request_revoke" | "rotate_secret" | "revoke_secret" | "list_paths" | "list_secrets" | "read_metadata" | "remove_path";
|
|
5758
|
+
type LfvActionName = "read_secret" | "create_secret" | "update_secret" | "delete_secret" | "request_rotate" | "request_revoke" | "rotate_secret" | "revoke_secret" | "list_paths" | "list_secrets" | "read_metadata" | "remove_path" | "kms_park" | "kms_add_keys" | "kms_revoke_key";
|
|
5582
5759
|
type LfvOtpRequest = {
|
|
5583
5760
|
request_id: string;
|
|
5584
5761
|
path: string;
|
|
5585
5762
|
action: LfvActionName;
|
|
5586
5763
|
ttl?: number;
|
|
5764
|
+
/** Distinct KMS grant slots requested for this client. Omitted demand is treated as one slot. */
|
|
5765
|
+
kms_slots?: number;
|
|
5587
5766
|
};
|
|
5588
5767
|
type LfvOtpResponse = {
|
|
5589
5768
|
request_id: string;
|
|
@@ -5596,6 +5775,20 @@ type LfvActionRequestBase = {
|
|
|
5596
5775
|
request_id: string;
|
|
5597
5776
|
otp: string;
|
|
5598
5777
|
path: string;
|
|
5778
|
+
/** Distinct KMS grant slots requested for this client. Omitted demand is treated as one slot. */
|
|
5779
|
+
kms_slots?: number;
|
|
5780
|
+
/** Resolved KMS key id for `kms_park` / `kms_revoke_key`. Never the secret value. */
|
|
5781
|
+
key_id?: string;
|
|
5782
|
+
status?: number;
|
|
5783
|
+
reason?: string;
|
|
5784
|
+
/** Issued keys for `kms_add_keys`. */
|
|
5785
|
+
keys?: Array<{
|
|
5786
|
+
id?: string;
|
|
5787
|
+
value: string;
|
|
5788
|
+
notBefore?: string;
|
|
5789
|
+
notAfter?: string;
|
|
5790
|
+
meta?: Record<string, unknown>;
|
|
5791
|
+
}>;
|
|
5599
5792
|
};
|
|
5600
5793
|
type LfvActionAcceptedResponse = {
|
|
5601
5794
|
request_id: string;
|
|
@@ -5609,4 +5802,4 @@ type LfvErrorResponse = {
|
|
|
5609
5802
|
};
|
|
5610
5803
|
/** Generates a ULID */
|
|
5611
5804
|
declare function generateULID(prefix?: string): string;
|
|
5612
|
-
export { workloadTokenResponseSchema, withValidate, warnLogger, waitOn, version, validationFailureResponse, userSchema, unionCatalogRead, trustedClientPermissionsForPrincipal, trimTrailingSlash, tokenResponseSchema, toCodeCatalog, stripJsonComments, stableConfigHash, silentLogger, serializeConfig, readyCatalogEntry, parseKmsPoolDocument, parseKmsPoolControlDocument, parseJsonc, parseEcid, oidcCallbackSchema, normalizeTenantRoutingStrategy, normalizeTenantPathNamespace, must, mergeConfig, matchTenantPath, listGenerator, list, jwtAssertionClaimsSchema, isStoreConflictError, isEcid, isConfigSourceError, isConfigLocator, isCodeCatalog, infoLogger, idTokenClaimsSchema, groupResourceSchema, generateULID, formatEcid, defineSecretType, defineCatalog, defaultSecretContentType, defaultLogger, deepEqualPlain, decodeUser, debugLogger, configTrustedClientGrants, claimsToUser, buildTenantPath, assertValidSubjectTypeScoping, assertEcid, accessRootId, accessRefId, X509Certificate, WorkloadValidators, WorkloadTokenStore, WorkloadTokenResponse, WorkloadPrincipal, WorkloadIncomingOutgoing, WorkloadIdentityStore, WorkloadIdentity, WorkloadGetToken, WorkloadConfigMap, WorkloadConfig, WorkloadClient, Workload, WorkforceUser, VaultWorkloadAuthConfig, VaultWebSocketSecretsConfig, VaultWebSocketAuthHeader, VaultSecretsConfig, VaultLfvSecretsConfig, VaultConfigLocator, ValidateResult, UsersInboundHandlerConfig, UserStoreOptions, UserStore, UpdateTenantRequest, TrustedProvisioningClient, TrustedIdp, TokenValidationResult, TokenResponse, TenantWebhookPayload, TenantValidators, TenantStore, TenantStatus, TenantRoutingStrategy, TenantResponse, TenantPathRoutingStrategy, TenantPathNamespace, TenantPathMatch, TenantIonCache,
|
|
5805
|
+
export { workloadTokenResponseSchema, withValidate, warnLogger, waitOn, version, validationFailureResponse, userSchema, unionCatalogRead, trustedClientPermissionsForPrincipal, trimTrailingSlash, tokenResponseSchema, toCodeCatalog, stripJsonComments, stableConfigHash, silentLogger, serializeConfig, remoteConfigSecretType, readyCatalogEntry, parseKmsPoolDocument, parseKmsPoolControlDocument, parseJsonc, parseEcid, oidcCallbackSchema, normalizeTenantRoutingStrategy, normalizeTenantPathNamespace, must, mergeConfig, mergeCodeCatalogEntity, materializeCodeCatalogEntity, matchTenantPath, listGenerator, list, jwtAssertionClaimsSchema, isStoreConflictError, isEcid, isConfigSourceError, isConfigLocator, isCodeCatalog, infoLogger, idTokenClaimsSchema, groupResourceSchema, getCodeCatalogEntity, generateULID, formatEcid, deprecateRetiredCodeCatalogRows, defineSecretType, defineCatalog, defaultSecretContentType, defaultLogger, deepEqualPlain, decodeUser, debugLogger, configTrustedClientGrants, claimsToUser, catalogEntityStore, buildTenantPath, assertValidSubjectTypeScoping, assertEcid, accessRootId, accessRefId, X509Certificate, WorkloadValidators, WorkloadTokenStore, WorkloadTokenResponse, WorkloadPrincipal, WorkloadIncomingOutgoing, WorkloadIdentityStore, WorkloadIdentity, WorkloadGetToken, WorkloadConfigMap, WorkloadConfig, WorkloadClient, Workload, WorkforceUser, VaultWorkloadAuthConfig, VaultWebSocketSecretsConfig, VaultWebSocketAuthHeader, VaultSecretsConfig, VaultLfvSecretsConfig, VaultConfigLocator, ValidateResult, UsersInboundHandlerConfig, UserStoreOptions, UserStore, UpdateTenantRequest, TrustedProvisioningClient, TrustedIdp, TokenValidationResult, TokenResponse, TenantWebhookPayload, TenantValidators, TenantStore, TenantStatus, TenantRoutingStrategy, TenantResponse, TenantPathRoutingStrategy, TenantPathNamespace, TenantPathMatch, TenantIonCache, SubscriptionMode, SubjectTypeScoping, SubjectType, SubjectScope, SubjectRef, StoreConflictKind, StoreConflictError, StateCookie, StandardSchemaWithValidate, SessionStore, Session, ServerOnlyWorkloadConfig, SecretsWriteOptions, SecretsValidators, SecretsSubscriptionOptions, SecretsSourceType, SecretsSourceMap, SecretsSourceConfig, SecretsSource, SecretsOperationOptions, SecretsModuleConfig, Secrets, SecretTypeRegistryEntry, SecretTypeInput, SecretTypeDescriptor, SecretRequestSeverity, SecretLifecycleRequest, SecretHandle, SecretFormat, SecretEventName, SecretEventListener, SecretEvent, SecretContentTypeMismatchError, SecretContentType, Secret, User as ScimUser, ScimServiceProviderConfig, ScimSchemaDefinition, ScimSchemaAttributeDefinition, Role2 as ScimRole, ScimResult, ScimResourceTypeSchemaExtension, ScimResourceType, ScimMutationSummary, ScimListResponse, Group2 as ScimGroup, ScimError, ScimAuthenticationScheme, SSOValidators, SSOHandlerConfig, SSOConfigFromCode, SSOConfig, SSOAppValidators, SSOAppRegistry, SSO, RoutingOptions, RouteModule, RouteFilterResult, Role, ResourceProvider, ResourceChangeListener, ResourceChange, Resource, ResolvedVaultLfvSecretsConfig, ResolvedRoute, RequireReadyResult, RemoteConfigRetryOptions, RemoteConfigRetryHook, RemoteConfigRetryContext, RemoteConfigLoadErrorKind, RemoteConfig, RegisterSSOAppResult, RegisterSSOAppPayload, RegisterSSOAppError, RegisterIAMAppResult, RegisterIAMAppPayload, RegisterIAMAppError, ReconcileReport, ReadyzEndpointConfig, ReadyAccessCatalogEntry, ReadinessReport, ReactiveHandle, Photo, PhoneNumber, Permission, ParsedEcid, PLATFORM_ASSIGNABLE_SUBJECT_TYPES, OtelSignalName, OtelSignalConfig, OtelProviderType, OtelProtocol, OtelOAuthClientCredentialsConfig, OtelMetricsSignalConfig, OtelLogRecord, OtelLogLevel, OtelLevels, OtelConfig, OtelAttributes, OtelAttributeValue, Otel, OidcCallbackParams, OaaSyncResult, OaaSyncOptions, OaaSyncInput, OaaClient, OaaAccessTargetType, OaaAccessChangeBatchItem, Name, ModuleReadinessState, ModuleReadiness, ModuleName, ModifiableFrameworkConfig, MirrorConfigLocator, MetaData, MagicLinkStore, MagicLink, Logger, ListResult, ListOptions, ListFilter, LfvOtpResponse, LfvOtpRequest, LfvJwks, LfvErrorResponse, LfvErrorCode, LfvEd25519PublicJwk, LfvEd25519PrivateJwk, LfvCallbackTransport, LfvCallbackKind, LfvCallbackHeaders, LfvCallbackEnvelope, LfvActionRequestBase, LfvActionName, LfvActionAcceptedResponse, KmsRevokeKeyResult, KmsRevokeKeyRequest, KmsPoolSlot, KmsPoolListener, KmsPoolIssuer, KmsPoolDocument, KmsPoolControlDocument, KmsPoolConfig, KmsPool, KmsParkResult, KmsParkRequest, KmsParkReport, KmsParkDisposition, KmsKeyState, KmsKey, KmsIssuerEventName, KmsIssuerEventListener, KmsIssuerEvent, KmsIssuedKey, KmsConfig, KmsAllocationStrategy, KmsAllocationPolicy, KmsAddKeysResult, KmsAddKeysRequest, Kms, JwtBearerWorkloadConfig, JWTAssertionClaims, IoniteValidators, IoniteUserExtension, IoniteErrorOptions, IoniteError, IoniteBase, Ionite, InferSecretType, InMemoryTenantStoreOptions, IdentityResolution, IdTokenClaims, IamDeltaResourceType, IamDeltaReconcileResult, IamDeltaReconcileInput, IamDeltaMode, IamDeltaEmitter, ION_TENANT_MANAGE, ION_SDK_PERMISSIONS, ION_SCIM_USER_EXTENSION_URN, ION_IAM_USERS_WRITE, ION_IAM_READ, ION_IAM_GROUPS_WRITE, ION_ENDPOINT_PERMISSIONS, ION_CIAM_MAGIC_LINK_CREATE, ION_CAPABILITIEZ_READ, ION_AUTHZ_OAA_SYNC, ION_AUTHZ_GROUP_SCHEMA, IAMValidators, IAMUsersInbound, IAMInboundUsersConfig, IAMInboundUserContext, IAMHandlerConfig, IAMGroupsOutbound, IAMGroupsInbound, IAMDiscoveryHandlerConfig, IAMDiscoveryContext, IAMDiscoveryConfig, IAMConfigFromCode, IAMConfig, IAMAppValidators, IAMAppRegistry, IAM, GroupsInboundHandlerConfig, GroupResource, GroupMember, Group, GcpSecretsConfig, GcpConfigLocator, FrameworkWorkloadIncomingOutgoing, FrameworkWorkloadConfigFromCode, FrameworkWorkloadConfig, FrameworkStores, FrameworkSecretsSourceConfig, FrameworkSecretsModuleConfig, FrameworkOtelConfig, FrameworkLfvConfig, FrameworkConfigInput, FrameworkConfig, EnvironmentType, EntityStore, EntitlementType, Entitlement, EnterpriseExtension, EndpointPermission, EndpointOperation, Email, EgressOutcome, EgressChannelOutcome, EffectiveEdge, EcidFormatError, ECID_SCHEME, DevSecretsConfig, DestinationReference, DEFAULT_TENANT_UI_NAMESPACE, DEFAULT_TENANT_API_NAMESPACE, DEFAULT_SECRET_MIME_TYPES, CustomerStoreOptions, CustomerStore, Customer, CreateUserOptions, CreateTenantRequest, CreateGroupOptions, ConfigSubscriptionOptions, ConfigSourceType, ConfigSourceResolver, ConfigSourceErrorInit, ConfigSourceError, ConfigSourceEnv, ConfigSource, ConfigLocator, ConfigErrorKind, ConfigChangeResult, ConfigChangeOptions, ConfigChangeCallback, ConfigApplyStatus, CodeCatalogNamespace, CodeCatalogInput, CodeCatalog, ClientCredentialsWorkloadConfig, ChangeListener, CatalogEntityKind, CatalogChangeListener, CatalogChangeKind, CatalogChange, CapabilityState, CapabilityKey, CapabilityEndpointUrls, CapabilitiezManifest, CachedWorkloadToken, CacheConfig, CIAMValidators, CIAMProviderType, CIAMProviderDescriptor, CIAMProviderConfig, CIAMProviderColors, CIAMProviderBranding, CIAMConfigFromCodeInput, CIAMConfigFromCode, CIAMConfig, CIAM, BaseWorkloadIdentity, BaseUser, BaseTenant, BaseCustomer, AzureSecretsConfig, AzureConfigLocator, AzureAuthMethod, AwsSecretsConfig, AwsConfigLocator, AuthzScimGroupType, AuthzScimGroupExtension, AuthzOaaConfig, AuthzEntityBase, AuthzDecision, AuthzConfig, Authz, AuthenticatedUser, AuthenticatedPrincipal, ApplicationValidators, Address, AccessStatus, AccessRef, AccessProvenance, AccessMutationStatus, AccessMutationResult, AccessIndex, AccessCheckTarget, AccessCheckResult, AccessCheckReason, AccessChange, AccessCatalogStore, AccessAssignmentStore };
|