@sip-protocol/sdk 0.7.3 → 0.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (264) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +267 -0
  3. package/dist/{TransportWebUSB-TQ7WZ4LE.mjs → TransportWebUSB-YQMAGJAJ.mjs} +12 -9
  4. package/dist/browser.d.mts +10 -4
  5. package/dist/browser.d.ts +10 -4
  6. package/dist/browser.js +47556 -19603
  7. package/dist/browser.mjs +628 -48
  8. package/dist/chunk-4GRJ5MAW.mjs +152 -0
  9. package/dist/chunk-5D7A3L3W.mjs +717 -0
  10. package/dist/chunk-64AYA5F5.mjs +7834 -0
  11. package/dist/chunk-GMDGB22A.mjs +379 -0
  12. package/dist/chunk-I534WKN7.mjs +328 -0
  13. package/dist/chunk-IBZVA5Y7.mjs +1003 -0
  14. package/dist/chunk-PRRZAWJE.mjs +223 -0
  15. package/dist/{chunk-UJCSKKID.mjs → chunk-XGB3TDIC.mjs} +13 -1
  16. package/dist/{chunk-3M3HNQCW.mjs → chunk-YWGJ77A2.mjs} +28656 -13103
  17. package/dist/{chunk-6WGN57S2.mjs → chunk-Z3K7W5S3.mjs} +48 -0
  18. package/dist/constants-LHAAUC2T.mjs +51 -0
  19. package/dist/dist-2OGQ7FED.mjs +3957 -0
  20. package/dist/dist-IFHPYLDX.mjs +254 -0
  21. package/dist/fulfillment_proof-ANHVPKTB.mjs +21 -0
  22. package/dist/funding_proof-ICFZ5LHY.mjs +21 -0
  23. package/dist/{index-DIBZHOOQ.d.ts → index-DXh2IGkz.d.ts} +21239 -10304
  24. package/dist/{index-8MQz13eJ.d.mts → index-DeE1ZzA4.d.mts} +21239 -10304
  25. package/dist/index.d.mts +9 -3
  26. package/dist/index.d.ts +9 -3
  27. package/dist/index.js +48396 -19623
  28. package/dist/index.mjs +537 -19
  29. package/dist/interface-Bf7w1PLW.d.mts +679 -0
  30. package/dist/interface-Bf7w1PLW.d.ts +679 -0
  31. package/dist/{noir-DKfEzWy9.d.mts → noir-kzbLVTei.d.mts} +31 -21
  32. package/dist/{noir-DKfEzWy9.d.ts → noir-kzbLVTei.d.ts} +31 -21
  33. package/dist/proofs/halo2.d.mts +151 -0
  34. package/dist/proofs/halo2.d.ts +151 -0
  35. package/dist/proofs/halo2.js +350 -0
  36. package/dist/proofs/halo2.mjs +11 -0
  37. package/dist/proofs/kimchi.d.mts +160 -0
  38. package/dist/proofs/kimchi.d.ts +160 -0
  39. package/dist/proofs/kimchi.js +431 -0
  40. package/dist/proofs/kimchi.mjs +13 -0
  41. package/dist/proofs/noir.d.mts +1 -1
  42. package/dist/proofs/noir.d.ts +1 -1
  43. package/dist/proofs/noir.js +74 -18
  44. package/dist/proofs/noir.mjs +84 -24
  45. package/dist/solana-U3MEGU7W.mjs +280 -0
  46. package/dist/validity_proof-3POXLPNY.mjs +21 -0
  47. package/package.json +54 -21
  48. package/src/adapters/index.ts +41 -0
  49. package/src/adapters/jupiter.ts +571 -0
  50. package/src/adapters/near-intents.ts +135 -0
  51. package/src/advisor/advisor.ts +653 -0
  52. package/src/advisor/index.ts +54 -0
  53. package/src/advisor/tools.ts +303 -0
  54. package/src/advisor/types.ts +164 -0
  55. package/src/chains/ethereum/announcement.ts +536 -0
  56. package/src/chains/ethereum/bnb-optimizations.ts +474 -0
  57. package/src/chains/ethereum/commitment.ts +522 -0
  58. package/src/chains/ethereum/constants.ts +462 -0
  59. package/src/chains/ethereum/deployment.ts +596 -0
  60. package/src/chains/ethereum/gas-estimation.ts +538 -0
  61. package/src/chains/ethereum/index.ts +268 -0
  62. package/src/chains/ethereum/optimizations.ts +614 -0
  63. package/src/chains/ethereum/privacy-adapter.ts +855 -0
  64. package/src/chains/ethereum/registry.ts +584 -0
  65. package/src/chains/ethereum/rpc.ts +905 -0
  66. package/src/chains/ethereum/stealth.ts +491 -0
  67. package/src/chains/ethereum/token.ts +790 -0
  68. package/src/chains/ethereum/transfer.ts +637 -0
  69. package/src/chains/ethereum/types.ts +456 -0
  70. package/src/chains/ethereum/viewing-key.ts +455 -0
  71. package/src/chains/near/commitment.ts +608 -0
  72. package/src/chains/near/constants.ts +284 -0
  73. package/src/chains/near/function-call.ts +871 -0
  74. package/src/chains/near/history.ts +654 -0
  75. package/src/chains/near/implicit-account.ts +840 -0
  76. package/src/chains/near/index.ts +393 -0
  77. package/src/chains/near/native-transfer.ts +658 -0
  78. package/src/chains/near/nep141.ts +775 -0
  79. package/src/chains/near/privacy-adapter.ts +889 -0
  80. package/src/chains/near/resolver.ts +971 -0
  81. package/src/chains/near/rpc.ts +1016 -0
  82. package/src/chains/near/stealth.ts +419 -0
  83. package/src/chains/near/types.ts +317 -0
  84. package/src/chains/near/viewing-key.ts +876 -0
  85. package/src/chains/solana/anchor-transfer.ts +386 -0
  86. package/src/chains/solana/commitment.ts +577 -0
  87. package/src/chains/solana/constants.ts +126 -12
  88. package/src/chains/solana/ephemeral-keys.ts +543 -0
  89. package/src/chains/solana/index.ts +252 -1
  90. package/src/chains/solana/key-derivation.ts +418 -0
  91. package/src/chains/solana/kit-compat.ts +334 -0
  92. package/src/chains/solana/optimizations.ts +560 -0
  93. package/src/chains/solana/privacy-adapter.ts +605 -0
  94. package/src/chains/solana/providers/generic.ts +47 -6
  95. package/src/chains/solana/providers/helius-enhanced-types.ts +336 -0
  96. package/src/chains/solana/providers/helius-enhanced.ts +623 -0
  97. package/src/chains/solana/providers/helius.ts +186 -33
  98. package/src/chains/solana/providers/index.ts +31 -0
  99. package/src/chains/solana/providers/interface.ts +61 -18
  100. package/src/chains/solana/providers/quicknode.ts +409 -0
  101. package/src/chains/solana/providers/triton.ts +426 -0
  102. package/src/chains/solana/providers/webhook.ts +338 -67
  103. package/src/chains/solana/rpc-client.ts +1150 -0
  104. package/src/chains/solana/scan.ts +83 -66
  105. package/src/chains/solana/sol-transfer.ts +732 -0
  106. package/src/chains/solana/spl-transfer.ts +886 -0
  107. package/src/chains/solana/stealth-scanner.ts +703 -0
  108. package/src/chains/solana/sunspot-verifier.ts +453 -0
  109. package/src/chains/solana/transaction-builder.ts +755 -0
  110. package/src/chains/solana/transfer.ts +74 -5
  111. package/src/chains/solana/types.ts +57 -6
  112. package/src/chains/solana/utils.ts +110 -0
  113. package/src/chains/solana/viewing-key.ts +807 -0
  114. package/src/compliance/fireblocks.ts +921 -0
  115. package/src/compliance/index.ts +23 -0
  116. package/src/compliance/range-sas.ts +398 -33
  117. package/src/config/endpoints.ts +100 -0
  118. package/src/crypto.ts +11 -8
  119. package/src/errors.ts +82 -0
  120. package/src/evm/erc4337-relayer.ts +830 -0
  121. package/src/evm/index.ts +47 -0
  122. package/src/fees/calculator.ts +396 -0
  123. package/src/fees/index.ts +87 -0
  124. package/src/fees/near-contract.ts +429 -0
  125. package/src/fees/types.ts +268 -0
  126. package/src/index.ts +686 -1
  127. package/src/intent.ts +6 -3
  128. package/src/logger.ts +324 -0
  129. package/src/network/index.ts +80 -0
  130. package/src/network/proxy.ts +691 -0
  131. package/src/optimizations/index.ts +541 -0
  132. package/src/oracle/types.ts +1 -0
  133. package/src/privacy-backends/arcium-types.ts +727 -0
  134. package/src/privacy-backends/arcium.ts +719 -0
  135. package/src/privacy-backends/combined-privacy.ts +866 -0
  136. package/src/privacy-backends/cspl-token.ts +595 -0
  137. package/src/privacy-backends/cspl-types.ts +512 -0
  138. package/src/privacy-backends/cspl.ts +907 -0
  139. package/src/privacy-backends/health.ts +488 -0
  140. package/src/privacy-backends/inco-types.ts +323 -0
  141. package/src/privacy-backends/inco.ts +616 -0
  142. package/src/privacy-backends/index.ts +254 -4
  143. package/src/privacy-backends/interface.ts +649 -6
  144. package/src/privacy-backends/lru-cache.ts +343 -0
  145. package/src/privacy-backends/magicblock.ts +458 -0
  146. package/src/privacy-backends/mock.ts +258 -0
  147. package/src/privacy-backends/privacycash.ts +13 -17
  148. package/src/privacy-backends/private-swap.ts +570 -0
  149. package/src/privacy-backends/rate-limiter.ts +683 -0
  150. package/src/privacy-backends/registry.ts +414 -2
  151. package/src/privacy-backends/router.ts +283 -3
  152. package/src/privacy-backends/shadowwire.ts +449 -0
  153. package/src/privacy-backends/sip-native.ts +3 -0
  154. package/src/privacy-logger.ts +191 -0
  155. package/src/production-safety.ts +373 -0
  156. package/src/proofs/aggregator.ts +1029 -0
  157. package/src/proofs/browser-composer.ts +1150 -0
  158. package/src/proofs/browser.ts +113 -25
  159. package/src/proofs/cache/index.ts +127 -0
  160. package/src/proofs/cache/interface.ts +545 -0
  161. package/src/proofs/cache/key-generator.ts +188 -0
  162. package/src/proofs/cache/lru-cache.ts +481 -0
  163. package/src/proofs/cache/multi-tier-cache.ts +575 -0
  164. package/src/proofs/cache/persistent-cache.ts +788 -0
  165. package/src/proofs/compliance-proof.ts +872 -0
  166. package/src/proofs/composer/base.ts +923 -0
  167. package/src/proofs/composer/index.ts +25 -0
  168. package/src/proofs/composer/interface.ts +518 -0
  169. package/src/proofs/composer/types.ts +383 -0
  170. package/src/proofs/converters/halo2.ts +452 -0
  171. package/src/proofs/converters/index.ts +208 -0
  172. package/src/proofs/converters/interface.ts +363 -0
  173. package/src/proofs/converters/kimchi.ts +462 -0
  174. package/src/proofs/converters/noir.ts +451 -0
  175. package/src/proofs/fallback.ts +888 -0
  176. package/src/proofs/halo2.ts +42 -0
  177. package/src/proofs/index.ts +471 -0
  178. package/src/proofs/interface.ts +13 -0
  179. package/src/proofs/kimchi.ts +42 -0
  180. package/src/proofs/lazy.ts +1004 -0
  181. package/src/proofs/mock.ts +25 -1
  182. package/src/proofs/noir.ts +110 -29
  183. package/src/proofs/orchestrator.ts +960 -0
  184. package/src/proofs/parallel/concurrency.ts +297 -0
  185. package/src/proofs/parallel/dependency-graph.ts +602 -0
  186. package/src/proofs/parallel/executor.ts +420 -0
  187. package/src/proofs/parallel/index.ts +131 -0
  188. package/src/proofs/parallel/interface.ts +685 -0
  189. package/src/proofs/parallel/worker-pool.ts +644 -0
  190. package/src/proofs/providers/halo2.ts +560 -0
  191. package/src/proofs/providers/index.ts +34 -0
  192. package/src/proofs/providers/kimchi.ts +641 -0
  193. package/src/proofs/validator.ts +881 -0
  194. package/src/proofs/verifier.ts +867 -0
  195. package/src/quantum/index.ts +112 -0
  196. package/src/quantum/winternitz-vault.ts +639 -0
  197. package/src/quantum/wots.ts +611 -0
  198. package/src/settlement/backends/direct-chain.ts +1 -0
  199. package/src/settlement/index.ts +9 -0
  200. package/src/settlement/router.ts +732 -46
  201. package/src/solana/index.ts +72 -0
  202. package/src/solana/jito-relayer.ts +687 -0
  203. package/src/solana/noir-verifier-types.ts +430 -0
  204. package/src/solana/noir-verifier.ts +816 -0
  205. package/src/stealth/address-derivation.ts +193 -0
  206. package/src/stealth/ed25519.ts +431 -0
  207. package/src/stealth/index.ts +233 -0
  208. package/src/stealth/meta-address.ts +221 -0
  209. package/src/stealth/secp256k1.ts +368 -0
  210. package/src/stealth/utils.ts +194 -0
  211. package/src/stealth.ts +50 -1504
  212. package/src/sync/index.ts +106 -0
  213. package/src/sync/manager.ts +504 -0
  214. package/src/sync/mock-provider.ts +318 -0
  215. package/src/sync/oblivious.ts +625 -0
  216. package/src/tokens/index.ts +15 -0
  217. package/src/tokens/registry.ts +301 -0
  218. package/src/utils/deprecation.ts +94 -0
  219. package/src/utils/index.ts +9 -0
  220. package/src/wallet/ethereum/index.ts +68 -0
  221. package/src/wallet/ethereum/metamask-privacy.ts +420 -0
  222. package/src/wallet/ethereum/multi-wallet.ts +646 -0
  223. package/src/wallet/ethereum/privacy-adapter.ts +700 -0
  224. package/src/wallet/ethereum/types.ts +3 -1
  225. package/src/wallet/ethereum/walletconnect-adapter.ts +675 -0
  226. package/src/wallet/hardware/index.ts +10 -0
  227. package/src/wallet/hardware/ledger-privacy.ts +414 -0
  228. package/src/wallet/index.ts +71 -0
  229. package/src/wallet/near/adapter.ts +626 -0
  230. package/src/wallet/near/index.ts +86 -0
  231. package/src/wallet/near/meteor-wallet.ts +1153 -0
  232. package/src/wallet/near/my-near-wallet.ts +790 -0
  233. package/src/wallet/near/wallet-selector.ts +702 -0
  234. package/src/wallet/solana/adapter.ts +6 -4
  235. package/src/wallet/solana/index.ts +13 -0
  236. package/src/wallet/solana/privacy-adapter.ts +567 -0
  237. package/src/wallet/sui/types.ts +6 -4
  238. package/src/zcash/rpc-client.ts +13 -6
  239. package/dist/chunk-2XIVXWHA.mjs +0 -1930
  240. package/dist/chunk-3INS3PR5.mjs +0 -884
  241. package/dist/chunk-3OVABDRH.mjs +0 -17096
  242. package/dist/chunk-7RFRWDCW.mjs +0 -1504
  243. package/dist/chunk-DLDWZFYC.mjs +0 -1495
  244. package/dist/chunk-E6SZWREQ.mjs +0 -57
  245. package/dist/chunk-F6F73W35.mjs +0 -16166
  246. package/dist/chunk-G33LB27A.mjs +0 -16166
  247. package/dist/chunk-HGU6HZRC.mjs +0 -231
  248. package/dist/chunk-L2K34JCU.mjs +0 -1496
  249. package/dist/chunk-OFDBEIEK.mjs +0 -16166
  250. package/dist/chunk-SF7YSLF5.mjs +0 -1515
  251. package/dist/chunk-SN4ZDTVW.mjs +0 -16166
  252. package/dist/chunk-WWUSGOXE.mjs +0 -17129
  253. package/dist/constants-VOI7BSLK.mjs +0 -27
  254. package/dist/index-B71aXVzk.d.ts +0 -13264
  255. package/dist/index-BYZbDjal.d.ts +0 -11390
  256. package/dist/index-CHB3KuOB.d.mts +0 -11859
  257. package/dist/index-CzWPI6Le.d.ts +0 -11859
  258. package/dist/index-pOIIuwfV.d.mts +0 -13264
  259. package/dist/index-xbWjohNq.d.mts +0 -11390
  260. package/dist/solana-4O4K45VU.mjs +0 -46
  261. package/dist/solana-5EMCTPTS.mjs +0 -46
  262. package/dist/solana-NDABAZ6P.mjs +0 -56
  263. package/dist/solana-Q4NAVBTS.mjs +0 -46
  264. package/dist/solana-ZYO63LY5.mjs +0 -46
@@ -0,0 +1,545 @@
1
+ /**
2
+ * Proof Caching Layer - Interface Definitions
3
+ *
4
+ * @module proofs/cache
5
+ * @description Types and interfaces for proof caching
6
+ *
7
+ * M20-13: Implement proof caching layer (#313)
8
+ */
9
+
10
+ import type { ProofSystem, SingleProof } from '@sip-protocol/types'
11
+
12
+ // ─── Cache Key Types ─────────────────────────────────────────────────────────
13
+
14
+ /**
15
+ * Components that make up a cache key
16
+ */
17
+ export interface CacheKeyComponents {
18
+ /** Proof system (noir, halo2, kimchi) */
19
+ readonly system: ProofSystem
20
+ /** Circuit identifier */
21
+ readonly circuitId: string
22
+ /** Hash of private inputs */
23
+ readonly privateInputsHash: string
24
+ /** Hash of public inputs */
25
+ readonly publicInputsHash: string
26
+ /** Optional version string */
27
+ readonly version?: string
28
+ }
29
+
30
+ /**
31
+ * A complete cache key
32
+ */
33
+ export interface CacheKey {
34
+ /** String representation of the key */
35
+ readonly key: string
36
+ /** Components used to generate the key */
37
+ readonly components: CacheKeyComponents
38
+ /** Timestamp when key was generated */
39
+ readonly generatedAt: number
40
+ }
41
+
42
+ // ─── Cache Entry Types ───────────────────────────────────────────────────────
43
+
44
+ /**
45
+ * Metadata about a cache entry
46
+ */
47
+ export interface CacheEntryMetadata {
48
+ /** When the entry was created */
49
+ readonly createdAt: number
50
+ /** When the entry was last accessed */
51
+ lastAccessedAt: number
52
+ /** Number of times the entry has been accessed */
53
+ accessCount: number
54
+ /** Size of the entry in bytes */
55
+ readonly sizeBytes: number
56
+ /** Time-to-live in milliseconds (0 = no expiry) */
57
+ readonly ttlMs: number
58
+ /** When the entry expires (0 = never) */
59
+ readonly expiresAt: number
60
+ /** Source of the entry */
61
+ readonly source: 'generation' | 'warming' | 'import'
62
+ }
63
+
64
+ /**
65
+ * A cached proof entry
66
+ */
67
+ export interface CacheEntry<T = SingleProof> {
68
+ /** The cache key */
69
+ readonly key: CacheKey
70
+ /** The cached value */
71
+ readonly value: T
72
+ /** Entry metadata */
73
+ readonly metadata: CacheEntryMetadata
74
+ }
75
+
76
+ /**
77
+ * Result of a cache lookup
78
+ */
79
+ export interface CacheLookupResult<T = SingleProof> {
80
+ /** Whether the lookup found a valid entry */
81
+ readonly hit: boolean
82
+ /** The cached entry (if found) */
83
+ readonly entry?: CacheEntry<T>
84
+ /** Reason for miss (if applicable) */
85
+ readonly missReason?: 'not_found' | 'expired' | 'invalid' | 'evicted'
86
+ /** Lookup time in milliseconds */
87
+ readonly lookupTimeMs: number
88
+ }
89
+
90
+ // ─── Cache Configuration ─────────────────────────────────────────────────────
91
+
92
+ /**
93
+ * LRU cache configuration
94
+ */
95
+ export interface LRUCacheConfig {
96
+ /** Maximum number of entries */
97
+ readonly maxEntries: number
98
+ /** Maximum total size in bytes */
99
+ readonly maxSizeBytes: number
100
+ /** Default TTL in milliseconds (0 = no expiry) */
101
+ readonly defaultTtlMs: number
102
+ /** Enable entry access tracking */
103
+ readonly trackAccess: boolean
104
+ /** Eviction check interval in milliseconds */
105
+ readonly evictionIntervalMs: number
106
+ }
107
+
108
+ /**
109
+ * Default LRU cache configuration
110
+ */
111
+ export const DEFAULT_LRU_CONFIG: LRUCacheConfig = {
112
+ maxEntries: 1000,
113
+ maxSizeBytes: 100 * 1024 * 1024, // 100MB
114
+ defaultTtlMs: 3600000, // 1 hour
115
+ trackAccess: true,
116
+ evictionIntervalMs: 60000, // 1 minute
117
+ }
118
+
119
+ /**
120
+ * Persistent cache configuration (IndexedDB/File)
121
+ */
122
+ export interface PersistentCacheConfig {
123
+ /** Storage name/path */
124
+ readonly storageName: string
125
+ /** Maximum total size in bytes */
126
+ readonly maxSizeBytes: number
127
+ /** Default TTL in milliseconds */
128
+ readonly defaultTtlMs: number
129
+ /** Enable compression */
130
+ readonly enableCompression: boolean
131
+ /** Compression threshold (only compress if larger) */
132
+ readonly compressionThresholdBytes: number
133
+ /** Enable encryption */
134
+ readonly enableEncryption: boolean
135
+ /** Encryption key (required if encryption enabled) */
136
+ readonly encryptionKey?: string
137
+ }
138
+
139
+ /**
140
+ * Default persistent cache configuration
141
+ */
142
+ export const DEFAULT_PERSISTENT_CONFIG: PersistentCacheConfig = {
143
+ storageName: 'sip-proof-cache',
144
+ maxSizeBytes: 1024 * 1024 * 1024, // 1GB
145
+ defaultTtlMs: 86400000, // 24 hours
146
+ enableCompression: true,
147
+ compressionThresholdBytes: 1024, // 1KB
148
+ enableEncryption: false,
149
+ }
150
+
151
+ /**
152
+ * Multi-tier cache configuration
153
+ */
154
+ export interface MultiTierCacheConfig {
155
+ /** In-memory LRU cache config */
156
+ readonly memory: LRUCacheConfig
157
+ /** Persistent cache config */
158
+ readonly persistent?: PersistentCacheConfig
159
+ /** Enable write-through to persistent cache */
160
+ readonly writeThrough: boolean
161
+ /** Enable read-through from persistent cache */
162
+ readonly readThrough: boolean
163
+ /** Promote entries from persistent to memory on access */
164
+ readonly promoteOnAccess: boolean
165
+ }
166
+
167
+ /**
168
+ * Default multi-tier cache configuration
169
+ */
170
+ export const DEFAULT_MULTI_TIER_CONFIG: MultiTierCacheConfig = {
171
+ memory: DEFAULT_LRU_CONFIG,
172
+ writeThrough: true,
173
+ readThrough: true,
174
+ promoteOnAccess: true,
175
+ }
176
+
177
+ // ─── Cache Statistics ────────────────────────────────────────────────────────
178
+
179
+ /**
180
+ * Proof cache statistics
181
+ * (Named ProofCacheStats to avoid conflict with composer CacheStats)
182
+ */
183
+ export interface ProofCacheStats {
184
+ /** Total number of lookups */
185
+ readonly totalLookups: number
186
+ /** Number of cache hits */
187
+ readonly hits: number
188
+ /** Number of cache misses */
189
+ readonly misses: number
190
+ /** Hit rate (0-1) */
191
+ readonly hitRate: number
192
+ /** Current number of entries */
193
+ readonly entryCount: number
194
+ /** Current size in bytes */
195
+ readonly sizeBytes: number
196
+ /** Maximum size in bytes */
197
+ readonly maxSizeBytes: number
198
+ /** Number of evictions */
199
+ readonly evictions: number
200
+ /** Number of expirations */
201
+ readonly expirations: number
202
+ /** Average lookup time in milliseconds */
203
+ readonly avgLookupTimeMs: number
204
+ /** Average entry age in milliseconds */
205
+ readonly avgEntryAgeMs: number
206
+ }
207
+
208
+ /**
209
+ * Initial proof cache statistics
210
+ */
211
+ export const INITIAL_PROOF_CACHE_STATS: ProofCacheStats = {
212
+ totalLookups: 0,
213
+ hits: 0,
214
+ misses: 0,
215
+ hitRate: 0,
216
+ entryCount: 0,
217
+ sizeBytes: 0,
218
+ maxSizeBytes: 0,
219
+ evictions: 0,
220
+ expirations: 0,
221
+ avgLookupTimeMs: 0,
222
+ avgEntryAgeMs: 0,
223
+ }
224
+
225
+ // ─── Cache Events ────────────────────────────────────────────────────────────
226
+
227
+ /**
228
+ * Cache event types
229
+ */
230
+ export type CacheEventType =
231
+ | 'hit'
232
+ | 'miss'
233
+ | 'set'
234
+ | 'delete'
235
+ | 'evict'
236
+ | 'expire'
237
+ | 'clear'
238
+ | 'warm'
239
+
240
+ /**
241
+ * Cache event
242
+ */
243
+ export interface CacheEvent {
244
+ /** Event type */
245
+ readonly type: CacheEventType
246
+ /** Cache key involved (if applicable) */
247
+ readonly key?: string
248
+ /** Timestamp */
249
+ readonly timestamp: number
250
+ /** Additional event data */
251
+ readonly data?: Record<string, unknown>
252
+ }
253
+
254
+ /**
255
+ * Cache event listener
256
+ */
257
+ export type CacheEventListener = (event: CacheEvent) => void
258
+
259
+ // ─── Invalidation Strategies ─────────────────────────────────────────────────
260
+
261
+ /**
262
+ * Invalidation strategy type
263
+ */
264
+ export type InvalidationStrategy =
265
+ | 'ttl' // Time-based expiration
266
+ | 'lru' // Least recently used
267
+ | 'lfu' // Least frequently used
268
+ | 'fifo' // First in, first out
269
+ | 'size' // Size-based eviction
270
+ | 'manual' // Manual invalidation only
271
+
272
+ /**
273
+ * Invalidation rule
274
+ */
275
+ export interface InvalidationRule {
276
+ /** Rule identifier */
277
+ readonly id: string
278
+ /** Strategy to apply */
279
+ readonly strategy: InvalidationStrategy
280
+ /** Pattern to match keys (glob or regex) */
281
+ readonly pattern?: string
282
+ /** TTL for this rule (if ttl strategy) */
283
+ readonly ttlMs?: number
284
+ /** Priority (higher = applied first) */
285
+ readonly priority: number
286
+ }
287
+
288
+ // ─── Cache Warming ───────────────────────────────────────────────────────────
289
+
290
+ /**
291
+ * Cache warming configuration
292
+ */
293
+ export interface CacheWarmingConfig {
294
+ /** Enable automatic warming */
295
+ readonly enabled: boolean
296
+ /** Keys to warm on startup */
297
+ readonly warmOnStartup: CacheKeyComponents[]
298
+ /** Warm interval in milliseconds */
299
+ readonly warmIntervalMs: number
300
+ /** Maximum entries to warm per interval */
301
+ readonly maxEntriesPerWarm: number
302
+ /** Prediction model for warming */
303
+ readonly predictionModel: 'recent' | 'frequent' | 'pattern' | 'none'
304
+ }
305
+
306
+ /**
307
+ * Default cache warming configuration
308
+ */
309
+ export const DEFAULT_WARMING_CONFIG: CacheWarmingConfig = {
310
+ enabled: false,
311
+ warmOnStartup: [],
312
+ warmIntervalMs: 300000, // 5 minutes
313
+ maxEntriesPerWarm: 10,
314
+ predictionModel: 'frequent',
315
+ }
316
+
317
+ /**
318
+ * Cache warming result
319
+ */
320
+ export interface WarmingResult {
321
+ /** Number of entries warmed */
322
+ readonly warmed: number
323
+ /** Number of entries failed */
324
+ readonly failed: number
325
+ /** Time taken in milliseconds */
326
+ readonly timeMs: number
327
+ /** Keys that were warmed */
328
+ readonly keys: string[]
329
+ }
330
+
331
+ // ─── Interface Definitions ───────────────────────────────────────────────────
332
+
333
+ /**
334
+ * Cache key generator interface
335
+ */
336
+ export interface ICacheKeyGenerator {
337
+ /**
338
+ * Generate a cache key from components
339
+ */
340
+ generate(components: CacheKeyComponents): CacheKey
341
+
342
+ /**
343
+ * Parse a cache key string back to components
344
+ */
345
+ parse(key: string): CacheKeyComponents | null
346
+
347
+ /**
348
+ * Hash input data deterministically
349
+ */
350
+ hashInputs(inputs: Record<string, unknown>): string
351
+ }
352
+
353
+ /**
354
+ * Base cache interface
355
+ */
356
+ export interface IProofCache<T = SingleProof> {
357
+ /**
358
+ * Get an entry from the cache
359
+ */
360
+ get(key: CacheKey | string): Promise<CacheLookupResult<T>>
361
+
362
+ /**
363
+ * Set an entry in the cache
364
+ */
365
+ set(key: CacheKey | string, value: T, ttlMs?: number): Promise<boolean>
366
+
367
+ /**
368
+ * Delete an entry from the cache
369
+ */
370
+ delete(key: CacheKey | string): Promise<boolean>
371
+
372
+ /**
373
+ * Check if an entry exists
374
+ */
375
+ has(key: CacheKey | string): Promise<boolean>
376
+
377
+ /**
378
+ * Clear all entries
379
+ */
380
+ clear(): Promise<void>
381
+
382
+ /**
383
+ * Get cache statistics
384
+ */
385
+ getStats(): ProofCacheStats
386
+
387
+ /**
388
+ * Get all keys matching a pattern
389
+ */
390
+ keys(pattern?: string): Promise<string[]>
391
+
392
+ /**
393
+ * Add an event listener
394
+ */
395
+ addEventListener(listener: CacheEventListener): void
396
+
397
+ /**
398
+ * Remove an event listener
399
+ */
400
+ removeEventListener(listener: CacheEventListener): void
401
+ }
402
+
403
+ /**
404
+ * LRU cache interface
405
+ */
406
+ export interface ILRUCache<T = SingleProof> extends IProofCache<T> {
407
+ /**
408
+ * Get the current size in bytes
409
+ */
410
+ getSizeBytes(): number
411
+
412
+ /**
413
+ * Get the entry count
414
+ */
415
+ getEntryCount(): number
416
+
417
+ /**
418
+ * Manually trigger eviction
419
+ */
420
+ evict(count?: number): number
421
+
422
+ /**
423
+ * Get entries in LRU order
424
+ */
425
+ getEntriesLRU(): CacheEntry<T>[]
426
+
427
+ /**
428
+ * Dispose of the cache and cleanup resources
429
+ */
430
+ dispose(): void
431
+ }
432
+
433
+ /**
434
+ * Persistent cache interface
435
+ */
436
+ export interface IPersistentCache<T = SingleProof> extends IProofCache<T> {
437
+ /**
438
+ * Initialize the persistent storage
439
+ */
440
+ initialize(): Promise<void>
441
+
442
+ /**
443
+ * Close the persistent storage
444
+ */
445
+ close(): Promise<void>
446
+
447
+ /**
448
+ * Check if storage is available
449
+ */
450
+ isAvailable(): boolean
451
+
452
+ /**
453
+ * Get storage usage information
454
+ */
455
+ getStorageInfo(): Promise<{
456
+ used: number
457
+ available: number
458
+ quota: number
459
+ }>
460
+
461
+ /**
462
+ * Compact the storage (remove expired, defragment)
463
+ */
464
+ compact(): Promise<void>
465
+ }
466
+
467
+ /**
468
+ * Multi-tier cache interface
469
+ */
470
+ export interface IMultiTierCache<T = SingleProof> extends IProofCache<T> {
471
+ /**
472
+ * Get the memory cache tier
473
+ */
474
+ getMemoryCache(): ILRUCache<T>
475
+
476
+ /**
477
+ * Get the persistent cache tier (if available)
478
+ */
479
+ getPersistentCache(): IPersistentCache<T> | null
480
+
481
+ /**
482
+ * Warm the cache with specific keys
483
+ */
484
+ warm(keys: CacheKeyComponents[]): Promise<WarmingResult>
485
+
486
+ /**
487
+ * Start automatic cache warming
488
+ */
489
+ startWarming(config?: CacheWarmingConfig): void
490
+
491
+ /**
492
+ * Stop automatic cache warming
493
+ */
494
+ stopWarming(): void
495
+
496
+ /**
497
+ * Apply invalidation rules
498
+ */
499
+ invalidate(rules: InvalidationRule[]): Promise<number>
500
+
501
+ /**
502
+ * Dispose of the cache and cleanup resources
503
+ */
504
+ dispose(): Promise<void>
505
+ }
506
+
507
+ /**
508
+ * Verification key cache (specialized for VKs)
509
+ */
510
+ export interface IVerificationKeyCache {
511
+ /**
512
+ * Get a verification key
513
+ */
514
+ getVK(system: ProofSystem, circuitId: string): Promise<string | null>
515
+
516
+ /**
517
+ * Set a verification key
518
+ */
519
+ setVK(system: ProofSystem, circuitId: string, vk: string): Promise<void>
520
+
521
+ /**
522
+ * Preload verification keys for circuits
523
+ */
524
+ preloadVKs(circuits: Array<{ system: ProofSystem; circuitId: string }>): Promise<void>
525
+ }
526
+
527
+ /**
528
+ * Compiled circuit cache (specialized for compiled circuits)
529
+ */
530
+ export interface ICompiledCircuitCache {
531
+ /**
532
+ * Get a compiled circuit
533
+ */
534
+ getCircuit(system: ProofSystem, circuitId: string): Promise<Uint8Array | null>
535
+
536
+ /**
537
+ * Set a compiled circuit
538
+ */
539
+ setCircuit(system: ProofSystem, circuitId: string, circuit: Uint8Array): Promise<void>
540
+
541
+ /**
542
+ * Check if circuit is compiled and cached
543
+ */
544
+ hasCircuit(system: ProofSystem, circuitId: string): Promise<boolean>
545
+ }