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

safe-global / safe-client-gateway / 14858352218

06 May 2025 11:20AM UTC coverage: 90.258% (-0.2%) from 90.479%
14858352218

Pull #2571

github

iamacook
fix: update comments
Pull Request #2571: feat: scaffold bridge datasource

3278 of 3946 branches covered (83.07%)

Branch coverage included in aggregate %.

66 of 112 new or added lines in 15 files covered. (58.93%)

15 existing lines in 2 files now uncovered.

11397 of 12313 relevant lines covered (92.56%)

565.45 hits per line

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

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

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

69
  static getAuthNonceCacheKey(nonce: string): string {
70
    return `${CacheRouter.AUTH_NONCE_KEY}_${nonce}`;
106✔
71
  }
72

73
  static getAuthNonceCacheDir(nonce: string): CacheDir {
74
    return new CacheDir(CacheRouter.getAuthNonceCacheKey(nonce), '');
106✔
75
  }
76

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

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

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

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

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

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

133
  static getRateLimitCacheKey(prefix: string): string {
134
    return `${prefix}_${CacheRouter.RATE_LIMIT_KEY}`;
354✔
135
  }
136

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

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

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

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

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

175
  static getTrustedForDelegateCallContractsCacheKey(chainId: string): string {
176
    return `${chainId}_${CacheRouter.TRUSTED_FOR_DELEGATE_CALL_CONTRACTS_KEY}`;
16✔
177
  }
178

179
  static getTrustedForDelegateCallContractsCacheDir(chainId: string): CacheDir {
180
    return new CacheDir(
16✔
181
      CacheRouter.getTrustedForDelegateCallContractsCacheKey(chainId),
182
      '',
183
    );
184
  }
185

186
  static getBackboneCacheDir(chainId: string): CacheDir {
187
    return new CacheDir(`${chainId}_${CacheRouter.BACKBONE_KEY}`, '');
16✔
188
  }
189

190
  static getSingletonsCacheDir(chainId: string): CacheDir {
191
    return new CacheDir(`${chainId}_${CacheRouter.SINGLETONS_KEY}`, '');
68✔
192
  }
193

194
  static getCollectiblesCacheDir(args: {
195
    chainId: string;
196
    safeAddress: `0x${string}`;
197
    limit?: number;
198
    offset?: number;
199
    trusted?: boolean;
200
    excludeSpam?: boolean;
201
  }): CacheDir {
202
    return new CacheDir(
10✔
203
      CacheRouter.getCollectiblesKey(args),
204
      `${args.limit}_${args.offset}_${args.trusted}_${args.excludeSpam}`,
205
    );
206
  }
207

208
  static getCollectiblesKey(args: {
209
    chainId: string;
210
    safeAddress: `0x${string}`;
211
  }): string {
212
    return `${args.chainId}_${CacheRouter.SAFE_COLLECTIBLES_KEY}_${args.safeAddress}`;
52✔
213
  }
214

215
  static getDelegatesCacheKey(args: {
216
    chainId: string;
217
    safeAddress?: `0x${string}`;
218
  }): string {
219
    return `${args.chainId}_${CacheRouter.DELEGATES_KEY}_${args.safeAddress}`;
190✔
220
  }
221

222
  static getDelegatesCacheDir(args: {
223
    chainId: string;
224
    safeAddress?: `0x${string}`;
225
    delegate?: `0x${string}`;
226
    delegator?: `0x${string}`;
227
    label?: string;
228
    limit?: number;
229
    offset?: number;
230
  }): CacheDir {
231
    return new CacheDir(
184✔
232
      CacheRouter.getDelegatesCacheKey(args),
233
      `${args.delegate}_${args.delegator}_${args.label}_${args.limit}_${args.offset}`,
234
    );
235
  }
236

237
  static getFirebaseOAuth2TokenCacheDir(): CacheDir {
238
    return new CacheDir(CacheRouter.FIREBASE_OAUTH2_TOKEN_KEY, '');
8✔
239
  }
240

241
  static getTransferCacheDir(args: {
242
    chainId: string;
243
    transferId: string;
244
  }): CacheDir {
245
    return new CacheDir(
10✔
246
      `${args.chainId}_${CacheRouter.TRANSFER_KEY}_${args.transferId}`,
247
      '',
248
    );
249
  }
250

251
  static getTransfersCacheDir(args: {
252
    chainId: string;
253
    safeAddress: string;
254
    onlyErc20: boolean;
255
    onlyErc721: boolean;
256
    limit?: number;
257
    offset?: number;
258
  }): CacheDir {
259
    return new CacheDir(
118✔
260
      CacheRouter.getTransfersCacheKey(args),
261
      `${args.onlyErc20}_${args.onlyErc721}_${args.limit}_${args.offset}`,
262
    );
263
  }
264

265
  static getTransfersCacheKey(args: {
266
    chainId: string;
267
    safeAddress: string;
268
  }): string {
269
    return `${args.chainId}_${CacheRouter.TRANSFERS_KEY}_${args.safeAddress}`;
178✔
270
  }
271

272
  static getModuleTransactionCacheDir(args: {
273
    chainId: string;
274
    moduleTransactionId: string;
275
  }): CacheDir {
276
    return new CacheDir(
12✔
277
      `${args.chainId}_${CacheRouter.MODULE_TRANSACTION_KEY}_${args.moduleTransactionId}`,
278
      '',
279
    );
280
  }
281

282
  static getModuleTransactionsCacheDir(args: {
283
    chainId: string;
284
    safeAddress: `0x${string}`;
285
    to?: string;
286
    txHash?: string;
287
    module?: string;
288
    limit?: number;
289
    offset?: number;
290
  }): CacheDir {
291
    return new CacheDir(
70✔
292
      CacheRouter.getModuleTransactionsCacheKey(args),
293
      `${args.to}_${args.module}_${args.txHash}_${args.limit}_${args.offset}`,
294
    );
295
  }
296

297
  static getModuleTransactionsCacheKey(args: {
298
    chainId: string;
299
    safeAddress: `0x${string}`;
300
  }): string {
301
    return `${args.chainId}_${CacheRouter.MODULE_TRANSACTIONS_KEY}_${args.safeAddress}`;
84✔
302
  }
303

304
  static getIncomingTransfersCacheDir(args: {
305
    chainId: string;
306
    safeAddress: string;
307
    executionDateGte?: string;
308
    executionDateLte?: string;
309
    to?: string;
310
    value?: string;
311
    tokenAddress?: string;
312
    txHash?: string;
313
    limit?: number;
314
    offset?: number;
315
  }): CacheDir {
316
    return new CacheDir(
54✔
317
      CacheRouter.getIncomingTransfersCacheKey(args),
318
      `${args.executionDateGte}_${args.executionDateLte}_${args.to}_${args.value}_${args.tokenAddress}_${args.txHash}_${args.limit}_${args.offset}`,
319
    );
320
  }
321

322
  static getIncomingTransfersCacheKey(args: {
323
    chainId: string;
324
    safeAddress: string;
325
  }): string {
326
    return `${args.chainId}_${CacheRouter.INCOMING_TRANSFERS_KEY}_${args.safeAddress}`;
84✔
327
  }
328

329
  static getIndexingCacheDir(chainId: string): CacheDir {
330
    return new CacheDir(`${chainId}_${CacheRouter.INDEXING_KEY}`, '');
12✔
331
  }
332

333
  static getMultisigTransactionsCacheDir(args: {
334
    chainId: string;
335
    safeAddress: string;
336
    ordering?: string;
337
    executed?: boolean;
338
    trusted?: boolean;
339
    executionDateGte?: string;
340
    executionDateLte?: string;
341
    to?: string;
342
    value?: string;
343
    nonce?: string;
344
    nonceGte?: number;
345
    limit?: number;
346
    offset?: number;
347
  }): CacheDir {
348
    return new CacheDir(
240✔
349
      CacheRouter.getMultisigTransactionsCacheKey(args),
350
      `${args.ordering}_${args.executed}_${args.trusted}_${args.executionDateGte}_${args.executionDateLte}_${args.to}_${args.value}_${args.nonce}_${args.nonceGte}_${args.limit}_${args.offset}`,
351
    );
352
  }
353

354
  static getMultisigTransactionsCacheKey(args: {
355
    chainId: string;
356
    safeAddress: string;
357
  }): string {
358
    return `${args.chainId}_${CacheRouter.MULTISIG_TRANSACTIONS_KEY}_${args.safeAddress}`;
344✔
359
  }
360

361
  static getMultisigTransactionCacheDir(args: {
362
    chainId: string;
363
    safeTransactionHash: string;
364
  }): CacheDir {
365
    return new CacheDir(CacheRouter.getMultisigTransactionCacheKey(args), '');
126✔
366
  }
367

368
  static getMultisigTransactionCacheKey(args: {
369
    chainId: string;
370
    safeTransactionHash: string;
371
  }): string {
372
    return `${args.chainId}_${CacheRouter.MULTISIG_TRANSACTION_KEY}_${args.safeTransactionHash}`;
190✔
373
  }
374

375
  static getCreationTransactionCacheDir(args: {
376
    chainId: string;
377
    safeAddress: `0x${string}`;
378
  }): CacheDir {
379
    return new CacheDir(
18✔
380
      `${args.chainId}_${CacheRouter.CREATION_TRANSACTION_KEY}_${args.safeAddress}`,
381
      '',
382
    );
383
  }
384

385
  static getAllTransactionsCacheDir(args: {
386
    chainId: string;
387
    safeAddress: `0x${string}`;
388
    ordering?: string;
389
    executed?: boolean;
390
    queued?: boolean;
391
    limit?: number;
392
    offset?: number;
393
  }): CacheDir {
394
    return new CacheDir(
76✔
395
      CacheRouter.getAllTransactionsKey(args),
396
      `${args.ordering}_${args.executed}_${args.queued}_${args.limit}_${args.offset}`,
397
    );
398
  }
399

400
  static getAllTransactionsKey(args: {
401
    chainId: string;
402
    safeAddress: `0x${string}`;
403
  }): string {
404
    return `${args.chainId}_${CacheRouter.ALL_TRANSACTIONS_KEY}_${args.safeAddress}`;
148✔
405
  }
406

407
  static getTokenCacheDir(args: {
408
    chainId: string;
409
    address: string;
410
  }): CacheDir {
411
    return new CacheDir(
1,430✔
412
      `${args.chainId}_${CacheRouter.TOKEN_KEY}_${args.address}`,
413
      '',
414
    );
415
  }
416

417
  static getTokensCacheKey(chainId: string): string {
418
    return `${chainId}_${CacheRouter.TOKENS_KEY}`;
8✔
419
  }
420

421
  static getTokensCacheDir(args: {
422
    chainId: string;
423
    limit?: number;
424
    offset?: number;
425
  }): CacheDir {
426
    return new CacheDir(
8✔
427
      CacheRouter.getTokensCacheKey(args.chainId),
428
      `${args.limit}_${args.offset}`,
429
    );
430
  }
431

432
  static getSafesByOwnerCacheDir(args: {
433
    chainId: string;
434
    ownerAddress: `0x${string}`;
435
  }): CacheDir {
436
    return new CacheDir(
32✔
437
      `${args.chainId}_${CacheRouter.OWNERS_SAFE_KEY}_${args.ownerAddress}`,
438
      '',
439
    );
440
  }
441

442
  static getMessageByHashCacheKey(args: {
443
    chainId: string;
444
    messageHash: string;
445
  }): string {
446
    return `${args.chainId}_${CacheRouter.MESSAGE_KEY}_${args.messageHash}`;
96✔
447
  }
448

449
  static getMessageByHashCacheDir(args: {
450
    chainId: string;
451
    messageHash: string;
452
  }): CacheDir {
453
    return new CacheDir(this.getMessageByHashCacheKey(args), '');
92✔
454
  }
455

456
  static getMessagesBySafeCacheKey(args: {
457
    chainId: string;
458
    safeAddress: `0x${string}`;
459
  }): string {
460
    return `${args.chainId}_${CacheRouter.MESSAGES_KEY}_${args.safeAddress}`;
98✔
461
  }
462

463
  static getMessagesBySafeCacheDir(args: {
464
    chainId: string;
465
    safeAddress: `0x${string}`;
466
    limit?: number;
467
    offset?: number;
468
  }): CacheDir {
469
    return new CacheDir(
70✔
470
      this.getMessagesBySafeCacheKey(args),
471
      `${args.limit}_${args.offset}`,
472
    );
473
  }
474

475
  static getChainsCacheKey(): string {
476
    return CacheRouter.CHAINS_KEY;
48✔
477
  }
478

479
  static getChainsCacheDir(args: {
480
    limit?: number;
481
    offset?: number;
482
  }): CacheDir {
483
    return new CacheDir(
34✔
484
      CacheRouter.getChainsCacheKey(),
485
      `${args.limit}_${args.offset}`,
486
    );
487
  }
488

489
  static getChainCacheKey(chainId: string): string {
490
    return `${chainId}_${CacheRouter.CHAIN_KEY}`;
2,164✔
491
  }
492

493
  static getChainCacheDir(chainId: string): CacheDir {
494
    return new CacheDir(CacheRouter.getChainCacheKey(chainId), '');
2,150✔
495
  }
496

497
  static getRelayKey(args: {
498
    chainId: string;
499
    address: `0x${string}`;
500
  }): string {
501
    return `${args.chainId}_${CacheRouter.RELAY_KEY}_${args.address}`;
466✔
502
  }
503

504
  static getRelayCacheDir(args: {
505
    chainId: string;
506
    address: `0x${string}`;
507
  }): CacheDir {
508
    return new CacheDir(CacheRouter.getRelayKey(args), '');
466✔
509
  }
510

511
  static getSafeAppsKey(chainId: string): string {
512
    return `${chainId}_${CacheRouter.SAFE_APPS_KEY}`;
4✔
513
  }
514

515
  static getSafeAppsCacheDir(args: {
516
    chainId?: string;
517
    clientUrl?: string;
518
    onlyListed?: boolean;
519
    url?: string;
520
  }): CacheDir {
521
    return new CacheDir(
90✔
522
      `${args.chainId}_${CacheRouter.SAFE_APPS_KEY}`,
523
      `${args.clientUrl}_${args.onlyListed}_${args.url}`,
524
    );
525
  }
526

527
  static getNativeCoinPriceCacheDir(args: {
528
    nativeCoinId: string;
529
    fiatCode: string;
530
  }): CacheDir {
531
    return new CacheDir(
42✔
532
      `${args.nativeCoinId}_${CacheRouter.NATIVE_COIN_PRICE_KEY}_${args.fiatCode}`,
533
      '',
534
    );
535
  }
536

537
  static getTokenPriceCacheDir(args: {
538
    chainName: string;
539
    fiatCode: string;
540
    tokenAddress: string;
541
  }): CacheDir {
542
    return new CacheDir(
214✔
543
      `${args.chainName}_${CacheRouter.TOKEN_PRICE_KEY}_${args.tokenAddress}_${args.fiatCode}`,
544
      '',
545
    );
546
  }
547

548
  static getPriceFiatCodesCacheDir(): CacheDir {
549
    return new CacheDir(CacheRouter.SAFE_FIAT_CODES_KEY, '');
10✔
550
  }
551

552
  static getAccountCacheDir(address: `0x${string}`): CacheDir {
553
    return new CacheDir(`${CacheRouter.ACCOUNT_KEY}_${address}`, '');
78✔
554
  }
555

556
  static getAccountDataTypesCacheDir(): CacheDir {
557
    return new CacheDir(CacheRouter.ACCOUNT_DATA_TYPES_KEY, '');
20✔
558
  }
559

560
  static getAccountDataSettingsCacheDir(address: `0x${string}`): CacheDir {
561
    return new CacheDir(
22✔
562
      `${CacheRouter.ACCOUNT_DATA_SETTINGS_KEY}_${address}`,
563
      '',
564
    );
565
  }
566

567
  static getCounterfactualSafeCacheDir(
568
    chainId: string,
569
    predictedAddress: `0x${string}`,
570
  ): CacheDir {
571
    return new CacheDir(
24✔
572
      `${chainId}_${CacheRouter.COUNTERFACTUAL_SAFE_KEY}_${predictedAddress}`,
573
      '',
574
    );
575
  }
576

577
  static getCounterfactualSafesCacheDir(address: `0x${string}`): CacheDir {
578
    return new CacheDir(
80✔
579
      `${CacheRouter.COUNTERFACTUAL_SAFES_KEY}_${address}`,
580
      '',
581
    );
582
  }
583

584
  static getRpcRequestsKey(chainId: string): string {
585
    return `${chainId}_${CacheRouter.RPC_REQUESTS_KEY}`;
16✔
586
  }
587

588
  static getRpcRequestsCacheDir(args: {
589
    chainId: string;
590
    method: string;
591
    params: string;
592
  }): CacheDir {
593
    return new CacheDir(
12✔
594
      CacheRouter.getRpcRequestsKey(args.chainId),
595
      `${args.method}_${args.params}`,
596
    );
597
  }
598

599
  static getStakingDeploymentsCacheDir(): CacheDir {
600
    return new CacheDir(this.STAKING_DEPLOYMENTS_KEY, '');
52✔
601
  }
602

603
  static getStakingNetworkStatsCacheDir(): CacheDir {
604
    return new CacheDir(this.STAKING_NETWORK_STATS_KEY, '');
22✔
605
  }
606

607
  static getStakingDedicatedStakingStatsCacheDir(): CacheDir {
608
    return new CacheDir(this.STAKING_DEDICATED_STAKING_STATS_KEY, '');
14✔
609
  }
610

611
  static getStakingPooledStakingStatsCacheDir(pool: `0x${string}`): CacheDir {
612
    return new CacheDir(`${this.STAKING_POOLED_STAKING_STATS_KEY}_${pool}`, '');
4✔
613
  }
614

615
  static getStakingDefiVaultStatsCacheDir(args: {
616
    chainId: string;
617
    vault: `0x${string}`;
618
  }): CacheDir {
619
    return new CacheDir(
6✔
620
      `${args.chainId}_${this.STAKING_DEFI_VAULT_STATS_KEY}_${args.vault}`,
621
      '',
622
    );
623
  }
624

625
  /**
626
   * Calculated the chain/Safe-specific cache key of {@link Stake}.
627
   *
628
   * @param {string} args.chainId - Chain ID
629
   * @param {string} args.safeAddress - Safe address
630
   * @returns {string} - Cache key
631
   */
632
  static getStakingStakesCacheKey(args: {
633
    chainId: string;
634
    safeAddress: `0x${string}`;
635
  }): string {
636
    return `${args.chainId}_${CacheRouter.STAKING_STAKES_KEY}_${args.safeAddress}`;
54✔
637
  }
638

639
  /**
640
   * Calculate cache directory for staking stakes.
641
   *
642
   * Note: This function hashes the validators' public keys to keep the
643
   * cache field short and deterministic. Redis and other cache systems
644
   * may experience performance degradation with long fields.
645
   *
646
   * @param {string} args.chainId - Chain ID
647
   * @param {string} args.safeAddress - Safe address
648
   * @param {string} args.validatorsPublicKeys - Array of validators public keys
649
   * @returns {@link CacheDir} - Cache directory
650
   */
651
  static getStakingStakesCacheDir(args: {
652
    chainId: string;
653
    safeAddress: `0x${string}`;
654
    validatorsPublicKeys: Array<`0x${string}`>;
655
  }): CacheDir {
656
    const hash = crypto.createHash('sha256');
22✔
657
    hash.update(args.validatorsPublicKeys.join('_'));
22✔
658
    return new CacheDir(
22✔
659
      CacheRouter.getStakingStakesCacheKey(args),
660
      hash.digest('hex'),
661
    );
662
  }
663

664
  static getUnsupportedChainEventCacheKey(chainId: string): string {
665
    return `${chainId}_${this.UNSUPPORTED_CHAIN_EVENT}`;
54✔
666
  }
667

668
  static getStakingTransactionStatusCacheDir(args: {
669
    chainId: string;
670
    txHash: `0x${string}`;
671
  }): CacheDir {
672
    return new CacheDir(
8✔
673
      `${args.chainId}_${CacheRouter.STAKING_TRANSACTION_STATUS_KEY}_${args.txHash}`,
674
      '',
675
    );
676
  }
677

678
  static getTargetedSafeCacheKey(outreachId: number): string {
679
    return `${CacheRouter.TARGETED_MESSAGING_TARGETED_SAFE_KEY}_${outreachId}`;
52✔
680
  }
681

682
  static getTargetedSafeCacheDir(args: {
683
    outreachId: number;
684
    safeAddress: `0x${string}`;
685
  }): CacheDir {
686
    return new CacheDir(
18✔
687
      CacheRouter.getTargetedSafeCacheKey(args.outreachId),
688
      args.safeAddress,
689
    );
690
  }
691

692
  static getSubmissionCacheKey(outreachId: number): string {
693
    return `${CacheRouter.TARGETED_MESSAGING_SUBMISSION_KEY}_${outreachId}`;
20✔
694
  }
695

696
  static getSubmissionCacheDir(args: {
697
    outreachId: number;
698
    safeAddress: `0x${string}`;
699
    signerAddress: `0x${string}`;
700
  }): CacheDir {
701
    return new CacheDir(
12✔
702
      CacheRouter.getSubmissionCacheKey(args.outreachId),
703
      `${args.safeAddress}_${args.signerAddress}`,
704
    );
705
  }
706

707
  static getOutreachesCacheDir(): CacheDir {
UNCOV
708
    return new CacheDir(CacheRouter.TARGETED_MESSAGING_OUTREACHES, '');
×
709
  }
710

711
  static getOutreachFileProcessorCacheKey(): string {
712
    return CacheRouter.TARGETED_MESSAGING_OUTREACH_FILE_PROCESSOR_LOCK;
66✔
713
  }
714

715
  static getOutreachFileProcessorCacheDir(): CacheDir {
716
    return new CacheDir(CacheRouter.getOutreachFileProcessorCacheKey(), '');
42✔
717
  }
718

719
  /**
720
   * Gets the in-memory cache key for the given cacheDir.
721
   */
722
  static getMemoryKey(cacheDir: CacheDir): string {
723
    return `${cacheDir.key}:${cacheDir.field}`;
306✔
724
  }
725
}
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