@varity-labs/sdk 2.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +31 -0
- package/README.md +253 -0
- package/dist/analytics/index.d.ts +7 -0
- package/dist/analytics/index.d.ts.map +1 -0
- package/dist/analytics/index.js +6 -0
- package/dist/analytics/tracker.d.ts +128 -0
- package/dist/analytics/tracker.d.ts.map +1 -0
- package/dist/analytics/tracker.js +203 -0
- package/dist/blockchain/BlockchainService.d.ts +100 -0
- package/dist/blockchain/BlockchainService.d.ts.map +1 -0
- package/dist/blockchain/BlockchainService.js +188 -0
- package/dist/blockchain/NFTLicensingService.d.ts +69 -0
- package/dist/blockchain/NFTLicensingService.d.ts.map +1 -0
- package/dist/blockchain/NFTLicensingService.js +136 -0
- package/dist/blockchain/RevenueSplitService.d.ts +71 -0
- package/dist/blockchain/RevenueSplitService.d.ts.map +1 -0
- package/dist/blockchain/RevenueSplitService.js +111 -0
- package/dist/blockchain/index.d.ts +48 -0
- package/dist/blockchain/index.d.ts.map +1 -0
- package/dist/blockchain/index.js +46 -0
- package/dist/blockchain/types.d.ts +63 -0
- package/dist/blockchain/types.d.ts.map +1 -0
- package/dist/blockchain/types.js +6 -0
- package/dist/chains/arbitrum.d.ts +89 -0
- package/dist/chains/arbitrum.d.ts.map +1 -0
- package/dist/chains/arbitrum.js +134 -0
- package/dist/chains/base.d.ts +84 -0
- package/dist/chains/base.d.ts.map +1 -0
- package/dist/chains/base.js +131 -0
- package/dist/chains/index.d.ts +36 -0
- package/dist/chains/index.d.ts.map +1 -0
- package/dist/chains/index.js +32 -0
- package/dist/chains/registry.d.ts +113 -0
- package/dist/chains/registry.d.ts.map +1 -0
- package/dist/chains/registry.js +201 -0
- package/dist/chains/varityL3.d.ts +81 -0
- package/dist/chains/varityL3.d.ts.map +1 -0
- package/dist/chains/varityL3.js +125 -0
- package/dist/cli/commands/clone.d.ts +8 -0
- package/dist/cli/commands/clone.d.ts.map +1 -0
- package/dist/cli/commands/clone.js +391 -0
- package/dist/cli/commands/dev.d.ts +8 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +40 -0
- package/dist/cli/commands/generate.d.ts +8 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +303 -0
- package/dist/cli/commands/init.d.ts +8 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +317 -0
- package/dist/cli/commands/validate.d.ts +8 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +69 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +33 -0
- package/dist/cli/utils/logger.d.ts +17 -0
- package/dist/cli/utils/logger.d.ts.map +1 -0
- package/dist/cli/utils/logger.js +35 -0
- package/dist/cli/utils/prompts.d.ts +21 -0
- package/dist/cli/utils/prompts.d.ts.map +1 -0
- package/dist/cli/utils/prompts.js +103 -0
- package/dist/contracts/abis/iso/AccessControlRegistry.json +1468 -0
- package/dist/contracts/abis/iso/DataProofRegistry.json +797 -0
- package/dist/contracts/abis/iso/MerchantRegistry.json +1237 -0
- package/dist/contracts/abis/iso/RepPerformance.json +1351 -0
- package/dist/contracts/abis/iso/ResidualCalculator.json +1118 -0
- package/dist/contracts/abis/iso/TransactionVault.json +1588 -0
- package/dist/contracts/abis/iso/VarityWalletFactory.json +475 -0
- package/dist/contracts/addresses.d.ts +88 -0
- package/dist/contracts/addresses.d.ts.map +1 -0
- package/dist/contracts/addresses.js +94 -0
- package/dist/contracts/index.d.ts +7 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +6 -0
- package/dist/core/VaritySDK.d.ts +177 -0
- package/dist/core/VaritySDK.d.ts.map +1 -0
- package/dist/core/VaritySDK.js +325 -0
- package/dist/core/config.d.ts +120 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +187 -0
- package/dist/core/credentials-proxy.d.ts +157 -0
- package/dist/core/credentials-proxy.d.ts.map +1 -0
- package/dist/core/credentials-proxy.js +345 -0
- package/dist/core/credentials.d.ts +219 -0
- package/dist/core/credentials.d.ts.map +1 -0
- package/dist/core/credentials.js +345 -0
- package/dist/core/template-loader.d.ts +15 -0
- package/dist/core/template-loader.d.ts.map +1 -0
- package/dist/core/template-loader.js +380 -0
- package/dist/core/template.d.ts +321 -0
- package/dist/core/template.d.ts.map +1 -0
- package/dist/core/template.js +189 -0
- package/dist/core/types.d.ts +572 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +52 -0
- package/dist/dev/dev-server.d.ts +16 -0
- package/dist/dev/dev-server.d.ts.map +1 -0
- package/dist/dev/dev-server.js +119 -0
- package/dist/generators/contracts/generator.d.ts +21 -0
- package/dist/generators/contracts/generator.d.ts.map +1 -0
- package/dist/generators/contracts/generator.js +252 -0
- package/dist/generators/tests/generator.d.ts +20 -0
- package/dist/generators/tests/generator.d.ts.map +1 -0
- package/dist/generators/tests/generator.js +375 -0
- package/dist/generators/types/generator.d.ts +19 -0
- package/dist/generators/types/generator.d.ts.map +1 -0
- package/dist/generators/types/generator.js +165 -0
- package/dist/generators/ui/component-generator.d.ts +20 -0
- package/dist/generators/ui/component-generator.d.ts.map +1 -0
- package/dist/generators/ui/component-generator.js +749 -0
- package/dist/generators/ui/dashboard-generator.d.ts +20 -0
- package/dist/generators/ui/dashboard-generator.d.ts.map +1 -0
- package/dist/generators/ui/dashboard-generator.js +349 -0
- package/dist/index.d.ts +61 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/modules/analytics/AnalyticsModule.d.ts +349 -0
- package/dist/modules/analytics/AnalyticsModule.d.ts.map +1 -0
- package/dist/modules/analytics/AnalyticsModule.js +274 -0
- package/dist/modules/analytics/index.d.ts +3 -0
- package/dist/modules/analytics/index.d.ts.map +1 -0
- package/dist/modules/analytics/index.js +1 -0
- package/dist/modules/auth/AccessKeyModule.d.ts +189 -0
- package/dist/modules/auth/AccessKeyModule.d.ts.map +1 -0
- package/dist/modules/auth/AccessKeyModule.js +322 -0
- package/dist/modules/auth/AuthModule.d.ts +133 -0
- package/dist/modules/auth/AuthModule.d.ts.map +1 -0
- package/dist/modules/auth/AuthModule.js +214 -0
- package/dist/modules/auth/index.d.ts +8 -0
- package/dist/modules/auth/index.d.ts.map +1 -0
- package/dist/modules/auth/index.js +6 -0
- package/dist/modules/cache/CacheModule.d.ts +279 -0
- package/dist/modules/cache/CacheModule.d.ts.map +1 -0
- package/dist/modules/cache/CacheModule.js +493 -0
- package/dist/modules/cache/index.d.ts +3 -0
- package/dist/modules/cache/index.d.ts.map +1 -0
- package/dist/modules/cache/index.js +1 -0
- package/dist/modules/compute/ComputeModule.d.ts +226 -0
- package/dist/modules/compute/ComputeModule.d.ts.map +1 -0
- package/dist/modules/compute/ComputeModule.js +379 -0
- package/dist/modules/compute/index.d.ts +6 -0
- package/dist/modules/compute/index.d.ts.map +1 -0
- package/dist/modules/compute/index.js +4 -0
- package/dist/modules/contracts/ContractsModule.d.ts +164 -0
- package/dist/modules/contracts/ContractsModule.d.ts.map +1 -0
- package/dist/modules/contracts/ContractsModule.js +242 -0
- package/dist/modules/contracts/index.d.ts +6 -0
- package/dist/modules/contracts/index.d.ts.map +1 -0
- package/dist/modules/contracts/index.js +4 -0
- package/dist/modules/export/ExportModule.d.ts +346 -0
- package/dist/modules/export/ExportModule.d.ts.map +1 -0
- package/dist/modules/export/ExportModule.js +432 -0
- package/dist/modules/export/index.d.ts +3 -0
- package/dist/modules/export/index.d.ts.map +1 -0
- package/dist/modules/export/index.js +1 -0
- package/dist/modules/forecasting/ForecastingModule.d.ts +579 -0
- package/dist/modules/forecasting/ForecastingModule.d.ts.map +1 -0
- package/dist/modules/forecasting/ForecastingModule.js +310 -0
- package/dist/modules/forecasting/index.d.ts +3 -0
- package/dist/modules/forecasting/index.d.ts.map +1 -0
- package/dist/modules/forecasting/index.js +1 -0
- package/dist/modules/monitoring/MonitoringModule.d.ts +359 -0
- package/dist/modules/monitoring/MonitoringModule.d.ts.map +1 -0
- package/dist/modules/monitoring/MonitoringModule.js +483 -0
- package/dist/modules/monitoring/index.d.ts +3 -0
- package/dist/modules/monitoring/index.d.ts.map +1 -0
- package/dist/modules/monitoring/index.js +1 -0
- package/dist/modules/notifications/NotificationsModule.d.ts +336 -0
- package/dist/modules/notifications/NotificationsModule.d.ts.map +1 -0
- package/dist/modules/notifications/NotificationsModule.js +418 -0
- package/dist/modules/notifications/index.d.ts +3 -0
- package/dist/modules/notifications/index.d.ts.map +1 -0
- package/dist/modules/notifications/index.js +1 -0
- package/dist/modules/oracle/OracleModule.d.ts +110 -0
- package/dist/modules/oracle/OracleModule.d.ts.map +1 -0
- package/dist/modules/oracle/OracleModule.js +151 -0
- package/dist/modules/oracle/index.d.ts +6 -0
- package/dist/modules/oracle/index.d.ts.map +1 -0
- package/dist/modules/oracle/index.js +4 -0
- package/dist/modules/storage/S3Module.d.ts +377 -0
- package/dist/modules/storage/S3Module.d.ts.map +1 -0
- package/dist/modules/storage/S3Module.js +680 -0
- package/dist/modules/storage/StorageModule.d.ts +157 -0
- package/dist/modules/storage/StorageModule.d.ts.map +1 -0
- package/dist/modules/storage/StorageModule.js +302 -0
- package/dist/modules/storage/adapters/AdapterFactory.d.ts +100 -0
- package/dist/modules/storage/adapters/AdapterFactory.d.ts.map +1 -0
- package/dist/modules/storage/adapters/AdapterFactory.js +209 -0
- package/dist/modules/storage/adapters/FilecoinAdapter.d.ts +94 -0
- package/dist/modules/storage/adapters/FilecoinAdapter.d.ts.map +1 -0
- package/dist/modules/storage/adapters/FilecoinAdapter.js +263 -0
- package/dist/modules/storage/adapters/IStorageAdapter.d.ts +287 -0
- package/dist/modules/storage/adapters/IStorageAdapter.d.ts.map +1 -0
- package/dist/modules/storage/adapters/IStorageAdapter.js +81 -0
- package/dist/modules/storage/adapters/MultiTierAdapter.d.ts +187 -0
- package/dist/modules/storage/adapters/MultiTierAdapter.d.ts.map +1 -0
- package/dist/modules/storage/adapters/MultiTierAdapter.js +430 -0
- package/dist/modules/storage/adapters/index.d.ts +12 -0
- package/dist/modules/storage/adapters/index.d.ts.map +1 -0
- package/dist/modules/storage/adapters/index.js +12 -0
- package/dist/modules/storage/index.d.ts +16 -0
- package/dist/modules/storage/index.d.ts.map +1 -0
- package/dist/modules/storage/index.js +15 -0
- package/dist/modules/storage/tiering/AccessAnalyzer.d.ts +227 -0
- package/dist/modules/storage/tiering/AccessAnalyzer.d.ts.map +1 -0
- package/dist/modules/storage/tiering/AccessAnalyzer.js +367 -0
- package/dist/modules/storage/tiering/CostOptimizer.d.ts +248 -0
- package/dist/modules/storage/tiering/CostOptimizer.d.ts.map +1 -0
- package/dist/modules/storage/tiering/CostOptimizer.js +356 -0
- package/dist/modules/storage/tiering/MetadataStore.d.ts +287 -0
- package/dist/modules/storage/tiering/MetadataStore.d.ts.map +1 -0
- package/dist/modules/storage/tiering/MetadataStore.js +535 -0
- package/dist/modules/storage/tiering/TieringEngine.d.ts +237 -0
- package/dist/modules/storage/tiering/TieringEngine.d.ts.map +1 -0
- package/dist/modules/storage/tiering/TieringEngine.js +419 -0
- package/dist/modules/storage/tiering/example.d.ts +8 -0
- package/dist/modules/storage/tiering/example.d.ts.map +1 -0
- package/dist/modules/storage/tiering/example.js +250 -0
- package/dist/modules/storage/tiering/index.d.ts +17 -0
- package/dist/modules/storage/tiering/index.d.ts.map +1 -0
- package/dist/modules/storage/tiering/index.js +13 -0
- package/dist/modules/webhooks/WebhooksModule.d.ts +476 -0
- package/dist/modules/webhooks/WebhooksModule.d.ts.map +1 -0
- package/dist/modules/webhooks/WebhooksModule.js +359 -0
- package/dist/modules/webhooks/index.d.ts +3 -0
- package/dist/modules/webhooks/index.d.ts.map +1 -0
- package/dist/modules/webhooks/index.js +1 -0
- package/dist/modules/zk/ZKModule.d.ts +153 -0
- package/dist/modules/zk/ZKModule.d.ts.map +1 -0
- package/dist/modules/zk/ZKModule.js +262 -0
- package/dist/modules/zk/index.d.ts +7 -0
- package/dist/modules/zk/index.d.ts.map +1 -0
- package/dist/modules/zk/index.js +4 -0
- package/dist/thirdweb/BridgeClient.d.ts +228 -0
- package/dist/thirdweb/BridgeClient.d.ts.map +1 -0
- package/dist/thirdweb/BridgeClient.js +160 -0
- package/dist/thirdweb/EngineClient.d.ts +396 -0
- package/dist/thirdweb/EngineClient.d.ts.map +1 -0
- package/dist/thirdweb/EngineClient.js +386 -0
- package/dist/thirdweb/GatewayClient.d.ts +190 -0
- package/dist/thirdweb/GatewayClient.d.ts.map +1 -0
- package/dist/thirdweb/GatewayClient.js +257 -0
- package/dist/thirdweb/NebulaClient.d.ts +292 -0
- package/dist/thirdweb/NebulaClient.d.ts.map +1 -0
- package/dist/thirdweb/NebulaClient.js +180 -0
- package/dist/thirdweb/StorageClient.d.ts +445 -0
- package/dist/thirdweb/StorageClient.d.ts.map +1 -0
- package/dist/thirdweb/StorageClient.js +405 -0
- package/dist/thirdweb/ThirdwebWrapper.d.ts +236 -0
- package/dist/thirdweb/ThirdwebWrapper.d.ts.map +1 -0
- package/dist/thirdweb/ThirdwebWrapper.js +332 -0
- package/dist/thirdweb/index.d.ts +21 -0
- package/dist/thirdweb/index.d.ts.map +1 -0
- package/dist/thirdweb/index.js +28 -0
- package/dist/thirdweb/varity-chain.d.ts +48 -0
- package/dist/thirdweb/varity-chain.d.ts.map +1 -0
- package/dist/thirdweb/varity-chain.js +64 -0
- package/dist/thirdweb/x402Client.d.ts +319 -0
- package/dist/thirdweb/x402Client.d.ts.map +1 -0
- package/dist/thirdweb/x402Client.js +223 -0
- package/dist/tracking/gasTracker.d.ts +158 -0
- package/dist/tracking/gasTracker.d.ts.map +1 -0
- package/dist/tracking/gasTracker.js +227 -0
- package/dist/tracking/index.d.ts +10 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/index.js +8 -0
- package/dist/tracking/types.d.ts +327 -0
- package/dist/tracking/types.d.ts.map +1 -0
- package/dist/tracking/types.js +8 -0
- package/dist/ui/components/ChartWidget.d.ts +36 -0
- package/dist/ui/components/ChartWidget.d.ts.map +1 -0
- package/dist/ui/components/ChartWidget.js +82 -0
- package/dist/ui/components/DashboardLayout.d.ts +41 -0
- package/dist/ui/components/DashboardLayout.d.ts.map +1 -0
- package/dist/ui/components/DashboardLayout.js +102 -0
- package/dist/ui/components/DataTable.d.ts +49 -0
- package/dist/ui/components/DataTable.d.ts.map +1 -0
- package/dist/ui/components/DataTable.js +96 -0
- package/dist/ui/components/EntityForm.d.ts +60 -0
- package/dist/ui/components/EntityForm.d.ts.map +1 -0
- package/dist/ui/components/EntityForm.js +182 -0
- package/dist/ui/components/KPICard.d.ts +29 -0
- package/dist/ui/components/KPICard.d.ts.map +1 -0
- package/dist/ui/components/KPICard.js +61 -0
- package/dist/ui/components/Modal.d.ts +34 -0
- package/dist/ui/components/Modal.d.ts.map +1 -0
- package/dist/ui/components/Modal.js +30 -0
- package/dist/ui/components/index.d.ts +18 -0
- package/dist/ui/components/index.d.ts.map +1 -0
- package/dist/ui/components/index.js +11 -0
- package/dist/validation/template-validator.d.ts +25 -0
- package/dist/validation/template-validator.d.ts.map +1 -0
- package/dist/validation/template-validator.js +305 -0
- package/package.json +102 -0
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gas Usage Tracker
|
|
3
|
+
*
|
|
4
|
+
* Tracks gas usage for per-app billing in Varity SDK.
|
|
5
|
+
* Each app's gas consumption is monitored and sent to backend for billing.
|
|
6
|
+
*
|
|
7
|
+
* @module tracking/gasTracker
|
|
8
|
+
*/
|
|
9
|
+
// Default configuration
|
|
10
|
+
const DEFAULT_CONFIG = {
|
|
11
|
+
apiUrl: 'https://api.varity.so',
|
|
12
|
+
enabled: true,
|
|
13
|
+
retries: 3,
|
|
14
|
+
timeout: 5000,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Wait for transaction receipt with retry logic
|
|
18
|
+
*
|
|
19
|
+
* @param client - thirdweb client
|
|
20
|
+
* @param chain - Chain to query
|
|
21
|
+
* @param transactionHash - Transaction hash to wait for
|
|
22
|
+
* @param maxWaitTime - Maximum time to wait in ms (default: 60s)
|
|
23
|
+
* @returns Transaction receipt
|
|
24
|
+
*/
|
|
25
|
+
export async function waitForTransactionReceipt(client, chain, transactionHash, maxWaitTime = 60000) {
|
|
26
|
+
const startTime = Date.now();
|
|
27
|
+
// Import thirdweb RPC functions
|
|
28
|
+
const { getRpcClient, eth_getTransactionReceipt } = await import('thirdweb/rpc');
|
|
29
|
+
const rpcClient = getRpcClient({ client, chain });
|
|
30
|
+
while (Date.now() - startTime < maxWaitTime) {
|
|
31
|
+
try {
|
|
32
|
+
const receipt = await eth_getTransactionReceipt(rpcClient, {
|
|
33
|
+
hash: transactionHash,
|
|
34
|
+
});
|
|
35
|
+
if (receipt) {
|
|
36
|
+
return {
|
|
37
|
+
transactionHash: receipt.transactionHash,
|
|
38
|
+
gasUsed: receipt.gasUsed,
|
|
39
|
+
effectiveGasPrice: receipt.effectiveGasPrice,
|
|
40
|
+
blockNumber: receipt.blockNumber,
|
|
41
|
+
status: receipt.status === 'success' ? 1 : 0,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
// Receipt not ready yet, continue waiting
|
|
47
|
+
}
|
|
48
|
+
// Wait 2 seconds before retrying
|
|
49
|
+
await new Promise(resolve => setTimeout(resolve, 2000));
|
|
50
|
+
}
|
|
51
|
+
throw new Error(`Transaction receipt not available after ${maxWaitTime}ms`);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Calculate gas cost in USDC (6 decimals)
|
|
55
|
+
*
|
|
56
|
+
* @param receipt - Transaction receipt with gas information
|
|
57
|
+
* @param usdcPerGas - USDC price per gas unit (default: auto-fetch from oracle)
|
|
58
|
+
* @returns Gas cost in USDC as string (6 decimal precision)
|
|
59
|
+
*
|
|
60
|
+
* @example
|
|
61
|
+
* const receipt = await waitForTransactionReceipt(client, chain, txHash);
|
|
62
|
+
* const usdcCost = await calculateGasInUSDC(receipt);
|
|
63
|
+
* console.log(`Gas cost: ${usdcCost} USDC`); // "0.025000"
|
|
64
|
+
*/
|
|
65
|
+
export async function calculateGasInUSDC(receipt, usdcPerGas) {
|
|
66
|
+
// Calculate total gas cost in wei
|
|
67
|
+
const totalGasWei = receipt.gasUsed * receipt.effectiveGasPrice;
|
|
68
|
+
// CRITICAL: Varity L3 native token is USDC (6 decimals)
|
|
69
|
+
// Convert from wei (18 decimals) to USDC (6 decimals)
|
|
70
|
+
// 1 USDC = 1_000_000 (10^6)
|
|
71
|
+
// 1 ETH = 1_000_000_000_000_000_000 (10^18)
|
|
72
|
+
// For Varity L3, the native token IS USDC, so:
|
|
73
|
+
// - Gas price is already in USDC units
|
|
74
|
+
// - We need to convert from 18 decimals to 6 decimals
|
|
75
|
+
// Divide by 10^12 to convert from 18 decimals to 6 decimals
|
|
76
|
+
const divisor = BigInt(10 ** 12);
|
|
77
|
+
const usdcAmount = totalGasWei / divisor;
|
|
78
|
+
// Convert to decimal string (6 decimal places)
|
|
79
|
+
const usdcString = usdcAmount.toString().padStart(7, '0');
|
|
80
|
+
const integerPart = usdcString.slice(0, -6) || '0';
|
|
81
|
+
const decimalPart = usdcString.slice(-6);
|
|
82
|
+
return `${integerPart}.${decimalPart}`;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Track gas usage for billing
|
|
86
|
+
*
|
|
87
|
+
* Sends gas usage event to Varity backend API for billing purposes.
|
|
88
|
+
* Includes retry logic and error handling.
|
|
89
|
+
*
|
|
90
|
+
* @param event - Gas usage event to track
|
|
91
|
+
* @param config - Optional configuration
|
|
92
|
+
* @returns Promise that resolves when tracking is complete
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* await trackGasUsage({
|
|
96
|
+
* appId: 'app_abc123',
|
|
97
|
+
* developerWallet: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
|
|
98
|
+
* transactionHash: '0x...',
|
|
99
|
+
* gasSponsored: '0.025000',
|
|
100
|
+
* timestamp: Date.now(),
|
|
101
|
+
* chainId: 33529,
|
|
102
|
+
* userWallet: '0x...',
|
|
103
|
+
* });
|
|
104
|
+
*/
|
|
105
|
+
export async function trackGasUsage(event, config = {}) {
|
|
106
|
+
const finalConfig = { ...DEFAULT_CONFIG, ...config };
|
|
107
|
+
if (!finalConfig.enabled) {
|
|
108
|
+
console.log('[Gas Tracker] Tracking disabled, skipping');
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
const url = `${finalConfig.apiUrl}/v1/gas-tracking`;
|
|
112
|
+
let lastError = null;
|
|
113
|
+
for (let attempt = 0; attempt < finalConfig.retries; attempt++) {
|
|
114
|
+
try {
|
|
115
|
+
const controller = new AbortController();
|
|
116
|
+
const timeoutId = setTimeout(() => controller.abort(), finalConfig.timeout);
|
|
117
|
+
const response = await fetch(url, {
|
|
118
|
+
method: 'POST',
|
|
119
|
+
headers: {
|
|
120
|
+
'Content-Type': 'application/json',
|
|
121
|
+
},
|
|
122
|
+
body: JSON.stringify(event),
|
|
123
|
+
signal: controller.signal,
|
|
124
|
+
});
|
|
125
|
+
clearTimeout(timeoutId);
|
|
126
|
+
if (!response.ok) {
|
|
127
|
+
const errorText = await response.text();
|
|
128
|
+
throw new Error(`Gas tracking failed: ${response.status} ${errorText}`);
|
|
129
|
+
}
|
|
130
|
+
const result = await response.json();
|
|
131
|
+
console.log(`[Gas Tracker] Tracked ${event.gasSponsored} USDC for app ${event.appId}`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
lastError = error;
|
|
136
|
+
console.warn(`[Gas Tracker] Attempt ${attempt + 1}/${finalConfig.retries} failed:`, error);
|
|
137
|
+
// Wait before retrying (exponential backoff)
|
|
138
|
+
if (attempt < finalConfig.retries - 1) {
|
|
139
|
+
const waitTime = Math.min(1000 * Math.pow(2, attempt), 5000);
|
|
140
|
+
await new Promise(resolve => setTimeout(resolve, waitTime));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// All retries failed - log error but don't throw
|
|
145
|
+
// We don't want to fail the user's transaction just because tracking failed
|
|
146
|
+
console.error('[Gas Tracker] Failed to track gas usage after all retries:', lastError);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Track gas usage for a transaction (convenience method)
|
|
150
|
+
*
|
|
151
|
+
* Waits for transaction receipt, calculates gas cost, and tracks usage.
|
|
152
|
+
*
|
|
153
|
+
* @param client - thirdweb client
|
|
154
|
+
* @param chain - Chain the transaction is on
|
|
155
|
+
* @param transactionHash - Transaction hash to track
|
|
156
|
+
* @param appId - App identifier
|
|
157
|
+
* @param developerWallet - Developer's wallet address
|
|
158
|
+
* @param userWallet - End user's wallet address
|
|
159
|
+
* @param config - Optional configuration
|
|
160
|
+
*
|
|
161
|
+
* @example
|
|
162
|
+
* await trackTransactionGasUsage(
|
|
163
|
+
* client,
|
|
164
|
+
* varityL3Testnet,
|
|
165
|
+
* txHash,
|
|
166
|
+
* 'app_abc123',
|
|
167
|
+
* '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
|
|
168
|
+
* '0x...'
|
|
169
|
+
* );
|
|
170
|
+
*/
|
|
171
|
+
export async function trackTransactionGasUsage(client, chain, transactionHash, appId, developerWallet, userWallet, config = {}) {
|
|
172
|
+
try {
|
|
173
|
+
// Wait for transaction to be mined
|
|
174
|
+
const receipt = await waitForTransactionReceipt(client, chain, transactionHash);
|
|
175
|
+
// Calculate gas cost in USDC
|
|
176
|
+
const gasSponsored = await calculateGasInUSDC(receipt);
|
|
177
|
+
// Track the gas usage
|
|
178
|
+
await trackGasUsage({
|
|
179
|
+
appId,
|
|
180
|
+
developerWallet,
|
|
181
|
+
transactionHash,
|
|
182
|
+
gasSponsored,
|
|
183
|
+
timestamp: Date.now(),
|
|
184
|
+
chainId: chain.id,
|
|
185
|
+
userWallet,
|
|
186
|
+
}, config);
|
|
187
|
+
}
|
|
188
|
+
catch (error) {
|
|
189
|
+
console.error('[Gas Tracker] Error tracking transaction gas usage:', error);
|
|
190
|
+
// Don't throw - we don't want to fail the user's flow
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Create a gas tracker instance with default config
|
|
195
|
+
*
|
|
196
|
+
* @param config - Gas tracker configuration
|
|
197
|
+
* @returns Object with tracking methods
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* const tracker = createGasTracker({
|
|
201
|
+
* apiUrl: 'https://api.varity.so',
|
|
202
|
+
* enabled: true,
|
|
203
|
+
* });
|
|
204
|
+
*
|
|
205
|
+
* await tracker.trackTransaction(client, chain, txHash, appId, devWallet, userWallet);
|
|
206
|
+
*/
|
|
207
|
+
export function createGasTracker(config = {}) {
|
|
208
|
+
const finalConfig = { ...DEFAULT_CONFIG, ...config };
|
|
209
|
+
return {
|
|
210
|
+
/**
|
|
211
|
+
* Track gas usage event
|
|
212
|
+
*/
|
|
213
|
+
trackEvent: (event) => trackGasUsage(event, finalConfig),
|
|
214
|
+
/**
|
|
215
|
+
* Track transaction gas usage
|
|
216
|
+
*/
|
|
217
|
+
trackTransaction: (client, chain, transactionHash, appId, developerWallet, userWallet) => trackTransactionGasUsage(client, chain, transactionHash, appId, developerWallet, userWallet, finalConfig),
|
|
218
|
+
/**
|
|
219
|
+
* Calculate gas in USDC
|
|
220
|
+
*/
|
|
221
|
+
calculateGas: calculateGasInUSDC,
|
|
222
|
+
/**
|
|
223
|
+
* Wait for receipt
|
|
224
|
+
*/
|
|
225
|
+
waitForReceipt: (client, chain, txHash) => waitForTransactionReceipt(client, chain, txHash),
|
|
226
|
+
};
|
|
227
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gas Tracking Module
|
|
3
|
+
*
|
|
4
|
+
* Tracks gas usage for per-app billing in Varity SDK.
|
|
5
|
+
*
|
|
6
|
+
* @module tracking
|
|
7
|
+
*/
|
|
8
|
+
export { trackGasUsage, trackTransactionGasUsage, waitForTransactionReceipt, calculateGasInUSDC, createGasTracker, type GasUsageEvent, type GasTransactionReceipt, type GasTrackerConfig, } from './gasTracker';
|
|
9
|
+
export type { BillingStatus, AppIdentifier, GasUsageRecord, AppUsageSummary, BillingCycle, GasTrackingStats, GasUsageQueryOptions, GasUsageQueryResult, BillingAlert, GasExportFormat, GasExportOptions, } from './types';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracking/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,aAAa,EACb,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,GACtB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,aAAa,EACb,aAAa,EACb,cAAc,EACd,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gas Tracking Types
|
|
3
|
+
*
|
|
4
|
+
* Type definitions for gas usage tracking and billing.
|
|
5
|
+
*
|
|
6
|
+
* @module tracking/types
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Billing status for gas usage records
|
|
10
|
+
*/
|
|
11
|
+
export type BillingStatus = 'pending' | 'billed' | 'paid';
|
|
12
|
+
/**
|
|
13
|
+
* App identifier for gas tracking
|
|
14
|
+
*
|
|
15
|
+
* Used to associate gas usage with specific apps for billing.
|
|
16
|
+
*/
|
|
17
|
+
export interface AppIdentifier {
|
|
18
|
+
/**
|
|
19
|
+
* Unique app ID from Varity App Store
|
|
20
|
+
*/
|
|
21
|
+
appId: string;
|
|
22
|
+
/**
|
|
23
|
+
* Developer's wallet address for billing
|
|
24
|
+
*/
|
|
25
|
+
developerWallet: string;
|
|
26
|
+
/**
|
|
27
|
+
* App name (optional, for display purposes)
|
|
28
|
+
*/
|
|
29
|
+
appName?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Gas usage record in database
|
|
33
|
+
*/
|
|
34
|
+
export interface GasUsageRecord {
|
|
35
|
+
/**
|
|
36
|
+
* Unique app identifier
|
|
37
|
+
*/
|
|
38
|
+
appId: string;
|
|
39
|
+
/**
|
|
40
|
+
* Developer's wallet address
|
|
41
|
+
*/
|
|
42
|
+
developerWallet: string;
|
|
43
|
+
/**
|
|
44
|
+
* Transaction hash on-chain
|
|
45
|
+
*/
|
|
46
|
+
transactionHash: string;
|
|
47
|
+
/**
|
|
48
|
+
* Gas cost in USDC (6 decimal precision)
|
|
49
|
+
*/
|
|
50
|
+
gasSponsoredUsdc: string;
|
|
51
|
+
/**
|
|
52
|
+
* Unix timestamp in milliseconds
|
|
53
|
+
*/
|
|
54
|
+
timestamp: number;
|
|
55
|
+
/**
|
|
56
|
+
* Chain ID (33529 for Varity L3)
|
|
57
|
+
*/
|
|
58
|
+
chainId: number;
|
|
59
|
+
/**
|
|
60
|
+
* End user's wallet address
|
|
61
|
+
*/
|
|
62
|
+
userWallet: string;
|
|
63
|
+
/**
|
|
64
|
+
* Billing status
|
|
65
|
+
*/
|
|
66
|
+
billingStatus: BillingStatus;
|
|
67
|
+
/**
|
|
68
|
+
* Billing month (YYYY-MM format)
|
|
69
|
+
*/
|
|
70
|
+
billingMonth: string;
|
|
71
|
+
/**
|
|
72
|
+
* Record creation timestamp
|
|
73
|
+
*/
|
|
74
|
+
createdAt: Date;
|
|
75
|
+
/**
|
|
76
|
+
* When invoice was generated (if billed)
|
|
77
|
+
*/
|
|
78
|
+
billedAt?: Date;
|
|
79
|
+
/**
|
|
80
|
+
* When payment was received (if paid)
|
|
81
|
+
*/
|
|
82
|
+
paidAt?: Date;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* App usage summary for billing
|
|
86
|
+
*/
|
|
87
|
+
export interface AppUsageSummary {
|
|
88
|
+
/**
|
|
89
|
+
* App identifier
|
|
90
|
+
*/
|
|
91
|
+
appId: string;
|
|
92
|
+
/**
|
|
93
|
+
* App name (optional)
|
|
94
|
+
*/
|
|
95
|
+
appName?: string;
|
|
96
|
+
/**
|
|
97
|
+
* Total gas used in USDC
|
|
98
|
+
*/
|
|
99
|
+
gasUsedUsdc: string;
|
|
100
|
+
/**
|
|
101
|
+
* Number of transactions
|
|
102
|
+
*/
|
|
103
|
+
transactions: number;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Billing cycle record
|
|
107
|
+
*/
|
|
108
|
+
export interface BillingCycle {
|
|
109
|
+
/**
|
|
110
|
+
* Developer's wallet address
|
|
111
|
+
*/
|
|
112
|
+
developerWallet: string;
|
|
113
|
+
/**
|
|
114
|
+
* Billing month (YYYY-MM format)
|
|
115
|
+
*/
|
|
116
|
+
billingMonth: string;
|
|
117
|
+
/**
|
|
118
|
+
* List of apps and their usage
|
|
119
|
+
*/
|
|
120
|
+
apps: AppUsageSummary[];
|
|
121
|
+
/**
|
|
122
|
+
* Total gas across all apps
|
|
123
|
+
*/
|
|
124
|
+
totalGasUsdc: string;
|
|
125
|
+
/**
|
|
126
|
+
* Total transaction count
|
|
127
|
+
*/
|
|
128
|
+
totalTransactions: number;
|
|
129
|
+
/**
|
|
130
|
+
* Billing status
|
|
131
|
+
*/
|
|
132
|
+
billingStatus: BillingStatus;
|
|
133
|
+
/**
|
|
134
|
+
* Invoice ID (when billed)
|
|
135
|
+
*/
|
|
136
|
+
invoiceId?: string;
|
|
137
|
+
/**
|
|
138
|
+
* Invoice amount in USD
|
|
139
|
+
*/
|
|
140
|
+
invoiceAmountUsd?: string;
|
|
141
|
+
/**
|
|
142
|
+
* Payment transaction hash
|
|
143
|
+
*/
|
|
144
|
+
paymentTxHash?: string;
|
|
145
|
+
/**
|
|
146
|
+
* Cycle creation timestamp
|
|
147
|
+
*/
|
|
148
|
+
createdAt: Date;
|
|
149
|
+
/**
|
|
150
|
+
* Last update timestamp
|
|
151
|
+
*/
|
|
152
|
+
updatedAt: Date;
|
|
153
|
+
/**
|
|
154
|
+
* When invoice was generated
|
|
155
|
+
*/
|
|
156
|
+
billedAt?: Date;
|
|
157
|
+
/**
|
|
158
|
+
* When payment was received
|
|
159
|
+
*/
|
|
160
|
+
paidAt?: Date;
|
|
161
|
+
/**
|
|
162
|
+
* Payment due date
|
|
163
|
+
*/
|
|
164
|
+
dueDate?: Date;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Gas tracking statistics
|
|
168
|
+
*/
|
|
169
|
+
export interface GasTrackingStats {
|
|
170
|
+
/**
|
|
171
|
+
* Total gas tracked in USDC
|
|
172
|
+
*/
|
|
173
|
+
totalGasUsdc: string;
|
|
174
|
+
/**
|
|
175
|
+
* Total transactions tracked
|
|
176
|
+
*/
|
|
177
|
+
totalTransactions: number;
|
|
178
|
+
/**
|
|
179
|
+
* Average gas per transaction
|
|
180
|
+
*/
|
|
181
|
+
averageGasPerTx: string;
|
|
182
|
+
/**
|
|
183
|
+
* Number of active apps
|
|
184
|
+
*/
|
|
185
|
+
activeApps: number;
|
|
186
|
+
/**
|
|
187
|
+
* Number of active developers
|
|
188
|
+
*/
|
|
189
|
+
activeDevelopers: number;
|
|
190
|
+
/**
|
|
191
|
+
* Tracking success rate (0-1)
|
|
192
|
+
*/
|
|
193
|
+
successRate: number;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Gas usage query options
|
|
197
|
+
*/
|
|
198
|
+
export interface GasUsageQueryOptions {
|
|
199
|
+
/**
|
|
200
|
+
* Filter by app ID
|
|
201
|
+
*/
|
|
202
|
+
appId?: string;
|
|
203
|
+
/**
|
|
204
|
+
* Filter by developer wallet
|
|
205
|
+
*/
|
|
206
|
+
developerWallet?: string;
|
|
207
|
+
/**
|
|
208
|
+
* Filter by billing month (YYYY-MM)
|
|
209
|
+
*/
|
|
210
|
+
billingMonth?: string;
|
|
211
|
+
/**
|
|
212
|
+
* Filter by billing status
|
|
213
|
+
*/
|
|
214
|
+
billingStatus?: BillingStatus;
|
|
215
|
+
/**
|
|
216
|
+
* Filter by chain ID
|
|
217
|
+
*/
|
|
218
|
+
chainId?: number;
|
|
219
|
+
/**
|
|
220
|
+
* Start timestamp (inclusive)
|
|
221
|
+
*/
|
|
222
|
+
startTimestamp?: number;
|
|
223
|
+
/**
|
|
224
|
+
* End timestamp (exclusive)
|
|
225
|
+
*/
|
|
226
|
+
endTimestamp?: number;
|
|
227
|
+
/**
|
|
228
|
+
* Pagination: skip records
|
|
229
|
+
*/
|
|
230
|
+
skip?: number;
|
|
231
|
+
/**
|
|
232
|
+
* Pagination: limit records
|
|
233
|
+
*/
|
|
234
|
+
limit?: number;
|
|
235
|
+
/**
|
|
236
|
+
* Sort field
|
|
237
|
+
*/
|
|
238
|
+
sortBy?: 'timestamp' | 'gasSponsored' | 'createdAt';
|
|
239
|
+
/**
|
|
240
|
+
* Sort order
|
|
241
|
+
*/
|
|
242
|
+
sortOrder?: 'asc' | 'desc';
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Gas usage query result
|
|
246
|
+
*/
|
|
247
|
+
export interface GasUsageQueryResult {
|
|
248
|
+
/**
|
|
249
|
+
* Gas usage records
|
|
250
|
+
*/
|
|
251
|
+
records: GasUsageRecord[];
|
|
252
|
+
/**
|
|
253
|
+
* Total records matching query
|
|
254
|
+
*/
|
|
255
|
+
total: number;
|
|
256
|
+
/**
|
|
257
|
+
* Number of records skipped
|
|
258
|
+
*/
|
|
259
|
+
skip: number;
|
|
260
|
+
/**
|
|
261
|
+
* Number of records returned
|
|
262
|
+
*/
|
|
263
|
+
limit: number;
|
|
264
|
+
/**
|
|
265
|
+
* Has more records
|
|
266
|
+
*/
|
|
267
|
+
hasMore: boolean;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Billing alert configuration
|
|
271
|
+
*/
|
|
272
|
+
export interface BillingAlert {
|
|
273
|
+
/**
|
|
274
|
+
* Alert ID
|
|
275
|
+
*/
|
|
276
|
+
id: string;
|
|
277
|
+
/**
|
|
278
|
+
* Developer wallet
|
|
279
|
+
*/
|
|
280
|
+
developerWallet: string;
|
|
281
|
+
/**
|
|
282
|
+
* Alert type
|
|
283
|
+
*/
|
|
284
|
+
type: 'threshold' | 'anomaly' | 'overdue';
|
|
285
|
+
/**
|
|
286
|
+
* Threshold amount in USDC (for threshold alerts)
|
|
287
|
+
*/
|
|
288
|
+
thresholdUsdc?: string;
|
|
289
|
+
/**
|
|
290
|
+
* Alert enabled
|
|
291
|
+
*/
|
|
292
|
+
enabled: boolean;
|
|
293
|
+
/**
|
|
294
|
+
* Notification channels
|
|
295
|
+
*/
|
|
296
|
+
channels: ('email' | 'sms' | 'webhook')[];
|
|
297
|
+
/**
|
|
298
|
+
* Webhook URL (if webhook channel enabled)
|
|
299
|
+
*/
|
|
300
|
+
webhookUrl?: string;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Export format for gas usage data
|
|
304
|
+
*/
|
|
305
|
+
export type GasExportFormat = 'csv' | 'json' | 'xlsx';
|
|
306
|
+
/**
|
|
307
|
+
* Export options for gas usage data
|
|
308
|
+
*/
|
|
309
|
+
export interface GasExportOptions {
|
|
310
|
+
/**
|
|
311
|
+
* Export format
|
|
312
|
+
*/
|
|
313
|
+
format: GasExportFormat;
|
|
314
|
+
/**
|
|
315
|
+
* Query options to filter data
|
|
316
|
+
*/
|
|
317
|
+
query?: GasUsageQueryOptions;
|
|
318
|
+
/**
|
|
319
|
+
* Include headers in CSV/XLSX
|
|
320
|
+
*/
|
|
321
|
+
includeHeaders?: boolean;
|
|
322
|
+
/**
|
|
323
|
+
* Timezone for timestamps
|
|
324
|
+
*/
|
|
325
|
+
timezone?: string;
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tracking/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Chart Widget Component
|
|
3
|
+
*
|
|
4
|
+
* Universal chart component supporting multiple chart types
|
|
5
|
+
*/
|
|
6
|
+
import React from 'react';
|
|
7
|
+
export type ChartType = 'line' | 'bar' | 'area' | 'pie';
|
|
8
|
+
export interface ChartDataPoint {
|
|
9
|
+
[key: string]: string | number;
|
|
10
|
+
}
|
|
11
|
+
export interface ChartWidgetProps {
|
|
12
|
+
/** Chart title */
|
|
13
|
+
title: string;
|
|
14
|
+
/** Chart type */
|
|
15
|
+
type: ChartType;
|
|
16
|
+
/** Chart data */
|
|
17
|
+
data: ChartDataPoint[];
|
|
18
|
+
/** Data key for x-axis */
|
|
19
|
+
xKey?: string;
|
|
20
|
+
/** Data keys for y-axis */
|
|
21
|
+
yKeys: string[];
|
|
22
|
+
/** Key labels */
|
|
23
|
+
labels?: Record<string, string>;
|
|
24
|
+
/** Loading state */
|
|
25
|
+
loading?: boolean;
|
|
26
|
+
/** Chart height */
|
|
27
|
+
height?: number;
|
|
28
|
+
/** Color scheme */
|
|
29
|
+
colors?: string[];
|
|
30
|
+
/** Show legend */
|
|
31
|
+
showLegend?: boolean;
|
|
32
|
+
/** Show grid */
|
|
33
|
+
showGrid?: boolean;
|
|
34
|
+
}
|
|
35
|
+
export declare const ChartWidget: React.FC<ChartWidgetProps>;
|
|
36
|
+
//# sourceMappingURL=ChartWidget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ChartWidget.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ChartWidget.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAA;AA0BzB,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,CAAA;AAEvD,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,iBAAiB;IACjB,IAAI,EAAE,SAAS,CAAA;IACf,iBAAiB;IACjB,IAAI,EAAE,cAAc,EAAE,CAAA;IACtB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2BAA2B;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,iBAAiB;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,oBAAoB;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,mBAAmB;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB,kBAAkB;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,gBAAgB;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAaD,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CA2JlD,CAAA"}
|