@hasna/capacity 0.1.0

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.
Files changed (44) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +74 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +6663 -0
  5. package/dist/domain/authority-evidence.d.ts +198 -0
  6. package/dist/domain/catalog.d.ts +65 -0
  7. package/dist/domain/counter.d.ts +7 -0
  8. package/dist/domain/eligibility.d.ts +4 -0
  9. package/dist/domain/ids.d.ts +47 -0
  10. package/dist/domain/invariants.d.ts +4 -0
  11. package/dist/domain/models.d.ts +300 -0
  12. package/dist/domain/native-subscription.d.ts +211 -0
  13. package/dist/domain/online-generation-receipt.d.ts +497 -0
  14. package/dist/domain/state.d.ts +19 -0
  15. package/dist/errors.d.ts +26 -0
  16. package/dist/http/handler.d.ts +3 -0
  17. package/dist/http/openapi.d.ts +1070 -0
  18. package/dist/http/stores.d.ts +20 -0
  19. package/dist/http/types.d.ts +141 -0
  20. package/dist/index.d.ts +56 -0
  21. package/dist/index.js +14909 -0
  22. package/dist/sdk/index.d.ts +8 -0
  23. package/dist/sdk/local.d.ts +5 -0
  24. package/dist/sdk/remote.d.ts +2 -0
  25. package/dist/sdk/types.d.ts +107 -0
  26. package/dist/serialization/dto.d.ts +13 -0
  27. package/dist/serialization/json.d.ts +7 -0
  28. package/dist/storage/credential-use-authorizer.d.ts +9 -0
  29. package/dist/storage/credential-verifier.d.ts +13 -0
  30. package/dist/storage/effect-dispatch.d.ts +278 -0
  31. package/dist/storage/file-recovery-ledger.d.ts +66 -0
  32. package/dist/storage/memory.d.ts +47 -0
  33. package/dist/storage/native-revocation.d.ts +10 -0
  34. package/dist/storage/postgres-config.d.ts +25 -0
  35. package/dist/storage/postgres-migrations.d.ts +10 -0
  36. package/dist/storage/postgres-migrator.d.ts +12 -0
  37. package/dist/storage/postgres.d.ts +90 -0
  38. package/dist/storage/recovery.d.ts +11 -0
  39. package/dist/storage/repository.d.ts +310 -0
  40. package/dist/storage/shared.d.ts +18 -0
  41. package/dist/storage/sqlite-migrations.d.ts +11 -0
  42. package/dist/storage/sqlite.d.ts +51 -0
  43. package/dist/version.d.ts +2 -0
  44. package/package.json +49 -0
@@ -0,0 +1,198 @@
1
+ import { type KeyObject } from "node:crypto";
2
+ import { type Counter } from "./counter";
3
+ export declare const AUTHORITY_EVIDENCE_SCHEMA_VERSION: "accounts.authority-evidence.v1";
4
+ export declare const AUTHORITY_EVIDENCE_TYPES: readonly ["provider_ownership", "provider_capacity", "entitlement_execution_policy", "entitlement_terms", "entitlement_data_policy", "lane_isolation_policy", "lane_execution_policy", "lane_health"];
5
+ export type AuthorityEvidenceType = (typeof AUTHORITY_EVIDENCE_TYPES)[number];
6
+ export declare const AUTHORITY_ISSUER_CLASSES: readonly ["provider_ownership_verifier", "provider_capacity_verifier", "execution_policy_authority", "terms_authority", "adapter_health_reporter"];
7
+ export type AuthorityIssuerClass = (typeof AUTHORITY_ISSUER_CLASSES)[number];
8
+ export type AuthorityAggregateKind = "provider_account" | "capacity_pool" | "entitlement" | "account_lane";
9
+ export interface ProviderOwnershipPayload {
10
+ readonly provider_key: string;
11
+ readonly provider_subject_ref: string;
12
+ readonly owner_ref: string;
13
+ readonly identity_realm: string;
14
+ readonly ownership_generation: Counter;
15
+ }
16
+ export interface ProviderCapacityPayload {
17
+ readonly provider_account_id: string;
18
+ readonly provider_key: string;
19
+ readonly owner_ref: string;
20
+ readonly capacity_domain_ref: string;
21
+ readonly serialization_key: string;
22
+ readonly max_concurrency: Counter;
23
+ readonly decision: "allowed" | "denied";
24
+ readonly policy_version: string;
25
+ }
26
+ export interface EntitlementExecutionPolicyPayload {
27
+ readonly provider_account_id: string;
28
+ readonly owner_ref: string;
29
+ readonly provider_key: string;
30
+ readonly use_case: string;
31
+ readonly adapter_version: string;
32
+ readonly decision: "allowed" | "denied";
33
+ readonly capability_set: {
34
+ readonly operations: readonly string[];
35
+ readonly models: readonly string[];
36
+ };
37
+ readonly policy_version: string;
38
+ }
39
+ export interface EntitlementTermsPayload {
40
+ readonly provider_account_id: string;
41
+ readonly owner_ref: string;
42
+ readonly provider_key: string;
43
+ readonly use_case: string;
44
+ readonly decision: "allowed" | "denied";
45
+ readonly terms_version: string;
46
+ readonly terms_digest: string;
47
+ }
48
+ export interface EntitlementDataPolicyPayload {
49
+ readonly provider_account_id: string;
50
+ readonly owner_ref: string;
51
+ readonly provider_key: string;
52
+ readonly use_case: string;
53
+ readonly decision: "allowed" | "denied";
54
+ readonly allowed_classifications: readonly string[];
55
+ readonly retention_class: "none" | "transient" | "bounded";
56
+ readonly max_retention_days?: Counter;
57
+ readonly policy_version: string;
58
+ }
59
+ export interface LaneIsolationPolicyPayload {
60
+ readonly provider_account_id: string;
61
+ readonly entitlement_id: string;
62
+ readonly capacity_pool_id: string;
63
+ readonly owner_ref: string;
64
+ readonly adapter_key: string;
65
+ readonly adapter_version: string;
66
+ readonly access_transport: "native_session" | "api_key" | "workload_identity";
67
+ readonly decision: "allowed" | "denied";
68
+ readonly required_isolation_policy_ref?: string;
69
+ readonly required_isolation_policy_digest?: string;
70
+ readonly policy_version: string;
71
+ }
72
+ export interface LaneExecutionPolicyPayload {
73
+ readonly provider_account_id: string;
74
+ readonly entitlement_id: string;
75
+ readonly capacity_pool_id: string;
76
+ readonly owner_ref: string;
77
+ readonly adapter_key: string;
78
+ readonly adapter_version: string;
79
+ readonly access_transport: "native_session" | "api_key" | "workload_identity";
80
+ readonly decision: "allowed" | "denied";
81
+ readonly allowed_operations: readonly string[];
82
+ readonly allowed_models: readonly string[];
83
+ readonly allowed_destination_policy_classes: readonly string[];
84
+ readonly policy_version: string;
85
+ }
86
+ export interface LaneHealthPayload {
87
+ readonly provider_account_id: string;
88
+ readonly entitlement_id: string;
89
+ readonly capacity_pool_id: string;
90
+ readonly owner_ref: string;
91
+ readonly adapter_key: string;
92
+ readonly adapter_version: string;
93
+ readonly state: "healthy" | "degraded" | "unavailable" | "unknown";
94
+ readonly observed_at: string;
95
+ }
96
+ export type AuthorityEvidencePayload<Type extends AuthorityEvidenceType = AuthorityEvidenceType> = Type extends "provider_ownership" ? ProviderOwnershipPayload : Type extends "provider_capacity" ? ProviderCapacityPayload : Type extends "entitlement_execution_policy" ? EntitlementExecutionPolicyPayload : Type extends "entitlement_terms" ? EntitlementTermsPayload : Type extends "entitlement_data_policy" ? EntitlementDataPolicyPayload : Type extends "lane_isolation_policy" ? LaneIsolationPolicyPayload : Type extends "lane_execution_policy" ? LaneExecutionPolicyPayload : Type extends "lane_health" ? LaneHealthPayload : never;
97
+ type IssuerClassFor<Type extends AuthorityEvidenceType> = Type extends "provider_ownership" ? "provider_ownership_verifier" : Type extends "provider_capacity" ? "provider_capacity_verifier" : Type extends "entitlement_terms" ? "terms_authority" : Type extends "lane_health" ? "adapter_health_reporter" : "execution_policy_authority";
98
+ type AggregateKindFor<Type extends AuthorityEvidenceType> = Type extends "provider_ownership" ? "provider_account" : Type extends "provider_capacity" ? "capacity_pool" : Type extends `entitlement_${string}` ? "entitlement" : "account_lane";
99
+ export interface AuthorityEvidenceDraft<Type extends AuthorityEvidenceType = AuthorityEvidenceType> {
100
+ readonly schema_version: typeof AUTHORITY_EVIDENCE_SCHEMA_VERSION;
101
+ readonly evidence_type: Type;
102
+ readonly evidence_ref: string;
103
+ readonly subject_ref: string;
104
+ readonly aggregate_kind: AggregateKindFor<Type>;
105
+ readonly aggregate_id: string;
106
+ readonly aggregate_revision: Counter;
107
+ readonly identity_realm: string;
108
+ readonly issuer_ref: string;
109
+ readonly issuer_class: IssuerClassFor<Type>;
110
+ readonly issuer_incarnation: string;
111
+ readonly audience: string;
112
+ readonly key_id: string;
113
+ readonly issued_at: string;
114
+ readonly expires_at: string;
115
+ readonly nonce: string;
116
+ readonly evidence_generation: Counter;
117
+ readonly payload: AuthorityEvidencePayload<Type>;
118
+ }
119
+ export interface AuthorityEvidenceEnvelope<Type extends AuthorityEvidenceType = AuthorityEvidenceType> extends AuthorityEvidenceDraft<Type> {
120
+ readonly payload_digest: string;
121
+ readonly signature: string;
122
+ }
123
+ export interface AuthorityEvidenceTrustRoot {
124
+ readonly issuerRef: string;
125
+ readonly issuerClass: AuthorityIssuerClass;
126
+ readonly issuerIncarnation: string;
127
+ readonly audience: string;
128
+ readonly identityRealm: string;
129
+ readonly keyId: string;
130
+ readonly publicKey: KeyObject;
131
+ readonly revoked: boolean;
132
+ }
133
+ export interface ProviderOwnershipBinding {
134
+ readonly providerKey: string;
135
+ readonly providerSubjectRef: string;
136
+ readonly ownerRef: string;
137
+ }
138
+ export interface ProviderCapacityBinding {
139
+ readonly providerAccountId: string;
140
+ readonly providerKey: string;
141
+ readonly ownerRef: string;
142
+ readonly capacityDomainRef: string;
143
+ readonly serializationKey: string;
144
+ readonly maxConcurrency: Counter;
145
+ }
146
+ export interface EntitlementPolicyBinding {
147
+ readonly providerAccountId: string;
148
+ readonly ownerRef: string;
149
+ readonly providerKey: string;
150
+ readonly useCase: string;
151
+ }
152
+ export interface EntitlementExecutionPolicyBinding extends EntitlementPolicyBinding {
153
+ readonly adapterVersion: string;
154
+ }
155
+ export interface LanePolicyBinding {
156
+ readonly providerAccountId: string;
157
+ readonly entitlementId: string;
158
+ readonly capacityPoolId: string;
159
+ readonly ownerRef: string;
160
+ readonly adapterKey: string;
161
+ readonly adapterVersion: string;
162
+ readonly accessTransport: "native_session" | "api_key" | "workload_identity";
163
+ }
164
+ export interface LaneHealthBinding {
165
+ readonly providerAccountId: string;
166
+ readonly entitlementId: string;
167
+ readonly capacityPoolId: string;
168
+ readonly ownerRef: string;
169
+ readonly adapterKey: string;
170
+ readonly adapterVersion: string;
171
+ }
172
+ export type AuthorityEvidenceBinding<Type extends AuthorityEvidenceType = AuthorityEvidenceType> = Type extends "provider_ownership" ? ProviderOwnershipBinding : Type extends "provider_capacity" ? ProviderCapacityBinding : Type extends "entitlement_execution_policy" ? EntitlementExecutionPolicyBinding : Type extends "entitlement_terms" | "entitlement_data_policy" ? EntitlementPolicyBinding : Type extends "lane_isolation_policy" | "lane_execution_policy" ? LanePolicyBinding : Type extends "lane_health" ? LaneHealthBinding : never;
173
+ export interface AuthorityEvidenceExpectation<Type extends AuthorityEvidenceType = AuthorityEvidenceType> {
174
+ readonly evidenceType: Type;
175
+ readonly subjectRef: string;
176
+ readonly aggregateKind: AggregateKindFor<Type>;
177
+ readonly aggregateId: string;
178
+ readonly aggregateRevision: Counter;
179
+ readonly identityRealm: string;
180
+ readonly evidenceGeneration: Counter;
181
+ readonly nonce: string;
182
+ readonly now: Date;
183
+ readonly maximumAgeMs: number;
184
+ readonly maximumLifetimeMs: number;
185
+ readonly allowedClockSkewMs?: number;
186
+ readonly binding: AuthorityEvidenceBinding<Type>;
187
+ }
188
+ /**
189
+ * Verifies an immutable, canonical signed authority envelope against a trust root
190
+ * selected by deployment configuration and the exact aggregate being promoted.
191
+ */
192
+ export declare function verifyAuthorityEvidence<Type extends AuthorityEvidenceType>(source: Uint8Array, trust: AuthorityEvidenceTrustRoot, expectation: AuthorityEvidenceExpectation<Type>): AuthorityEvidenceEnvelope<Type>;
193
+ /**
194
+ * Test-fixture helper only. Keep this internal module out of the package export map.
195
+ * Production signers must live behind their separately authorized issuer service.
196
+ */
197
+ export declare function signAuthorityEvidenceForTest<Type extends AuthorityEvidenceType>(input: AuthorityEvidenceDraft<Type>, privateKey: KeyObject): Uint8Array;
198
+ export {};
@@ -0,0 +1,65 @@
1
+ import type { AccountsRepository, CredentialHandleEnvelope, CredentialResolutionGrant, CredentialResolutionTransport, MutationContext, MutationResult, NativeRevocationRequest, OutboxAcknowledgeRequest, OutboxClaimRequest } from "../storage/repository";
2
+ import { type Counter } from "./counter";
3
+ import type { EntityKind, EntityMap } from "./models";
4
+ import type { EligibilityRequest, SlotEligibilityMetadata } from "./models";
5
+ import { type AuthorityEvidenceTrustRoot, type AuthorityEvidenceType } from "./authority-evidence";
6
+ export interface AuthorityEvidencePolicy {
7
+ readonly trustRoots: ReadonlyMap<AuthorityEvidenceType, AuthorityEvidenceTrustRoot>;
8
+ readonly identityRealm: string;
9
+ readonly maximumAgeMs: number;
10
+ readonly maximumLifetimeMs: number;
11
+ readonly allowedClockSkewMs?: number;
12
+ }
13
+ export interface EvidenceFence {
14
+ readonly nonce: string;
15
+ readonly evidenceGeneration: Counter;
16
+ }
17
+ export interface EntitlementEvidenceBundle {
18
+ readonly executionPolicy: Uint8Array;
19
+ readonly executionPolicyFence: EvidenceFence;
20
+ readonly terms: Uint8Array;
21
+ readonly termsFence: EvidenceFence;
22
+ readonly dataPolicy: Uint8Array;
23
+ readonly dataPolicyFence: EvidenceFence;
24
+ readonly useCase: string;
25
+ readonly adapterVersion: string;
26
+ }
27
+ export interface LaneEvidenceBundle {
28
+ readonly isolationPolicy: Uint8Array;
29
+ readonly isolationPolicyFence: EvidenceFence;
30
+ readonly executionPolicy: Uint8Array;
31
+ readonly executionPolicyFence: EvidenceFence;
32
+ readonly health: Uint8Array;
33
+ readonly healthFence: EvidenceFence;
34
+ }
35
+ export declare class AccountsCatalog {
36
+ private readonly repository;
37
+ private readonly now;
38
+ private readonly authorityPolicy?;
39
+ private mutationTail;
40
+ constructor(repository: AccountsRepository, now?: () => Date, authorityPolicy?: AuthorityEvidencePolicy | undefined);
41
+ get<K extends EntityKind>(kind: K, id: EntityMap[K]["id"]): Promise<EntityMap[K]>;
42
+ list<K extends EntityKind>(kind: K): Promise<readonly EntityMap[K][]>;
43
+ add<K extends EntityKind>(kind: K, record: EntityMap[K], context: MutationContext): Promise<MutationResult<EntityMap[K]>>;
44
+ addCapacityPoolFromEvidence(record: EntityMap["capacity_pool"], evidence: Uint8Array, fence: EvidenceFence, context: MutationContext): Promise<MutationResult<EntityMap["capacity_pool"]>>;
45
+ addCredentialBinding(record: EntityMap["credential_binding"], handle: CredentialHandleEnvelope, context: MutationContext): Promise<MutationResult<EntityMap["credential_binding"]>>;
46
+ activateProviderAccount(candidate: EntityMap["account"], evidence: Uint8Array, fence: EvidenceFence, expectedRevision: Counter, context: MutationContext): Promise<MutationResult<EntityMap["account"]>>;
47
+ activateEntitlement(candidate: EntityMap["entitlement"], bundle: EntitlementEvidenceBundle, expectedRevision: Counter, context: MutationContext): Promise<MutationResult<EntityMap["entitlement"]>>;
48
+ activateAccessMethod(candidate: EntityMap["access_method"], bundle: LaneEvidenceBundle, expectedRevision: Counter, context: MutationContext): Promise<MutationResult<EntityMap["access_method"]>>;
49
+ resolveCredentialHandle(bindingId: EntityMap["credential_binding"]["id"], grant: CredentialResolutionGrant, transport: CredentialResolutionTransport): Promise<import("../storage/repository").ResolvedCredentialHandle>;
50
+ revokeNativeGeneration(request: NativeRevocationRequest): Promise<import("../storage/repository").NativeRevocationResult>;
51
+ credentialOperations(): Promise<readonly import("./models").CredentialOperation[]>;
52
+ outbox(): Promise<readonly import("../storage/repository").OutboxRecord[]>;
53
+ claimOutbox(request: OutboxClaimRequest): Promise<readonly import("../storage/repository").OutboxRecord[]>;
54
+ acknowledgeOutbox(request: OutboxAcknowledgeRequest): Promise<import("../storage/repository").OutboxRecord>;
55
+ transition<K extends EntityKind>(kind: K, id: EntityMap[K]["id"], to: EntityMap[K]["status"], expectedRevision: Counter, context: MutationContext): Promise<MutationResult<EntityMap[K]>>;
56
+ eligibility(request: EligibilityRequest): Promise<SlotEligibilityMetadata>;
57
+ checkCurrent(evidence: SlotEligibilityMetadata, request: EligibilityRequest): Promise<SlotEligibilityMetadata>;
58
+ doctor(): Promise<import("../storage/repository").RepositoryDoctor>;
59
+ close(): Promise<void>;
60
+ private assertTransitionPreconditions;
61
+ private nextTimestamp;
62
+ private verifyEvidence;
63
+ private evidenceRecord;
64
+ private runMutation;
65
+ }
@@ -0,0 +1,7 @@
1
+ import type { Brand } from "./ids";
2
+ export type Counter = Brand<string, "Counter">;
3
+ export declare const MAX_COUNTER = 9223372036854775807n;
4
+ export declare function parseCounter(value: unknown, field?: string): Counter;
5
+ export declare function counter(value: bigint): Counter;
6
+ export declare function incrementCounter(value: Counter): Counter;
7
+ export declare function compareCounters(left: Counter, right: Counter): -1 | 0 | 1;
@@ -0,0 +1,4 @@
1
+ import type { AccountsRepository } from "../storage/repository";
2
+ import type { EligibilityRequest, SlotEligibilityMetadata } from "./models";
3
+ export declare function evaluateSlotEligibility(repository: AccountsRepository, request: EligibilityRequest, clock?: () => Date): Promise<SlotEligibilityMetadata>;
4
+ export declare function checkCurrentEligibility(repository: AccountsRepository, previous: SlotEligibilityMetadata, request: EligibilityRequest, clock?: () => Date): Promise<SlotEligibilityMetadata>;
@@ -0,0 +1,47 @@
1
+ declare const brand: unique symbol;
2
+ export type Brand<T, Name extends string> = T & {
3
+ readonly [brand]: Name;
4
+ };
5
+ export type AccountId = Brand<string, "AccountId">;
6
+ export type ProviderAccountId = AccountId;
7
+ export type EntitlementId = Brand<string, "EntitlementId">;
8
+ export type CapacityPoolId = Brand<string, "CapacityPoolId">;
9
+ export type AccessMethodId = Brand<string, "AccessMethodId">;
10
+ export type AccountLaneId = AccessMethodId;
11
+ export type AuthCapsuleId = Brand<string, "AuthCapsuleId">;
12
+ export type CanonicalNodeId = Brand<string, "CanonicalNodeId">;
13
+ export type CredentialBindingId = Brand<string, "CredentialBindingId">;
14
+ export type CredentialOperationId = Brand<string, "CredentialOperationId">;
15
+ export type EligibilityEvidenceId = Brand<string, "EligibilityEvidenceId">;
16
+ export type AccountEventId = Brand<string, "AccountEventId">;
17
+ export type OutboxId = Brand<string, "OutboxId">;
18
+ export type EntityId = AccountId | EntitlementId | CapacityPoolId | AccessMethodId | AuthCapsuleId | CredentialBindingId;
19
+ export type IdKind = "account" | "entitlement" | "capacity_pool" | "access_method" | "auth_capsule" | "canonical_node" | "credential_binding" | "credential_operation" | "eligibility_evidence" | "account_event" | "outbox";
20
+ export declare function isUuidV7(value: string): boolean;
21
+ export declare function generateUuidV7(nowMs?: number): string;
22
+ export declare const parseAccountId: (value: unknown) => AccountId;
23
+ export declare const parseProviderAccountId: (value: unknown) => AccountId;
24
+ export declare const parseEntitlementId: (value: unknown) => EntitlementId;
25
+ export declare const parseCapacityPoolId: (value: unknown) => CapacityPoolId;
26
+ export declare const parseAccessMethodId: (value: unknown) => AccessMethodId;
27
+ export declare const parseAccountLaneId: (value: unknown) => AccessMethodId;
28
+ export declare const parseAuthCapsuleId: (value: unknown) => AuthCapsuleId;
29
+ export declare const parseCanonicalNodeId: (value: unknown) => CanonicalNodeId;
30
+ export declare const parseCredentialBindingId: (value: unknown) => CredentialBindingId;
31
+ export declare const parseCredentialOperationId: (value: unknown) => CredentialOperationId;
32
+ export declare const parseEligibilityEvidenceId: (value: unknown) => EligibilityEvidenceId;
33
+ export declare const parseAccountEventId: (value: unknown) => AccountEventId;
34
+ export declare const parseOutboxId: (value: unknown) => OutboxId;
35
+ export declare const newAccountId: (nowMs?: number) => AccountId;
36
+ export declare const newProviderAccountId: (nowMs?: number) => AccountId;
37
+ export declare const newEntitlementId: (nowMs?: number) => EntitlementId;
38
+ export declare const newCapacityPoolId: (nowMs?: number) => CapacityPoolId;
39
+ export declare const newAccessMethodId: (nowMs?: number) => AccessMethodId;
40
+ export declare const newAccountLaneId: (nowMs?: number) => AccessMethodId;
41
+ export declare const newAuthCapsuleId: (nowMs?: number) => AuthCapsuleId;
42
+ export declare const newCredentialBindingId: (nowMs?: number) => CredentialBindingId;
43
+ export declare const newCredentialOperationId: (nowMs?: number) => CredentialOperationId;
44
+ export declare const newEligibilityEvidenceId: (nowMs?: number) => EligibilityEvidenceId;
45
+ export declare const newAccountEventId: (nowMs?: number) => AccountEventId;
46
+ export declare const newOutboxId: (nowMs?: number) => OutboxId;
47
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { AccountsRepository } from "../storage/repository";
2
+ import type { EntityKind, EntityMap } from "./models";
3
+ export declare function assertInitialRecord<K extends EntityKind>(kind: K, record: EntityMap[K]): void;
4
+ export declare function assertInsertInvariants<K extends EntityKind>(repository: AccountsRepository, kind: K, record: EntityMap[K]): Promise<void>;
@@ -0,0 +1,300 @@
1
+ import type { Counter } from "./counter";
2
+ import type { AccessMethodId, AccountId, AuthCapsuleId, CanonicalNodeId, CapacityPoolId, CredentialBindingId, CredentialOperationId, EligibilityEvidenceId, EntitlementId } from "./ids";
3
+ export declare const ACCOUNTS_CAPACITY_SCHEMA_VERSION: "accounts.capacity.v1";
4
+ export interface RecordBase<Id extends string> {
5
+ readonly id: Id;
6
+ readonly revision: Counter;
7
+ readonly createdAt: string;
8
+ readonly updatedAt: string;
9
+ }
10
+ export type AccountStatus = "pending" | "active" | "suspended" | "revoked";
11
+ export interface Account extends RecordBase<AccountId> {
12
+ readonly providerKey: string;
13
+ readonly ownerRef: string;
14
+ readonly displayLabel: string;
15
+ readonly providerSubjectRef?: string;
16
+ readonly providerSubjectCandidateRef?: string;
17
+ readonly ownershipEvidenceRef?: string;
18
+ readonly ownershipEvidenceIssuerRef?: string;
19
+ readonly ownershipEvidenceVersion?: string;
20
+ readonly ownershipEvidenceDigest?: string;
21
+ readonly ownershipEvidenceIssuedAt?: string;
22
+ readonly ownershipEvidenceExpiresAt?: string;
23
+ readonly ownershipGeneration?: Counter;
24
+ readonly providerDisplayHint?: string;
25
+ readonly status: AccountStatus;
26
+ }
27
+ export type ProviderAccount = Account;
28
+ export type FundingKind = "subscription" | "metered" | "credit" | "contract" | "externally_managed";
29
+ export type EntitlementStatus = "pending" | "active" | "paused" | "expired" | "revoked";
30
+ export interface TermsDecision {
31
+ readonly decision: "allowed" | "denied";
32
+ readonly useCase: string;
33
+ readonly evidenceRef: string;
34
+ readonly verifiedBy: string;
35
+ readonly verifiedAt: string;
36
+ readonly expiresAt: string;
37
+ readonly termsVersion: string;
38
+ readonly termsDigest: string;
39
+ }
40
+ export interface UnknownTermsDecision {
41
+ readonly decision: "unknown";
42
+ readonly useCase: string;
43
+ readonly reasonCode: string;
44
+ }
45
+ export interface DataPolicy {
46
+ readonly allowedClassifications: readonly string[];
47
+ readonly retentionClass: "none" | "transient" | "bounded";
48
+ readonly maxRetentionDays?: Counter;
49
+ }
50
+ export interface CapabilitySet {
51
+ readonly operations: readonly string[];
52
+ readonly models: readonly string[];
53
+ }
54
+ export interface Entitlement extends RecordBase<EntitlementId> {
55
+ readonly accountId: AccountId;
56
+ readonly fundingKind: FundingKind;
57
+ readonly status: EntitlementStatus;
58
+ readonly capabilitySet?: CapabilitySet;
59
+ readonly capabilityEvidenceRef?: string;
60
+ readonly capabilityDigest?: string;
61
+ readonly capabilityExpiresAt?: string;
62
+ readonly executionPolicyDecisionRef?: string;
63
+ readonly executionPolicyDecisionDigest?: string;
64
+ readonly executionPolicyDecisionExpiresAt?: string;
65
+ readonly termsDecision?: TermsDecision | UnknownTermsDecision;
66
+ readonly dataPolicy?: DataPolicy;
67
+ readonly dataPolicyEvidenceRef?: string;
68
+ readonly dataPolicyDigest?: string;
69
+ readonly dataPolicyExpiresAt?: string;
70
+ readonly lastVerifiedAt?: string;
71
+ }
72
+ export type CapacityPoolStatus = "pending" | "active" | "draining" | "denied" | "retired";
73
+ export type DenyState = "allowed" | "denied";
74
+ export interface CapacityPool extends RecordBase<CapacityPoolId> {
75
+ readonly accountId: AccountId;
76
+ readonly capacityDomainRef: string;
77
+ readonly capacityEvidenceRef: string;
78
+ readonly capacityEvidenceIssuerRef: string;
79
+ readonly capacityEvidenceVersion: string;
80
+ readonly capacityEvidenceDigest: string;
81
+ readonly capacityEvidenceIssuedAt: string;
82
+ readonly capacityEvidenceExpiresAt: string;
83
+ readonly capacityEvidenceGeneration: Counter;
84
+ readonly capacityPolicyVersion: string;
85
+ readonly serializationKey: string;
86
+ readonly maxConcurrency: Counter;
87
+ readonly status: CapacityPoolStatus;
88
+ readonly capacityGeneration: Counter;
89
+ readonly denyGeneration: Counter;
90
+ readonly denyState: DenyState;
91
+ }
92
+ export type AccessTransport = "native_session" | "api_key" | "workload_identity";
93
+ export type AccessMethodStatus = "draft" | "ready" | "draining" | "disabled" | "retired";
94
+ export type HealthState = "healthy" | "degraded" | "unavailable" | "unknown";
95
+ export interface HealthObservation {
96
+ readonly state: HealthState;
97
+ readonly evidenceRef: string;
98
+ readonly observedAt: string;
99
+ readonly expiresAt: string;
100
+ }
101
+ export interface AccessMethod extends RecordBase<AccessMethodId> {
102
+ readonly entitlementId: EntitlementId;
103
+ readonly capacityPoolId: CapacityPoolId;
104
+ readonly adapterKey: string;
105
+ readonly adapterVersion: string;
106
+ readonly accessTransport: AccessTransport;
107
+ readonly status: AccessMethodStatus;
108
+ readonly requiredIsolationPolicyRef?: string;
109
+ readonly requiredIsolationPolicyDigest?: string;
110
+ readonly isolationEvidenceExpiresAt?: string;
111
+ readonly allowedDestinationPolicyClasses?: readonly string[];
112
+ readonly parentPolicyDecisionRef?: string;
113
+ readonly parentPolicyDecisionDigest?: string;
114
+ readonly executionPolicyEvidenceRef?: string;
115
+ readonly executionPolicyDigest?: string;
116
+ readonly executionPolicyExpiresAt?: string;
117
+ readonly health?: HealthObservation;
118
+ }
119
+ export type AccountLane = AccessMethod;
120
+ export type AuthCapsuleStatus = "unprovisioned" | "bootstrapping" | "ready" | "degraded" | "revoked";
121
+ export interface CapsuleAttestation {
122
+ readonly evidenceRef: string;
123
+ readonly issuerRef: string;
124
+ readonly measurementDigest: string;
125
+ readonly attestedAt: string;
126
+ readonly expiresAt: string;
127
+ }
128
+ export interface AuthCapsule extends RecordBase<AuthCapsuleId> {
129
+ readonly accessMethodId: AccessMethodId;
130
+ readonly capacityPoolId: CapacityPoolId;
131
+ readonly kind: "native_session";
132
+ readonly ownerRef: string;
133
+ readonly placementKind: "enrolled_node";
134
+ readonly placementRef: CanonicalNodeId;
135
+ readonly hardwareKeyThumbprint: string;
136
+ readonly nodeGeneration: Counter;
137
+ readonly placementGeneration: Counter;
138
+ readonly status: AuthCapsuleStatus;
139
+ readonly refreshOwnerRef: string;
140
+ readonly refreshMode: "provider_native" | "interactive_owner";
141
+ readonly authGeneration: Counter;
142
+ readonly authStateRevision: Counter;
143
+ readonly isolationPolicyRef: string;
144
+ readonly isolationPolicyDigest: string;
145
+ readonly attestation?: CapsuleAttestation;
146
+ readonly lastHealthAt?: string;
147
+ }
148
+ export type CredentialBindingStatus = "pending" | "active" | "retiring" | "revoked";
149
+ export type CredentialResolver = "brokered_secret" | "workload_identity" | "capsule_local_native";
150
+ export type CredentialPurpose = "provider_session" | "api_key" | "workload_identity";
151
+ export interface CredentialBindingBase extends RecordBase<CredentialBindingId> {
152
+ readonly accessMethodId: AccessMethodId;
153
+ readonly capacityPoolId: CapacityPoolId;
154
+ readonly authCapsuleId?: AuthCapsuleId;
155
+ readonly credentialFamilyId: string;
156
+ readonly purpose: CredentialPurpose;
157
+ readonly resolver: CredentialResolver;
158
+ readonly credentialGeneration: Counter;
159
+ readonly authStateRevision?: Counter;
160
+ readonly refreshMode?: "broker_serialized";
161
+ readonly policyDigest: string;
162
+ readonly rotatedAt?: string;
163
+ }
164
+ export interface CredentialBindingEvidence {
165
+ readonly bindingEvidenceRef: string;
166
+ readonly bindingEvidenceIssuerRef: string;
167
+ readonly bindingEvidenceDigest: string;
168
+ readonly bindingEvidenceExpiresAt: string;
169
+ readonly expiresAt?: string;
170
+ }
171
+ export interface NonterminalCredentialBinding extends CredentialBindingBase, CredentialBindingEvidence {
172
+ readonly status: "pending" | "active" | "retiring";
173
+ }
174
+ export interface RetiredHandleCredentialBinding extends CredentialBindingBase, CredentialBindingEvidence {
175
+ readonly status: "revoked";
176
+ readonly terminalKind: "retired_handle_generation";
177
+ readonly credentialHandleAuditDigest: string;
178
+ readonly revocationBarrierReceiptDigest: string;
179
+ readonly revokedAt: string;
180
+ }
181
+ export interface RevocationBarrierCredentialBinding extends CredentialBindingBase {
182
+ readonly status: "revoked";
183
+ readonly terminalKind: "revocation_barrier";
184
+ readonly lastUsableCredentialGeneration: Counter;
185
+ readonly revocationBarrierReceiptDigest: string;
186
+ readonly revokedAt: string;
187
+ }
188
+ export type CredentialBinding = NonterminalCredentialBinding | RetiredHandleCredentialBinding | RevocationBarrierCredentialBinding;
189
+ export type CredentialBindingMetadata = CredentialBinding;
190
+ export type CredentialOperationKind = "refresh" | "reauthentication" | "rotation" | "revocation";
191
+ export type CredentialOperationState = "requested" | "quiescing" | "applying" | "verifying" | "completed" | "failed_before_dispatch" | "failed" | "quarantined";
192
+ export interface CredentialOperation extends RecordBase<CredentialOperationId> {
193
+ readonly kind: CredentialOperationKind;
194
+ readonly sourceBindingId?: CredentialBindingId;
195
+ readonly targetBindingId?: CredentialBindingId;
196
+ readonly credentialFamilyId: string;
197
+ readonly capacityPoolId: CapacityPoolId;
198
+ readonly serializationKey: string;
199
+ readonly expectedSourceGeneration: Counter;
200
+ readonly expectedAuthStateRevision?: Counter;
201
+ readonly proposedTargetGeneration: Counter;
202
+ readonly proposedAuthStateRevision?: Counter;
203
+ readonly state: CredentialOperationState;
204
+ readonly idempotencyRequestHash: string;
205
+ readonly barrierReceiptDigest?: string;
206
+ readonly completionReceiptDigest?: string;
207
+ }
208
+ export type EntityKind = "account" | "entitlement" | "capacity_pool" | "access_method" | "auth_capsule" | "credential_binding";
209
+ export interface EntityMap {
210
+ readonly account: Account;
211
+ readonly entitlement: Entitlement;
212
+ readonly capacity_pool: CapacityPool;
213
+ readonly access_method: AccessMethod;
214
+ readonly auth_capsule: AuthCapsule;
215
+ readonly credential_binding: CredentialBinding;
216
+ }
217
+ export type AnyEntity = EntityMap[EntityKind];
218
+ export declare const ELIGIBILITY_REASON_CODES: readonly ["CURRENT_DENY", "ACCOUNT_NOT_ACTIVE", "ENTITLEMENT_NOT_ACTIVE", "TERMS_NOT_ALLOWED", "TERMS_STALE", "OPERATION_NOT_ALLOWED", "MODEL_NOT_ALLOWED", "DATA_CLASSIFICATION_NOT_ALLOWED", "DESTINATION_POLICY_NOT_ALLOWED", "CAPACITY_POOL_NOT_ACTIVE", "CAPACITY_EVIDENCE_STALE", "ACCESS_METHOD_NOT_READY", "HEALTH_NOT_HEALTHY", "HEALTH_STALE", "POLICY_EVIDENCE_STALE", "POLICY_DIGEST_MISMATCH", "CAPSULE_REQUIRED", "CAPSULE_NOT_READY", "CAPSULE_OWNER_MISMATCH", "CAPSULE_PLACEMENT_INVALID", "ATTESTATION_STALE", "CREDENTIAL_BINDING_REQUIRED", "CREDENTIAL_BINDING_NOT_ACTIVE", "CREDENTIAL_BINDING_RETIRING", "CREDENTIAL_BINDING_EXPIRED", "INVALID_ACCESS_TARGET", "GENERATION_MISMATCH", "DEPENDENCY_UNAVAILABLE", "RECOVERY_HOLD"];
219
+ export type EligibilityReasonCode = (typeof ELIGIBILITY_REASON_CODES)[number];
220
+ export interface EligibilityRequest {
221
+ readonly accessMethodId: AccessMethodId;
222
+ readonly operation: string;
223
+ readonly model: string;
224
+ readonly dataClassification: string;
225
+ readonly destinationPolicyClass: string;
226
+ }
227
+ export type EligibilityAccessTarget = {
228
+ readonly kind: "native";
229
+ readonly authCapsuleId: AuthCapsuleId;
230
+ readonly canonicalNodeId: string;
231
+ readonly nodeKeyThumbprint: string;
232
+ readonly nodeGeneration: Counter;
233
+ readonly placementGeneration: Counter;
234
+ readonly authGeneration: Counter;
235
+ readonly authStateRevision: Counter;
236
+ } | {
237
+ readonly kind: "brokered";
238
+ readonly credentialBindingId: CredentialBindingId;
239
+ readonly resolver: "brokered_secret" | "workload_identity";
240
+ } | {
241
+ readonly kind: "unresolved";
242
+ };
243
+ interface SlotEligibilityBase {
244
+ readonly schemaVersion: "accounts.slot-eligibility.v1";
245
+ readonly evidenceId: EligibilityEvidenceId;
246
+ readonly evidenceClass: "local_diagnostic";
247
+ readonly authority: "none";
248
+ readonly reservation: "none";
249
+ readonly accessMethodId: AccessMethodId;
250
+ readonly accessTarget: EligibilityAccessTarget;
251
+ readonly eligibilityRequestDigest: string;
252
+ readonly catalogIncarnation?: string;
253
+ readonly recoveryFrontierSequence?: Counter;
254
+ readonly recoveryFrontierHash?: string;
255
+ readonly issuedAt: string;
256
+ readonly expiresAt: string;
257
+ }
258
+ export interface EligibleSlotEligibility extends SlotEligibilityBase {
259
+ readonly eligible: true;
260
+ readonly reasonCodes: readonly [];
261
+ readonly accountId: AccountId;
262
+ readonly entitlementId: EntitlementId;
263
+ readonly capacityPoolId: CapacityPoolId;
264
+ readonly ownerRef: string;
265
+ readonly accessTransport: AccessTransport;
266
+ readonly accessTarget: Exclude<EligibilityAccessTarget, {
267
+ readonly kind: "unresolved";
268
+ }>;
269
+ readonly serializationKey: string;
270
+ readonly maxConcurrency: Counter;
271
+ readonly capacityGeneration: Counter;
272
+ readonly denyGeneration: Counter;
273
+ readonly denyState: "allowed";
274
+ readonly credentialFamilyId: string;
275
+ readonly credentialGeneration: Counter;
276
+ readonly catalogIncarnation: string;
277
+ readonly recoveryFrontierSequence: Counter;
278
+ readonly recoveryFrontierHash: string;
279
+ readonly recordRevisionSet: Readonly<Record<Exclude<EntityKind, "auth_capsule">, Counter> & Partial<Record<"auth_capsule", Counter>>>;
280
+ }
281
+ export interface IneligibleSlotEligibility extends SlotEligibilityBase {
282
+ readonly eligible: false;
283
+ readonly reasonCodes: readonly EligibilityReasonCode[];
284
+ readonly accountId?: AccountId;
285
+ readonly entitlementId?: EntitlementId;
286
+ readonly capacityPoolId?: CapacityPoolId;
287
+ readonly ownerRef?: string;
288
+ readonly accessTransport?: AccessTransport;
289
+ readonly serializationKey?: string;
290
+ readonly maxConcurrency?: Counter;
291
+ readonly capacityGeneration?: Counter;
292
+ readonly denyGeneration?: Counter;
293
+ readonly denyState?: DenyState;
294
+ readonly credentialFamilyId?: string;
295
+ readonly credentialGeneration?: Counter;
296
+ readonly recordRevisionSet: Readonly<Partial<Record<EntityKind, Counter>>>;
297
+ }
298
+ export type SlotEligibilityMetadata = EligibleSlotEligibility | IneligibleSlotEligibility;
299
+ export type SlotEligibility = SlotEligibilityMetadata;
300
+ export {};