@@ -10,18 +10,31 @@ import {
1010
1111export const stellarRetry = createTransientRetryPolicy ( "Stellar" ) ;
1212
13- const stellarBreaker = createCircuitBreaker ( { label : "Stellar" } ) ;
13+ export type StellarOperation = "read" | "write" ;
1414
15- export function getCircuitState ( ) : CircuitState {
16- return stellarBreaker . getState ( ) ;
15+ const stellarReadBreaker = createCircuitBreaker ( { label : "StellarRead" } ) ;
16+ const stellarWriteBreaker = createCircuitBreaker ( { label : "StellarWrite" } ) ;
17+
18+ function getBreaker ( operation : StellarOperation = "read" ) {
19+ return operation === "write" ? stellarWriteBreaker : stellarReadBreaker ;
20+ }
21+
22+ export function getCircuitState ( operation : StellarOperation = "read" ) : CircuitState {
23+ return getBreaker ( operation ) . getState ( ) ;
1724}
1825
19- export function resetCircuitBreaker ( ) : void {
20- stellarBreaker . reset ( ) ;
26+ export function resetCircuitBreaker ( operation ?: StellarOperation ) : void {
27+ if ( operation ) {
28+ getBreaker ( operation ) . reset ( ) ;
29+ return ;
30+ }
31+
32+ stellarReadBreaker . reset ( ) ;
33+ stellarWriteBreaker . reset ( ) ;
2134}
2235
23- export function circuitBreakerExecute < T > ( fn : ( ) => Promise < T > ) : Promise < T > {
24- return stellarBreaker . execute ( fn ) ;
36+ export function circuitBreakerExecute < T > ( fn : ( ) => Promise < T > , operation : StellarOperation = "read" ) : Promise < T > {
37+ return getBreaker ( operation ) . execute ( fn ) ;
2538}
2639
2740export { withTimeout , isCircuitBreakerError , CircuitState , CircuitBreakerOpenError , TimeoutError } ;
0 commit comments