• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

safe-global / safe-client-gateway / 11403759751

18 Oct 2024 12:31PM UTC coverage: 91.629% (-0.09%) from 91.719%
11403759751

Pull #2033

github

hectorgomezv
Add more unit tests
Pull Request #2033: Parse Targeted Messaging data files

2640 of 3203 branches covered (82.42%)

Branch coverage included in aggregate %.

64 of 82 new or added lines in 7 files covered. (78.05%)

3 existing lines in 1 file now uncovered.

8787 of 9268 relevant lines covered (94.81%)

430.03 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

99.26
/src/datasources/cache/cache.router.ts
1
import crypto from 'crypto';
180✔
2
import { CacheDir } from '@/datasources/cache/entities/cache-dir.entity';
180✔
3

4
export class CacheRouter {
180✔
5
  private static readonly ACCOUNT_DATA_SETTINGS_KEY = 'account_data_settings';
180✔
6
  private static readonly ACCOUNT_DATA_TYPES_KEY = 'account_data_types';
180✔
7
  private static readonly ACCOUNT_KEY = 'account';
180✔
8
  private static readonly ALL_TRANSACTIONS_KEY = 'all_transactions';
180✔
9
  private static readonly AUTH_NONCE_KEY = 'auth_nonce';
180✔
10
  private static readonly BACKBONE_KEY = 'backbone';
180✔
11
  private static readonly CHAIN_KEY = 'chain';
180✔
12
  private static readonly CHAINS_KEY = 'chains';
180✔
13
  private static readonly CONTRACT_KEY = 'contract';
180✔
14
  private static readonly COUNTERFACTUAL_SAFE_KEY = 'counterfactual_safe';
180✔
15
  private static readonly COUNTERFACTUAL_SAFES_KEY = 'counterfactual_safes';
180✔
16
  private static readonly CREATION_TRANSACTION_KEY = 'creation_transaction';
180✔
17
  private static readonly DELEGATES_KEY = 'delegates';
180✔
18
  private static readonly FIREBASE_OAUTH2_TOKEN_KEY = 'firebase_oauth2_token';
180✔
19
  private static readonly INCOMING_TRANSFERS_KEY = 'incoming_transfers';
180✔
20
  private static readonly INDEXING_KEY = 'indexing';
180✔
21
  private static readonly MESSAGE_KEY = 'message';
180✔
22
  private static readonly MESSAGES_KEY = 'messages';
180✔
23
  private static readonly MODULE_TRANSACTION_KEY = 'module_transaction';
180✔
24
  private static readonly MODULE_TRANSACTIONS_KEY = 'module_transactions';
180✔
25
  private static readonly MULTISIG_TRANSACTION_KEY = 'multisig_transaction';
180✔
26
  private static readonly MULTISIG_TRANSACTIONS_KEY = 'multisig_transactions';
180✔
27
  private static readonly NATIVE_COIN_PRICE_KEY = 'native_coin_price';
180✔
28
  private static readonly OWNERS_SAFE_KEY = 'owner_safes';
180✔
29
  private static readonly RATE_LIMIT_KEY = 'rate_limit';
180✔
30
  private static readonly RELAY_KEY = 'relay';
180✔
31
  private static readonly RPC_REQUESTS_KEY = 'rpc_requests';
180✔
32
  private static readonly SAFE_APPS_KEY = 'safe_apps';
180✔
33
  private static readonly SAFE_BALANCES_KEY = 'safe_balances';
180✔
34
  private static readonly SAFE_COLLECTIBLES_KEY = 'safe_collectibles';
180✔
35
  private static readonly SAFE_EXISTS_KEY = 'safe_exists';
180✔
36
  private static readonly SAFE_FIAT_CODES_KEY = 'safe_fiat_codes';
180✔
37
  private static readonly SAFE_KEY = 'safe';
180✔
38
  private static readonly SINGLETONS_KEY = 'singletons';
180✔
39
  private static readonly STAKING_DEDICATED_STAKING_STATS_KEY =
180✔
40
    'staking_dedicated_staking_stats';
41
  private static readonly STAKING_DEFI_VAULT_STATS_KEY =
180✔
42
    'staking_defi_vault_stats';
43
  private static readonly STAKING_DEPLOYMENTS_KEY = 'staking_deployments';
180✔
44
  private static readonly STAKING_NETWORK_STATS_KEY = 'staking_network_stats';
180✔
45
  private static readonly STAKING_POOLED_STAKING_STATS_KEY =
180✔
46
    'staking_pooled_staking_stats';
47
  private static readonly STAKING_STAKES_KEY = 'staking_stakes';
180✔
48
  private static readonly STAKING_TRANSACTION_STATUS_KEY =
180✔
49
    'staking_transaction_status';
50
  private static readonly TARGETED_MESSAGING_OUTREACHES =
180✔
51
    'targeted_messaging_outreaches';
52
  private static readonly TARGETED_MESSAGING_OUTREACH_FILE_PROCESSOR_LOCK =
180✔
53
    'targeted_messaging_outreach_file_processor_lock';
54
  private static readonly TARGETED_MESSAGING_SUBMISSION_KEY =
180✔
55
    'targeted_messaging_submission';
56
  private static readonly TARGETED_MESSAGING_TARGETED_SAFE_KEY =
180✔
57
    'targeted_messaging_targeted_safe';
58
  private static readonly TOKEN_KEY = 'token';
180✔
59
  private static readonly TOKEN_PRICE_KEY = 'token_price';
180✔
60
  private static readonly TOKENS_KEY = 'tokens';
180✔
61
  private static readonly TRANSFER_KEY = 'transfer';
180✔
62
  private static readonly TRANSFERS_KEY = 'transfers';
180✔
63
  private static readonly UNSUPPORTED_CHAIN_EVENT = 'unsupported_chain_event';
180✔
64
  private static readonly ZERION_BALANCES_KEY = 'zerion_balances';
180✔
65
  private static readonly ZERION_COLLECTIBLES_KEY = 'zerion_collectibles';
180✔
66

67
  static getAuthNonceCacheKey(nonce: string): string {
68
    return `${CacheRouter.AUTH_NONCE_KEY}_${nonce}`;
60✔
69
  }
70

71
  static getAuthNonceCacheDir(nonce: string): CacheDir {
72
    return new CacheDir(CacheRouter.getAuthNonceCacheKey(nonce), '');
60✔
73
  }
74

75
  static getBalancesCacheKey(args: {
76
    chainId: string;
77
    safeAddress: `0x${string}`;
78
  }): string {
79
    return `${args.chainId}_${CacheRouter.SAFE_BALANCES_KEY}_${args.safeAddress}`;
136✔
80
  }
81

82
  static getBalancesCacheDir(args: {
83
    chainId: string;
84
    safeAddress: `0x${string}`;
85
    trusted?: boolean;
86
    excludeSpam?: boolean;
87
  }): CacheDir {
88
    return new CacheDir(
60✔
89
      CacheRouter.getBalancesCacheKey(args),
90
      `${args.trusted}_${args.excludeSpam}`,
91
    );
92
  }
93

94
  static getZerionBalancesCacheKey(args: {
95
    chainId: string;
96
    safeAddress: `0x${string}`;
97
  }): string {
98
    return `${args.chainId}_${CacheRouter.ZERION_BALANCES_KEY}_${args.safeAddress}`;
24✔
99
  }
100

101
  static getZerionBalancesCacheDir(args: {
102
    chainId: string;
103
    safeAddress: `0x${string}`;
104
    fiatCode: string;
105
  }): CacheDir {
106
    return new CacheDir(
24✔
107
      CacheRouter.getZerionBalancesCacheKey(args),
108
      args.fiatCode,
109
    );
110
  }
111

112
  static getZerionCollectiblesCacheKey(args: {
113
    chainId: string;
114
    safeAddress: `0x${string}`;
115
  }): string {
116
    return `${args.chainId}_${CacheRouter.ZERION_COLLECTIBLES_KEY}_${args.safeAddress}`;
8✔
117
  }
118

119
  static getZerionCollectiblesCacheDir(args: {
120
    chainId: string;
121
    safeAddress: `0x${string}`;
122
    limit?: number;
123
    offset?: number;
124
  }): CacheDir {
125
    return new CacheDir(
8✔
126
      CacheRouter.getZerionCollectiblesCacheKey(args),
127
      `${args.limit}_${args.offset}`,
128
    );
129
  }
130

131
  static getRateLimitCacheKey(prefix: string): string {
132
    return `${prefix}_${CacheRouter.RATE_LIMIT_KEY}`;
148✔
133
  }
134

135
  static getSafeCacheDir(args: {
136
    chainId: string;
137
    safeAddress: `0x${string}`;
138
  }): CacheDir {
139
    return new CacheDir(CacheRouter.getSafeCacheKey(args), '');
748✔
140
  }
141

142
  static getSafeCacheKey(args: {
143
    chainId: string;
144
    safeAddress: `0x${string}`;
145
  }): string {
146
    return `${args.chainId}_${CacheRouter.SAFE_KEY}_${args.safeAddress}`;
802✔
147
  }
148

149
  static getIsSafeCacheDir(args: {
150
    chainId: string;
151
    safeAddress: `0x${string}`;
152
  }): CacheDir {
153
    return new CacheDir(CacheRouter.getIsSafeCacheKey(args), '');
68✔
154
  }
155

156
  static getIsSafeCacheKey(args: {
157
    chainId: string;
158
    safeAddress: `0x${string}`;
159
  }): string {
160
    return `${args.chainId}_${CacheRouter.SAFE_EXISTS_KEY}_${args.safeAddress}`;
74✔
161
  }
162

163
  static getContractCacheDir(args: {
164
    chainId: string;
165
    contractAddress: `0x${string}`;
166
  }): CacheDir {
167
    return new CacheDir(
754✔
168
      `${args.chainId}_${CacheRouter.CONTRACT_KEY}_${args.contractAddress}`,
169
      '',
170
    );
171
  }
172

173
  static getBackboneCacheDir(chainId: string): CacheDir {
174
    return new CacheDir(`${chainId}_${CacheRouter.BACKBONE_KEY}`, '');
16✔
175
  }
176

177
  static getSingletonsCacheDir(chainId: string): CacheDir {
178
    return new CacheDir(`${chainId}_${CacheRouter.SINGLETONS_KEY}`, '');
68✔
179
  }
180

181
  static getCollectiblesCacheDir(args: {
182
    chainId: string;
183
    safeAddress: `0x${string}`;
184
    limit?: number;
185
    offset?: number;
186
    trusted?: boolean;
187
    excludeSpam?: boolean;
188
  }): CacheDir {
189
    return new CacheDir(
10✔
190
      CacheRouter.getCollectiblesKey(args),
191
      `${args.limit}_${args.offset}_${args.trusted}_${args.excludeSpam}`,
192
    );
193
  }
194

195
  static getCollectiblesKey(args: {
196
    chainId: string;
197
    safeAddress: `0x${string}`;
198
  }): string {
199
    return `${args.chainId}_${CacheRouter.SAFE_COLLECTIBLES_KEY}_${args.safeAddress}`;
88✔
200
  }
201

202
  static getDelegatesCacheDir(args: {
203
    chainId: string;
204
    safeAddress?: `0x${string}`;
205
    delegate?: `0x${string}`;
206
    delegator?: `0x${string}`;
207
    label?: string;
208
    limit?: number;
209
    offset?: number;
210
  }): CacheDir {
211
    return new CacheDir(
74✔
212
      `${args.chainId}_${CacheRouter.DELEGATES_KEY}_${args.safeAddress}`,
213
      `${args.delegate}_${args.delegator}_${args.label}_${args.limit}_${args.offset}`,
214
    );
215
  }
216

217
  static getFirebaseOAuth2TokenCacheDir(): CacheDir {
218
    return new CacheDir(CacheRouter.FIREBASE_OAUTH2_TOKEN_KEY, '');
4✔
219
  }
220

221
  static getTransferCacheDir(args: {
222
    chainId: string;
223
    transferId: string;
224
  }): CacheDir {
225
    return new CacheDir(
10✔
226
      `${args.chainId}_${CacheRouter.TRANSFER_KEY}_${args.transferId}`,
227
      '',
228
    );
229
  }
230

231
  static getTransfersCacheDir(args: {
232
    chainId: string;
233
    safeAddress: string;
234
    onlyErc20: boolean;
235
    onlyErc721: boolean;
236
    limit?: number;
237
    offset?: number;
238
  }): CacheDir {
239
    return new CacheDir(
118✔
240
      CacheRouter.getTransfersCacheKey(args),
241
      `${args.onlyErc20}_${args.onlyErc721}_${args.limit}_${args.offset}`,
242
    );
243
  }
244

245
  static getTransfersCacheKey(args: {
246
    chainId: string;
247
    safeAddress: string;
248
  }): string {
249
    return `${args.chainId}_${CacheRouter.TRANSFERS_KEY}_${args.safeAddress}`;
228✔
250
  }
251

252
  static getModuleTransactionCacheDir(args: {
253
    chainId: string;
254
    moduleTransactionId: string;
255
  }): CacheDir {
256
    return new CacheDir(
12✔
257
      `${args.chainId}_${CacheRouter.MODULE_TRANSACTION_KEY}_${args.moduleTransactionId}`,
258
      '',
259
    );
260
  }
261

262
  static getModuleTransactionsCacheDir(args: {
263
    chainId: string;
264
    safeAddress: `0x${string}`;
265
    to?: string;
266
    txHash?: string;
267
    module?: string;
268
    limit?: number;
269
    offset?: number;
270
  }): CacheDir {
271
    return new CacheDir(
70✔
272
      CacheRouter.getModuleTransactionsCacheKey(args),
273
      `${args.to}_${args.module}_${args.txHash}_${args.limit}_${args.offset}`,
274
    );
275
  }
276

277
  static getModuleTransactionsCacheKey(args: {
278
    chainId: string;
279
    safeAddress: `0x${string}`;
280
  }): string {
281
    return `${args.chainId}_${CacheRouter.MODULE_TRANSACTIONS_KEY}_${args.safeAddress}`;
92✔
282
  }
283

284
  static getIncomingTransfersCacheDir(args: {
285
    chainId: string;
286
    safeAddress: string;
287
    executionDateGte?: string;
288
    executionDateLte?: string;
289
    to?: string;
290
    value?: string;
291
    tokenAddress?: string;
292
    txHash?: string;
293
    limit?: number;
294
    offset?: number;
295
  }): CacheDir {
296
    return new CacheDir(
46✔
297
      CacheRouter.getIncomingTransfersCacheKey(args),
298
      `${args.executionDateGte}_${args.executionDateLte}_${args.to}_${args.value}_${args.tokenAddress}_${args.txHash}_${args.limit}_${args.offset}`,
299
    );
300
  }
301

302
  static getIncomingTransfersCacheKey(args: {
303
    chainId: string;
304
    safeAddress: string;
305
  }): string {
306
    return `${args.chainId}_${CacheRouter.INCOMING_TRANSFERS_KEY}_${args.safeAddress}`;
96✔
307
  }
308

309
  static getIndexingCacheDir(chainId: string): CacheDir {
310
    return new CacheDir(`${chainId}_${CacheRouter.INDEXING_KEY}`, '');
12✔
311
  }
312

313
  static getMultisigTransactionsCacheDir(args: {
314
    chainId: string;
315
    safeAddress: string;
316
    ordering?: string;
317
    executed?: boolean;
318
    trusted?: boolean;
319
    executionDateGte?: string;
320
    executionDateLte?: string;
321
    to?: string;
322
    value?: string;
323
    nonce?: string;
324
    nonceGte?: number;
325
    limit?: number;
326
    offset?: number;
327
  }): CacheDir {
328
    return new CacheDir(
204✔
329
      CacheRouter.getMultisigTransactionsCacheKey(args),
330
      `${args.ordering}_${args.executed}_${args.trusted}_${args.executionDateGte}_${args.executionDateLte}_${args.to}_${args.value}_${args.nonce}_${args.nonceGte}_${args.limit}_${args.offset}`,
331
    );
332
  }
333

334
  static getMultisigTransactionsCacheKey(args: {
335
    chainId: string;
336
    safeAddress: string;
337
  }): string {
338
    return `${args.chainId}_${CacheRouter.MULTISIG_TRANSACTIONS_KEY}_${args.safeAddress}`;
376✔
339
  }
340

341
  static getMultisigTransactionCacheDir(args: {
342
    chainId: string;
343
    safeTransactionHash: string;
344
  }): CacheDir {
345
    return new CacheDir(CacheRouter.getMultisigTransactionCacheKey(args), '');
86✔
346
  }
347

348
  static getMultisigTransactionCacheKey(args: {
349
    chainId: string;
350
    safeTransactionHash: string;
351
  }): string {
352
    return `${args.chainId}_${CacheRouter.MULTISIG_TRANSACTION_KEY}_${args.safeTransactionHash}`;
182✔
353
  }
354

355
  static getCreationTransactionCacheDir(args: {
356
    chainId: string;
357
    safeAddress: `0x${string}`;
358
  }): CacheDir {
359
    return new CacheDir(
16✔
360
      `${args.chainId}_${CacheRouter.CREATION_TRANSACTION_KEY}_${args.safeAddress}`,
361
      '',
362
    );
363
  }
364

365
  static getAllTransactionsCacheDir(args: {
366
    chainId: string;
367
    safeAddress: `0x${string}`;
368
    ordering?: string;
369
    executed?: boolean;
370
    queued?: boolean;
371
    limit?: number;
372
    offset?: number;
373
  }): CacheDir {
374
    return new CacheDir(
58✔
375
      CacheRouter.getAllTransactionsKey(args),
376
      `${args.ordering}_${args.executed}_${args.queued}_${args.limit}_${args.offset}`,
377
    );
378
  }
379

380
  static getAllTransactionsKey(args: {
381
    chainId: string;
382
    safeAddress: `0x${string}`;
383
  }): string {
384
    return `${args.chainId}_${CacheRouter.ALL_TRANSACTIONS_KEY}_${args.safeAddress}`;
188✔
385
  }
386

387
  static getTokenCacheDir(args: {
388
    chainId: string;
389
    address: string;
390
  }): CacheDir {
391
    return new CacheDir(
522✔
392
      `${args.chainId}_${CacheRouter.TOKEN_KEY}_${args.address}`,
393
      '',
394
    );
395
  }
396

397
  static getTokensCacheKey(chainId: string): string {
398
    return `${chainId}_${CacheRouter.TOKENS_KEY}`;
8✔
399
  }
400

401
  static getTokensCacheDir(args: {
402
    chainId: string;
403
    limit?: number;
404
    offset?: number;
405
  }): CacheDir {
406
    return new CacheDir(
8✔
407
      CacheRouter.getTokensCacheKey(args.chainId),
408
      `${args.limit}_${args.offset}`,
409
    );
410
  }
411

412
  static getSafesByOwnerCacheDir(args: {
413
    chainId: string;
414
    ownerAddress: `0x${string}`;
415
  }): CacheDir {
416
    return new CacheDir(
22✔
417
      `${args.chainId}_${CacheRouter.OWNERS_SAFE_KEY}_${args.ownerAddress}`,
418
      '',
419
    );
420
  }
421

422
  static getMessageByHashCacheKey(args: {
423
    chainId: string;
424
    messageHash: string;
425
  }): string {
426
    return `${args.chainId}_${CacheRouter.MESSAGE_KEY}_${args.messageHash}`;
82✔
427
  }
428

429
  static getMessageByHashCacheDir(args: {
430
    chainId: string;
431
    messageHash: string;
432
  }): CacheDir {
433
    return new CacheDir(this.getMessageByHashCacheKey(args), '');
74✔
434
  }
435

436
  static getMessagesBySafeCacheKey(args: {
437
    chainId: string;
438
    safeAddress: `0x${string}`;
439
  }): string {
440
    return `${args.chainId}_${CacheRouter.MESSAGES_KEY}_${args.safeAddress}`;
106✔
441
  }
442

443
  static getMessagesBySafeCacheDir(args: {
444
    chainId: string;
445
    safeAddress: `0x${string}`;
446
    limit?: number;
447
    offset?: number;
448
  }): CacheDir {
449
    return new CacheDir(
70✔
450
      this.getMessagesBySafeCacheKey(args),
451
      `${args.limit}_${args.offset}`,
452
    );
453
  }
454

455
  static getChainsCacheKey(): string {
456
    return CacheRouter.CHAINS_KEY;
40✔
457
  }
458

459
  static getChainsCacheDir(args: {
460
    limit?: number;
461
    offset?: number;
462
  }): CacheDir {
463
    return new CacheDir(
22✔
464
      CacheRouter.getChainsCacheKey(),
465
      `${args.limit}_${args.offset}`,
466
    );
467
  }
468

469
  static getChainCacheKey(chainId: string): string {
470
    return `${chainId}_${CacheRouter.CHAIN_KEY}`;
2,332✔
471
  }
472

473
  static getChainCacheDir(chainId: string): CacheDir {
474
    return new CacheDir(CacheRouter.getChainCacheKey(chainId), '');
2,314✔
475
  }
476

477
  static getRelayKey(args: {
478
    chainId: string;
479
    address: `0x${string}`;
480
  }): string {
481
    return `${args.chainId}_${CacheRouter.RELAY_KEY}_${args.address}`;
410✔
482
  }
483

484
  static getRelayCacheDir(args: {
485
    chainId: string;
486
    address: `0x${string}`;
487
  }): CacheDir {
488
    return new CacheDir(CacheRouter.getRelayKey(args), '');
410✔
489
  }
490

491
  static getSafeAppsKey(chainId: string): string {
492
    return `${chainId}_${CacheRouter.SAFE_APPS_KEY}`;
10✔
493
  }
494

495
  static getSafeAppsCacheDir(args: {
496
    chainId?: string;
497
    clientUrl?: string;
498
    onlyListed?: boolean;
499
    url?: string;
500
  }): CacheDir {
501
    return new CacheDir(
70✔
502
      `${args.chainId}_${CacheRouter.SAFE_APPS_KEY}`,
503
      `${args.clientUrl}_${args.onlyListed}_${args.url}`,
504
    );
505
  }
506

507
  static getNativeCoinPriceCacheDir(args: {
508
    nativeCoinId: string;
509
    fiatCode: string;
510
  }): CacheDir {
511
    return new CacheDir(
44✔
512
      `${args.nativeCoinId}_${CacheRouter.NATIVE_COIN_PRICE_KEY}_${args.fiatCode}`,
513
      '',
514
    );
515
  }
516

517
  static getTokenPriceCacheDir(args: {
518
    chainName: string;
519
    fiatCode: string;
520
    tokenAddress: string;
521
  }): CacheDir {
522
    return new CacheDir(
206✔
523
      `${args.chainName}_${CacheRouter.TOKEN_PRICE_KEY}_${args.tokenAddress}_${args.fiatCode}`,
524
      '',
525
    );
526
  }
527

528
  static getPriceFiatCodesCacheDir(): CacheDir {
529
    return new CacheDir(CacheRouter.SAFE_FIAT_CODES_KEY, '');
10✔
530
  }
531

532
  static getAccountCacheDir(address: `0x${string}`): CacheDir {
533
    return new CacheDir(`${CacheRouter.ACCOUNT_KEY}_${address}`, '');
84✔
534
  }
535

536
  static getAccountDataTypesCacheDir(): CacheDir {
537
    return new CacheDir(CacheRouter.ACCOUNT_DATA_TYPES_KEY, '');
20✔
538
  }
539

540
  static getAccountDataSettingsCacheDir(address: `0x${string}`): CacheDir {
541
    return new CacheDir(
22✔
542
      `${CacheRouter.ACCOUNT_DATA_SETTINGS_KEY}_${address}`,
543
      '',
544
    );
545
  }
546

547
  static getCounterfactualSafeCacheDir(
548
    chainId: string,
549
    predictedAddress: `0x${string}`,
550
  ): CacheDir {
551
    return new CacheDir(
24✔
552
      `${chainId}_${CacheRouter.COUNTERFACTUAL_SAFE_KEY}_${predictedAddress}`,
553
      '',
554
    );
555
  }
556

557
  static getCounterfactualSafesCacheDir(address: `0x${string}`): CacheDir {
558
    return new CacheDir(
88✔
559
      `${CacheRouter.COUNTERFACTUAL_SAFES_KEY}_${address}`,
560
      '',
561
    );
562
  }
563

564
  static getRpcRequestsKey(chainId: string): string {
565
    return `${chainId}_${CacheRouter.RPC_REQUESTS_KEY}`;
16✔
566
  }
567

568
  static getRpcRequestsCacheDir(args: {
569
    chainId: string;
570
    method: string;
571
    params: string;
572
  }): CacheDir {
573
    return new CacheDir(
12✔
574
      CacheRouter.getRpcRequestsKey(args.chainId),
575
      `${args.method}_${args.params}`,
576
    );
577
  }
578

579
  static getStakingDeploymentsCacheDir(): CacheDir {
580
    return new CacheDir(this.STAKING_DEPLOYMENTS_KEY, '');
104✔
581
  }
582

583
  static getStakingNetworkStatsCacheDir(): CacheDir {
584
    return new CacheDir(this.STAKING_NETWORK_STATS_KEY, '');
42✔
585
  }
586

587
  static getStakingDedicatedStakingStatsCacheDir(): CacheDir {
588
    return new CacheDir(this.STAKING_DEDICATED_STAKING_STATS_KEY, '');
28✔
589
  }
590

591
  static getStakingPooledStakingStatsCacheDir(pool: `0x${string}`): CacheDir {
592
    return new CacheDir(`${this.STAKING_POOLED_STAKING_STATS_KEY}_${pool}`, '');
4✔
593
  }
594

595
  static getStakingDefiVaultStatsCacheDir(args: {
596
    chainId: string;
597
    vault: `0x${string}`;
598
  }): CacheDir {
599
    return new CacheDir(
6✔
600
      `${args.chainId}_${this.STAKING_DEFI_VAULT_STATS_KEY}_${args.vault}`,
601
      '',
602
    );
603
  }
604

605
  /**
606
   * Calculated the chain/Safe-specific cache key of {@link Stake}.
607
   *
608
   * @param {string} args.chainId - Chain ID
609
   * @param {string} args.safeAddress - Safe address
610
   * @returns {string} - Cache key
611
   */
612
  static getStakingStakesCacheKey(args: {
613
    chainId: string;
614
    safeAddress: `0x${string}`;
615
  }): string {
616
    return `${args.chainId}_${CacheRouter.STAKING_STAKES_KEY}_${args.safeAddress}`;
70✔
617
  }
618

619
  /**
620
   * Calculate cache directory for staking stakes.
621
   *
622
   * Note: This function hashes the validators' public keys to keep the
623
   * cache field short and deterministic. Redis and other cache systems
624
   * may experience performance degradation with long fields.
625
   *
626
   * @param {string} args.chainId - Chain ID
627
   * @param {string} args.safeAddress - Safe address
628
   * @param {string} args.validatorsPublicKeys - Array of validators public keys
629
   * @returns {@link CacheDir} - Cache directory
630
   */
631
  static getStakingStakesCacheDir(args: {
632
    chainId: string;
633
    safeAddress: `0x${string}`;
634
    validatorsPublicKeys: Array<`0x${string}`>;
635
  }): CacheDir {
636
    const hash = crypto.createHash('sha256');
34✔
637
    hash.update(args.validatorsPublicKeys.join('_'));
34✔
638
    return new CacheDir(
34✔
639
      CacheRouter.getStakingStakesCacheKey(args),
640
      hash.digest('hex'),
641
    );
642
  }
643

644
  static getUnsupportedChainEventCacheKey(chainId: string): string {
645
    return `${chainId}_${this.UNSUPPORTED_CHAIN_EVENT}`;
62✔
646
  }
647

648
  static getStakingTransactionStatusCacheDir(args: {
649
    chainId: string;
650
    txHash: `0x${string}`;
651
  }): CacheDir {
652
    return new CacheDir(
8✔
653
      `${args.chainId}_${CacheRouter.STAKING_TRANSACTION_STATUS_KEY}_${args.txHash}`,
654
      '',
655
    );
656
  }
657

658
  static getTargetedSafeCacheKey(outreachId: number): string {
659
    return `${CacheRouter.TARGETED_MESSAGING_TARGETED_SAFE_KEY}_${outreachId}`;
50✔
660
  }
661

662
  static getTargetedSafeCacheDir(args: {
663
    outreachId: number;
664
    safeAddress: `0x${string}`;
665
  }): CacheDir {
666
    return new CacheDir(
18✔
667
      CacheRouter.getTargetedSafeCacheKey(args.outreachId),
668
      args.safeAddress,
669
    );
670
  }
671

672
  static getSubmissionCacheKey(outreachId: number): string {
673
    return `${CacheRouter.TARGETED_MESSAGING_SUBMISSION_KEY}_${outreachId}`;
20✔
674
  }
675

676
  static getSubmissionCacheDir(args: {
677
    outreachId: number;
678
    safeAddress: `0x${string}`;
679
    signerAddress: `0x${string}`;
680
  }): CacheDir {
681
    return new CacheDir(
12✔
682
      CacheRouter.getSubmissionCacheKey(args.outreachId),
683
      `${args.safeAddress}_${args.signerAddress}`,
684
    );
685
  }
686

687
  static getOutreachesCacheDir(): CacheDir {
NEW
688
    return new CacheDir(CacheRouter.TARGETED_MESSAGING_OUTREACHES, '');
×
689
  }
690

691
  static getOutreachFileProcessorCacheDir(): CacheDir {
692
    return new CacheDir(
32✔
693
      CacheRouter.TARGETED_MESSAGING_OUTREACH_FILE_PROCESSOR_LOCK,
694
      '',
695
    );
696
  }
697
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc