1use std::collections::{BTreeMap, BTreeSet};
2use std::fs;
3use std::path::Path;
4use std::time::{SystemTime, UNIX_EPOCH};
5
6use chio_core::canonical::canonical_json_bytes;
7use chio_core::capability::{CapabilityToken, ChioScope};
8use chio_core::crypto::{sha256_hex, Signature};
9use chio_core::receipt::{
10 ChildRequestReceipt, ChioReceipt, Decision, FinancialReceiptMetadata,
11 GovernedTransactionReceiptMetadata, ReceiptAttributionMetadata, SettlementStatus,
12};
13use chio_core::session::OperationTerminalState;
14use chio_kernel::checkpoint::{KernelCheckpoint, KernelCheckpointBody};
15use chio_kernel::cost_attribution::{
16 CostAttributionChainHop, CostAttributionQuery, CostAttributionReceiptRow,
17 CostAttributionReport, CostAttributionSummary, LeafCostAttributionRow, RootCostAttributionRow,
18 MAX_COST_ATTRIBUTION_LIMIT,
19};
20use chio_kernel::dpop::DPOP_SCHEMA;
21use chio_kernel::operator_report::{
22 AuthorizationContextReport, AuthorizationContextRow, AuthorizationContextSenderConstraint,
23 AuthorizationContextSummary, BehavioralFeedGovernedActionSummary,
24 BehavioralFeedMeteredBillingRow, BehavioralFeedMeteredBillingSummary, BehavioralFeedQuery,
25 BehavioralFeedReceiptRow, BehavioralFeedReceiptSelection, BehavioralFeedSettlementSummary,
26 ChioOAuthAuthorizationDiscoveryMetadata, ChioOAuthAuthorizationExampleMapping,
27 ChioOAuthAuthorizationMetadataReport, ChioOAuthAuthorizationProfile,
28 ChioOAuthAuthorizationReviewPack, ChioOAuthAuthorizationReviewPackRecord,
29 ChioOAuthAuthorizationReviewPackSummary, ChioOAuthAuthorizationSupportBoundary,
30 ComplianceReport, EconomicCompletionFlowReport, EconomicCompletionFlowSummary,
31 EconomicReceiptMeteringProjection, EconomicReceiptProjectionReport,
32 EconomicReceiptProjectionRow, EconomicReceiptProjectionSummary,
33 EconomicReceiptSettlementProjection, GovernedAuthorizationCommerceDetail,
34 GovernedAuthorizationDetail, GovernedAuthorizationMeteredBillingDetail,
35 GovernedAuthorizationTransactionContext, MeteredBillingEvidenceRecord,
36 MeteredBillingReconciliationReport, MeteredBillingReconciliationRow,
37 MeteredBillingReconciliationState, MeteredBillingReconciliationSummary, OperatorReportQuery,
38 SettlementReconciliationReport, SettlementReconciliationRow, SettlementReconciliationState,
39 SettlementReconciliationSummary, SharedEvidenceQuery, SharedEvidenceReferenceReport,
40 SharedEvidenceReferenceRow, SharedEvidenceReferenceSummary,
41 CHIO_OAUTH_AUTHORIZATION_COMMERCE_DETAIL_TYPE, CHIO_OAUTH_AUTHORIZATION_CONTEXT_REPORT_SCHEMA,
42 CHIO_OAUTH_AUTHORIZATION_METADATA_SCHEMA, CHIO_OAUTH_AUTHORIZATION_METERED_BILLING_DETAIL_TYPE,
43 CHIO_OAUTH_AUTHORIZATION_REVIEW_PACK_SCHEMA, CHIO_OAUTH_AUTHORIZATION_TOOL_DETAIL_TYPE,
44 CHIO_OAUTH_SENDER_PROOF_CHIO_DPOP, ECONOMIC_COMPLETION_FLOW_SCHEMA,
45};
46use chio_kernel::receipt_analytics::{
47 AgentAnalyticsRow, AnalyticsTimeBucket, ReceiptAnalyticsMetrics, ReceiptAnalyticsQuery,
48 ReceiptAnalyticsResponse, TimeAnalyticsRow, ToolAnalyticsRow, MAX_ANALYTICS_GROUP_LIMIT,
49};
50use chio_kernel::receipt_query::{ReceiptQuery, ReceiptQueryResult, MAX_QUERY_LIMIT};
51use chio_kernel::receipt_store::{ReceiptLineageStatementLink, ReceiptLineageVerification};
52use chio_kernel::{
53 CapabilitySnapshot, CreditBondDisposition, CreditBondLifecycleState, CreditBondListQuery,
54 CreditBondListReport, CreditBondListSummary, CreditBondRow, CreditFacilityDisposition,
55 CreditFacilityLifecycleState, CreditFacilityListQuery, CreditFacilityListReport,
56 CreditFacilityListSummary, CreditFacilityRow, CreditLossLifecycleEventKind,
57 CreditLossLifecycleListQuery, CreditLossLifecycleListReport, CreditLossLifecycleListSummary,
58 CreditLossLifecycleRow, EvidenceChildReceiptScope, EvidenceExportQuery, ExposureLedgerQuery,
59 FederatedEvidenceShareImport, FederatedEvidenceShareSummary, LiabilityAutoBindDisposition,
60 LiabilityClaimPayoutReconciliationState, LiabilityClaimResponseDisposition,
61 LiabilityClaimSettlementReconciliationState, LiabilityClaimWorkflowQuery,
62 LiabilityClaimWorkflowReport, LiabilityClaimWorkflowRow, LiabilityClaimWorkflowSummary,
63 LiabilityMarketWorkflowQuery, LiabilityMarketWorkflowReport, LiabilityMarketWorkflowRow,
64 LiabilityMarketWorkflowSummary, LiabilityProviderLifecycleState, LiabilityProviderListQuery,
65 LiabilityProviderListReport, LiabilityProviderListSummary, LiabilityProviderResolutionQuery,
66 LiabilityProviderResolutionReport, LiabilityProviderRow, LiabilityQuoteDisposition,
67 ReceiptStore, ReceiptStoreError, RetentionConfig, SignedCreditBond, SignedCreditFacility,
68 SignedCreditLossLifecycle, SignedLiabilityAutoBindDecision, SignedLiabilityBoundCoverage,
69 SignedLiabilityClaimAdjudication, SignedLiabilityClaimDispute, SignedLiabilityClaimPackage,
70 SignedLiabilityClaimPayoutInstruction, SignedLiabilityClaimPayoutReceipt,
71 SignedLiabilityClaimResponse, SignedLiabilityClaimSettlementInstruction,
72 SignedLiabilityClaimSettlementReceipt, SignedLiabilityPlacement,
73 SignedLiabilityPricingAuthority, SignedLiabilityProvider, SignedLiabilityQuoteRequest,
74 SignedLiabilityQuoteResponse, SignedUnderwritingDecision, StoredChildReceipt,
75 StoredToolReceipt, UnderwritingAppealCreateRequest, UnderwritingAppealRecord,
76 UnderwritingAppealResolution, UnderwritingAppealResolveRequest, UnderwritingAppealStatus,
77 UnderwritingDecisionLifecycleState, UnderwritingDecisionListReport,
78 UnderwritingDecisionOutcome, UnderwritingDecisionQuery, UnderwritingDecisionRow,
79 UnderwritingDecisionSummary, CREDIT_BOND_LIST_REPORT_SCHEMA,
80 CREDIT_FACILITY_LIST_REPORT_SCHEMA, CREDIT_LOSS_LIFECYCLE_LIST_REPORT_SCHEMA,
81 LIABILITY_CLAIM_WORKFLOW_REPORT_SCHEMA, LIABILITY_MARKET_WORKFLOW_REPORT_SCHEMA,
82 LIABILITY_PROVIDER_LIST_REPORT_SCHEMA, LIABILITY_PROVIDER_RESOLUTION_REPORT_SCHEMA,
83};
84use r2d2::{Pool, PooledConnection};
85use r2d2_sqlite::SqliteConnectionManager;
86use rusqlite::{params, Connection, OptionalExtension};
87
88pub struct SqliteReceiptStore {
89 pub(crate) pool: Pool<SqliteConnectionManager>,
90 pub(crate) strict_tenant_isolation: std::sync::atomic::AtomicBool,
96}
97
98type FederatedShareSubjectCorpus = (
99 FederatedEvidenceShareSummary,
100 Vec<StoredToolReceipt>,
101 Vec<CapabilitySnapshot>,
102);
103pub(crate) type SqliteStoreConnection = PooledConnection<SqliteConnectionManager>;
104
105#[path = "receipt_store/bootstrap.rs"]
106mod bootstrap;
107#[path = "receipt_store/evidence_retention.rs"]
108mod evidence_retention;
109#[path = "receipt_store/liability_claims.rs"]
110mod liability_claims;
111#[path = "receipt_store/liability_market.rs"]
112mod liability_market;
113#[path = "receipt_store/reports.rs"]
114mod reports;
115#[path = "receipt_store/support.rs"]
116mod support;
117#[cfg(test)]
118#[path = "receipt_store/tests.rs"]
119mod tests;
120#[path = "receipt_store/underwriting_credit.rs"]
121mod underwriting_credit;
122
123use support::*;
124pub(crate) use support::{decode_verified_child_receipt, decode_verified_chio_receipt};
125
126impl SqliteReceiptStore {
127 pub(crate) fn connection(&self) -> Result<SqliteStoreConnection, ReceiptStoreError> {
128 self.pool
129 .get()
130 .map_err(|error| ReceiptStoreError::Pool(error.to_string()))
131 }
132
133 pub fn with_strict_tenant_isolation(&self, strict: bool) {
148 self.strict_tenant_isolation
149 .store(strict, std::sync::atomic::Ordering::SeqCst);
150 }
151
152 #[must_use]
154 pub fn strict_tenant_isolation_enabled(&self) -> bool {
155 self.strict_tenant_isolation
156 .load(std::sync::atomic::Ordering::SeqCst)
157 }
158}