@@ -99,31 +99,58 @@ const createS3Service = async (bucket: string, isPublic: boolean) => {
9999 return new S3Service ( client , externalClient ) ;
100100} ;
101101
102- declare global {
103- var _publicS3Server : S3Service ;
104- var _privateS3Server : S3Service ;
105- }
102+ const s3ServiceInstances : {
103+ publicS3Server : S3Service | null ;
104+ privateS3Server : S3Service | null ;
105+ } = {
106+ publicS3Server : null ,
107+ privateS3Server : null
108+ } ;
106109
107110export const initS3Service = async ( ) => {
108111 const logger = getLogger ( infra . storage ) ;
109112 logger . info ( 'Initializing S3 service...' ) ;
110113 const { publicBucket, privateBucket } = getConfig ( ) ;
111114
112115 try {
113- if ( ! globalThis . _publicS3Server ) {
116+ if ( ! s3ServiceInstances . publicS3Server ) {
114117 logger . debug ( 'Initializing public S3 service...' ) ;
115- globalThis . _publicS3Server = await createS3Service ( publicBucket , true ) ;
118+ s3ServiceInstances . publicS3Server = await createS3Service ( publicBucket , true ) ;
116119 }
117120
118- if ( ! globalThis . _privateS3Server ) {
121+ if ( ! s3ServiceInstances . privateS3Server ) {
119122 logger . debug ( 'Initializing private S3 service...' ) ;
120- globalThis . _privateS3Server = await createS3Service ( privateBucket , false ) ;
123+ s3ServiceInstances . privateS3Server = await createS3Service ( privateBucket , false ) ;
121124 }
122125 } catch ( e ) {
123126 logger . error ( 'Failed to initialize S3 service:' , { error : e } ) ;
124127 throw new Error ( 'Failed to initialize S3 service' ) ;
125128 }
126129} ;
127130
128- export const publicS3Server = globalThis . _publicS3Server ;
129- export const privateS3Server = globalThis . _privateS3Server ;
131+ export const getPublicS3Server = ( ) : S3Service => {
132+ if ( ! s3ServiceInstances . publicS3Server ) {
133+ throw new Error ( 'Public S3 service not initialized. Call initS3Service() first.' ) ;
134+ }
135+ return s3ServiceInstances . publicS3Server ;
136+ } ;
137+
138+ export const getPrivateS3Server = ( ) : S3Service => {
139+ if ( ! s3ServiceInstances . privateS3Server ) {
140+ throw new Error ( 'Private S3 service not initialized. Call initS3Service() first.' ) ;
141+ }
142+ return s3ServiceInstances . privateS3Server ;
143+ } ;
144+
145+ // 为了向后兼容,保留旧的导出方式(但使用 getter)
146+ export const publicS3Server = new Proxy ( { } as S3Service , {
147+ get ( _ , prop ) {
148+ return getPublicS3Server ( ) [ prop as keyof S3Service ] ;
149+ }
150+ } ) ;
151+
152+ export const privateS3Server = new Proxy ( { } as S3Service , {
153+ get ( _ , prop ) {
154+ return getPrivateS3Server ( ) [ prop as keyof S3Service ] ;
155+ }
156+ } ) ;
0 commit comments