@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,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* thirdweb x402 Payment Protocol Client
|
|
3
|
+
*
|
|
4
|
+
* Monetize APIs with blockchain micropayments
|
|
5
|
+
* Implements HTTP 402 (Payment Required) with crypto payments
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Pay-per-call API monetization
|
|
9
|
+
* - Automatic revenue splitting (70/30 model)
|
|
10
|
+
* - Usage tracking and analytics
|
|
11
|
+
* - Subscription-based access
|
|
12
|
+
* - Metered billing
|
|
13
|
+
* - Multi-chain support
|
|
14
|
+
*/
|
|
15
|
+
import type { ThirdwebClient, Chain } from 'thirdweb';
|
|
16
|
+
/**
|
|
17
|
+
* x402 configuration
|
|
18
|
+
*/
|
|
19
|
+
export interface x402Config {
|
|
20
|
+
/**
|
|
21
|
+
* thirdweb client instance
|
|
22
|
+
*/
|
|
23
|
+
client: ThirdwebClient;
|
|
24
|
+
/**
|
|
25
|
+
* Revenue split recipients (addresses and percentages)
|
|
26
|
+
*/
|
|
27
|
+
revenueSplit?: {
|
|
28
|
+
recipient: string;
|
|
29
|
+
percentage: number;
|
|
30
|
+
}[];
|
|
31
|
+
/**
|
|
32
|
+
* Default chain for payments
|
|
33
|
+
*/
|
|
34
|
+
defaultChain?: Chain;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Payment endpoint configuration
|
|
38
|
+
*/
|
|
39
|
+
export interface PaymentEndpointConfig {
|
|
40
|
+
/**
|
|
41
|
+
* API endpoint URL to monetize
|
|
42
|
+
*/
|
|
43
|
+
url: string;
|
|
44
|
+
/**
|
|
45
|
+
* Price per API call (in tokens)
|
|
46
|
+
*/
|
|
47
|
+
pricePerCall: string;
|
|
48
|
+
/**
|
|
49
|
+
* Payment token contract address
|
|
50
|
+
*/
|
|
51
|
+
paymentToken: string;
|
|
52
|
+
/**
|
|
53
|
+
* Chain for payments
|
|
54
|
+
*/
|
|
55
|
+
chain: Chain;
|
|
56
|
+
/**
|
|
57
|
+
* Revenue split configuration (overrides default)
|
|
58
|
+
*/
|
|
59
|
+
revenueSplit?: {
|
|
60
|
+
recipient: string;
|
|
61
|
+
percentage: number;
|
|
62
|
+
}[];
|
|
63
|
+
/**
|
|
64
|
+
* Rate limit per user
|
|
65
|
+
*/
|
|
66
|
+
rateLimit?: {
|
|
67
|
+
calls: number;
|
|
68
|
+
periodSeconds: number;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* Free tier allowance
|
|
72
|
+
*/
|
|
73
|
+
freeTier?: {
|
|
74
|
+
callsPerDay: number;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Payment stats for an endpoint
|
|
79
|
+
*/
|
|
80
|
+
export interface PaymentStats {
|
|
81
|
+
/**
|
|
82
|
+
* Endpoint URL
|
|
83
|
+
*/
|
|
84
|
+
url: string;
|
|
85
|
+
/**
|
|
86
|
+
* Total calls
|
|
87
|
+
*/
|
|
88
|
+
totalCalls: number;
|
|
89
|
+
/**
|
|
90
|
+
* Total revenue earned (in tokens)
|
|
91
|
+
*/
|
|
92
|
+
totalRevenue: string;
|
|
93
|
+
/**
|
|
94
|
+
* Unique payers
|
|
95
|
+
*/
|
|
96
|
+
uniquePayers: number;
|
|
97
|
+
/**
|
|
98
|
+
* Average revenue per call
|
|
99
|
+
*/
|
|
100
|
+
averageRevenuePerCall: string;
|
|
101
|
+
/**
|
|
102
|
+
* Revenue breakdown by recipient
|
|
103
|
+
*/
|
|
104
|
+
revenueByRecipient: {
|
|
105
|
+
recipient: string;
|
|
106
|
+
amount: string;
|
|
107
|
+
percentage: number;
|
|
108
|
+
}[];
|
|
109
|
+
/**
|
|
110
|
+
* Time period
|
|
111
|
+
*/
|
|
112
|
+
period: {
|
|
113
|
+
start: Date;
|
|
114
|
+
end: Date;
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Usage record for tracking API consumption
|
|
119
|
+
*/
|
|
120
|
+
export interface UsageRecord {
|
|
121
|
+
/**
|
|
122
|
+
* User/wallet address
|
|
123
|
+
*/
|
|
124
|
+
user: string;
|
|
125
|
+
/**
|
|
126
|
+
* Endpoint URL
|
|
127
|
+
*/
|
|
128
|
+
endpoint: string;
|
|
129
|
+
/**
|
|
130
|
+
* Timestamp
|
|
131
|
+
*/
|
|
132
|
+
timestamp: Date;
|
|
133
|
+
/**
|
|
134
|
+
* Cost for this call
|
|
135
|
+
*/
|
|
136
|
+
cost: string;
|
|
137
|
+
/**
|
|
138
|
+
* Payment transaction hash
|
|
139
|
+
*/
|
|
140
|
+
txHash: string;
|
|
141
|
+
/**
|
|
142
|
+
* Request metadata
|
|
143
|
+
*/
|
|
144
|
+
metadata?: {
|
|
145
|
+
method: string;
|
|
146
|
+
responseTime: number;
|
|
147
|
+
statusCode: number;
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Subscription plan
|
|
152
|
+
*/
|
|
153
|
+
export interface SubscriptionPlan {
|
|
154
|
+
/**
|
|
155
|
+
* Plan ID
|
|
156
|
+
*/
|
|
157
|
+
id: string;
|
|
158
|
+
/**
|
|
159
|
+
* Plan name
|
|
160
|
+
*/
|
|
161
|
+
name: string;
|
|
162
|
+
/**
|
|
163
|
+
* Price per period
|
|
164
|
+
*/
|
|
165
|
+
price: string;
|
|
166
|
+
/**
|
|
167
|
+
* Payment token
|
|
168
|
+
*/
|
|
169
|
+
paymentToken: string;
|
|
170
|
+
/**
|
|
171
|
+
* Billing period in days
|
|
172
|
+
*/
|
|
173
|
+
periodDays: number;
|
|
174
|
+
/**
|
|
175
|
+
* Included API calls per period
|
|
176
|
+
*/
|
|
177
|
+
includedCalls: number;
|
|
178
|
+
/**
|
|
179
|
+
* Price per additional call (beyond included)
|
|
180
|
+
*/
|
|
181
|
+
overagePrice?: string;
|
|
182
|
+
/**
|
|
183
|
+
* Accessible endpoints
|
|
184
|
+
*/
|
|
185
|
+
endpoints: string[];
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Active subscription
|
|
189
|
+
*/
|
|
190
|
+
export interface Subscription {
|
|
191
|
+
/**
|
|
192
|
+
* Subscription ID
|
|
193
|
+
*/
|
|
194
|
+
id: string;
|
|
195
|
+
/**
|
|
196
|
+
* User address
|
|
197
|
+
*/
|
|
198
|
+
user: string;
|
|
199
|
+
/**
|
|
200
|
+
* Plan
|
|
201
|
+
*/
|
|
202
|
+
plan: SubscriptionPlan;
|
|
203
|
+
/**
|
|
204
|
+
* Current period start
|
|
205
|
+
*/
|
|
206
|
+
periodStart: Date;
|
|
207
|
+
/**
|
|
208
|
+
* Current period end
|
|
209
|
+
*/
|
|
210
|
+
periodEnd: Date;
|
|
211
|
+
/**
|
|
212
|
+
* Calls used in current period
|
|
213
|
+
*/
|
|
214
|
+
callsUsed: number;
|
|
215
|
+
/**
|
|
216
|
+
* Status
|
|
217
|
+
*/
|
|
218
|
+
status: 'active' | 'cancelled' | 'expired';
|
|
219
|
+
/**
|
|
220
|
+
* Next renewal date
|
|
221
|
+
*/
|
|
222
|
+
nextRenewal: Date;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* thirdweb x402 Payment Protocol Client
|
|
226
|
+
*
|
|
227
|
+
* Monetize your APIs with blockchain micropayments
|
|
228
|
+
*/
|
|
229
|
+
export declare class x402Client {
|
|
230
|
+
private client;
|
|
231
|
+
private revenueSplit;
|
|
232
|
+
private defaultChain?;
|
|
233
|
+
private baseUrl;
|
|
234
|
+
constructor(config: x402Config);
|
|
235
|
+
/**
|
|
236
|
+
* Create a payment-required endpoint
|
|
237
|
+
*/
|
|
238
|
+
createPaymentEndpoint(config: PaymentEndpointConfig): Promise<{
|
|
239
|
+
endpointId: string;
|
|
240
|
+
paymentUrl: string;
|
|
241
|
+
}>;
|
|
242
|
+
/**
|
|
243
|
+
* Track API usage
|
|
244
|
+
*/
|
|
245
|
+
trackUsage(usage: Omit<UsageRecord, 'timestamp'>): Promise<void>;
|
|
246
|
+
/**
|
|
247
|
+
* Get payment stats for an endpoint
|
|
248
|
+
*/
|
|
249
|
+
getPaymentStats(endpointUrl: string, period?: {
|
|
250
|
+
start: Date;
|
|
251
|
+
end: Date;
|
|
252
|
+
}): Promise<PaymentStats>;
|
|
253
|
+
/**
|
|
254
|
+
* Create a subscription plan
|
|
255
|
+
*/
|
|
256
|
+
createSubscription(plan: Omit<SubscriptionPlan, 'id'>): Promise<SubscriptionPlan>;
|
|
257
|
+
/**
|
|
258
|
+
* Subscribe a user to a plan
|
|
259
|
+
*/
|
|
260
|
+
subscribe(user: string, planId: string): Promise<Subscription>;
|
|
261
|
+
/**
|
|
262
|
+
* Get active subscriptions for a user
|
|
263
|
+
*/
|
|
264
|
+
getSubscriptions(user: string): Promise<Subscription[]>;
|
|
265
|
+
/**
|
|
266
|
+
* Cancel a subscription
|
|
267
|
+
*/
|
|
268
|
+
cancelSubscription(subscriptionId: string): Promise<void>;
|
|
269
|
+
/**
|
|
270
|
+
* Withdraw earned revenue
|
|
271
|
+
*/
|
|
272
|
+
withdrawRevenue(recipient: string, amount: string, chain: Chain): Promise<{
|
|
273
|
+
txHash: string;
|
|
274
|
+
amount: string;
|
|
275
|
+
}>;
|
|
276
|
+
/**
|
|
277
|
+
* Get usage history for a user
|
|
278
|
+
*/
|
|
279
|
+
getUsageHistory(user: string, options?: {
|
|
280
|
+
endpoint?: string;
|
|
281
|
+
startDate?: Date;
|
|
282
|
+
endDate?: Date;
|
|
283
|
+
limit?: number;
|
|
284
|
+
}): Promise<UsageRecord[]>;
|
|
285
|
+
/**
|
|
286
|
+
* Verify payment for a request
|
|
287
|
+
*/
|
|
288
|
+
verifyPayment(txHash: string, expectedAmount: string): Promise<{
|
|
289
|
+
valid: boolean;
|
|
290
|
+
amount: string;
|
|
291
|
+
from: string;
|
|
292
|
+
}>;
|
|
293
|
+
/**
|
|
294
|
+
* Update revenue split configuration
|
|
295
|
+
*/
|
|
296
|
+
updateRevenueSplit(endpointId: string, revenueSplit: {
|
|
297
|
+
recipient: string;
|
|
298
|
+
percentage: number;
|
|
299
|
+
}[]): Promise<void>;
|
|
300
|
+
/**
|
|
301
|
+
* Get total earnings for a recipient
|
|
302
|
+
*/
|
|
303
|
+
getTotalEarnings(recipient: string, chain?: Chain): Promise<{
|
|
304
|
+
total: string;
|
|
305
|
+
byToken: {
|
|
306
|
+
token: string;
|
|
307
|
+
amount: string;
|
|
308
|
+
}[];
|
|
309
|
+
}>;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Create x402 client instance
|
|
313
|
+
*/
|
|
314
|
+
export declare function createx402Client(config: x402Config): x402Client;
|
|
315
|
+
/**
|
|
316
|
+
* Middleware for Express/Fastify to enforce x402 payments
|
|
317
|
+
*/
|
|
318
|
+
export declare function x402Middleware(client: x402Client, endpointConfig: PaymentEndpointConfig): (req: any, res: any, next: any) => Promise<void>;
|
|
319
|
+
//# sourceMappingURL=x402Client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"x402Client.d.ts","sourceRoot":"","sources":["../../src/thirdweb/x402Client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* thirdweb x402 Payment Protocol Client
|
|
3
|
+
*
|
|
4
|
+
* Monetize APIs with blockchain micropayments
|
|
5
|
+
* Implements HTTP 402 (Payment Required) with crypto payments
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Pay-per-call API monetization
|
|
9
|
+
* - Automatic revenue splitting (70/30 model)
|
|
10
|
+
* - Usage tracking and analytics
|
|
11
|
+
* - Subscription-based access
|
|
12
|
+
* - Metered billing
|
|
13
|
+
* - Multi-chain support
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* thirdweb x402 Payment Protocol Client
|
|
17
|
+
*
|
|
18
|
+
* Monetize your APIs with blockchain micropayments
|
|
19
|
+
*/
|
|
20
|
+
export class x402Client {
|
|
21
|
+
constructor(config) {
|
|
22
|
+
this.baseUrl = 'https://x402.thirdweb.com/api';
|
|
23
|
+
this.client = config.client;
|
|
24
|
+
this.revenueSplit = config.revenueSplit || [
|
|
25
|
+
{ recipient: '0x0', percentage: 70 }, // Creator gets 70%
|
|
26
|
+
{ recipient: 'thirdweb', percentage: 30 }, // thirdweb gets 30%
|
|
27
|
+
];
|
|
28
|
+
this.defaultChain = config.defaultChain;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Create a payment-required endpoint
|
|
32
|
+
*/
|
|
33
|
+
async createPaymentEndpoint(config) {
|
|
34
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
35
|
+
// Generate unique endpoint ID
|
|
36
|
+
const endpointId = `x402_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
37
|
+
// Mock implementation
|
|
38
|
+
return {
|
|
39
|
+
endpointId,
|
|
40
|
+
paymentUrl: `${this.baseUrl}/pay/${endpointId}`,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Track API usage
|
|
45
|
+
*/
|
|
46
|
+
async trackUsage(usage) {
|
|
47
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
48
|
+
// Mock usage tracking
|
|
49
|
+
console.log('Usage tracked:', {
|
|
50
|
+
...usage,
|
|
51
|
+
timestamp: new Date(),
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Get payment stats for an endpoint
|
|
56
|
+
*/
|
|
57
|
+
async getPaymentStats(endpointUrl, period) {
|
|
58
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
59
|
+
// Mock stats
|
|
60
|
+
return {
|
|
61
|
+
url: endpointUrl,
|
|
62
|
+
totalCalls: 1000,
|
|
63
|
+
totalRevenue: '1000.0',
|
|
64
|
+
uniquePayers: 50,
|
|
65
|
+
averageRevenuePerCall: '1.0',
|
|
66
|
+
revenueByRecipient: this.revenueSplit.map(split => ({
|
|
67
|
+
recipient: split.recipient,
|
|
68
|
+
amount: ((1000 * split.percentage) / 100).toString(),
|
|
69
|
+
percentage: split.percentage,
|
|
70
|
+
})),
|
|
71
|
+
period: period || {
|
|
72
|
+
start: new Date(Date.now() - 30 * 24 * 60 * 60 * 1000),
|
|
73
|
+
end: new Date(),
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create a subscription plan
|
|
79
|
+
*/
|
|
80
|
+
async createSubscription(plan) {
|
|
81
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
82
|
+
return {
|
|
83
|
+
id: `plan_${Date.now()}`,
|
|
84
|
+
...plan,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Subscribe a user to a plan
|
|
89
|
+
*/
|
|
90
|
+
async subscribe(user, planId) {
|
|
91
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
92
|
+
const now = new Date();
|
|
93
|
+
const periodEnd = new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000);
|
|
94
|
+
return {
|
|
95
|
+
id: `sub_${Date.now()}`,
|
|
96
|
+
user,
|
|
97
|
+
plan: {
|
|
98
|
+
id: planId,
|
|
99
|
+
name: 'Basic Plan',
|
|
100
|
+
price: '10.0',
|
|
101
|
+
paymentToken: '0x0',
|
|
102
|
+
periodDays: 30,
|
|
103
|
+
includedCalls: 1000,
|
|
104
|
+
endpoints: [],
|
|
105
|
+
},
|
|
106
|
+
periodStart: now,
|
|
107
|
+
periodEnd,
|
|
108
|
+
callsUsed: 0,
|
|
109
|
+
status: 'active',
|
|
110
|
+
nextRenewal: periodEnd,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Get active subscriptions for a user
|
|
115
|
+
*/
|
|
116
|
+
async getSubscriptions(user) {
|
|
117
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
118
|
+
return [];
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Cancel a subscription
|
|
122
|
+
*/
|
|
123
|
+
async cancelSubscription(subscriptionId) {
|
|
124
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
125
|
+
console.log(`Subscription ${subscriptionId} cancelled`);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Withdraw earned revenue
|
|
129
|
+
*/
|
|
130
|
+
async withdrawRevenue(recipient, amount, chain) {
|
|
131
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
132
|
+
return {
|
|
133
|
+
txHash: `0x${Math.random().toString(16).substr(2)}`,
|
|
134
|
+
amount,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get usage history for a user
|
|
139
|
+
*/
|
|
140
|
+
async getUsageHistory(user, options) {
|
|
141
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
142
|
+
return [];
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Verify payment for a request
|
|
146
|
+
*/
|
|
147
|
+
async verifyPayment(txHash, expectedAmount) {
|
|
148
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
149
|
+
return {
|
|
150
|
+
valid: true,
|
|
151
|
+
amount: expectedAmount,
|
|
152
|
+
from: '0x0',
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Update revenue split configuration
|
|
157
|
+
*/
|
|
158
|
+
async updateRevenueSplit(endpointId, revenueSplit) {
|
|
159
|
+
// Validate splits add up to 100%
|
|
160
|
+
const total = revenueSplit.reduce((sum, split) => sum + split.percentage, 0);
|
|
161
|
+
if (total !== 100) {
|
|
162
|
+
throw new Error('Revenue split percentages must add up to 100%');
|
|
163
|
+
}
|
|
164
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Get total earnings for a recipient
|
|
168
|
+
*/
|
|
169
|
+
async getTotalEarnings(recipient, chain) {
|
|
170
|
+
console.warn('x402 API is placeholder - actual implementation pending');
|
|
171
|
+
return {
|
|
172
|
+
total: '0',
|
|
173
|
+
byToken: [],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Create x402 client instance
|
|
179
|
+
*/
|
|
180
|
+
export function createx402Client(config) {
|
|
181
|
+
return new x402Client(config);
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Middleware for Express/Fastify to enforce x402 payments
|
|
185
|
+
*/
|
|
186
|
+
export function x402Middleware(client, endpointConfig) {
|
|
187
|
+
return async (req, res, next) => {
|
|
188
|
+
// Check for payment proof in headers
|
|
189
|
+
const paymentProof = req.headers['x-payment-proof'];
|
|
190
|
+
if (!paymentProof) {
|
|
191
|
+
res.status(402).json({
|
|
192
|
+
error: 'Payment Required',
|
|
193
|
+
message: 'This API requires payment',
|
|
194
|
+
price: endpointConfig.pricePerCall,
|
|
195
|
+
paymentToken: endpointConfig.paymentToken,
|
|
196
|
+
chain: endpointConfig.chain.id,
|
|
197
|
+
});
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
// Verify payment
|
|
202
|
+
const payment = await client.verifyPayment(paymentProof, endpointConfig.pricePerCall);
|
|
203
|
+
if (!payment.valid) {
|
|
204
|
+
throw new Error('Invalid payment');
|
|
205
|
+
}
|
|
206
|
+
// Track usage
|
|
207
|
+
await client.trackUsage({
|
|
208
|
+
user: payment.from,
|
|
209
|
+
endpoint: endpointConfig.url,
|
|
210
|
+
cost: payment.amount,
|
|
211
|
+
txHash: paymentProof,
|
|
212
|
+
});
|
|
213
|
+
// Allow request to proceed
|
|
214
|
+
next();
|
|
215
|
+
}
|
|
216
|
+
catch (error) {
|
|
217
|
+
res.status(402).json({
|
|
218
|
+
error: 'Payment Verification Failed',
|
|
219
|
+
message: error.message,
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
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
|
+
import type { ThirdwebClient, Chain } from 'thirdweb';
|
|
10
|
+
/**
|
|
11
|
+
* Gas usage event sent to backend for billing
|
|
12
|
+
*/
|
|
13
|
+
export interface GasUsageEvent {
|
|
14
|
+
/** Unique app identifier from App Store */
|
|
15
|
+
appId: string;
|
|
16
|
+
/** Developer's wallet address for billing */
|
|
17
|
+
developerWallet: string;
|
|
18
|
+
/** Transaction hash on-chain */
|
|
19
|
+
transactionHash: string;
|
|
20
|
+
/** Gas cost in USDC (6 decimal precision) */
|
|
21
|
+
gasSponsored: string;
|
|
22
|
+
/** Unix timestamp (milliseconds) */
|
|
23
|
+
timestamp: number;
|
|
24
|
+
/** Chain ID (33529 for Varity L3) */
|
|
25
|
+
chainId: number;
|
|
26
|
+
/** End user's wallet who triggered the transaction */
|
|
27
|
+
userWallet: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Transaction receipt with gas information
|
|
31
|
+
*/
|
|
32
|
+
export interface GasTransactionReceipt {
|
|
33
|
+
/** Transaction hash */
|
|
34
|
+
transactionHash: string;
|
|
35
|
+
/** Gas used by the transaction */
|
|
36
|
+
gasUsed: bigint;
|
|
37
|
+
/** Effective gas price paid */
|
|
38
|
+
effectiveGasPrice: bigint;
|
|
39
|
+
/** Block number */
|
|
40
|
+
blockNumber: bigint;
|
|
41
|
+
/** Status (1 = success, 0 = failure) */
|
|
42
|
+
status: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Gas tracking configuration
|
|
46
|
+
*/
|
|
47
|
+
export interface GasTrackerConfig {
|
|
48
|
+
/** API endpoint for gas tracking (default: https://api.varity.so) */
|
|
49
|
+
apiUrl?: string;
|
|
50
|
+
/** Enable/disable tracking (for development) */
|
|
51
|
+
enabled?: boolean;
|
|
52
|
+
/** Retry attempts on failure */
|
|
53
|
+
retries?: number;
|
|
54
|
+
/** Timeout for tracking requests (ms) */
|
|
55
|
+
timeout?: number;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Wait for transaction receipt with retry logic
|
|
59
|
+
*
|
|
60
|
+
* @param client - thirdweb client
|
|
61
|
+
* @param chain - Chain to query
|
|
62
|
+
* @param transactionHash - Transaction hash to wait for
|
|
63
|
+
* @param maxWaitTime - Maximum time to wait in ms (default: 60s)
|
|
64
|
+
* @returns Transaction receipt
|
|
65
|
+
*/
|
|
66
|
+
export declare function waitForTransactionReceipt(client: ThirdwebClient, chain: Chain, transactionHash: string, maxWaitTime?: number): Promise<GasTransactionReceipt>;
|
|
67
|
+
/**
|
|
68
|
+
* Calculate gas cost in USDC (6 decimals)
|
|
69
|
+
*
|
|
70
|
+
* @param receipt - Transaction receipt with gas information
|
|
71
|
+
* @param usdcPerGas - USDC price per gas unit (default: auto-fetch from oracle)
|
|
72
|
+
* @returns Gas cost in USDC as string (6 decimal precision)
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* const receipt = await waitForTransactionReceipt(client, chain, txHash);
|
|
76
|
+
* const usdcCost = await calculateGasInUSDC(receipt);
|
|
77
|
+
* console.log(`Gas cost: ${usdcCost} USDC`); // "0.025000"
|
|
78
|
+
*/
|
|
79
|
+
export declare function calculateGasInUSDC(receipt: GasTransactionReceipt, usdcPerGas?: string): Promise<string>;
|
|
80
|
+
/**
|
|
81
|
+
* Track gas usage for billing
|
|
82
|
+
*
|
|
83
|
+
* Sends gas usage event to Varity backend API for billing purposes.
|
|
84
|
+
* Includes retry logic and error handling.
|
|
85
|
+
*
|
|
86
|
+
* @param event - Gas usage event to track
|
|
87
|
+
* @param config - Optional configuration
|
|
88
|
+
* @returns Promise that resolves when tracking is complete
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* await trackGasUsage({
|
|
92
|
+
* appId: 'app_abc123',
|
|
93
|
+
* developerWallet: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
|
|
94
|
+
* transactionHash: '0x...',
|
|
95
|
+
* gasSponsored: '0.025000',
|
|
96
|
+
* timestamp: Date.now(),
|
|
97
|
+
* chainId: 33529,
|
|
98
|
+
* userWallet: '0x...',
|
|
99
|
+
* });
|
|
100
|
+
*/
|
|
101
|
+
export declare function trackGasUsage(event: GasUsageEvent, config?: GasTrackerConfig): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* Track gas usage for a transaction (convenience method)
|
|
104
|
+
*
|
|
105
|
+
* Waits for transaction receipt, calculates gas cost, and tracks usage.
|
|
106
|
+
*
|
|
107
|
+
* @param client - thirdweb client
|
|
108
|
+
* @param chain - Chain the transaction is on
|
|
109
|
+
* @param transactionHash - Transaction hash to track
|
|
110
|
+
* @param appId - App identifier
|
|
111
|
+
* @param developerWallet - Developer's wallet address
|
|
112
|
+
* @param userWallet - End user's wallet address
|
|
113
|
+
* @param config - Optional configuration
|
|
114
|
+
*
|
|
115
|
+
* @example
|
|
116
|
+
* await trackTransactionGasUsage(
|
|
117
|
+
* client,
|
|
118
|
+
* varityL3Testnet,
|
|
119
|
+
* txHash,
|
|
120
|
+
* 'app_abc123',
|
|
121
|
+
* '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
|
|
122
|
+
* '0x...'
|
|
123
|
+
* );
|
|
124
|
+
*/
|
|
125
|
+
export declare function trackTransactionGasUsage(client: ThirdwebClient, chain: Chain, transactionHash: string, appId: string, developerWallet: string, userWallet: string, config?: GasTrackerConfig): Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* Create a gas tracker instance with default config
|
|
128
|
+
*
|
|
129
|
+
* @param config - Gas tracker configuration
|
|
130
|
+
* @returns Object with tracking methods
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* const tracker = createGasTracker({
|
|
134
|
+
* apiUrl: 'https://api.varity.so',
|
|
135
|
+
* enabled: true,
|
|
136
|
+
* });
|
|
137
|
+
*
|
|
138
|
+
* await tracker.trackTransaction(client, chain, txHash, appId, devWallet, userWallet);
|
|
139
|
+
*/
|
|
140
|
+
export declare function createGasTracker(config?: GasTrackerConfig): {
|
|
141
|
+
/**
|
|
142
|
+
* Track gas usage event
|
|
143
|
+
*/
|
|
144
|
+
trackEvent: (event: GasUsageEvent) => Promise<void>;
|
|
145
|
+
/**
|
|
146
|
+
* Track transaction gas usage
|
|
147
|
+
*/
|
|
148
|
+
trackTransaction: (client: ThirdwebClient, chain: Chain, transactionHash: string, appId: string, developerWallet: string, userWallet: string) => Promise<void>;
|
|
149
|
+
/**
|
|
150
|
+
* Calculate gas in USDC
|
|
151
|
+
*/
|
|
152
|
+
calculateGas: typeof calculateGasInUSDC;
|
|
153
|
+
/**
|
|
154
|
+
* Wait for receipt
|
|
155
|
+
*/
|
|
156
|
+
waitForReceipt: (client: ThirdwebClient, chain: Chain, txHash: string) => Promise<GasTransactionReceipt>;
|
|
157
|
+
};
|
|
158
|
+
//# sourceMappingURL=gasTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gasTracker.d.ts","sourceRoot":"","sources":["../../src/tracking/gasTracker.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,KAAK,EAAE,MAAM,CAAC;IAEd,6CAA6C;IAC7C,eAAe,EAAE,MAAM,CAAC;IAExB,gCAAgC;IAChC,eAAe,EAAE,MAAM,CAAC;IAExB,6CAA6C;IAC7C,YAAY,EAAE,MAAM,CAAC;IAErB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAElB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAEhB,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,uBAAuB;IACvB,eAAe,EAAE,MAAM,CAAC;IAExB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAEhB,+BAA+B;IAC/B,iBAAiB,EAAE,MAAM,CAAC;IAE1B,mBAAmB;IACnB,WAAW,EAAE,MAAM,CAAC;IAEpB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,gDAAgD;IAChD,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAUD;;;;;;;;GAQG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,MAAM,EACvB,WAAW,GAAE,MAAc,GAC1B,OAAO,CAAC,qBAAqB,CAAC,CAgChC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,qBAAqB,EAC9B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,CAAC,CAuBjB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,aAAa,EACpB,MAAM,GAAE,gBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,KAAK,EACZ,eAAe,EAAE,MAAM,EACvB,KAAK,EAAE,MAAM,EACb,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,gBAAqB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,GAAE,gBAAqB;IAI1D;;OAEG;wBACiB,aAAa;IAEjC;;OAEG;+BAEO,cAAc,SACf,KAAK,mBACK,MAAM,SAChB,MAAM,mBACI,MAAM,cACX,MAAM;IAWpB;;OAEG;;IAGH;;OAEG;6BACsB,cAAc,SAAS,KAAK,UAAU,MAAM;EAGxE"}
|