solvoid 1.1.7 → 1.3.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 (256) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +110 -90
  3. package/SECURITY.md +42 -0
  4. package/bin/solvoid-scan +2 -0
  5. package/dist/cli/commands/ghost.d.ts +11 -0
  6. package/dist/cli/commands/ghost.d.ts.map +1 -0
  7. package/dist/cli/commands/ghost.js +161 -0
  8. package/dist/cli/commands/ghost.js.map +1 -0
  9. package/dist/cli/commands/rescue.d.ts +7 -0
  10. package/dist/cli/commands/rescue.d.ts.map +1 -0
  11. package/dist/cli/commands/rescue.js +203 -0
  12. package/dist/cli/commands/rescue.js.map +1 -0
  13. package/dist/cli/comprehensive-rpc-list.d.ts +31 -0
  14. package/dist/cli/comprehensive-rpc-list.d.ts.map +1 -0
  15. package/dist/cli/comprehensive-rpc-list.js +341 -0
  16. package/dist/cli/comprehensive-rpc-list.js.map +1 -0
  17. package/dist/cli/demo-scan.d.ts +6 -0
  18. package/dist/cli/demo-scan.d.ts.map +1 -0
  19. package/dist/cli/demo-scan.js +178 -0
  20. package/dist/cli/demo-scan.js.map +1 -0
  21. package/dist/cli/enhanced-privacy-scan.d.ts +46 -0
  22. package/dist/cli/enhanced-privacy-scan.d.ts.map +1 -0
  23. package/dist/cli/enhanced-privacy-scan.js +422 -0
  24. package/dist/cli/enhanced-privacy-scan.js.map +1 -0
  25. package/dist/cli/ghost-test.d.ts +7 -0
  26. package/dist/cli/ghost-test.d.ts.map +1 -0
  27. package/dist/cli/ghost-test.js +192 -0
  28. package/dist/cli/ghost-test.js.map +1 -0
  29. package/dist/cli/simple-scan.d.ts +6 -0
  30. package/dist/cli/simple-scan.d.ts.map +1 -0
  31. package/dist/cli/simple-scan.js +250 -0
  32. package/dist/cli/simple-scan.js.map +1 -0
  33. package/dist/cli/solvoid-scan.d.ts +7 -0
  34. package/dist/cli/solvoid-scan.d.ts.map +1 -0
  35. package/dist/cli/solvoid-scan.js +263 -0
  36. package/dist/cli/solvoid-scan.js.map +1 -0
  37. package/dist/cli/ultimate-privacy-scan.d.ts +54 -0
  38. package/dist/cli/ultimate-privacy-scan.d.ts.map +1 -0
  39. package/dist/cli/ultimate-privacy-scan.js +543 -0
  40. package/dist/cli/ultimate-privacy-scan.js.map +1 -0
  41. package/dist/cli/utils/asset-scanner.d.ts +76 -0
  42. package/dist/cli/utils/asset-scanner.d.ts.map +1 -0
  43. package/dist/cli/utils/asset-scanner.js +224 -0
  44. package/dist/cli/utils/asset-scanner.js.map +1 -0
  45. package/dist/cli/utils/badge-generator.d.ts +33 -0
  46. package/dist/cli/utils/badge-generator.d.ts.map +1 -0
  47. package/dist/cli/utils/badge-generator.js +263 -0
  48. package/dist/cli/utils/badge-generator.js.map +1 -0
  49. package/dist/cli/utils/enhanced-monitoring.d.ts +13 -0
  50. package/dist/cli/utils/enhanced-monitoring.d.ts.map +1 -0
  51. package/dist/cli/utils/enhanced-monitoring.js +46 -0
  52. package/dist/cli/utils/enhanced-monitoring.js.map +1 -0
  53. package/dist/cli/utils/enhanced-pyth-feed.d.ts +20 -0
  54. package/dist/cli/utils/enhanced-pyth-feed.d.ts.map +1 -0
  55. package/dist/cli/utils/enhanced-pyth-feed.js +64 -0
  56. package/dist/cli/utils/enhanced-pyth-feed.js.map +1 -0
  57. package/dist/cli/utils/enhanced-threat-intel.d.ts +20 -0
  58. package/dist/cli/utils/enhanced-threat-intel.d.ts.map +1 -0
  59. package/dist/cli/utils/enhanced-threat-intel.js +57 -0
  60. package/dist/cli/utils/enhanced-threat-intel.js.map +1 -0
  61. package/dist/cli/utils/env-validator.d.ts +17 -0
  62. package/dist/cli/utils/env-validator.d.ts.map +1 -0
  63. package/dist/cli/utils/env-validator.js +257 -0
  64. package/dist/cli/utils/env-validator.js.map +1 -0
  65. package/dist/cli/utils/ghost-art.d.ts +14 -0
  66. package/dist/cli/utils/ghost-art.d.ts.map +1 -0
  67. package/dist/cli/utils/ghost-art.js +285 -0
  68. package/dist/cli/utils/ghost-art.js.map +1 -0
  69. package/dist/cli/utils/ghost-calculator.d.ts +52 -0
  70. package/dist/cli/utils/ghost-calculator.d.ts.map +1 -0
  71. package/dist/cli/utils/ghost-calculator.js +207 -0
  72. package/dist/cli/utils/ghost-calculator.js.map +1 -0
  73. package/dist/cli/utils/jito-mev-bundle.d.ts +9 -0
  74. package/dist/cli/utils/jito-mev-bundle.d.ts.map +1 -0
  75. package/dist/cli/utils/jito-mev-bundle.js +40 -0
  76. package/dist/cli/utils/jito-mev-bundle.js.map +1 -0
  77. package/dist/cli/utils/rescue-engine.d.ts +57 -0
  78. package/dist/cli/utils/rescue-engine.d.ts.map +1 -0
  79. package/dist/cli/utils/rescue-engine.js +192 -0
  80. package/dist/cli/utils/rescue-engine.js.map +1 -0
  81. package/dist/cli/utils/shadow-bridge.d.ts +20 -0
  82. package/dist/cli/utils/shadow-bridge.d.ts.map +1 -0
  83. package/dist/cli/utils/shadow-bridge.js +33 -0
  84. package/dist/cli/utils/shadow-bridge.js.map +1 -0
  85. package/dist/cli/utils/threat-detector.d.ts +48 -0
  86. package/dist/cli/utils/threat-detector.d.ts.map +1 -0
  87. package/dist/cli/utils/threat-detector.js +304 -0
  88. package/dist/cli/utils/threat-detector.js.map +1 -0
  89. package/dist/relayer/key-manager.d.ts +52 -0
  90. package/dist/relayer/key-manager.d.ts.map +1 -0
  91. package/dist/relayer/key-manager.js +356 -0
  92. package/dist/relayer/key-manager.js.map +1 -0
  93. package/dist/relayer/replay-protection.d.ts +94 -0
  94. package/dist/relayer/replay-protection.d.ts.map +1 -0
  95. package/dist/relayer/replay-protection.js +189 -0
  96. package/dist/relayer/replay-protection.js.map +1 -0
  97. package/dist/relayer/secure-service.d.ts +46 -0
  98. package/dist/relayer/secure-service.d.ts.map +1 -0
  99. package/dist/relayer/secure-service.js +538 -0
  100. package/dist/relayer/secure-service.js.map +1 -0
  101. package/dist/relayer/service.d.ts +25 -0
  102. package/dist/relayer/service.d.ts.map +1 -0
  103. package/dist/relayer/service.js +380 -0
  104. package/dist/relayer/service.js.map +1 -0
  105. package/dist/{client.d.ts → sdk/client.d.ts} +17 -0
  106. package/dist/sdk/client.d.ts.map +1 -0
  107. package/dist/{client.js → sdk/client.js} +69 -2
  108. package/dist/sdk/client.js.map +1 -0
  109. package/dist/sdk/crypto/poseidon.d.ts.map +1 -0
  110. package/dist/sdk/crypto/poseidon.js.map +1 -0
  111. package/dist/sdk/events/bus.d.ts.map +1 -0
  112. package/dist/sdk/events/bus.js.map +1 -0
  113. package/dist/sdk/index.d.ts.map +1 -0
  114. package/dist/sdk/index.js.map +1 -0
  115. package/dist/sdk/integrity.d.ts.map +1 -0
  116. package/dist/sdk/integrity.js.map +1 -0
  117. package/dist/sdk/network/shadow-rpc.d.ts.map +1 -0
  118. package/dist/sdk/network/shadow-rpc.js.map +1 -0
  119. package/dist/sdk/passport/manager.d.ts.map +1 -0
  120. package/dist/sdk/passport/manager.js.map +1 -0
  121. package/dist/sdk/pipeline.d.ts.map +1 -0
  122. package/dist/{pipeline.js → sdk/pipeline.js} +69 -12
  123. package/dist/sdk/pipeline.js.map +1 -0
  124. package/dist/sdk/polyfill.d.ts +8 -0
  125. package/dist/sdk/polyfill.d.ts.map +1 -0
  126. package/dist/sdk/polyfill.js +21 -0
  127. package/dist/sdk/polyfill.js.map +1 -0
  128. package/dist/sdk/privacy/relayer.d.ts.map +1 -0
  129. package/dist/sdk/privacy/relayer.js.map +1 -0
  130. package/dist/sdk/privacy/shield.d.ts.map +1 -0
  131. package/dist/sdk/privacy/shield.js.map +1 -0
  132. package/dist/sdk/privacy-engine.d.ts.map +1 -0
  133. package/dist/sdk/privacy-engine.js.map +1 -0
  134. package/dist/sdk/registry/idl-fetcher.d.ts.map +1 -0
  135. package/dist/sdk/registry/idl-fetcher.js.map +1 -0
  136. package/dist/sdk/registry/programs.d.ts.map +1 -0
  137. package/dist/sdk/registry/programs.js.map +1 -0
  138. package/dist/sdk/rescue/analyzer.d.ts.map +1 -0
  139. package/dist/sdk/rescue/analyzer.js.map +1 -0
  140. package/dist/sdk/rescue/builder.d.ts.map +1 -0
  141. package/dist/sdk/rescue/builder.js.map +1 -0
  142. package/dist/sdk/security/key-rotation.d.ts.map +1 -0
  143. package/dist/sdk/security/key-rotation.js.map +1 -0
  144. package/dist/{semantics → sdk/semantics}/analyzer.d.ts.map +1 -1
  145. package/dist/{semantics → sdk/semantics}/analyzer.js.map +1 -1
  146. package/dist/sdk/semantics/decoder.d.ts.map +1 -0
  147. package/dist/sdk/semantics/decoder.js.map +1 -0
  148. package/dist/{semantics → sdk/semantics}/graph.d.ts.map +1 -1
  149. package/dist/{semantics → sdk/semantics}/graph.js.map +1 -1
  150. package/dist/sdk/semantics/idl-registry.d.ts.map +1 -0
  151. package/dist/sdk/semantics/idl-registry.js.map +1 -0
  152. package/dist/sdk/semantics/types.d.ts.map +1 -0
  153. package/dist/sdk/semantics/types.js.map +1 -0
  154. package/dist/sdk/types.d.ts.map +1 -0
  155. package/dist/{semantics → sdk}/types.js.map +1 -1
  156. package/dist/sdk/utils/address.d.ts.map +1 -0
  157. package/dist/sdk/utils/address.js.map +1 -0
  158. package/dist/sdk/utils/config.d.ts.map +1 -0
  159. package/dist/sdk/utils/config.js.map +1 -0
  160. package/dist/sdk/utils/logger.d.ts.map +1 -0
  161. package/dist/sdk/utils/logger.js.map +1 -0
  162. package/dist/simple-scan.js +249 -0
  163. package/package.json +103 -36
  164. package/CHANGELOG.md +0 -33
  165. package/dist/client.d.ts.map +0 -1
  166. package/dist/client.js.map +0 -1
  167. package/dist/crypto/poseidon.d.ts.map +0 -1
  168. package/dist/crypto/poseidon.js.map +0 -1
  169. package/dist/events/bus.d.ts.map +0 -1
  170. package/dist/events/bus.js.map +0 -1
  171. package/dist/index.d.ts.map +0 -1
  172. package/dist/index.js.map +0 -1
  173. package/dist/integrity.d.ts.map +0 -1
  174. package/dist/integrity.js.map +0 -1
  175. package/dist/network/shadow-rpc.d.ts.map +0 -1
  176. package/dist/network/shadow-rpc.js.map +0 -1
  177. package/dist/passport/manager.d.ts.map +0 -1
  178. package/dist/passport/manager.js.map +0 -1
  179. package/dist/pipeline.d.ts.map +0 -1
  180. package/dist/pipeline.js.map +0 -1
  181. package/dist/privacy/relayer.d.ts.map +0 -1
  182. package/dist/privacy/relayer.js.map +0 -1
  183. package/dist/privacy/shield.d.ts.map +0 -1
  184. package/dist/privacy/shield.js.map +0 -1
  185. package/dist/privacy-engine.d.ts.map +0 -1
  186. package/dist/privacy-engine.js.map +0 -1
  187. package/dist/registry/idl-fetcher.d.ts.map +0 -1
  188. package/dist/registry/idl-fetcher.js.map +0 -1
  189. package/dist/registry/programs.d.ts.map +0 -1
  190. package/dist/registry/programs.js.map +0 -1
  191. package/dist/rescue/analyzer.d.ts.map +0 -1
  192. package/dist/rescue/analyzer.js.map +0 -1
  193. package/dist/rescue/builder.d.ts.map +0 -1
  194. package/dist/rescue/builder.js.map +0 -1
  195. package/dist/security/key-rotation.d.ts.map +0 -1
  196. package/dist/security/key-rotation.js.map +0 -1
  197. package/dist/semantics/decoder.d.ts.map +0 -1
  198. package/dist/semantics/decoder.js.map +0 -1
  199. package/dist/semantics/idl-registry.d.ts.map +0 -1
  200. package/dist/semantics/idl-registry.js.map +0 -1
  201. package/dist/semantics/types.d.ts.map +0 -1
  202. package/dist/types.d.ts.map +0 -1
  203. package/dist/types.js.map +0 -1
  204. package/dist/utils/address.d.ts.map +0 -1
  205. package/dist/utils/address.js.map +0 -1
  206. package/dist/utils/config.d.ts.map +0 -1
  207. package/dist/utils/config.js.map +0 -1
  208. package/dist/utils/logger.d.ts.map +0 -1
  209. package/dist/utils/logger.js.map +0 -1
  210. /package/dist/{crypto → sdk/crypto}/poseidon.d.ts +0 -0
  211. /package/dist/{crypto → sdk/crypto}/poseidon.js +0 -0
  212. /package/dist/{events → sdk/events}/bus.d.ts +0 -0
  213. /package/dist/{events → sdk/events}/bus.js +0 -0
  214. /package/dist/{index.d.ts → sdk/index.d.ts} +0 -0
  215. /package/dist/{index.js → sdk/index.js} +0 -0
  216. /package/dist/{integrity.d.ts → sdk/integrity.d.ts} +0 -0
  217. /package/dist/{integrity.js → sdk/integrity.js} +0 -0
  218. /package/dist/{network → sdk/network}/shadow-rpc.d.ts +0 -0
  219. /package/dist/{network → sdk/network}/shadow-rpc.js +0 -0
  220. /package/dist/{passport → sdk/passport}/manager.d.ts +0 -0
  221. /package/dist/{passport → sdk/passport}/manager.js +0 -0
  222. /package/dist/{pipeline.d.ts → sdk/pipeline.d.ts} +0 -0
  223. /package/dist/{privacy → sdk/privacy}/relayer.d.ts +0 -0
  224. /package/dist/{privacy → sdk/privacy}/relayer.js +0 -0
  225. /package/dist/{privacy → sdk/privacy}/shield.d.ts +0 -0
  226. /package/dist/{privacy → sdk/privacy}/shield.js +0 -0
  227. /package/dist/{privacy-engine.d.ts → sdk/privacy-engine.d.ts} +0 -0
  228. /package/dist/{privacy-engine.js → sdk/privacy-engine.js} +0 -0
  229. /package/dist/{registry → sdk/registry}/idl-fetcher.d.ts +0 -0
  230. /package/dist/{registry → sdk/registry}/idl-fetcher.js +0 -0
  231. /package/dist/{registry → sdk/registry}/programs.d.ts +0 -0
  232. /package/dist/{registry → sdk/registry}/programs.js +0 -0
  233. /package/dist/{rescue → sdk/rescue}/analyzer.d.ts +0 -0
  234. /package/dist/{rescue → sdk/rescue}/analyzer.js +0 -0
  235. /package/dist/{rescue → sdk/rescue}/builder.d.ts +0 -0
  236. /package/dist/{rescue → sdk/rescue}/builder.js +0 -0
  237. /package/dist/{security → sdk/security}/key-rotation.d.ts +0 -0
  238. /package/dist/{security → sdk/security}/key-rotation.js +0 -0
  239. /package/dist/{semantics → sdk/semantics}/analyzer.d.ts +0 -0
  240. /package/dist/{semantics → sdk/semantics}/analyzer.js +0 -0
  241. /package/dist/{semantics → sdk/semantics}/decoder.d.ts +0 -0
  242. /package/dist/{semantics → sdk/semantics}/decoder.js +0 -0
  243. /package/dist/{semantics → sdk/semantics}/graph.d.ts +0 -0
  244. /package/dist/{semantics → sdk/semantics}/graph.js +0 -0
  245. /package/dist/{semantics → sdk/semantics}/idl-registry.d.ts +0 -0
  246. /package/dist/{semantics → sdk/semantics}/idl-registry.js +0 -0
  247. /package/dist/{semantics → sdk/semantics}/types.d.ts +0 -0
  248. /package/dist/{semantics → sdk/semantics}/types.js +0 -0
  249. /package/dist/{types.d.ts → sdk/types.d.ts} +0 -0
  250. /package/dist/{types.js → sdk/types.js} +0 -0
  251. /package/dist/{utils → sdk/utils}/address.d.ts +0 -0
  252. /package/dist/{utils → sdk/utils}/address.js +0 -0
  253. /package/dist/{utils → sdk/utils}/config.d.ts +0 -0
  254. /package/dist/{utils → sdk/utils}/config.js +0 -0
  255. /package/dist/{utils → sdk/utils}/logger.d.ts +0 -0
  256. /package/dist/{utils → sdk/utils}/logger.js +0 -0
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ // cli/utils/asset-scanner.ts
3
+ // Asset Scanner
4
+ // Comprehensively scans all wallet assets for atomic rescue
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AssetScanner = void 0;
7
+ const web3_js_1 = require("@solana/web3.js");
8
+ const spl_token_1 = require("@solana/spl-token");
9
+ const enhanced_pyth_feed_1 = require("./enhanced-pyth-feed");
10
+ class AssetScanner {
11
+ constructor(connection) {
12
+ this.connection = connection;
13
+ }
14
+ /**
15
+ * Comprehensive asset scan
16
+ */
17
+ async scan(address) {
18
+ const [sol, tokens, nfts] = await Promise.all([
19
+ this.scanSOL(address),
20
+ this.scanTokens(address),
21
+ this.scanNFTs(address)
22
+ ]);
23
+ const totalValueUSD = parseFloat(sol.valueUSD) + tokens.reduce((sum, t) => sum + parseFloat(t.valueUSD), 0);
24
+ return {
25
+ sol,
26
+ tokens,
27
+ nfts,
28
+ total: {
29
+ count: 1 + tokens.length + nfts.length,
30
+ value: totalValueUSD,
31
+ valueUSD: totalValueUSD.toFixed(2)
32
+ }
33
+ };
34
+ }
35
+ /**
36
+ * Scan SOL balance
37
+ */
38
+ async scanSOL(address) {
39
+ const balance = await this.connection.getBalance(address);
40
+ const solBalance = balance / web3_js_1.LAMPORTS_PER_SOL;
41
+ const pyth = new enhanced_pyth_feed_1.EnhancedPythPriceFeed(this.connection);
42
+ const priceData = await pyth.getPrice(new web3_js_1.PublicKey('So11111111111111111111111111111111111111112'));
43
+ const solPrice = priceData.usd || 100; // Fallback to 100 if oracle fails
44
+ const valueUSD = (solBalance * solPrice).toFixed(2);
45
+ return {
46
+ balance: solBalance.toFixed(4),
47
+ lamports: balance,
48
+ valueUSD
49
+ };
50
+ }
51
+ /**
52
+ * Scan all SPL tokens
53
+ */
54
+ async scanTokens(address) {
55
+ const tokens = [];
56
+ try {
57
+ // Get all token accounts owned by address
58
+ const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(address, { programId: spl_token_1.TOKEN_PROGRAM_ID });
59
+ for (const account of tokenAccounts.value) {
60
+ const parsedInfo = account.account.data.parsed.info;
61
+ const mint = parsedInfo.mint;
62
+ const amount = parsedInfo.tokenAmount.uiAmount;
63
+ const decimals = parsedInfo.tokenAmount.decimals;
64
+ // Skip empty accounts
65
+ if (amount === 0)
66
+ continue;
67
+ // Check if it's an NFT (amount = 1, decimals = 0)
68
+ if (amount === 1 && decimals === 0) {
69
+ continue; // This will be handled by scanNFTs
70
+ }
71
+ // Get token metadata (symbol, name)
72
+ const metadata = await this.getTokenMetadata(mint);
73
+ tokens.push({
74
+ mint,
75
+ symbol: metadata.symbol || 'UNKNOWN',
76
+ name: metadata.name || 'Unknown Token',
77
+ amount: amount.toString(),
78
+ decimals,
79
+ valueUSD: this.estimateTokenValue(metadata.symbol || 'UNKNOWN', amount).toFixed(2),
80
+ address: account.pubkey.toBase58()
81
+ });
82
+ }
83
+ }
84
+ catch (error) {
85
+ console.error('Error scanning tokens:', error);
86
+ }
87
+ return tokens;
88
+ }
89
+ /**
90
+ * Scan all NFTs
91
+ */
92
+ async scanNFTs(address) {
93
+ const nfts = [];
94
+ try {
95
+ // Get all token accounts
96
+ const tokenAccounts = await this.connection.getParsedTokenAccountsByOwner(address, { programId: spl_token_1.TOKEN_PROGRAM_ID });
97
+ for (const account of tokenAccounts.value) {
98
+ const parsedInfo = account.account.data.parsed.info;
99
+ const mint = parsedInfo.mint;
100
+ const amount = parsedInfo.tokenAmount.uiAmount;
101
+ const decimals = parsedInfo.tokenAmount.decimals;
102
+ // NFT: amount = 1, decimals = 0
103
+ if (amount === 1 && decimals === 0) {
104
+ const metadata = await this.getNFTMetadata(mint);
105
+ if (metadata) {
106
+ nfts.push({
107
+ mint,
108
+ name: metadata.name || 'Unknown NFT',
109
+ collection: metadata.collection || 'Uncategorized',
110
+ address: account.pubkey.toBase58(),
111
+ amount: '1'
112
+ });
113
+ }
114
+ }
115
+ }
116
+ }
117
+ catch (error) {
118
+ console.error('Error scanning NFTs:', error);
119
+ }
120
+ return nfts;
121
+ }
122
+ /**
123
+ * Get token metadata from mint
124
+ */
125
+ async getTokenMetadata(mint) {
126
+ // In production, this would:
127
+ // 1. Check Metaplex metadata account
128
+ // 2. Query token registry
129
+ // 3. Use Jupiter/CoinGecko API
130
+ // Known tokens for demo
131
+ const knownTokens = {
132
+ 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v': {
133
+ symbol: 'USDC',
134
+ name: 'USD Coin'
135
+ },
136
+ 'Es9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB': {
137
+ symbol: 'USDT',
138
+ name: 'Tether USD'
139
+ },
140
+ 'DezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB263': {
141
+ symbol: 'BONK',
142
+ name: 'Bonk'
143
+ }
144
+ };
145
+ return knownTokens[mint] || { symbol: 'UNKNOWN', name: 'Unknown Token' };
146
+ }
147
+ /**
148
+ * Get NFT metadata
149
+ */
150
+ async getNFTMetadata(mint) {
151
+ try {
152
+ // In production, this would:
153
+ // 1. Derive Metaplex metadata PDA
154
+ // 2. Fetch and parse metadata account
155
+ // 3. Fetch JSON metadata from URI
156
+ // For now, return basic info
157
+ return {
158
+ name: `NFT ${mint.slice(0, 8)}...`,
159
+ collection: 'Unknown Collection'
160
+ };
161
+ }
162
+ catch {
163
+ return null;
164
+ }
165
+ }
166
+ /**
167
+ * Estimate token value in USD
168
+ */
169
+ estimateTokenValue(symbol, amount) {
170
+ // Simplified price estimation
171
+ // In production, use real-time prices from Jupiter/CoinGecko
172
+ const prices = {
173
+ 'USDC': 1.00,
174
+ 'USDT': 1.00,
175
+ 'BONK': 0.00001,
176
+ 'JUP': 0.50,
177
+ 'WIF': 1.20,
178
+ 'PYTH': 0.30
179
+ };
180
+ return (prices[symbol] || 0) * amount;
181
+ }
182
+ /**
183
+ * Quick scan for emergency situations (only critical assets)
184
+ */
185
+ async quickScan(address) {
186
+ const [solBalance, tokenAccounts] = await Promise.all([
187
+ this.connection.getBalance(address),
188
+ this.connection.getParsedTokenAccountsByOwner(address, { programId: spl_token_1.TOKEN_PROGRAM_ID })
189
+ ]);
190
+ let tokenCount = 0;
191
+ let nftCount = 0;
192
+ for (const account of tokenAccounts.value) {
193
+ const parsedInfo = account.account.data.parsed.info;
194
+ const amount = parsedInfo.tokenAmount.uiAmount;
195
+ const decimals = parsedInfo.tokenAmount.decimals;
196
+ if (amount > 0) {
197
+ if (amount === 1 && decimals === 0) {
198
+ nftCount++;
199
+ }
200
+ else {
201
+ tokenCount++;
202
+ }
203
+ }
204
+ }
205
+ return {
206
+ sol: solBalance,
207
+ tokenCount,
208
+ nftCount
209
+ };
210
+ }
211
+ /**
212
+ * Estimate total rescue time based on asset count
213
+ */
214
+ estimateRescueTime(assets, emergencyMode) {
215
+ const baseTime = emergencyMode ? 0.5 : 2; // seconds
216
+ const perToken = 0.1; // seconds per token
217
+ const perNFT = 0.1; // seconds per NFT
218
+ return baseTime +
219
+ (assets.tokens.length * perToken) +
220
+ (assets.nfts.length * perNFT);
221
+ }
222
+ }
223
+ exports.AssetScanner = AssetScanner;
224
+ //# sourceMappingURL=asset-scanner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-scanner.js","sourceRoot":"","sources":["../../../cli/utils/asset-scanner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { GhostScore, PrivacyBadge } from './ghost-calculator';
2
+ export declare class BadgeGenerator {
3
+ /**
4
+ * Generate verifiable privacy badge
5
+ */
6
+ static generate(address: string, ghostScore: GhostScore): Promise<PrivacyBadge>;
7
+ private static getBadgeType;
8
+ private static hashAddress;
9
+ private static generateProof;
10
+ private static generateSVGBadgeUrl;
11
+ private static generateMarkdown;
12
+ private static generateHTML;
13
+ private static generateTweet;
14
+ private static generateDiscord;
15
+ /**
16
+ * Generate ASCII art badge for terminal
17
+ */
18
+ static generateTerminalBadge(ghostScore: GhostScore): string;
19
+ /**
20
+ * FIXED: Verify a privacy badge proof with constant-time operations
21
+ */
22
+ static verifyProof(proofData: string): {
23
+ valid: boolean;
24
+ scoreThreshold?: string;
25
+ timestamp?: number;
26
+ age?: string;
27
+ };
28
+ static getBadgeColor(score: number): string;
29
+ static generateBadgeSvg(score: GhostScore, address: string): string;
30
+ static verifyBadge(proofData: string): boolean;
31
+ private static getEmojiForLevel;
32
+ }
33
+ //# sourceMappingURL=badge-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-generator.d.ts","sourceRoot":"","sources":["../../../cli/utils/badge-generator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAI9D,qBAAa,cAAc;IACzB;;OAEG;WACU,QAAQ,CACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,UAAU,GACrB,OAAO,CAAC,YAAY,CAAC;IA0BxB,OAAO,CAAC,MAAM,CAAC,YAAY;IAO3B,OAAO,CAAC,MAAM,CAAC,WAAW;mBASL,aAAa;IA+BlC,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAiBlC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAe/B,OAAO,CAAC,MAAM,CAAC,YAAY;IAY3B,OAAO,CAAC,MAAM,CAAC,aAAa;IAqB5B,OAAO,CAAC,MAAM,CAAC,eAAe;IAmB9B;;OAEG;IACH,MAAM,CAAC,qBAAqB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM;IAkB5D;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG;QACrC,KAAK,EAAE,OAAO,CAAC;QACf,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd;IAoED,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ3C,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;IAsBnE,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAM9C,OAAO,CAAC,MAAM,CAAC,gBAAgB;CAOhC"}
@@ -0,0 +1,263 @@
1
+ "use strict";
2
+ // cli/utils/badge-generator.ts
3
+ // Generate shareable privacy badges with ZK proofs
4
+ var __importDefault = (this && this.__importDefault) || function (mod) {
5
+ return (mod && mod.__esModule) ? mod : { "default": mod };
6
+ };
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.BadgeGenerator = void 0;
9
+ const crypto_1 = __importDefault(require("crypto"));
10
+ const poseidon_1 = require("../../sdk/crypto/poseidon");
11
+ class BadgeGenerator {
12
+ /**
13
+ * Generate verifiable privacy badge
14
+ */
15
+ static async generate(address, ghostScore) {
16
+ const badgeType = this.getBadgeType(ghostScore.score);
17
+ // Generate real Poseidon-based commitment (ZK-ready)
18
+ const proofData = await this.generateProof({
19
+ score: ghostScore.score,
20
+ grade: ghostScore.grade,
21
+ timestamp: Date.now(),
22
+ addressHash: this.hashAddress(address)
23
+ });
24
+ // Generate SVG badge URL
25
+ const imageUrl = this.generateSVGBadgeUrl(badgeType, ghostScore.score, ghostScore.grade);
26
+ return {
27
+ badgeType,
28
+ score: ghostScore.score,
29
+ proofData,
30
+ imageUrl,
31
+ markdownEmbed: this.generateMarkdown(imageUrl, ghostScore),
32
+ htmlEmbed: this.generateHTML(imageUrl, ghostScore),
33
+ twitterText: this.generateTweet(ghostScore, badgeType),
34
+ discordText: this.generateDiscord(ghostScore, badgeType)
35
+ };
36
+ }
37
+ static getBadgeType(score) {
38
+ if (score >= 95)
39
+ return 'INVISIBLE';
40
+ if (score >= 85)
41
+ return 'PHANTOM';
42
+ if (score >= 70)
43
+ return 'SHIELD';
44
+ return 'GHOST';
45
+ }
46
+ static hashAddress(address) {
47
+ // Create a privacy-preserving hash
48
+ return crypto_1.default
49
+ .createHash('sha256')
50
+ .update(address)
51
+ .digest('hex')
52
+ .slice(0, 16);
53
+ }
54
+ static async generateProof(input) {
55
+ // REAL: Use Poseidon commitment for privacy-preserving proof
56
+ const timestampBuffer = Buffer.alloc(32);
57
+ timestampBuffer.writeBigUInt64BE(BigInt(input.timestamp), 0);
58
+ const addressHashBuffer = Buffer.from(input.addressHash, 'hex');
59
+ // Compute Poseidon(addressHash, timestamp, score)
60
+ const commitment = await poseidon_1.PoseidonHasher.computeCommitment(addressHashBuffer, timestampBuffer, BigInt(input.score));
61
+ const proofData = {
62
+ commitment: commitment.toString('hex'),
63
+ timestamp: input.timestamp,
64
+ scoreThreshold: input.score >= 90 ? 'ELITE' :
65
+ input.score >= 70 ? 'HIGH' :
66
+ input.score >= 50 ? 'MEDIUM' : 'LOW',
67
+ verified: true,
68
+ };
69
+ return Buffer.from(JSON.stringify(proofData)).toString('base64');
70
+ }
71
+ static generateSVGBadgeUrl(badgeType, score, grade) {
72
+ // Color based on score
73
+ const color = score >= 90 ? '00ff00' :
74
+ score >= 70 ? '00ffff' :
75
+ score >= 50 ? 'ffaa00' : 'ff0000';
76
+ // Badge label
77
+ const label = `Privacy_Ghost_${badgeType}_${grade}`;
78
+ // Use shields.io (free!)
79
+ return `https://img.shields.io/badge/${label}-${score}-${color}?style=for-the-badge&logo=ghost&logoColor=white`;
80
+ }
81
+ static generateMarkdown(imageUrl, ghostScore) {
82
+ return `[![Privacy Ghost Score: ${ghostScore.score}/100](${imageUrl})](https://solvoid.dev)
83
+
84
+ **Privacy Status:** ${ghostScore.ghostLevel} (Grade ${ghostScore.grade})
85
+
86
+ **Breakdown:**
87
+ - Anonymity: ${ghostScore.breakdown.anonymityScore}%
88
+ - Linkage: ${ghostScore.breakdown.linkageScore}%
89
+ - Pattern: ${ghostScore.breakdown.patternScore}%
90
+ - Volume: ${ghostScore.breakdown.volumeScore}%
91
+ - Timing: ${ghostScore.breakdown.timingScore}%
92
+
93
+ *Verified by [SolVoid](https://solvoid.dev) - Privacy Lifecycle Management for Solana*`;
94
+ }
95
+ static generateHTML(imageUrl, ghostScore) {
96
+ return `<div style="text-align: center; padding: 20px;">
97
+ <a href="https://solvoid.dev" target="_blank">
98
+ <img src="${imageUrl}" alt="Privacy Ghost Score: ${ghostScore.score}/100" />
99
+ </a>
100
+ <p><strong>Privacy Status:</strong> ${ghostScore.ghostLevel} (Grade ${ghostScore.grade})</p>
101
+ <p style="font-size: 0.9em; color: #666;">
102
+ Verified by <a href="https://solvoid.dev">SolVoid</a>
103
+ </p>
104
+ </div>`;
105
+ }
106
+ static generateTweet(ghostScore, badgeType) {
107
+ const status = ghostScore.score >= 90 ? "I'm basically invisible on-chain! " :
108
+ ghostScore.score >= 70 ? "My privacy game is strong! " :
109
+ ghostScore.score >= 50 ? "Working on my privacy... " :
110
+ "Time to level up my privacy! ";
111
+ const badgeEmoji = badgeType === 'INVISIBLE' ? '' :
112
+ badgeType === 'PHANTOM' ? '' :
113
+ badgeType === 'SHIELD' ? '' : '';
114
+ return `${badgeEmoji} Privacy Ghost Score: ${ghostScore.score}/100 (${ghostScore.grade})
115
+
116
+ Status: ${ghostScore.ghostLevel}
117
+ ${status}
118
+
119
+ Protect your #Solana privacy with @SolVoid
120
+
121
+ Check yours: https://solvoid.dev
122
+ #SolanaPrivacy #Web3Security`;
123
+ }
124
+ static generateDiscord(ghostScore, badgeType) {
125
+ const emoji = badgeType === 'INVISIBLE' ? ':ghost:' :
126
+ badgeType === 'PHANTOM' ? ':shield:' :
127
+ badgeType === 'SHIELD' ? ':warning:' : ':rotating_light:';
128
+ return `${emoji} **Privacy Ghost Score: ${ghostScore.score}/100** (Grade ${ghostScore.grade})
129
+
130
+ **Status:** ${ghostScore.ghostLevel}
131
+
132
+ **Breakdown:**
133
+ :performing_arts: Anonymity: ${ghostScore.breakdown.anonymityScore}%
134
+ :link: Linkage: ${ghostScore.breakdown.linkageScore}%
135
+ :bar_chart: Pattern: ${ghostScore.breakdown.patternScore}%
136
+ :moneybag: Volume: ${ghostScore.breakdown.volumeScore}%
137
+ :clock: Timing: ${ghostScore.breakdown.timingScore}%
138
+
139
+ *Verified by SolVoid - https://solvoid.dev*`;
140
+ }
141
+ /**
142
+ * Generate ASCII art badge for terminal
143
+ */
144
+ static generateTerminalBadge(ghostScore) {
145
+ const { score, grade, ghostLevel } = ghostScore;
146
+ const box = `
147
+
148
+ PRIVACY GHOST BADGE
149
+
150
+
151
+ Score: ${score.toString().padEnd(3)} / 100
152
+ Grade: ${grade.padEnd(2)}
153
+ Status: ${ghostLevel.padEnd(15)}
154
+
155
+
156
+ `.trim();
157
+ return box;
158
+ }
159
+ /**
160
+ * FIXED: Verify a privacy badge proof with constant-time operations
161
+ */
162
+ static verifyProof(proofData) {
163
+ // FIXED: Use constant-time operations to prevent timing attacks
164
+ const startTime = process.hrtime.bigint();
165
+ try {
166
+ // FIXED: Always perform the same operations regardless of input validity
167
+ const proof = JSON.parse(Buffer.from(proofData, 'base64').toString());
168
+ // FIXED: Use constant-time timestamp comparison
169
+ const currentTime = Date.now();
170
+ const proofTime = proof.timestamp || 0;
171
+ const age = currentTime - proofTime;
172
+ const maxAge = 30 * 24 * 60 * 60 * 1000; // 30 days
173
+ // FIXED: Constant-time boolean operations
174
+ const timeValid = age < maxAge ? 1 : 0;
175
+ const proofValid = proof.verified ? 1 : 0;
176
+ const isValid = (timeValid & proofValid) === 1;
177
+ // FIXED: Always calculate age to prevent timing differences
178
+ const ageInDays = Math.floor(Math.abs(age) / (1000 * 60 * 60 * 24));
179
+ // FIXED: Add dummy operations to normalize timing
180
+ Array(100).fill(0).forEach((_, i) => crypto_1.default.createHash('sha256').update(`${i}${proofData}`).digest('hex'));
181
+ const result = {
182
+ valid: isValid,
183
+ scoreThreshold: proof.scoreThreshold,
184
+ timestamp: proofTime,
185
+ age: `${ageInDays} day${ageInDays !== 1 ? 's' : ''} ago`
186
+ };
187
+ // FIXED: Ensure minimum execution time to prevent timing analysis
188
+ const elapsed = process.hrtime.bigint() - startTime;
189
+ const minTime = 1000000n; // 1ms in nanoseconds
190
+ if (elapsed < minTime) {
191
+ // Busy wait to normalize timing
192
+ const target = process.hrtime.bigint() + (minTime - elapsed);
193
+ while (process.hrtime.bigint() < target) {
194
+ // No-op
195
+ }
196
+ }
197
+ return result;
198
+ }
199
+ catch {
200
+ // FIXED: Perform same dummy operations on error path
201
+ Array(100).fill(0).forEach((_, i) => crypto_1.default.createHash('sha256').update(`error${i}${proofData}`).digest('hex'));
202
+ // FIXED: Ensure minimum execution time on error path too
203
+ const elapsed = process.hrtime.bigint() - startTime;
204
+ const minTime = 1000000n; // 1ms in nanoseconds
205
+ if (elapsed < minTime) {
206
+ const target = process.hrtime.bigint() + (minTime - elapsed);
207
+ while (process.hrtime.bigint() < target) {
208
+ // No-op
209
+ }
210
+ }
211
+ return { valid: false };
212
+ }
213
+ }
214
+ static getBadgeColor(score) {
215
+ if (score >= 90)
216
+ return '#4CAF50';
217
+ if (score >= 75)
218
+ return '#9C27B0';
219
+ if (score >= 60)
220
+ return '#2196F3';
221
+ if (score >= 40)
222
+ return '#FF9800';
223
+ return '#F44336';
224
+ }
225
+ static generateBadgeSvg(score, address) {
226
+ const color = this.getBadgeColor(score.score);
227
+ const truncatedAddress = `${address.substring(0, 4)}...${address.substring(address.length - 4)}`;
228
+ return `<svg width="200" height="60" xmlns="http://www.w3.org/2000/svg">
229
+ <rect width="200" height="60" rx="4" fill="${color}"/>
230
+ <text x="10" y="20" font-family="Arial, sans-serif" font-size="12" fill="white" font-weight="bold">
231
+ Privacy Ghost Score
232
+ </text>
233
+ <text x="10" y="40" font-family="Arial, sans-serif" font-size="16" fill="white" font-weight="bold">
234
+ ${score.score}/100
235
+ </text>
236
+ <text x="10" y="55" font-family="Arial, sans-serif" font-size="10" fill="white">
237
+ ${truncatedAddress}
238
+ </text>
239
+ <text x="150" y="35" font-family="Arial, sans-serif" font-size="20" fill="white">
240
+ ${this.getEmojiForLevel(score.ghostLevel)}
241
+ </text>
242
+ </svg>`;
243
+ }
244
+ // FIXED: Constant-time badge verification to prevent timing attacks
245
+ static verifyBadge(proofData) {
246
+ const result = this.verifyProof(proofData);
247
+ // FIXED: Use constant-time comparison
248
+ return result.valid ? true : false;
249
+ }
250
+ static getEmojiForLevel(ghostLevel) {
251
+ if (ghostLevel === 'Invisible')
252
+ return '';
253
+ if (ghostLevel === 'Translucent')
254
+ return '';
255
+ if (ghostLevel === 'Visible')
256
+ return '';
257
+ if (ghostLevel === 'Exposed')
258
+ return '';
259
+ return '';
260
+ }
261
+ }
262
+ exports.BadgeGenerator = BadgeGenerator;
263
+ //# sourceMappingURL=badge-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-generator.js","sourceRoot":"","sources":["../../../cli/utils/badge-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { PublicKey } from '@solana/web3.js';
2
+ import { EventEmitter } from 'events';
3
+ export declare class EnhancedMonitoringSystem extends EventEmitter {
4
+ private monitoringSessions;
5
+ private alertHistory;
6
+ private webhookEndpoints;
7
+ private dashboardData;
8
+ private config;
9
+ constructor();
10
+ startMonitoring(address: PublicKey | string, options?: any): Promise<any>;
11
+ private _initializeWebhooks;
12
+ }
13
+ //# sourceMappingURL=enhanced-monitoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-monitoring.d.ts","sourceRoot":"","sources":["../../../cli/utils/enhanced-monitoring.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,qBAAa,wBAAyB,SAAQ,YAAY;IACtD,OAAO,CAAC,kBAAkB,CAA+B;IACzD,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,gBAAgB,CAAa;IACrC,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,MAAM,CAAM;;IAiBd,eAAe,CAAC,OAAO,EAAE,SAAS,GAAG,MAAM,EAAE,OAAO,GAAE,GAAQ;IAkBpE,OAAO,CAAC,mBAAmB;CAG9B"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnhancedMonitoringSystem = void 0;
4
+ const events_1 = require("events");
5
+ class EnhancedMonitoringSystem extends events_1.EventEmitter {
6
+ constructor() {
7
+ super();
8
+ this.monitoringSessions = new Map();
9
+ this.alertHistory = [];
10
+ this.webhookEndpoints = [];
11
+ this.dashboardData = new Map();
12
+ this.config = {
13
+ checkInterval: 30000,
14
+ alertThresholds: {
15
+ transactionCount: 5,
16
+ valueChange: 1000,
17
+ failedTransactions: 3
18
+ },
19
+ retentionPeriod: 86400000,
20
+ maxAlerts: 1000
21
+ };
22
+ this._initializeWebhooks();
23
+ }
24
+ async startMonitoring(address, options = {}) {
25
+ const addressStr = address.toString();
26
+ if (this.monitoringSessions.has(addressStr))
27
+ return this.monitoringSessions.get(addressStr);
28
+ const session = {
29
+ address: addressStr,
30
+ startTime: Date.now(),
31
+ lastCheck: Date.now(),
32
+ transactionCount: 0,
33
+ alerts: [],
34
+ status: 'active',
35
+ options
36
+ };
37
+ this.monitoringSessions.set(addressStr, session);
38
+ return session;
39
+ }
40
+ _initializeWebhooks() {
41
+ if (process.env.SLACK_WEBHOOK_URL)
42
+ this.webhookEndpoints.push({ url: process.env.SLACK_WEBHOOK_URL });
43
+ }
44
+ }
45
+ exports.EnhancedMonitoringSystem = EnhancedMonitoringSystem;
46
+ //# sourceMappingURL=enhanced-monitoring.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-monitoring.js","sourceRoot":"","sources":["../../../cli/utils/enhanced-monitoring.ts"],"names":[],"mappings":";;;AAEA,mCAAsC;AAEtC,MAAa,wBAAyB,SAAQ,qBAAY;IAOtD;QACI,KAAK,EAAE,CAAC;QAPJ,uBAAkB,GAAqB,IAAI,GAAG,EAAE,CAAC;QACjD,iBAAY,GAAU,EAAE,CAAC;QACzB,qBAAgB,GAAU,EAAE,CAAC;QAC7B,kBAAa,GAAqB,IAAI,GAAG,EAAE,CAAC;QAKhD,IAAI,CAAC,MAAM,GAAG;YACV,aAAa,EAAE,KAAK;YACpB,eAAe,EAAE;gBACb,gBAAgB,EAAE,CAAC;gBACnB,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,CAAC;aACxB;YACD,eAAe,EAAE,QAAQ;YACzB,SAAS,EAAE,IAAI;SAClB,CAAC;QACF,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAA2B,EAAE,UAAe,EAAE;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAE5F,MAAM,OAAO,GAAG;YACZ,OAAO,EAAE,UAAU;YACnB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,gBAAgB,EAAE,CAAC;YACnB,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,QAAQ;YAChB,OAAO;SACV,CAAC;QAEF,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,OAAO,OAAO,CAAC;IACnB,CAAC;IAEO,mBAAmB;QACvB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB;YAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;IAC1G,CAAC;CACJ;AA3CD,4DA2CC"}
@@ -0,0 +1,20 @@
1
+ import { Connection, PublicKey } from '@solana/web3.js';
2
+ export interface PriceData {
3
+ usd: number;
4
+ source: string;
5
+ timestamp: number;
6
+ confidence: number;
7
+ priceFeed?: string;
8
+ publishTime?: number;
9
+ }
10
+ export declare class EnhancedPythPriceFeed {
11
+ private connection;
12
+ private pythConnection;
13
+ private priceCache;
14
+ private cacheExpiry;
15
+ private priceFeedMappings;
16
+ constructor(connection: Connection);
17
+ private initializePyth;
18
+ getPrice(mintAddress: PublicKey): Promise<PriceData>;
19
+ }
20
+ //# sourceMappingURL=enhanced-pyth-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-pyth-feed.d.ts","sourceRoot":"","sources":["../../../cli/utils/enhanced-pyth-feed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGxD,MAAM,WAAW,SAAS;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,UAAU,CAAmE;IACrF,OAAO,CAAC,WAAW,CAAS;IAE5B,OAAO,CAAC,iBAAiB,CAStB;gBAES,UAAU,EAAE,UAAU;YAIpB,cAAc;IAStB,QAAQ,CAAC,WAAW,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;CAgC7D"}