@ercworldio/blockchain-shared 1.0.0 → 1.0.1-dev.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.
Files changed (75) hide show
  1. package/build/chains/networks_dev.json +44 -11
  2. package/build/chains/networks_prod-bu.json +7 -7
  3. package/build/chains/networks_prod-dz.json +510 -0
  4. package/build/chains/networks_prod.json +8 -8
  5. package/build/chains/networks_stg-bu.json +7 -7
  6. package/build/chains/networks_stg-dz.json +17 -6
  7. package/build/index.d.ts +6 -0
  8. package/build/index.d.ts.map +1 -1
  9. package/build/index.js +13 -2
  10. package/build/interfaces/config.d.ts +15 -2
  11. package/build/interfaces/config.d.ts.map +1 -1
  12. package/build/interfaces/config.js +5 -0
  13. package/build/interfaces.d.ts +2 -1
  14. package/build/interfaces.d.ts.map +1 -1
  15. package/build/services/AlchemyService.d.ts +1 -0
  16. package/build/services/AlchemyService.d.ts.map +1 -1
  17. package/build/services/AlchemyService.js +6 -2
  18. package/build/services/AlchemyWebhookAddressManager.d.ts +38 -0
  19. package/build/services/AlchemyWebhookAddressManager.d.ts.map +1 -0
  20. package/build/services/AlchemyWebhookAddressManager.js +123 -0
  21. package/build/services/AlchemyWebhookSignature.d.ts +3 -3
  22. package/build/services/AlchemyWebhookSignature.d.ts.map +1 -1
  23. package/build/services/AlchemyWebhookSignature.js +8 -8
  24. package/build/services/BalanceService.d.ts +5 -1
  25. package/build/services/BalanceService.d.ts.map +1 -1
  26. package/build/services/BalanceService.js +32 -11
  27. package/build/services/ClaimJobService.d.ts.map +1 -1
  28. package/build/services/ClaimJobService.js +4 -1
  29. package/build/services/DepositAddressService.d.ts +8 -0
  30. package/build/services/DepositAddressService.d.ts.map +1 -1
  31. package/build/services/DepositAddressService.js +30 -0
  32. package/build/services/KeyVaultService.d.ts +1 -1
  33. package/build/services/KeyVaultService.d.ts.map +1 -1
  34. package/build/services/KeyVaultService.js +3 -30
  35. package/build/services/QuicknodeWebhookSignature.d.ts +3 -3
  36. package/build/services/QuicknodeWebhookSignature.d.ts.map +1 -1
  37. package/build/services/QuicknodeWebhookSignature.js +8 -8
  38. package/build/services/StorageService.js +2 -2
  39. package/build/services/SweepJobService.d.ts.map +1 -1
  40. package/build/services/SweepJobService.js +4 -1
  41. package/build/services/WalletManager.d.ts +3 -1
  42. package/build/services/WalletManager.d.ts.map +1 -1
  43. package/build/services/WalletManager.js +11 -7
  44. package/build/services/WalletManagerHelper.d.ts +15 -0
  45. package/build/services/WalletManagerHelper.d.ts.map +1 -0
  46. package/build/services/WalletManagerHelper.js +65 -0
  47. package/build/services/quicknode-notifications/QnNotificationsApi.d.ts +20 -0
  48. package/build/services/quicknode-notifications/QnNotificationsApi.d.ts.map +1 -0
  49. package/build/services/quicknode-notifications/QnNotificationsApi.js +134 -0
  50. package/build/services/quicknode-notifications/QnWebhookAddressManager.d.ts +47 -0
  51. package/build/services/quicknode-notifications/QnWebhookAddressManager.d.ts.map +1 -0
  52. package/build/services/quicknode-notifications/QnWebhookAddressManager.js +265 -0
  53. package/build/services/quicknode-notifications/SetupNotifications.d.ts +40 -0
  54. package/build/services/quicknode-notifications/SetupNotifications.d.ts.map +1 -0
  55. package/build/services/quicknode-notifications/SetupNotifications.js +253 -0
  56. package/build/services/quicknode-notifications/types/index.d.ts +2 -0
  57. package/build/services/quicknode-notifications/types/index.d.ts.map +1 -0
  58. package/build/services/quicknode-notifications/types/index.js +17 -0
  59. package/build/services/quicknode-notifications/types/notification_types.d.ts +154 -0
  60. package/build/services/quicknode-notifications/types/notification_types.d.ts.map +1 -0
  61. package/build/services/quicknode-notifications/types/notification_types.js +2 -0
  62. package/build/services/solana/escrow/idl/escrow.json +110 -1
  63. package/build/services/solana/escrow/types/escrow.d.ts +110 -1
  64. package/build/services/solana/escrow/types/escrow.d.ts.map +1 -1
  65. package/build/services/types/chain_manager.d.ts +5 -0
  66. package/build/services/types/chain_manager.d.ts.map +1 -1
  67. package/build/services/types/quicknode.d.ts +1 -0
  68. package/build/services/types/quicknode.d.ts.map +1 -1
  69. package/build/utils/AsyncTTLCache.d.ts +1 -0
  70. package/build/utils/AsyncTTLCache.d.ts.map +1 -1
  71. package/build/utils/AsyncTTLCache.js +3 -0
  72. package/build/utils/solana.d.ts +1 -0
  73. package/build/utils/solana.d.ts.map +1 -1
  74. package/build/utils/solana.js +15 -1
  75. package/package.json +1 -1
@@ -6,10 +6,10 @@ declare class AlchemyWebhookSignature {
6
6
  private signing_keys;
7
7
  private constructor();
8
8
  static getInstance(): AlchemyWebhookSignature;
9
- validateWebhookEvent(projectName: string, environment: string, webhook_id: string, stringified_body: string, signature: string): Promise<boolean>;
9
+ validateWebhookEvent(keyVaultName: string, webhook_id: string, stringified_body: string, signature: string): Promise<boolean>;
10
10
  private getSigningKey;
11
- createSigningKey(projectName: string, environment: string, webhook_id: string, value: string): Promise<boolean>;
12
- deleteSigningKey(projectName: string, environment: string, webhook_id: string): Promise<boolean>;
11
+ createSigningKey(keyVaultName: string, webhook_id: string, value: string): Promise<boolean>;
12
+ deleteSigningKey(keyVaultName: string, webhook_id: string): Promise<boolean>;
13
13
  private isValidSignatureForStringBody;
14
14
  }
15
15
  export default AlchemyWebhookSignature;
@@ -1 +1 @@
1
- {"version":3,"file":"AlchemyWebhookSignature.d.ts","sourceRoot":"","sources":["../../src/services/AlchemyWebhookSignature.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,cAAM,uBAAuB;IACzB,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IACzC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO;IAEP,MAAM,CAAC,WAAW;IAQL,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;YAM7H,aAAa;IAqBd,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAY5F,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAa1F,OAAO,CAAC,6BAA6B;CAUxC;AAED,eAAe,uBAAuB,CAAC"}
1
+ {"version":3,"file":"AlchemyWebhookSignature.d.ts","sourceRoot":"","sources":["../../src/services/AlchemyWebhookSignature.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,cAAM,uBAAuB;IACzB,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IACzC,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO;IAEP,MAAM,CAAC,WAAW;IAQL,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;YAMzG,aAAa;IAqBd,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAYxE,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAatE,OAAO,CAAC,6BAA6B;CAUxC;AAED,eAAe,uBAAuB,CAAC"}
@@ -60,15 +60,15 @@ class AlchemyWebhookSignature {
60
60
  }
61
61
  return this.instance;
62
62
  }
63
- validateWebhookEvent(projectName, environment, webhook_id, stringified_body, signature) {
63
+ validateWebhookEvent(keyVaultName, webhook_id, stringified_body, signature) {
64
64
  return __awaiter(this, void 0, void 0, function* () {
65
- const signingKey = yield this.getSigningKey(projectName, environment, webhook_id);
65
+ const signingKey = yield this.getSigningKey(keyVaultName, webhook_id);
66
66
  return this.isValidSignatureForStringBody(stringified_body, signature, signingKey);
67
67
  });
68
68
  }
69
- getSigningKey(projectName, environment, webhook_id) {
69
+ getSigningKey(keyVaultName, webhook_id) {
70
70
  return __awaiter(this, void 0, void 0, function* () {
71
- const vaultHandler = new KeyVaultService_1.default(projectName, environment);
71
+ const vaultHandler = new KeyVaultService_1.default(keyVaultName);
72
72
  if (!vaultHandler.client) {
73
73
  vaultHandler.initializeKeyVaultService();
74
74
  }
@@ -84,9 +84,9 @@ class AlchemyWebhookSignature {
84
84
  return existing;
85
85
  });
86
86
  }
87
- createSigningKey(projectName, environment, webhook_id, value) {
87
+ createSigningKey(keyVaultName, webhook_id, value) {
88
88
  return __awaiter(this, void 0, void 0, function* () {
89
- const vaultHandler = new KeyVaultService_1.default(projectName, environment);
89
+ const vaultHandler = new KeyVaultService_1.default(keyVaultName);
90
90
  if (!vaultHandler.client) {
91
91
  vaultHandler.initializeKeyVaultService();
92
92
  }
@@ -95,9 +95,9 @@ class AlchemyWebhookSignature {
95
95
  return true;
96
96
  });
97
97
  }
98
- deleteSigningKey(projectName, environment, webhook_id) {
98
+ deleteSigningKey(keyVaultName, webhook_id) {
99
99
  return __awaiter(this, void 0, void 0, function* () {
100
- const vaultHandler = new KeyVaultService_1.default(projectName, environment);
100
+ const vaultHandler = new KeyVaultService_1.default(keyVaultName);
101
101
  if (!vaultHandler.client) {
102
102
  vaultHandler.initializeKeyVaultService();
103
103
  }
@@ -15,7 +15,11 @@ declare class BalanceService extends BaseErrors {
15
15
  private config;
16
16
  private logger;
17
17
  constructor(dbPool: IDatabasePool, config: IConfig);
18
- private getEntity;
18
+ /**
19
+ * Creates the balance row with zero balance if it doesnt exist.
20
+ * Used for wallets that were partially initialized
21
+ */
22
+ private getOrCreateEntity;
19
23
  getBalance(userId: number, blockchain: string, chainId: ChainId, paymentToken: string): Promise<GetWalletBalanceResult>;
20
24
  getBalancesNeedSweepByToken(blockchain: BlockchainType, chainId: ChainId, paymentToken: string): Promise<DepositWalletBalance[]>;
21
25
  removeWalletBalances(walletId: number, blockchain: string): Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"BalanceService.d.ts","sourceRoot":"","sources":["../../src/services/BalanceService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAgB,OAAO,EAAgB,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOjH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAI1C,KAAK,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEtC,UAAU,sBAAsB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,cAAM,cAAe,SAAQ,UAAU;IACnC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAS;gBACX,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO;YAOpC,SAAS;IA2BjB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgCvH,2BAA2B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM;IAsB9F,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IA2BzD,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAI7D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;YAmD/C,aAAa;IAwBd,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE;IA0EjD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa;;;;IA2FpK,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAE,OAAe;IAmE3H,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc;IAUlD,uBAAuB;IAuBvB,kBAAkB,CAAC,KAAK,GAAE,MAAY;YAOrC,gBAAgB;IAoBxB,yBAAyB,CAAC,mBAAmB,EAAE,WAAW,EAAE;IAY5D,6BAA6B,CAAC,mBAAmB,EAAE,cAAc,EAAE;CA8D5E;AAED,eAAe,cAAc,CAAC"}
1
+ {"version":3,"file":"BalanceService.d.ts","sourceRoot":"","sources":["../../src/services/BalanceService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,cAAc,EAAgB,OAAO,EAAgB,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOjH,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAI1C,KAAK,aAAa,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEtC,UAAU,sBAAsB;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,cAAM,cAAe,SAAQ,UAAU;IACnC,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAS;gBACX,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,OAAO;IASlD;;;OAGG;YACW,iBAAiB;IA6CzB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC;IAgCvH,2BAA2B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM;IAsB9F,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IA2BzD,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAI7D,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;YAmD/C,aAAa;IAwBd,mBAAmB,CAAC,MAAM,EAAE,YAAY,EAAE;IA0EjD,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa;;;;IA2FpK,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,GAAE,OAAe;IAmE3H,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc;IAUlD,uBAAuB;IAuBvB,kBAAkB,CAAC,KAAK,GAAE,MAAY;YAOrC,gBAAgB;IAoBxB,yBAAyB,CAAC,mBAAmB,EAAE,WAAW,EAAE;IAY5D,6BAA6B,CAAC,mBAAmB,EAAE,cAAc,EAAE;CA8D5E;AAED,eAAe,cAAc,CAAC"}
@@ -28,24 +28,45 @@ class BalanceService extends errors_1.default {
28
28
  this.config = config;
29
29
  this.logger = (0, Logger_1.createLogger)(`BalanceService`, this.config.pipelineConfig.azureAppName);
30
30
  }
31
- getEntity(userId, blockchain, chainId, paymentToken) {
31
+ /**
32
+ * Creates the balance row with zero balance if it doesnt exist.
33
+ * Used for wallets that were partially initialized
34
+ */
35
+ getOrCreateEntity(userId, blockchain, chainId, paymentToken) {
32
36
  return __awaiter(this, void 0, void 0, function* () {
37
+ var _a, _b;
33
38
  const dbDriver = this.dbPool;
34
39
  if (!dbDriver.balancesRepo || !dbDriver.accountsRepo) {
35
40
  throw new Error(`Db Driver appDataSource is not initialized.`);
36
41
  }
37
42
  const accountsService = new DepositAddressService_1.default(this.dbPool);
38
- const entity = yield accountsService.findByUserId(userId, blockchain);
39
- if (!entity) {
43
+ const account = yield accountsService.findByUserId(userId, blockchain);
44
+ if (!account) {
40
45
  throw new Error(`Account not found for userId ${userId} on ${blockchain} chain`);
41
46
  }
42
- const balanceEntity = yield dbDriver.balancesRepo.findOne({
43
- where: { blockchain, chain_id: chainId, wallet_id: entity.id, token: (0, Wallets_1.normalizeAddress)(paymentToken, blockchain) }
47
+ const normalizedToken = (0, Wallets_1.normalizeAddress)(paymentToken, blockchain);
48
+ const existing = yield dbDriver.balancesRepo.findOne({
49
+ where: { blockchain, chain_id: chainId, wallet_id: account.id, token: normalizedToken }
44
50
  });
45
- if (!balanceEntity) {
46
- throw new Error(`Balance entity not found for user ${userId} on blockchain ${blockchain} chainId: ${chainId}`);
47
- }
48
- return balanceEntity;
51
+ if (existing)
52
+ return existing;
53
+ // Entity is missing, wallet initialization was probably interrupted
54
+ // Create it with zero balance so the update doesnt fail
55
+ const chainManager = ChainManager_1.default.getInstance(this.config);
56
+ const tokenConfig = (_a = chainManager.getPaymentTokensForChain(parseInt(chainId))) === null || _a === void 0 ? void 0 : _a.find(t => (0, Wallets_1.normalizeAddress)(t.address, blockchain) === normalizedToken);
57
+ this.logger.warn(`Balance entity missing for userId=${userId} blockchain=${blockchain} chainId=${chainId} token=${normalizedToken} — creating with zero balance`);
58
+ const entity = new DepositWalletBalance_1.DepositWalletBalance();
59
+ entity.blockchain = blockchain;
60
+ entity.chain_id = chainId;
61
+ entity.wallet_id = account.id;
62
+ entity.token = normalizedToken;
63
+ entity.decimals = (_b = tokenConfig === null || tokenConfig === void 0 ? void 0 : tokenConfig.decimals) !== null && _b !== void 0 ? _b : 0;
64
+ entity.balance = BigInt(0);
65
+ entity.transaction_count = 0;
66
+ entity.needs_sweep = false;
67
+ entity.created_at = new Date();
68
+ entity.updated_at = new Date();
69
+ return dbDriver.balancesRepo.save(entity);
49
70
  });
50
71
  }
51
72
  // Gets the token balance of the wallet on the given chain
@@ -212,7 +233,7 @@ class BalanceService extends errors_1.default {
212
233
  for (const wallet of walletMap.values()) {
213
234
  const { balance: currentBalance, decimals } = yield (0, custodial_1.getWalletBalance)(wallet.blockchain, wallet.chainId, wallet.depositWallet, wallet.tokenAddress, this.dbPool, this.config);
214
235
  // Load entity from DB
215
- const entity = yield this.getEntity(wallet.userId, wallet.blockchain, wallet.chainId, wallet.tokenAddress);
236
+ const entity = yield this.getOrCreateEntity(wallet.userId, wallet.blockchain, wallet.chainId, wallet.tokenAddress);
216
237
  // Update balance
217
238
  entity.balance = currentBalance;
218
239
  // Optional: check sweep thresholds (reuse your current logic)
@@ -265,7 +286,7 @@ class BalanceService extends errors_1.default {
265
286
  if (!account) {
266
287
  throw new Error(`Account not found for userId ${userId} on ${blockchain} chain`);
267
288
  }
268
- const entity = yield this.getEntity(userId, blockchain, chainId, paymentToken);
289
+ const entity = yield this.getOrCreateEntity(userId, blockchain, chainId, paymentToken);
269
290
  let needs_sweep = false;
270
291
  switch (operationType) {
271
292
  case "add":
@@ -1 +1 @@
1
- {"version":3,"file":"ClaimJobService.d.ts","sourceRoot":"","sources":["../../src/services/ClaimJobService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClaimJobService.d.ts","sourceRoot":"","sources":["../../src/services/ClaimJobService.ts"],"names":[],"mappings":"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"}
@@ -97,7 +97,10 @@ class ClaimJobsService {
97
97
  SELECT id
98
98
  FROM accounting.claim_jobs
99
99
  WHERE job_status = $4
100
- AND lock_expires_at < now()
100
+ AND (
101
+ lock_expires_at IS NULL
102
+ OR lock_expires_at < now()
103
+ )
101
104
  AND retry_count < $5
102
105
  ORDER BY lock_expires_at ASC
103
106
  LIMIT $1
@@ -1,6 +1,12 @@
1
1
  import { DepositAddress } from "../entities/DepositAddress";
2
2
  import { BlockchainType } from "../interfaces";
3
3
  import { IDatabasePool } from "../interfaces/database";
4
+ import { Paginated } from "./types/claim_job_service";
5
+ export interface DepositAddressSearchFilters {
6
+ user_id?: number;
7
+ blockchain?: string;
8
+ address?: string;
9
+ }
4
10
  interface CreateDepositResult {
5
11
  id: number;
6
12
  userId: number;
@@ -35,6 +41,8 @@ declare class DepositAddressService {
35
41
  status: boolean;
36
42
  address: string;
37
43
  }>;
44
+ private paginate;
45
+ getDepositAddressesPaginated(page: number, page_size: number | undefined, filters: DepositAddressSearchFilters): Promise<Paginated<DepositAddress[]>>;
38
46
  getDepositAddressByAddress(blockchain: BlockchainType, address: string): Promise<DepositAddress | null>;
39
47
  findByBlockchainAndAddressRaw(blockchain: BlockchainType, address: string): Promise<DepositAddress | null>;
40
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DepositAddressService.d.ts","sourceRoot":"","sources":["../../src/services/DepositAddressService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,UAAU,mBAAmB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AACD,MAAM,WAAW,0BAA0B;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,mBAAoB,SAAQ,mBAAmB;CACxD;AAED,cAAM,qBAAqB;IACvB,OAAO,CAAC,MAAM,CAAgB;gBAClB,MAAM,EAAE,aAAa;IAKjC,OAAO,CAAC,gBAAgB;IAiBlB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqB9E,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAazB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkBzE,8BAA8B,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM;YAyBtE,yBAAyB;IAqBjC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0D5H,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAmDtG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IA4BvG,0BAA0B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAkBvG,6BAA6B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAanH;AAED,eAAe,qBAAqB,CAAC"}
1
+ {"version":3,"file":"DepositAddressService.d.ts","sourceRoot":"","sources":["../../src/services/DepositAddressService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAI5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEtD,MAAM,WAAW,2BAA2B;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,mBAAmB;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACnB;AACD,MAAM,WAAW,0BAA0B;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,mBAAoB,SAAQ,mBAAmB;CACxD;AAED,cAAM,qBAAqB;IACvB,OAAO,CAAC,MAAM,CAAgB;gBAClB,MAAM,EAAE,aAAa;IAKjC,OAAO,CAAC,gBAAgB;IAiBlB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAqB9E,QAAQ,CAAC,QAAQ,EAAE,MAAM;IAazB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAkBzE,8BAA8B,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM;YAyBtE,yBAAyB;IAqBjC,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA0D5H,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,0BAA0B,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAmDtG,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;YA4B/F,QAAQ;IAwBhB,4BAA4B,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAK,EAAE,OAAO,EAAE,2BAA2B,GAAG,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC;IAI9I,0BAA0B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAkBvG,6BAA6B,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;CAanH;AAED,eAAe,qBAAqB,CAAC"}
@@ -242,6 +242,36 @@ class DepositAddressService {
242
242
  }
243
243
  });
244
244
  }
245
+ paginate(page, page_size, filters) {
246
+ return __awaiter(this, void 0, void 0, function* () {
247
+ const repo = this.dbPool.accountsRepo;
248
+ if (!repo)
249
+ throw new Error(`Db Driver appDataSource is not initialized.`);
250
+ if (page === 0)
251
+ page = 1;
252
+ const [items, totalCount] = yield Promise.all([
253
+ repo.find({
254
+ take: page_size,
255
+ skip: (page - 1) * page_size,
256
+ where: Object.assign({}, filters),
257
+ order: { created_at: "DESC" }
258
+ }),
259
+ repo.count({ where: Object.assign({}, filters) })
260
+ ]);
261
+ return {
262
+ total_count: totalCount,
263
+ pages_count: Math.ceil(totalCount / page_size),
264
+ has_next: totalCount > page * page_size,
265
+ current_page: page,
266
+ items: items || []
267
+ };
268
+ });
269
+ }
270
+ getDepositAddressesPaginated(page_1) {
271
+ return __awaiter(this, arguments, void 0, function* (page, page_size = 10, filters) {
272
+ return this.paginate(page, page_size, filters);
273
+ });
274
+ }
245
275
  getDepositAddressByAddress(blockchain, address) {
246
276
  return __awaiter(this, void 0, void 0, function* () {
247
277
  try {
@@ -4,7 +4,7 @@ declare class KeyVaultHandler {
4
4
  url: string;
5
5
  client: SecretClient | null;
6
6
  defaultVaultName: string;
7
- constructor(projectName: string, environment: string, env_suffix?: string);
7
+ constructor(keyVaultName: string);
8
8
  initializeKeyVaultService: () => SecretClient;
9
9
  store: (keyName: string, pkey: string) => Promise<boolean>;
10
10
  delete: (keyName: string) => Promise<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"KeyVaultService.d.ts","sourceRoot":"","sources":["../../src/services/KeyVaultService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,cAAM,eAAe;IACV,SAAS,EAAE,MAAM,CAAM;IACvB,GAAG,EAAE,MAAM,CAAM;IACjB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAQ;IACnC,gBAAgB,EAAE,MAAM,CAAC;gBAGpB,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,GAAE,MAAW;IAmC7E,yBAAyB,qBAWxB;IAED,KAAK,GAAU,SAAS,MAAM,EAAE,MAAM,MAAM,sBAO3C;IAED,MAAM,GAAU,SAAS,MAAM,sBAI9B;IAEK,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAkBnE;AAED,eAAe,eAAe,CAAC"}
1
+ {"version":3,"file":"KeyVaultService.d.ts","sourceRoot":"","sources":["../../src/services/KeyVaultService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,cAAM,eAAe;IACV,SAAS,EAAE,MAAM,CAAM;IACvB,GAAG,EAAE,MAAM,CAAM;IACjB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAQ;IACnC,gBAAgB,EAAE,MAAM,CAAC;gBAIpB,YAAY,EAAE,MAAM;IAMhC,yBAAyB,qBAWxB;IAED,KAAK,GAAU,SAAS,MAAM,EAAE,MAAM,MAAM,sBAO3C;IAED,MAAM,GAAU,SAAS,MAAM,sBAI9B;IAEK,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAkBnE;AAED,eAAe,eAAe,CAAC"}
@@ -12,7 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  const identity_1 = require("@azure/identity");
13
13
  const keyvault_secrets_1 = require("@azure/keyvault-secrets");
14
14
  class KeyVaultHandler {
15
- constructor(projectName, environment, env_suffix = "") {
15
+ // constructor(projectName: string, environment: string, env_suffix: string = "", ) {
16
+ constructor(keyVaultName) {
16
17
  this.vaultName = '';
17
18
  this.url = '';
18
19
  this.client = null;
@@ -38,35 +39,7 @@ class KeyVaultHandler {
38
39
  yield this.client.beginDeleteSecret(keyName);
39
40
  return true;
40
41
  });
41
- // In case there is a suffix, shorten the project name
42
- if (env_suffix.length > 0) {
43
- projectName = `${projectName.slice(0, 1)}${projectName.slice(-1)}`;
44
- }
45
- // Handle customer specific environment
46
- if (environment.startsWith(`staging-`) || environment.startsWith(`production-`) || environment.startsWith(`stg-`) || environment.startsWith(`prod-`)) {
47
- const suffix = env_suffix.length > 0 ? `-${env_suffix}` : ""; // Append a suffix to the env to target a different key vault
48
- this.defaultVaultName = `${projectName}-${environment}${suffix}-secrets`;
49
- this.initializeKeyVaultService();
50
- return;
51
- }
52
- const suffix = env_suffix.length > 0 ? `-${env_suffix}` : ""; // Append a suffix to the env to target a different key vault
53
- switch (environment) {
54
- case 'dev':
55
- this.defaultVaultName = `${projectName}-dev${suffix}-secrets`;
56
- break;
57
- case 'stg':
58
- this.defaultVaultName = `${projectName}-stg${suffix}-secrets`;
59
- break;
60
- case 'prod':
61
- this.defaultVaultName = `${projectName}-prod${suffix}-secrets`;
62
- break;
63
- case 'local':
64
- this.defaultVaultName = `${projectName}-dev${suffix}-secrets`;
65
- break;
66
- default:
67
- this.defaultVaultName = `${projectName}-dev${suffix}-secrets`;
68
- break;
69
- }
42
+ this.defaultVaultName = keyVaultName;
70
43
  this.initializeKeyVaultService();
71
44
  }
72
45
  getSecretValue(secretName) {
@@ -4,10 +4,10 @@ declare class QuicknodeWebhookSignature {
4
4
  private signing_keys;
5
5
  private constructor();
6
6
  static getInstance(): QuicknodeWebhookSignature;
7
- validateWebhookEvent(projectName: string, environment: string, stream_id: string, signatureData: VerifyQuicknodeSignatureData): Promise<boolean>;
7
+ validateWebhookEvent(keyVaultName: string, stream_id: string, signatureData: VerifyQuicknodeSignatureData): Promise<boolean>;
8
8
  private get_signing_key;
9
- createSigningKey(projectName: string, environment: string, stream_id: string, value: string): Promise<boolean>;
10
- deleteSigningKey(projectName: string, environment: string, stream_id: string): Promise<boolean>;
9
+ createSigningKey(keyVaultName: string, stream_id: string, value: string): Promise<boolean>;
10
+ deleteSigningKey(keyVaultName: string, stream_id: string): Promise<boolean>;
11
11
  private verifySignature;
12
12
  }
13
13
  export default QuicknodeWebhookSignature;
@@ -1 +1 @@
1
- {"version":3,"file":"QuicknodeWebhookSignature.d.ts","sourceRoot":"","sources":["../../src/services/QuicknodeWebhookSignature.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAEvD,cAAM,yBAAyB;IAC3B,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC3C,OAAO,CAAC,YAAY,CAAkC;IAEtD,OAAO;IAEP,MAAM,CAAC,WAAW;IAQL,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,4BAA4B;YAM5H,eAAe;IAmBhB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAY3F,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAezF,OAAO,CAAC,eAAe;CAe1B;AAED,eAAe,yBAAyB,CAAC"}
1
+ {"version":3,"file":"QuicknodeWebhookSignature.d.ts","sourceRoot":"","sources":["../../src/services/QuicknodeWebhookSignature.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AAEvD,cAAM,yBAAyB;IAC3B,MAAM,CAAC,QAAQ,EAAE,yBAAyB,CAAC;IAC3C,OAAO,CAAC,YAAY,CAAkC;IAEtD,OAAO;IAEP,MAAM,CAAC,WAAW;IAQL,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,4BAA4B;YAMxG,eAAe;IAmBhB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;IAYvE,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAerE,OAAO,CAAC,eAAe;CAe1B;AAED,eAAe,yBAAyB,CAAC"}
@@ -57,18 +57,18 @@ class QuicknodeWebhookSignature {
57
57
  }
58
58
  return this.instance;
59
59
  }
60
- validateWebhookEvent(projectName, environment, stream_id, signatureData) {
60
+ validateWebhookEvent(keyVaultName, stream_id, signatureData) {
61
61
  return __awaiter(this, void 0, void 0, function* () {
62
- const signingKey = yield this.get_signing_key(projectName, environment, stream_id);
62
+ const signingKey = yield this.get_signing_key(keyVaultName, stream_id);
63
63
  return this.verifySignature(signingKey, signatureData.payload, signatureData.nonce, signatureData.timestamp, signatureData.givenSignature);
64
64
  });
65
65
  }
66
- get_signing_key(projectName, environment, stream_id) {
66
+ get_signing_key(keyVaultName, stream_id) {
67
67
  return __awaiter(this, void 0, void 0, function* () {
68
68
  const key = `quicknode-stream-webhook-signing-key-${stream_id.replace(/_/g, "-")}`;
69
69
  const existing = this.signing_keys.get(key);
70
70
  if (!existing) {
71
- const vaultHandler = new KeyVaultService_1.default(projectName, environment);
71
+ const vaultHandler = new KeyVaultService_1.default(keyVaultName);
72
72
  if (!vaultHandler.client) {
73
73
  vaultHandler.initializeKeyVaultService();
74
74
  }
@@ -81,9 +81,9 @@ class QuicknodeWebhookSignature {
81
81
  return existing;
82
82
  });
83
83
  }
84
- createSigningKey(projectName, environment, stream_id, value) {
84
+ createSigningKey(keyVaultName, stream_id, value) {
85
85
  return __awaiter(this, void 0, void 0, function* () {
86
- const vaultHandler = new KeyVaultService_1.default(projectName, environment);
86
+ const vaultHandler = new KeyVaultService_1.default(keyVaultName);
87
87
  if (!vaultHandler.client) {
88
88
  vaultHandler.initializeKeyVaultService();
89
89
  }
@@ -92,9 +92,9 @@ class QuicknodeWebhookSignature {
92
92
  return true;
93
93
  });
94
94
  }
95
- deleteSigningKey(projectName, environment, stream_id) {
95
+ deleteSigningKey(keyVaultName, stream_id) {
96
96
  return __awaiter(this, void 0, void 0, function* () {
97
- const vaultHandler = new KeyVaultService_1.default(projectName, environment);
97
+ const vaultHandler = new KeyVaultService_1.default(keyVaultName);
98
98
  if (!vaultHandler.client) {
99
99
  vaultHandler.initializeKeyVaultService();
100
100
  }
@@ -18,7 +18,7 @@ class StorageService {
18
18
  constructor(config) {
19
19
  this.fetchContainerContent = (containerClientName, fileName) => __awaiter(this, void 0, void 0, function* () {
20
20
  try {
21
- const vaultHandler = new KeyVaultService_1.default(this.config.config.projectName, this.config.config.environment);
21
+ const vaultHandler = new KeyVaultService_1.default(this.config.config.keyVaultName);
22
22
  if (!vaultHandler.client) {
23
23
  vaultHandler.initializeKeyVaultService();
24
24
  }
@@ -43,7 +43,7 @@ class StorageService {
43
43
  // Function to update or create the content of a file in a given container
44
44
  this.updateContainerContent = (containerName, fileName, content) => __awaiter(this, void 0, void 0, function* () {
45
45
  try {
46
- const vaultHandler = new KeyVaultService_1.default(this.config.config.projectName, this.config.config.environment);
46
+ const vaultHandler = new KeyVaultService_1.default(this.config.config.keyVaultName);
47
47
  if (!vaultHandler.client) {
48
48
  vaultHandler.initializeKeyVaultService();
49
49
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SweepJobService.d.ts","sourceRoot":"","sources":["../../src/services/SweepJobService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SweepJobService.d.ts","sourceRoot":"","sources":["../../src/services/SweepJobService.ts"],"names":[],"mappings":"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"}
@@ -121,7 +121,10 @@ class SweepJobService {
121
121
  FROM usersmanagement.sweep_jobs s
122
122
  WHERE s.job_status = $1
123
123
  AND s.blockchain = $2
124
- AND s.lock_expires_at + ($4 * interval '1 minute') < now()
124
+ AND (
125
+ s.lock_expires_at IS NULL
126
+ OR s.lock_expires_at + ($4 * interval '1 minute') < now()
127
+ )
125
128
  AND NOT EXISTS (
126
129
  SELECT 1 FROM usersmanagement.sweep_jobs dup
127
130
  WHERE dup.blockchain = s.blockchain
@@ -7,6 +7,7 @@ import { IDatabasePool } from "../interfaces/database";
7
7
  import { BtcWallet, IWallet, TronNodeWallet } from "./types/wallet_manager";
8
8
  import { AlchemyWebhookEnvironment } from "./types/alchemy";
9
9
  import BaseErrors from "../errors/errors";
10
+ import AsyncRateLimiter from "../utils/AsyncRateLimiter";
10
11
  declare class WalletManager extends BaseErrors {
11
12
  static instance: WalletManager;
12
13
  private config;
@@ -35,7 +36,8 @@ declare class WalletManager extends BaseErrors {
35
36
  address: string;
36
37
  }>;
37
38
  renewWallet: (subscription: AlchemyWebhookEnvironment, userId: number, blockchain: BlockchainType, expired_address: string) => Promise<IWallet>;
38
- handleRenewWallet: (subscription: AlchemyWebhookEnvironment, blockchain: BlockchainType, old_wallet: IWallet, new_wallet: IWallet) => Promise<IWallet>;
39
+ updateWebhookAddress: (subscription: AlchemyWebhookEnvironment, blockchain: BlockchainType, old_wallet: IWallet, new_wallet: IWallet, limiter: AsyncRateLimiter) => Promise<boolean>;
40
+ handleRenewWallet: (old_wallet: IWallet, new_wallet: IWallet) => Promise<IWallet>;
39
41
  deriveWallet: (parentIndex: number, childIndex: number, blockchain: BlockchainType, _mnemonic?: string) => BtcWallet;
40
42
  }
41
43
  export default WalletManager;
@@ -1 +1 @@
1
- {"version":3,"file":"WalletManager.d.ts","sourceRoot":"","sources":["../../src/services/WalletManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoC,MAAM,QAAQ,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAM1C,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAe,OAAO,EAAgB,cAAc,EAAc,MAAM,wBAAwB,CAAC;AACnH,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAO5D,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAK1C,cAAM,aAAc,SAAQ,UAAU;IAClC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;IAC/B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAgB;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,8BAA8B,EAAE,MAAM,CAAC;IACvC,0BAA0B,EAAE,MAAM,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAS;gBACX,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAelD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAOlD,SAAS,GAAU,QAAQ,MAAM,EAAE,YAAY,cAAc,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAqB7F;IAEM,2BAA2B,GAAI,YAAY,cAAc,8CAoC/D;IAGM,gBAAgB,GAAU,SAAS,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,iBAAiB,eAAe,qBAiBrG;IAED,OAAO,CAAC,2BAA2B;IAa5B,YAAY,GAAU,QAAQ,MAAM,EAAE,YAAY,cAAc,KAAG,OAAO,CAAC,OAAO,CAAC,CA2BzF;IAEY,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;IAsBlE,gBAAgB,CAAC,MAAM,EAAE,OAAO;;;;;;;IAoBhC,YAAY,GAAU,QAAQ,MAAM,EAAE,YAAY,cAAc;;;OAGtE;IAGM,WAAW,GAAU,cAAc,yBAAyB,EAAE,QAAQ,MAAM,EAAE,YAAY,cAAc,EAAE,iBAAiB,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAsC1J;IAEM,iBAAiB,GAAU,cAAc,yBAAyB,EAAE,YAAY,cAAc,EAAE,YAAY,OAAO,EAAE,YAAY,OAAO,sBAuB9I;IAIM,YAAY,GAAI,aAAa,MAAM,EAAE,YAAY,MAAM,EAAE,YAAY,cAAc,EAAE,YAAY,MAAM,eA4E7G;CAIJ;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"WalletManager.d.ts","sourceRoot":"","sources":["../../src/services/WalletManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoC,MAAM,QAAQ,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAM1C,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxD,OAAO,EAAe,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAe,OAAO,EAAgB,cAAc,EAAc,MAAM,wBAAwB,CAAC;AACnH,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAO5D,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAG1C,OAAO,gBAA+B,MAAM,2BAA2B,CAAC;AAGxE,cAAM,aAAc,SAAQ,UAAU;IAClC,MAAM,CAAC,QAAQ,EAAE,aAAa,CAAC;IAC/B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,MAAM,CAAgB;IACvB,wBAAwB,EAAE,MAAM,CAAC;IACjC,8BAA8B,EAAE,MAAM,CAAC;IACvC,0BAA0B,EAAE,MAAM,CAAC;IAC1C,OAAO,CAAC,MAAM,CAAS;gBACX,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAelD,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa;IAOlD,SAAS,GAAU,QAAQ,MAAM,EAAE,YAAY,cAAc,KAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAqB7F;IAEM,2BAA2B,GAAI,YAAY,cAAc,8CAoC/D;IAGM,gBAAgB,GAAU,SAAS,OAAO,EAAE,SAAS,MAAM,EAAE,EAAE,iBAAiB,eAAe,qBAiBrG;IAED,OAAO,CAAC,2BAA2B;IAa5B,YAAY,GAAU,QAAQ,MAAM,EAAE,YAAY,cAAc,KAAG,OAAO,CAAC,OAAO,CAAC,CA2BzF;IAEY,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;IAsBlE,gBAAgB,CAAC,MAAM,EAAE,OAAO;;;;;;;IAoBhC,YAAY,GAAU,QAAQ,MAAM,EAAE,YAAY,cAAc;;;OAGtE;IAGM,WAAW,GAAU,cAAc,yBAAyB,EAAE,QAAQ,MAAM,EAAE,YAAY,cAAc,EAAE,iBAAiB,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC,CAsC1J;IAEM,oBAAoB,GAAU,cAAc,yBAAyB,EAAE,YAAY,cAAc,EAAE,YAAY,OAAO,EAAE,YAAY,OAAO,EAAE,SAAS,gBAAgB,sBA8B5K;IAGM,iBAAiB,GAAU,YAAY,OAAO,EAAE,YAAY,OAAO,sBAezE;IAIM,YAAY,GAAI,aAAa,MAAM,EAAE,YAAY,MAAM,EAAE,YAAY,cAAc,EAAE,YAAY,MAAM,eA4E7G;CAIJ;AAED,eAAe,aAAa,CAAC"}
@@ -64,6 +64,8 @@ const constants_1 = require("../constants");
64
64
  const tronweb_1 = require("tronweb");
65
65
  const errors_1 = __importDefault(require("../errors/errors"));
66
66
  const Logger_1 = require("../utils/Logger");
67
+ const QnWebhookAddressManager_1 = __importDefault(require("./quicknode-notifications/QnWebhookAddressManager"));
68
+ const AsyncRateLimiter_1 = require("../utils/AsyncRateLimiter");
67
69
  class WalletManager extends errors_1.default {
68
70
  constructor(config, dbPool) {
69
71
  super();
@@ -206,18 +208,20 @@ class WalletManager extends errors_1.default {
206
208
  yield timerManager.delete_timer(userId, blockchain);
207
209
  return updatedWallet;
208
210
  });
209
- this.handleRenewWallet = (subscription, blockchain, old_wallet, new_wallet) => __awaiter(this, void 0, void 0, function* () {
210
- const wallet_manager = WalletManager.getInstance(this.config, this.dbPool);
211
+ this.updateWebhookAddress = (subscription, blockchain, old_wallet, new_wallet, limiter) => __awaiter(this, void 0, void 0, function* () {
211
212
  const alchemy_service = AlchemyService_1.default.getInstance(this.config);
213
+ const qn_service = QnWebhookAddressManager_1.default.getInstance(this.config);
214
+ // Add new address and remove expired address (quicknode and alchemy webhooks)
215
+ const alchemy_res = yield limiter.execute(() => (0, AsyncRateLimiter_1.withRetry)(() => __awaiter(this, void 0, void 0, function* () { return yield alchemy_service.add_remove_addresses_all_webhooks(subscription, blockchain, [new_wallet.address], [old_wallet.address]); }), 2, 500));
216
+ const quicknode_res_add = yield limiter.execute(() => (0, AsyncRateLimiter_1.withRetry)(() => __awaiter(this, void 0, void 0, function* () { return yield qn_service.add_address(blockchain, new_wallet.address); }), 3, 500));
217
+ const quicknode_res_remove = yield limiter.execute(() => (0, AsyncRateLimiter_1.withRetry)(() => __awaiter(this, void 0, void 0, function* () { return yield qn_service.remove_address(blockchain, old_wallet.address); }), 3, 500));
218
+ return true;
219
+ });
220
+ this.handleRenewWallet = (old_wallet, new_wallet) => __awaiter(this, void 0, void 0, function* () {
212
221
  // Dispatch insert sweep job handler
213
222
  const sweep_job_service = new SweepJobService_1.default(this.dbPool, this.config);
214
223
  yield sweep_job_service.dispatchAddSweepJobWithBalanceCheck(old_wallet.id, old_wallet.blockchain, old_wallet.userId, old_wallet.address, old_wallet.parentIndex, old_wallet.childIndex, true // full sweep for expired wallet
215
224
  );
216
- // Add new address and remove expired address
217
- const is_added_removed = yield alchemy_service.add_remove_addresses_all_webhooks(subscription, blockchain, [new_wallet.address], [old_wallet.address]);
218
- if (!is_added_removed) {
219
- throw new Error(`Failed to add new wallet to address activity monitor.`);
220
- }
221
225
  return new_wallet;
222
226
  });
223
227
  // TODO: revisit solana and btc wallet creation and return
@@ -0,0 +1,15 @@
1
+ import { Wallet } from "ethers";
2
+ import { BlockchainType } from "../interfaces";
3
+ import { IConfig } from "../interfaces/config";
4
+ import { Keypair } from "@solana/web3.js";
5
+ import BaseErrors from "../errors/errors";
6
+ import { TronNodeWallet } from "./types";
7
+ declare class WalletManagerHelper extends BaseErrors {
8
+ static instance: WalletManagerHelper;
9
+ private config;
10
+ private constructor();
11
+ static getInstance(config: IConfig): WalletManagerHelper;
12
+ getEscrowFundsManagerWallet: (blockchain: BlockchainType) => Wallet | Keypair | TronNodeWallet;
13
+ }
14
+ export default WalletManagerHelper;
15
+ //# sourceMappingURL=WalletManagerHelper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletManagerHelper.d.ts","sourceRoot":"","sources":["../../src/services/WalletManagerHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAE1C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAc,MAAM,SAAS,CAAC;AAErD,cAAM,mBAAoB,SAAQ,UAAU;IACxC,MAAM,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACrC,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO;IAIP,MAAM,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO;IAQ3B,2BAA2B,GAAI,YAAY,cAAc,uCAoC/D;CACJ;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const ethers_1 = require("ethers");
7
+ const constants_1 = require("../constants");
8
+ const web3_js_1 = require("@solana/web3.js");
9
+ const tronweb_1 = require("tronweb");
10
+ const errors_1 = __importDefault(require("../errors/errors"));
11
+ class WalletManagerHelper extends errors_1.default {
12
+ constructor(config) {
13
+ super();
14
+ this.getEscrowFundsManagerWallet = (blockchain) => {
15
+ if (blockchain === constants_1.BLOCKCHAINS.EVM) {
16
+ const privKey = this.config.config.escrowFundingWalletPrivateKeyEvm;
17
+ if (!privKey)
18
+ throw new Error(`Missing EVM funding wallet private key`);
19
+ const wallet = new ethers_1.Wallet(privKey);
20
+ return wallet;
21
+ }
22
+ else if (blockchain === constants_1.BLOCKCHAINS.SOLANA) {
23
+ const privKey = this.config.config.escrowFundingWalletPrivateKeySol;
24
+ if (!privKey)
25
+ throw new Error(`Missing Solana funding wallet private key`);
26
+ // const secret = bs58.decode(privKey);
27
+ const secret = Buffer.from(privKey, "base64");
28
+ return web3_js_1.Keypair.fromSecretKey(secret);
29
+ }
30
+ else if (blockchain === constants_1.BLOCKCHAINS.TRON) {
31
+ const privKey = this.config.config.escrowFundingWalletPrivateKeyTron;
32
+ if (!privKey)
33
+ throw new Error(`Missing Tron funding wallet private key`);
34
+ // Create TRON account
35
+ const hostUrl = this.config.config.environment === 'dev' || this.config.config.environment === 'local' ? "https://nile.trongrid.io" : "https://api.trongrid.io";
36
+ const tronWeb = new tronweb_1.TronWeb({ fullHost: hostUrl });
37
+ const address = tronWeb.address.fromPrivateKey(privKey);
38
+ if (!address)
39
+ throw new Error(this.UnexpectedError("Failed to derive wallet address from private key on tron network"));
40
+ const tronWallet = {
41
+ wallet: {
42
+ address,
43
+ publicKey: address,
44
+ privateKey: privKey,
45
+ sign: (tx) => tronWeb.trx.sign(tx, privKey),
46
+ },
47
+ address: address
48
+ };
49
+ return tronWallet.wallet;
50
+ }
51
+ else {
52
+ throw new Error(`Unsupported blockchain type ${blockchain}`);
53
+ }
54
+ ;
55
+ };
56
+ this.config = config;
57
+ }
58
+ static getInstance(config) {
59
+ if (!this.instance) {
60
+ this.instance = new WalletManagerHelper(config);
61
+ }
62
+ return this.instance;
63
+ }
64
+ }
65
+ exports.default = WalletManagerHelper;
@@ -0,0 +1,20 @@
1
+ import { QnNotificationCreateResponse, QnNotificationListResponse } from "./types/notification_types";
2
+ import { IConfig } from "../../interfaces/config";
3
+ import BaseErrors from "../../errors/errors";
4
+ import { RateLimiterOptions } from "../../utils/AsyncRateLimiter";
5
+ declare class QnNotificationsApi extends BaseErrors {
6
+ private static instance;
7
+ private api_key;
8
+ private base_url;
9
+ private rate_limiter;
10
+ private rlc;
11
+ private constructor();
12
+ static getInstance(config: IConfig, rlc?: RateLimiterOptions): QnNotificationsApi;
13
+ create_webhook(template: string, name: string, network: string, webhook_url: string, initial_addresses: string[]): Promise<QnNotificationCreateResponse>;
14
+ get_all_webhooks(): Promise<QnNotificationListResponse>;
15
+ update_webhook_addresses(webhook_id: string, template: string, all_addresses: string[]): Promise<void>;
16
+ delete_webhook(webhook_id: string): Promise<void>;
17
+ private call;
18
+ }
19
+ export default QnNotificationsApi;
20
+ //# sourceMappingURL=QnNotificationsApi.d.ts.map