1- import { writeFileSync , watchFile , unwatchFile } from 'node:fs' ;
1+ import { writeFileSync } from 'node:fs' ;
22
33import * as remote from './lib/remote.js' ;
44import * as util from './lib/utils/index.js' ;
55import Bypasser from './lib/bypasser/index.js' ;
6- import {
7- DEFAULT_ENVIRONMENT ,
8- DEFAULT_LOCAL ,
9- DEFAULT_LOGGER ,
10- DEFAULT_REGEX_MAX_BLACKLISTED ,
11- DEFAULT_REGEX_MAX_TIME_LIMIT ,
6+ import {
7+ DEFAULT_ENVIRONMENT ,
8+ DEFAULT_LOCAL ,
9+ DEFAULT_LOGGER ,
10+ DEFAULT_REGEX_MAX_BLACKLISTED ,
11+ DEFAULT_REGEX_MAX_TIME_LIMIT ,
1212 DEFAULT_STATIC ,
1313 DEFAULT_TEST_MODE ,
14- SWITCHER_OPTIONS
14+ SWITCHER_OPTIONS
1515} from './lib/constants.js' ;
1616import TimedMatch from './lib/utils/timed-match/index.js' ;
1717import ExecutionLogger from './lib/utils/executionLogger.js' ;
@@ -22,15 +22,16 @@ import { Switcher } from './switcher.js';
2222import { Auth } from './lib/remoteAuth.js' ;
2323import { GlobalOptions } from './lib/globals/globalOptions.js' ;
2424import { GlobalSnapshot } from './lib/globals/globalSnapshot.js' ;
25+ import { SnapshotWatcher } from './lib/snapshotWatcher.js' ;
2526
2627export class Client {
27-
28+ static #snapshotWatcher = new SnapshotWatcher ( ) ;
29+ static #testEnabled;
2830 static #context;
2931
3032 static buildContext ( context , options ) {
31- this . testEnabled = DEFAULT_TEST_MODE ;
32-
3333 this . #context = context ;
34+ this . #testEnabled = DEFAULT_TEST_MODE ;
3435 this . #context. environment = util . get ( context . environment , DEFAULT_ENVIRONMENT ) ;
3536
3637 // Default values
@@ -44,16 +45,16 @@ export class Client {
4445 } ) ;
4546
4647 if ( options ) {
47- Client . #buildOptions( options ) ;
48+ Client . #buildOptions( options ) ;
4849 }
49-
50+
5051 // Initialize Auth
5152 Auth . init ( this . #context) ;
5253 }
5354
5455 static #buildOptions( options ) {
5556 remote . removeAgent ( ) ;
56-
57+
5758 const optionsHandler = {
5859 [ SWITCHER_OPTIONS . CERT_PATH ] : ( val ) => val && remote . setCerts ( val ) ,
5960 [ SWITCHER_OPTIONS . SILENT_MODE ] : ( val ) => val && this . #initSilentMode( val ) ,
@@ -85,7 +86,7 @@ export class Client {
8586 GlobalOptions . updateOptions ( { silentMode } ) ;
8687 Client . loadSnapshot ( ) ;
8788 }
88-
89+
8990 static #initTimedMatch( options ) {
9091 if ( SWITCHER_OPTIONS . REGEX_MAX_BLACK_LIST in options ) {
9192 TimedMatch . setMaxBlackListed ( util . get ( options . regexMaxBlackList , DEFAULT_REGEX_MAX_BLACKLISTED ) ) ;
@@ -114,12 +115,12 @@ export class Client {
114115 if ( Auth . isTokenExpired ( ) ) {
115116 await Auth . auth ( ) ;
116117 }
117-
118+
118119 const snapshot = await validateSnapshot (
119- Client . #context,
120- GlobalSnapshot . snapshot . data . domain . version
120+ Client . #context,
121+ GlobalSnapshot . snapshot . data . domain . version
121122 ) ;
122-
123+
123124 if ( snapshot ) {
124125 if ( GlobalOptions . snapshotLocation ?. length ) {
125126 writeFileSync ( `${ GlobalOptions . snapshotLocation } /${ Client . #context. environment } .json` , snapshot ) ;
@@ -136,7 +137,7 @@ export class Client {
136137 const { fetchRemote = false , watchSnapshot = false } = options ;
137138
138139 GlobalSnapshot . init ( loadDomain (
139- util . get ( GlobalOptions . snapshotLocation , '' ) ,
140+ util . get ( GlobalOptions . snapshotLocation , '' ) ,
140141 util . get ( Client . #context. environment , DEFAULT_ENVIRONMENT )
141142 ) ) ;
142143
@@ -145,7 +146,7 @@ export class Client {
145146 }
146147
147148 if ( watchSnapshot ) {
148- Client . watchSnapshot ( ) ;
149+ Client . watchSnapshot ( ) ;
149150 }
150151
151152 return GlobalSnapshot . snapshot ?. data . domain . version || 0 ;
@@ -163,50 +164,39 @@ export class Client {
163164 }
164165
165166 static watchSnapshot ( callback = { } ) {
166- const { success = ( ) => { } , reject = ( ) => { } } = callback ;
167+ const { reject = ( ) => { } } = callback ;
167168
168- if ( Client . testEnabled || ! GlobalOptions . snapshotLocation ?. length ) {
169+ if ( Client . # testEnabled || ! GlobalOptions . snapshotLocation ?. length ) {
169170 return reject ( new Error ( 'Watch Snapshot cannot be used in test mode or without a snapshot location' ) ) ;
170171 }
171172
172- const snapshotFile = `${ GlobalOptions . snapshotLocation } /${ Client . #context. environment } .json` ;
173- let lastUpdate ;
174- watchFile ( snapshotFile , ( listener ) => {
175- try {
176- if ( ! lastUpdate || listener . ctime > lastUpdate ) {
177- GlobalSnapshot . init ( loadDomain ( GlobalOptions . snapshotLocation , Client . #context. environment ) ) ;
178- success ( ) ;
179- }
180- } catch ( e ) {
181- reject ( e ) ;
182- } finally {
183- lastUpdate = listener . ctime ;
184- }
185- } ) ;
173+ Client . #snapshotWatcher. watchSnapshot (
174+ util . get ( Client . #context. environment , DEFAULT_ENVIRONMENT ) ,
175+ callback
176+ ) ;
186177 }
187178
188179 static unloadSnapshot ( ) {
189- if ( Client . testEnabled ) {
180+ if ( Client . # testEnabled) {
190181 return ;
191182 }
192183
193- const snapshotFile = `${ GlobalOptions . snapshotLocation } ${ Client . #context. environment } .json` ;
194184 GlobalSnapshot . clear ( ) ;
195- unwatchFile ( snapshotFile ) ;
185+ Client . #snapshotWatcher . stopWatching ( ) ;
196186 }
197187
198188 static scheduleSnapshotAutoUpdate ( interval , callback = { } ) {
199- const { success = ( ) => { } , reject = ( ) => { } } = callback ;
189+ const { success = ( ) => { } , reject = ( ) => { } } = callback ;
200190
201191 if ( interval ) {
202192 GlobalOptions . updateOptions ( { snapshotAutoUpdateInterval : interval } ) ;
203193 }
204194
205195 if ( GlobalOptions . snapshotAutoUpdateInterval && GlobalOptions . snapshotAutoUpdateInterval > 0 ) {
206196 SnapshotAutoUpdater . schedule (
207- GlobalOptions . snapshotAutoUpdateInterval ,
208- this . checkSnapshot ,
209- success ,
197+ GlobalOptions . snapshotAutoUpdateInterval ,
198+ this . checkSnapshot ,
199+ success ,
210200 reject
211201 ) ;
212202 }
@@ -262,7 +252,7 @@ export class Client {
262252 }
263253
264254 static testMode ( testEnabled = true ) {
265- Client . testEnabled = testEnabled ;
255+ Client . # testEnabled = testEnabled ;
266256 }
267257
268258 static get snapshotVersion ( ) {
0 commit comments