@tradestack/paymaster 1.0.22

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 (85) hide show
  1. package/README.md +276 -0
  2. package/dist/backend/config/chains.d.ts +18 -0
  3. package/dist/backend/config/chains.d.ts.map +1 -0
  4. package/dist/backend/config/chains.js +45 -0
  5. package/dist/backend/config/chains.js.map +1 -0
  6. package/dist/backend/config/constants.d.ts +58 -0
  7. package/dist/backend/config/constants.d.ts.map +1 -0
  8. package/dist/backend/config/constants.js +165 -0
  9. package/dist/backend/config/constants.js.map +1 -0
  10. package/dist/backend/config/db.context.d.ts +5 -0
  11. package/dist/backend/config/db.context.d.ts.map +1 -0
  12. package/dist/backend/config/db.context.js +63 -0
  13. package/dist/backend/config/db.context.js.map +1 -0
  14. package/dist/backend/config/db.d.ts +5 -0
  15. package/dist/backend/config/db.d.ts.map +1 -0
  16. package/dist/backend/config/db.js +35 -0
  17. package/dist/backend/config/db.js.map +1 -0
  18. package/dist/backend/config/index.d.ts +16 -0
  19. package/dist/backend/config/index.d.ts.map +1 -0
  20. package/dist/backend/config/index.js +44 -0
  21. package/dist/backend/config/index.js.map +1 -0
  22. package/dist/backend/contract/abi/ERC20Abi.json +413 -0
  23. package/dist/backend/contract/abi/HalalPaymasterAbi.json +544 -0
  24. package/dist/backend/contract/abi/entryPointAbi.json +166 -0
  25. package/dist/backend/contract/constant.d.ts +4 -0
  26. package/dist/backend/contract/constant.d.ts.map +1 -0
  27. package/dist/backend/contract/constant.js +7 -0
  28. package/dist/backend/contract/constant.js.map +1 -0
  29. package/dist/backend/contract/contract.d.ts +11 -0
  30. package/dist/backend/contract/contract.d.ts.map +1 -0
  31. package/dist/backend/contract/contract.js +34 -0
  32. package/dist/backend/contract/contract.js.map +1 -0
  33. package/dist/backend/helper/hotwallet.d.ts +4 -0
  34. package/dist/backend/helper/hotwallet.d.ts.map +1 -0
  35. package/dist/backend/helper/hotwallet.js +25 -0
  36. package/dist/backend/helper/hotwallet.js.map +1 -0
  37. package/dist/backend/services/chains/evm.service.d.ts +5760 -0
  38. package/dist/backend/services/chains/evm.service.d.ts.map +1 -0
  39. package/dist/backend/services/chains/evm.service.js +263 -0
  40. package/dist/backend/services/chains/evm.service.js.map +1 -0
  41. package/dist/backend/services/chains/solana.service.d.ts +15 -0
  42. package/dist/backend/services/chains/solana.service.d.ts.map +1 -0
  43. package/dist/backend/services/chains/solana.service.js +192 -0
  44. package/dist/backend/services/chains/solana.service.js.map +1 -0
  45. package/dist/backend/services/chains/tron.service.d.ts +14 -0
  46. package/dist/backend/services/chains/tron.service.d.ts.map +1 -0
  47. package/dist/backend/services/chains/tron.service.js +255 -0
  48. package/dist/backend/services/chains/tron.service.js.map +1 -0
  49. package/dist/backend/services/paymaster.service.d.ts +3 -0
  50. package/dist/backend/services/paymaster.service.d.ts.map +1 -0
  51. package/dist/backend/services/paymaster.service.js +55 -0
  52. package/dist/backend/services/paymaster.service.js.map +1 -0
  53. package/dist/backend/services/sweep.service.d.ts +14 -0
  54. package/dist/backend/services/sweep.service.d.ts.map +1 -0
  55. package/dist/backend/services/sweep.service.js +103 -0
  56. package/dist/backend/services/sweep.service.js.map +1 -0
  57. package/dist/backend/services/sweep.worker.d.ts +11 -0
  58. package/dist/backend/services/sweep.worker.d.ts.map +1 -0
  59. package/dist/backend/services/sweep.worker.js +163 -0
  60. package/dist/backend/services/sweep.worker.js.map +1 -0
  61. package/dist/backend/services/sweeper/evm.sweep.service.d.ts +13 -0
  62. package/dist/backend/services/sweeper/evm.sweep.service.d.ts.map +1 -0
  63. package/dist/backend/services/sweeper/evm.sweep.service.js +61 -0
  64. package/dist/backend/services/sweeper/evm.sweep.service.js.map +1 -0
  65. package/dist/backend/services/sweeper/solana.sweep.service.d.ts +13 -0
  66. package/dist/backend/services/sweeper/solana.sweep.service.d.ts.map +1 -0
  67. package/dist/backend/services/sweeper/solana.sweep.service.js +45 -0
  68. package/dist/backend/services/sweeper/solana.sweep.service.js.map +1 -0
  69. package/dist/backend/services/sweeper/tron.sweep.service.d.ts +13 -0
  70. package/dist/backend/services/sweeper/tron.sweep.service.d.ts.map +1 -0
  71. package/dist/backend/services/sweeper/tron.sweep.service.js +45 -0
  72. package/dist/backend/services/sweeper/tron.sweep.service.js.map +1 -0
  73. package/dist/sdk/db/adapter.d.ts +25 -0
  74. package/dist/sdk/db/adapter.d.ts.map +1 -0
  75. package/dist/sdk/db/adapter.js +145 -0
  76. package/dist/sdk/db/adapter.js.map +1 -0
  77. package/dist/sdk/index.d.ts +27 -0
  78. package/dist/sdk/index.d.ts.map +1 -0
  79. package/dist/sdk/index.js +274 -0
  80. package/dist/sdk/index.js.map +1 -0
  81. package/dist/sdk/types.d.ts +66 -0
  82. package/dist/sdk/types.d.ts.map +1 -0
  83. package/dist/sdk/types.js +3 -0
  84. package/dist/sdk/types.js.map +1 -0
  85. package/package.json +55 -0
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runSweepCycle = exports.stopAllSweepWorkers = exports.stopSweepWorker = exports.startSweepWorker = void 0;
4
+ const sweep_service_1 = require("./sweep.service");
5
+ const constants_1 = require("../config/constants");
6
+ const activeWorkers = new Map();
7
+ const startSweepWorker = (chainConfig, callbacks) => {
8
+ const chainKey = chainConfig.chainKey;
9
+ if (activeWorkers.has(chainKey)) {
10
+ console.log(`[${chainConfig.name}] Sweep worker already running`);
11
+ return;
12
+ }
13
+ console.log(`Sweep worker started for ${chainConfig.name}: checking every ${constants_1.SWEEP_INTERVAL_MS / 1000}s`);
14
+ const interval = setInterval(async () => {
15
+ await (0, exports.runSweepCycle)(chainConfig, callbacks);
16
+ }, constants_1.SWEEP_INTERVAL_MS);
17
+ (0, exports.runSweepCycle)(chainConfig, callbacks);
18
+ const stop = () => {
19
+ clearInterval(interval);
20
+ activeWorkers.delete(chainKey);
21
+ console.log(`Sweep worker stopped for ${chainConfig.name}`);
22
+ };
23
+ activeWorkers.set(chainKey, stop);
24
+ return stop;
25
+ };
26
+ exports.startSweepWorker = startSweepWorker;
27
+ const stopSweepWorker = () => {
28
+ for (const stop of activeWorkers.values()) {
29
+ stop();
30
+ }
31
+ activeWorkers.clear();
32
+ console.log("All sweep workers stopped");
33
+ };
34
+ exports.stopSweepWorker = stopSweepWorker;
35
+ exports.stopAllSweepWorkers = exports.stopSweepWorker;
36
+ const runSweepCycle = async (chainConfig, callbacks) => {
37
+ console.log(`[${chainConfig.name}] Running sweep cycle at ${new Date().toISOString()}`);
38
+ try {
39
+ const wallets = await (0, sweep_service_1.getAllWallets)(chainConfig.chainType);
40
+ console.log(`[${chainConfig.name}] Found ${wallets.length} wallets for chain type: ${chainConfig.chainType}`);
41
+ if (wallets.length === 0) {
42
+ console.log(`[${chainConfig.name}] No active wallets found`);
43
+ return;
44
+ }
45
+ console.log(`[${chainConfig.name}] Checking ${wallets.length} wallets sequentially`);
46
+ for (const walletAddress of wallets) {
47
+ try {
48
+ console.log(`[${chainConfig.name}] Processing wallet: ${walletAddress}`);
49
+ console.log(`[${chainConfig.name}] Checking tokens above threshold...`);
50
+ const tokensToSweep = await (0, sweep_service_1.getTokensAboveThreshold)(walletAddress, chainConfig);
51
+ console.log(`[${chainConfig.name}] Tokens to sweep: ${JSON.stringify(tokensToSweep)}`);
52
+ for (const token of tokensToSweep) {
53
+ await sweepWithRetry(walletAddress, chainConfig, token, callbacks);
54
+ await new Promise((resolve) => setTimeout(resolve, 3000));
55
+ }
56
+ console.log(`[${chainConfig.name}] Checking native asset...`);
57
+ const hasNative = await (0, sweep_service_1.isNativeAboveThreshold)(walletAddress, chainConfig);
58
+ console.log(`[${chainConfig.name}] Has native above threshold: ${hasNative}`);
59
+ if (hasNative) {
60
+ await sweepNativeWithRetry(walletAddress, chainConfig, callbacks);
61
+ await new Promise((resolve) => setTimeout(resolve, 3000));
62
+ }
63
+ }
64
+ catch (err) {
65
+ console.error(`[${chainConfig.name}] Error processing wallet ${walletAddress}:`, err);
66
+ }
67
+ }
68
+ console.log(`[${chainConfig.name}] Sweep cycle complete`);
69
+ }
70
+ catch (err) {
71
+ console.error(`[${chainConfig.name}] Sweep cycle error:`, err);
72
+ }
73
+ };
74
+ exports.runSweepCycle = runSweepCycle;
75
+ const sweepWithRetry = async (walletAddress, chainConfig, token, callbacks, maxRetries = 3, attempt = 1) => {
76
+ try {
77
+ const result = await (0, sweep_service_1.triggerTokenSweep)(walletAddress, chainConfig, token);
78
+ if (result.txHash === "")
79
+ return;
80
+ console.log(`[${chainConfig.name}] Sweep successful for ${walletAddress} (${token})`);
81
+ // fire callback
82
+ if (callbacks?.onSweepComplete) {
83
+ await callbacks.onSweepComplete({
84
+ address: walletAddress,
85
+ chain: chainConfig.chainKey,
86
+ token,
87
+ amount: result.amount,
88
+ txHash: result.txHash,
89
+ timestamp: new Date(),
90
+ });
91
+ }
92
+ }
93
+ catch (err) {
94
+ if (attempt < maxRetries) {
95
+ const delay = attempt * 2000;
96
+ console.warn(`[${chainConfig.name}] Sweep failed for ${walletAddress} (${token}) — retry ${attempt}/${maxRetries} in ${delay}ms`);
97
+ console.log("Error while sweeping:", err);
98
+ await new Promise((resolve) => setTimeout(resolve, delay));
99
+ await sweepWithRetry(walletAddress, chainConfig, token, callbacks, maxRetries, attempt + 1);
100
+ }
101
+ else {
102
+ console.error(`[${chainConfig.name}] Sweep failed for ${walletAddress} (${token}) after ${maxRetries} attempts:`, err);
103
+ // fire failed callback
104
+ if (callbacks?.onSweepFailed) {
105
+ await callbacks.onSweepFailed({
106
+ address: walletAddress,
107
+ chain: chainConfig.chainKey,
108
+ token,
109
+ error: err instanceof Error ? err.message : "Unknown error",
110
+ timestamp: new Date(),
111
+ });
112
+ }
113
+ }
114
+ }
115
+ };
116
+ const sweepNativeWithRetry = async (walletAddress, chainConfig, callbacks, maxRetries = 3, attempt = 1) => {
117
+ try {
118
+ const result = await (0, sweep_service_1.triggerNativeSweep)(walletAddress, chainConfig);
119
+ if (result.txHash === "")
120
+ return;
121
+ console.log(`[${chainConfig.name}] Native sweep successful for ${walletAddress}`);
122
+ if (callbacks?.onSweepComplete) {
123
+ await callbacks.onSweepComplete({
124
+ address: walletAddress,
125
+ chain: chainConfig.chainKey,
126
+ token: chainConfig.chainType === "evm"
127
+ ? "ETH"
128
+ : chainConfig.chainType === "solana"
129
+ ? "SOL"
130
+ : "TRX",
131
+ amount: result.amount,
132
+ txHash: result.txHash,
133
+ timestamp: new Date(),
134
+ });
135
+ }
136
+ }
137
+ catch (err) {
138
+ if (attempt < maxRetries) {
139
+ const delay = attempt * 2000;
140
+ console.warn(`[${chainConfig.name}] Native sweep failed for ${walletAddress} — retry ${attempt}/${maxRetries} in ${delay}ms`);
141
+ console.log("Error while sweeping native:", err);
142
+ await new Promise((resolve) => setTimeout(resolve, delay));
143
+ await sweepNativeWithRetry(walletAddress, chainConfig, callbacks, maxRetries, attempt + 1);
144
+ }
145
+ else {
146
+ console.error(`[${chainConfig.name}] Native sweep failed for ${walletAddress} after ${maxRetries} attempts:`, err);
147
+ if (callbacks?.onSweepFailed) {
148
+ await callbacks.onSweepFailed({
149
+ address: walletAddress,
150
+ chain: chainConfig.chainKey,
151
+ token: chainConfig.chainType === "evm"
152
+ ? "ETH"
153
+ : chainConfig.chainType === "solana"
154
+ ? "SOL"
155
+ : "TRX",
156
+ error: err instanceof Error ? err.message : "Unknown error",
157
+ timestamp: new Date(),
158
+ });
159
+ }
160
+ }
161
+ }
162
+ };
163
+ //# sourceMappingURL=sweep.worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sweep.worker.js","sourceRoot":"","sources":["../../../../src/backend/services/sweep.worker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { EVMChainConfig } from "../../config/chains";
2
+ import { TokenKey } from "../../config/constants";
3
+ export declare const triggerEVMTokenSweep: (walletAddress: string, chainConfig: EVMChainConfig, token: TokenKey) => Promise<{
4
+ txHash: string;
5
+ amount: string;
6
+ }>;
7
+ export declare const triggerEVMETHSweep: (walletAddress: string, chainConfig: EVMChainConfig) => Promise<{
8
+ txHash: string;
9
+ amount: string;
10
+ }>;
11
+ export declare const getEVMTokensAboveThreshold: (walletAddress: string, chainConfig: EVMChainConfig) => Promise<TokenKey[]>;
12
+ export declare const isEVMETHAboveThreshold: (walletAddress: string, chainConfig: EVMChainConfig) => Promise<boolean>;
13
+ //# sourceMappingURL=evm.sweep.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm.sweep.service.d.ts","sourceRoot":"","sources":["../../../../../src/backend/services/sweeper/evm.sweep.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,QAAQ,EAGT,MAAM,wBAAwB,CAAC;AAehC,eAAO,MAAM,oBAAoB,GAC/B,eAAe,MAAM,EACrB,aAAa,cAAc,EAC3B,OAAO,QAAQ,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE5C,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,eAAe,MAAM,EACrB,aAAa,cAAc,KAC1B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE5C,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,eAAe,MAAM,EACrB,aAAa,cAAc,KAC1B,OAAO,CAAC,QAAQ,EAAE,CA6BpB,CAAC;AAEF,eAAO,MAAM,sBAAsB,GACjC,eAAe,MAAM,EACrB,aAAa,cAAc,KAC1B,OAAO,CAAC,OAAO,CAejB,CAAC"}
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isEVMETHAboveThreshold = exports.getEVMTokensAboveThreshold = exports.triggerEVMETHSweep = exports.triggerEVMTokenSweep = void 0;
4
+ const evm_service_1 = require("./../chains/evm.service");
5
+ const viem_1 = require("viem");
6
+ const constants_1 = require("../../config/constants");
7
+ const constant_1 = require("../../contract/constant");
8
+ const TOKEN_ABI = (0, viem_1.parseAbi)([
9
+ "function balanceOf(address owner) view returns (uint256)",
10
+ ]);
11
+ const SWEEP_THRESHOLD = BigInt(Math.floor(constants_1.SWEEP_THRESHOLD_USD * 10 ** constant_1.USDC_DECIMAL));
12
+ const ETH_SWEEP_THRESHOLD = (0, viem_1.parseEther)(constants_1.ETH_MIN_SWEEP_THRESHOLD);
13
+ const SUPPORTED_EVM_TOKENS = ["USDC", "USDT"];
14
+ const triggerEVMTokenSweep = async (walletAddress, chainConfig, token) => {
15
+ return await (0, evm_service_1.sweepERC20)(walletAddress, chainConfig, token);
16
+ };
17
+ exports.triggerEVMTokenSweep = triggerEVMTokenSweep;
18
+ const triggerEVMETHSweep = async (walletAddress, chainConfig) => {
19
+ return await (0, evm_service_1.sweepNativeETH)(walletAddress, chainConfig);
20
+ };
21
+ exports.triggerEVMETHSweep = triggerEVMETHSweep;
22
+ const getEVMTokensAboveThreshold = async (walletAddress, chainConfig) => {
23
+ const publicClient = (0, evm_service_1.getPublicClient)(chainConfig);
24
+ const tokensAboveThreshold = [];
25
+ for (const token of SUPPORTED_EVM_TOKENS) {
26
+ const tokenAddress = chainConfig.tokens[token];
27
+ if (!tokenAddress || tokenAddress.includes("DUMMY"))
28
+ continue;
29
+ try {
30
+ const balance = await publicClient.readContract({
31
+ address: tokenAddress,
32
+ abi: TOKEN_ABI,
33
+ functionName: "balanceOf",
34
+ args: [walletAddress],
35
+ });
36
+ if (balance >= SWEEP_THRESHOLD) {
37
+ tokensAboveThreshold.push(token);
38
+ }
39
+ }
40
+ catch (err) {
41
+ console.error(`[${chainConfig.name}] Error checking ${token} balance for ${walletAddress}:`, err);
42
+ }
43
+ }
44
+ return tokensAboveThreshold;
45
+ };
46
+ exports.getEVMTokensAboveThreshold = getEVMTokensAboveThreshold;
47
+ const isEVMETHAboveThreshold = async (walletAddress, chainConfig) => {
48
+ const publicClient = (0, evm_service_1.getPublicClient)(chainConfig);
49
+ try {
50
+ const balance = await publicClient.getBalance({
51
+ address: walletAddress,
52
+ });
53
+ return balance >= ETH_SWEEP_THRESHOLD;
54
+ }
55
+ catch (err) {
56
+ console.error(`[${chainConfig.name}] Error checking ETH balance for ${walletAddress}:`, err);
57
+ return false;
58
+ }
59
+ };
60
+ exports.isEVMETHAboveThreshold = isEVMETHAboveThreshold;
61
+ //# sourceMappingURL=evm.sweep.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evm.sweep.service.js","sourceRoot":"","sources":["../../../../../src/backend/services/sweeper/evm.sweep.service.ts"],"names":[],"mappings":";;;AAAA,yDAIiC;AACjC,+BAA4C;AAE5C,sDAIgC;AAChC,sDAAuD;AAEvD,MAAM,SAAS,GAAG,IAAA,eAAQ,EAAC;IACzB,0DAA0D;CAC3D,CAAC,CAAC;AAEH,MAAM,eAAe,GAAG,MAAM,CAC5B,IAAI,CAAC,KAAK,CAAC,+BAAmB,GAAG,EAAE,IAAI,uBAAY,CAAC,CACrD,CAAC;AAEF,MAAM,mBAAmB,GAAG,IAAA,iBAAU,EAAC,mCAAuB,CAAC,CAAC;AAEhE,MAAM,oBAAoB,GAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEnD,MAAM,oBAAoB,GAAG,KAAK,EACvC,aAAqB,EACrB,WAA2B,EAC3B,KAAe,EAC8B,EAAE;IAC/C,OAAO,MAAM,IAAA,wBAAU,EAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC,CAAC;AANW,QAAA,oBAAoB,wBAM/B;AAEK,MAAM,kBAAkB,GAAG,KAAK,EACrC,aAAqB,EACrB,WAA2B,EACkB,EAAE;IAC/C,OAAO,MAAM,IAAA,4BAAc,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAC1D,CAAC,CAAC;AALW,QAAA,kBAAkB,sBAK7B;AAEK,MAAM,0BAA0B,GAAG,KAAK,EAC7C,aAAqB,EACrB,WAA2B,EACN,EAAE;IACvB,MAAM,YAAY,GAAG,IAAA,6BAAe,EAAC,WAAW,CAAC,CAAC;IAClD,MAAM,oBAAoB,GAAe,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,oBAAoB,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAE/C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,SAAS;QAE9D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC;gBAC9C,OAAO,EAAE,YAA6B;gBACtC,GAAG,EAAE,SAAS;gBACd,YAAY,EAAE,WAAW;gBACzB,IAAI,EAAE,CAAC,aAA8B,CAAC;aACvC,CAAC,CAAC;YAEH,IAAI,OAAO,IAAI,eAAe,EAAE,CAAC;gBAC/B,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,IAAI,WAAW,CAAC,IAAI,oBAAoB,KAAK,gBAAgB,aAAa,GAAG,EAC7E,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC;AAhCW,QAAA,0BAA0B,8BAgCrC;AAEK,MAAM,sBAAsB,GAAG,KAAK,EACzC,aAAqB,EACrB,WAA2B,EACT,EAAE;IACpB,MAAM,YAAY,GAAG,IAAA,6BAAe,EAAC,WAAW,CAAC,CAAC;IAElD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC;YAC5C,OAAO,EAAE,aAA8B;SACxC,CAAC,CAAC;QACH,OAAO,OAAO,IAAI,mBAAmB,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,IAAI,WAAW,CAAC,IAAI,oCAAoC,aAAa,GAAG,EACxE,GAAG,CACJ,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAlBW,QAAA,sBAAsB,0BAkBjC"}
@@ -0,0 +1,13 @@
1
+ import { SolanaChainConfig } from "../../config/chains";
2
+ import { TokenKey } from "../../config/constants";
3
+ export declare const triggerSolanaTokenSweep: (walletAddress: string, chainConfig: SolanaChainConfig, token: TokenKey) => Promise<{
4
+ txHash: string;
5
+ amount: string;
6
+ }>;
7
+ export declare const triggerSOLSweep: (walletAddress: string, chainConfig: SolanaChainConfig) => Promise<{
8
+ txHash: string;
9
+ amount: string;
10
+ }>;
11
+ export declare const getSolanaTokensAboveThreshold: (walletAddress: string, chainConfig: SolanaChainConfig) => Promise<TokenKey[]>;
12
+ export declare const isSOLAboveThreshold: (walletAddress: string, chainConfig: SolanaChainConfig) => Promise<boolean>;
13
+ //# sourceMappingURL=solana.sweep.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.sweep.service.d.ts","sourceRoot":"","sources":["../../../../../src/backend/services/sweeper/solana.sweep.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EACL,QAAQ,EAGT,MAAM,wBAAwB,CAAC;AAKhC,eAAO,MAAM,uBAAuB,GAClC,eAAe,MAAM,EACrB,aAAa,iBAAiB,EAC9B,OAAO,QAAQ,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,eAAe,MAAM,EACrB,aAAa,iBAAiB,KAC7B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE5C,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACxC,eAAe,MAAM,EACrB,aAAa,iBAAiB,KAC7B,OAAO,CAAC,QAAQ,EAAE,CAoBpB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,eAAe,MAAM,EACrB,aAAa,iBAAiB,KAC7B,OAAO,CAAC,OAAO,CAWjB,CAAC"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSOLAboveThreshold = exports.getSolanaTokensAboveThreshold = exports.triggerSOLSweep = exports.triggerSolanaTokenSweep = void 0;
4
+ const solana_service_1 = require("../chains/solana.service");
5
+ const constants_1 = require("../../config/constants");
6
+ const SUPPORTED_SOLANA_TOKENS = ["USDC", "USDT"];
7
+ const SPL_SWEEP_THRESHOLD = BigInt(Math.floor(constants_1.SWEEP_THRESHOLD_USD * 1000000));
8
+ const triggerSolanaTokenSweep = async (walletAddress, chainConfig, token) => {
9
+ return await (0, solana_service_1.sweepSPLToken)(walletAddress, chainConfig, token);
10
+ };
11
+ exports.triggerSolanaTokenSweep = triggerSolanaTokenSweep;
12
+ const triggerSOLSweep = async (walletAddress, chainConfig) => {
13
+ return await (0, solana_service_1.sweepNativeSOL)(walletAddress, chainConfig);
14
+ };
15
+ exports.triggerSOLSweep = triggerSOLSweep;
16
+ const getSolanaTokensAboveThreshold = async (walletAddress, chainConfig) => {
17
+ const tokensAboveThreshold = [];
18
+ for (const token of SUPPORTED_SOLANA_TOKENS) {
19
+ if (!chainConfig.tokens[token])
20
+ continue;
21
+ try {
22
+ const balance = await (0, solana_service_1.getSPLBalance)(walletAddress, chainConfig, token);
23
+ if (balance >= SPL_SWEEP_THRESHOLD) {
24
+ tokensAboveThreshold.push(token);
25
+ }
26
+ }
27
+ catch (err) {
28
+ console.error(`[${chainConfig.name}] Error checking ${token} balance for ${walletAddress}:`, err);
29
+ }
30
+ }
31
+ return tokensAboveThreshold;
32
+ };
33
+ exports.getSolanaTokensAboveThreshold = getSolanaTokensAboveThreshold;
34
+ const isSOLAboveThreshold = async (walletAddress, chainConfig) => {
35
+ try {
36
+ const balance = await (0, solana_service_1.getNativeSOLBalance)(walletAddress, chainConfig);
37
+ return balance >= constants_1.SOL_MIN_SWEEP_THRESHOLD;
38
+ }
39
+ catch (err) {
40
+ console.error(`[${chainConfig.name}] Error checking SOL balance for ${walletAddress}:`, err);
41
+ return false;
42
+ }
43
+ };
44
+ exports.isSOLAboveThreshold = isSOLAboveThreshold;
45
+ //# sourceMappingURL=solana.sweep.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solana.sweep.service.js","sourceRoot":"","sources":["../../../../../src/backend/services/sweeper/solana.sweep.service.ts"],"names":[],"mappings":";;;AAAA,6DAKkC;AAElC,sDAIgC;AAEhC,MAAM,uBAAuB,GAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC7D,MAAM,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,+BAAmB,GAAG,OAAS,CAAC,CAAC,CAAC;AAEzE,MAAM,uBAAuB,GAAG,KAAK,EAC1C,aAAqB,EACrB,WAA8B,EAC9B,KAAe,EAC8B,EAAE;IAC/C,OAAO,MAAM,IAAA,8BAAa,EAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAChE,CAAC,CAAC;AANW,QAAA,uBAAuB,2BAMlC;AAEK,MAAM,eAAe,GAAG,KAAK,EAClC,aAAqB,EACrB,WAA8B,EACe,EAAE;IAC/C,OAAO,MAAM,IAAA,+BAAc,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAC1D,CAAC,CAAC;AALW,QAAA,eAAe,mBAK1B;AAEK,MAAM,6BAA6B,GAAG,KAAK,EAChD,aAAqB,EACrB,WAA8B,EACT,EAAE;IACvB,MAAM,oBAAoB,GAAe,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,uBAAuB,EAAE,CAAC;QAC5C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,SAAS;QAEzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,8BAAa,EAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACvE,IAAI,OAAO,IAAI,mBAAmB,EAAE,CAAC;gBACnC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,IAAI,WAAW,CAAC,IAAI,oBAAoB,KAAK,gBAAgB,aAAa,GAAG,EAC7E,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC;AAvBW,QAAA,6BAA6B,iCAuBxC;AAEK,MAAM,mBAAmB,GAAG,KAAK,EACtC,aAAqB,EACrB,WAA8B,EACZ,EAAE;IACpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAmB,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QACtE,OAAO,OAAO,IAAI,mCAAuB,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,IAAI,WAAW,CAAC,IAAI,oCAAoC,aAAa,GAAG,EACxE,GAAG,CACJ,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAdW,QAAA,mBAAmB,uBAc9B"}
@@ -0,0 +1,13 @@
1
+ import { TronChainConfig } from "../../config/chains";
2
+ import { TokenKey } from "../../config/constants";
3
+ export declare const triggerTronTokenSweep: (walletAddress: string, chainConfig: TronChainConfig, token: TokenKey) => Promise<{
4
+ txHash: string;
5
+ amount: string;
6
+ }>;
7
+ export declare const triggerTRXSweep: (walletAddress: string, chainConfig: TronChainConfig) => Promise<{
8
+ txHash: string;
9
+ amount: string;
10
+ }>;
11
+ export declare const getTronTokensAboveThreshold: (walletAddress: string, chainConfig: TronChainConfig) => Promise<TokenKey[]>;
12
+ export declare const isTRXAboveThreshold: (walletAddress: string, chainConfig: TronChainConfig) => Promise<boolean>;
13
+ //# sourceMappingURL=tron.sweep.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tron.sweep.service.d.ts","sourceRoot":"","sources":["../../../../../src/backend/services/sweeper/tron.sweep.service.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EACL,QAAQ,EAGT,MAAM,wBAAwB,CAAC;AAOhC,eAAO,MAAM,qBAAqB,GAChC,eAAe,MAAM,EACrB,aAAa,eAAe,EAC5B,OAAO,QAAQ,KACd,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE5C,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,eAAe,MAAM,EACrB,aAAa,eAAe,KAC3B,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAE5C,CAAC;AAEF,eAAO,MAAM,2BAA2B,GACtC,eAAe,MAAM,EACrB,aAAa,eAAe,KAC3B,OAAO,CAAC,QAAQ,EAAE,CAoBpB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,eAAe,MAAM,EACrB,aAAa,eAAe,KAC3B,OAAO,CAAC,OAAO,CAWjB,CAAC"}
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTRXAboveThreshold = exports.getTronTokensAboveThreshold = exports.triggerTRXSweep = exports.triggerTronTokenSweep = void 0;
4
+ const tron_service_1 = require("../chains/tron.service");
5
+ const constants_1 = require("../../config/constants");
6
+ const SUPPORTED_TRON_TOKENS = ["USDC", "USDT"];
7
+ const TRC20_SWEEP_THRESHOLD = BigInt(Math.floor(constants_1.SWEEP_THRESHOLD_USD * 1000000));
8
+ const triggerTronTokenSweep = async (walletAddress, chainConfig, token) => {
9
+ return await (0, tron_service_1.sweepTRC20)(walletAddress, chainConfig, token);
10
+ };
11
+ exports.triggerTronTokenSweep = triggerTronTokenSweep;
12
+ const triggerTRXSweep = async (walletAddress, chainConfig) => {
13
+ return await (0, tron_service_1.sweepNativeTRX)(walletAddress, chainConfig);
14
+ };
15
+ exports.triggerTRXSweep = triggerTRXSweep;
16
+ const getTronTokensAboveThreshold = async (walletAddress, chainConfig) => {
17
+ const tokensAboveThreshold = [];
18
+ for (const token of SUPPORTED_TRON_TOKENS) {
19
+ if (!chainConfig.tokens[token])
20
+ continue;
21
+ try {
22
+ const balance = await (0, tron_service_1.getTRC20Balance)(walletAddress, chainConfig, token);
23
+ if (balance >= TRC20_SWEEP_THRESHOLD) {
24
+ tokensAboveThreshold.push(token);
25
+ }
26
+ }
27
+ catch (err) {
28
+ console.error(`[${chainConfig.name}] Error checking ${token} balance for ${walletAddress}:`, err);
29
+ }
30
+ }
31
+ return tokensAboveThreshold;
32
+ };
33
+ exports.getTronTokensAboveThreshold = getTronTokensAboveThreshold;
34
+ const isTRXAboveThreshold = async (walletAddress, chainConfig) => {
35
+ try {
36
+ const balance = await (0, tron_service_1.getTRXBalance)(walletAddress, chainConfig);
37
+ return balance >= constants_1.TRX_MIN_SWEEP_THRESHOLD;
38
+ }
39
+ catch (err) {
40
+ console.error(`[${chainConfig.name}] Error checking TRX balance for ${walletAddress}:`, err);
41
+ return false;
42
+ }
43
+ };
44
+ exports.isTRXAboveThreshold = isTRXAboveThreshold;
45
+ //# sourceMappingURL=tron.sweep.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tron.sweep.service.js","sourceRoot":"","sources":["../../../../../src/backend/services/sweeper/tron.sweep.service.ts"],"names":[],"mappings":";;;AAAA,yDAKgC;AAEhC,sDAIgC;AAEhC,MAAM,qBAAqB,GAAe,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC3D,MAAM,qBAAqB,GAAG,MAAM,CAClC,IAAI,CAAC,KAAK,CAAC,+BAAmB,GAAG,OAAS,CAAC,CAC5C,CAAC;AAEK,MAAM,qBAAqB,GAAG,KAAK,EACxC,aAAqB,EACrB,WAA4B,EAC5B,KAAe,EAC8B,EAAE;IAC/C,OAAO,MAAM,IAAA,yBAAU,EAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;AAC7D,CAAC,CAAC;AANW,QAAA,qBAAqB,yBAMhC;AAEK,MAAM,eAAe,GAAG,KAAK,EAClC,aAAqB,EACrB,WAA4B,EACiB,EAAE;IAC/C,OAAO,MAAM,IAAA,6BAAc,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC;AAC1D,CAAC,CAAC;AALW,QAAA,eAAe,mBAK1B;AAEK,MAAM,2BAA2B,GAAG,KAAK,EAC9C,aAAqB,EACrB,WAA4B,EACP,EAAE;IACvB,MAAM,oBAAoB,GAAe,EAAE,CAAC;IAE5C,KAAK,MAAM,KAAK,IAAI,qBAAqB,EAAE,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;YAAE,SAAS;QAEzC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,IAAA,8BAAe,EAAC,aAAa,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;YACzE,IAAI,OAAO,IAAI,qBAAqB,EAAE,CAAC;gBACrC,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CACX,IAAI,WAAW,CAAC,IAAI,oBAAoB,KAAK,gBAAgB,aAAa,GAAG,EAC7E,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC;AAvBW,QAAA,2BAA2B,+BAuBtC;AAEK,MAAM,mBAAmB,GAAG,KAAK,EACtC,aAAqB,EACrB,WAA4B,EACV,EAAE;IACpB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,IAAA,4BAAa,EAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAChE,OAAO,OAAO,IAAI,mCAAuB,CAAC;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,IAAI,WAAW,CAAC,IAAI,oCAAoC,aAAa,GAAG,EACxE,GAAG,CACJ,CAAC;QACF,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC,CAAC;AAdW,QAAA,mBAAmB,uBAc9B"}
@@ -0,0 +1,25 @@
1
+ import { TableConfig } from "../types";
2
+ export interface WalletRow {
3
+ address: string;
4
+ chain: string;
5
+ hd_index: number;
6
+ is_active: boolean;
7
+ }
8
+ export declare class DBAdapter {
9
+ private dbType;
10
+ private databaseUrl;
11
+ private pool;
12
+ private walletTable;
13
+ private sweepHistoryTable;
14
+ constructor(databaseUrl: string, dbType: "mysql" | "postgresql", tableConfig?: TableConfig);
15
+ connect(): Promise<void>;
16
+ disconnect(): Promise<void>;
17
+ query<T>(sql: string, params?: any[]): Promise<T[]>;
18
+ private quoteIdentifier;
19
+ getWalletsByChainType(chainType: string): Promise<WalletRow[]>;
20
+ getWalletByAddress(address: string): Promise<WalletRow | null>;
21
+ recordSweepSuccess(walletAddress: string, chainId: string, token: string, amount: string, txHash: string): Promise<void>;
22
+ recordSweepFailure(walletAddress: string, chainId: string, token: string, error: string): Promise<void>;
23
+ getSweepHistory(address: string): Promise<unknown[]>;
24
+ }
25
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/sdk/db/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,UAAU,CAAC;AAe1D,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,IAAI,CAAM;IAClB,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,iBAAiB,CAAwB;gBAG/C,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO,GAAG,YAAY,EAC9B,WAAW,CAAC,EAAE,WAAW;IAiBrB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAYxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIpB,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAapE,OAAO,CAAC,eAAe;IAQjB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAwB9D,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAyB9D,kBAAkB,CACtB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAUV,kBAAkB,CACtB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,IAAI,CAAC;IAUV,eAAe,CAAC,OAAO,EAAE,MAAM;CAUtC"}
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.DBAdapter = void 0;
37
+ // ─── Default Table Config ─────────────────────────────────────────────────────
38
+ const DEFAULT_WALLET_TABLE = {
39
+ tableName: "wallets",
40
+ addressColumn: "address",
41
+ chainColumn: "chain",
42
+ hdIndexColumn: "hd_index",
43
+ isActiveColumn: "is_active",
44
+ };
45
+ const DEFAULT_SWEEP_HISTORY_TABLE = {
46
+ tableName: "sweep_history",
47
+ };
48
+ class DBAdapter {
49
+ constructor(databaseUrl, dbType, tableConfig) {
50
+ this.databaseUrl = databaseUrl;
51
+ this.dbType = dbType;
52
+ // merge user config with defaults
53
+ this.walletTable = {
54
+ ...DEFAULT_WALLET_TABLE,
55
+ ...tableConfig?.wallets,
56
+ };
57
+ this.sweepHistoryTable = {
58
+ ...DEFAULT_SWEEP_HISTORY_TABLE,
59
+ ...tableConfig?.sweepHistory,
60
+ };
61
+ }
62
+ async connect() {
63
+ if (this.dbType === "mysql") {
64
+ const mysql = await Promise.resolve().then(() => __importStar(require("mysql2/promise")));
65
+ this.pool = mysql.createPool(this.databaseUrl);
66
+ console.log("[SDK] MySQL connected");
67
+ }
68
+ else {
69
+ const { Pool } = await Promise.resolve().then(() => __importStar(require("pg")));
70
+ this.pool = new Pool({ connectionString: this.databaseUrl });
71
+ console.log("[SDK] PostgreSQL connected");
72
+ }
73
+ }
74
+ async disconnect() {
75
+ if (this.pool)
76
+ await this.pool.end();
77
+ }
78
+ async query(sql, params = []) {
79
+ if (this.dbType === "mysql") {
80
+ const [rows] = await this.pool.execute(sql, params);
81
+ return rows;
82
+ }
83
+ else {
84
+ let i = 0;
85
+ const pgSql = sql.replace(/\?/g, () => `$${++i}`);
86
+ const result = await this.pool.query(pgSql, params);
87
+ return result.rows;
88
+ }
89
+ }
90
+ // helper to quote column/table names based on DB type
91
+ quoteIdentifier(name) {
92
+ if (this.dbType === "mysql") {
93
+ return `\`${name}\``;
94
+ }
95
+ else {
96
+ return `"${name}"`;
97
+ }
98
+ }
99
+ async getWalletsByChainType(chainType) {
100
+ const { tableName, chainColumn, isActiveColumn, addressColumn, hdIndexColumn, } = this.walletTable;
101
+ const q = this.quoteIdentifier.bind(this);
102
+ const rows = await this.query(`SELECT
103
+ ${q(addressColumn)} as address,
104
+ ${q(chainColumn)} as chain,
105
+ ${q(hdIndexColumn)} as hd_index,
106
+ ${q(isActiveColumn)} as is_active
107
+ FROM ${q(tableName)}
108
+ WHERE ${q(chainColumn)} = ? AND ${q(isActiveColumn)} = true`, [chainType]);
109
+ return rows;
110
+ }
111
+ async getWalletByAddress(address) {
112
+ const { tableName, addressColumn, hdIndexColumn, chainColumn, isActiveColumn, } = this.walletTable;
113
+ const q = this.quoteIdentifier.bind(this);
114
+ const rows = await this.query(`SELECT
115
+ ${q(addressColumn)} as address,
116
+ ${q(chainColumn)} as chain,
117
+ ${q(hdIndexColumn)} as hd_index,
118
+ ${q(isActiveColumn)} as is_active
119
+ FROM ${q(tableName)}
120
+ WHERE ${q(addressColumn)} = ?`, [address]);
121
+ return rows[0] ?? null;
122
+ }
123
+ // ─── Sweep History Queries ──────────────────────────────────────────────────
124
+ async recordSweepSuccess(walletAddress, chainId, token, amount, txHash) {
125
+ const { tableName } = this.sweepHistoryTable;
126
+ await this.query(`INSERT INTO ${tableName}
127
+ (wallet_address, chain_id, token, amount, tx_hash, status, created_at)
128
+ VALUES (?, ?, ?, ?, ?, 'success', NOW())`, [walletAddress, chainId, token, amount, txHash]);
129
+ }
130
+ async recordSweepFailure(walletAddress, chainId, token, error) {
131
+ const { tableName } = this.sweepHistoryTable;
132
+ await this.query(`INSERT INTO ${tableName}
133
+ (wallet_address, chain_id, token, amount, tx_hash, status, error, created_at)
134
+ VALUES (?, ?, ?, '0', NULL, 'failed', ?, NOW())`, [walletAddress, chainId, token, error]);
135
+ }
136
+ async getSweepHistory(address) {
137
+ const { tableName } = this.sweepHistoryTable;
138
+ return this.query(`SELECT * FROM ${tableName}
139
+ WHERE wallet_address = ?
140
+ ORDER BY created_at DESC
141
+ LIMIT 50`, [address]);
142
+ }
143
+ }
144
+ exports.DBAdapter = DBAdapter;
145
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/sdk/db/adapter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,iFAAiF;AACjF,MAAM,oBAAoB,GAAgC;IACxD,SAAS,EAAE,SAAS;IACpB,aAAa,EAAE,SAAS;IACxB,WAAW,EAAE,OAAO;IACpB,aAAa,EAAE,UAAU;IACzB,cAAc,EAAE,WAAW;CAC5B,CAAC;AAEF,MAAM,2BAA2B,GAAG;IAClC,SAAS,EAAE,eAAe;CAC3B,CAAC;AASF,MAAa,SAAS;IAOpB,YACE,WAAmB,EACnB,MAA8B,EAC9B,WAAyB;QAEzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,kCAAkC;QAClC,IAAI,CAAC,WAAW,GAAG;YACjB,GAAG,oBAAoB;YACvB,GAAG,WAAW,EAAE,OAAO;SACxB,CAAC;QAEF,IAAI,CAAC,iBAAiB,GAAG;YACvB,GAAG,2BAA2B;YAC9B,GAAG,WAAW,EAAE,YAAY;SAC7B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,wDAAa,gBAAgB,GAAC,CAAC;YAC7C,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,IAAI,EAAE,GAAG,wDAAa,IAAI,GAAC,CAAC;YACpC,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC7D,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,IAAI;YAAE,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACvC,CAAC;IAEM,KAAK,CAAC,KAAK,CAAI,GAAW,EAAE,SAAgB,EAAE;QACnD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO,IAAW,CAAC;QACrB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACpD,OAAO,MAAM,CAAC,IAAW,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,sDAAsD;IAC9C,eAAe,CAAC,IAAY;QAClC,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,KAAK,IAAI,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,IAAI,GAAG,CAAC;QACrB,CAAC;IACH,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,SAAiB;QAC3C,MAAM,EACJ,SAAS,EACT,WAAW,EACX,cAAc,EACd,aAAa,EACb,aAAa,GACd,GAAG,IAAI,CAAC,WAAW,CAAC;QAErB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAC3B;QACE,CAAC,CAAC,aAAa,CAAC;QAChB,CAAC,CAAC,WAAW,CAAC;QACd,CAAC,CAAC,aAAa,CAAC;QAChB,CAAC,CAAC,cAAc,CAAC;YACb,CAAC,CAAC,SAAS,CAAC;aACX,CAAC,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,cAAc,CAAC,SAAS,EAC3D,CAAC,SAAS,CAAC,CACZ,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,OAAe;QACtC,MAAM,EACJ,SAAS,EACT,aAAa,EACb,aAAa,EACb,WAAW,EACX,cAAc,GACf,GAAG,IAAI,CAAC,WAAW,CAAC;QAErB,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAC3B;QACE,CAAC,CAAC,aAAa,CAAC;QAChB,CAAC,CAAC,WAAW,CAAC;QACd,CAAC,CAAC,aAAa,CAAC;QAChB,CAAC,CAAC,cAAc,CAAC;YACb,CAAC,CAAC,SAAS,CAAC;aACX,CAAC,CAAC,aAAa,CAAC,MAAM,EAC7B,CAAC,OAAO,CAAC,CACV,CAAC;QACF,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACzB,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,kBAAkB,CACtB,aAAqB,EACrB,OAAe,EACf,KAAa,EACb,MAAc,EACd,MAAc;QAEd,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC7C,MAAM,IAAI,CAAC,KAAK,CACd,eAAe,SAAS;;gDAEkB,EAC1C,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAChD,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,aAAqB,EACrB,OAAe,EACf,KAAa,EACb,KAAa;QAEb,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC7C,MAAM,IAAI,CAAC,KAAK,CACd,eAAe,SAAS;;uDAEyB,EACjD,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CACvC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAC7C,OAAO,IAAI,CAAC,KAAK,CACf,iBAAiB,SAAS;;;gBAGhB,EACV,CAAC,OAAO,CAAC,CACV,CAAC;IACJ,CAAC;CACF;AA1JD,8BA0JC"}
@@ -0,0 +1,27 @@
1
+ import { EventEmitter } from "events";
2
+ import { HalalPaymasterConfig } from "./types";
3
+ import { ChainKey } from "../backend/config/constants";
4
+ export declare class HalalPaymaster extends EventEmitter {
5
+ private config;
6
+ private db;
7
+ private workers;
8
+ private running;
9
+ private originalLog;
10
+ private originalError;
11
+ private originalWarn;
12
+ private isLogging;
13
+ constructor(config: HalalPaymasterConfig);
14
+ private validateConfig;
15
+ start(): Promise<void>;
16
+ private runSweepCycle;
17
+ stop(): Promise<void>;
18
+ depositToPaymaster(chainKey: ChainKey, depositAmountEth: string, stakeAmountEth: string, unstakeDelaySec?: number): Promise<{
19
+ depositTxHash: string;
20
+ stakeTxHash: string;
21
+ currentBalance: string;
22
+ }>;
23
+ getPaymasterBalance(chainKey: ChainKey): Promise<string>;
24
+ getSweepHistory(address: string): Promise<unknown[]>;
25
+ }
26
+ export type { HalalPaymasterConfig, SweepCompleteEvent, SweepFailedEvent, SweepLogEvent, } from "./types";
27
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/sdk/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EACL,oBAAoB,EAIrB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAOvD,qBAAa,cAAe,SAAQ,YAAY;IAE9C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,OAAO,CAA0C;IACzD,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,aAAa,CAA+B;IACpD,OAAO,CAAC,YAAY,CAA8B;IAElD,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,oBAAoB;IAuBxC,OAAO,CAAC,cAAc;IAuBhB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAoEd,aAAa;IAqCrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBrB,kBAAkB,CACtB,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,MAAM,EACxB,cAAc,EAAE,MAAM,EACtB,eAAe,GAAE,MAAc,GAC9B,OAAO,CAAC;QACT,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;QACpB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IAqFI,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAmBxD,eAAe,CAAC,OAAO,EAAE,MAAM;CAGtC;AAED,YAAY,EACV,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,GACd,MAAM,SAAS,CAAC"}