@@ -11,10 +11,18 @@ import type { Auth2StamperStorage } from "./Auth2StamperStorage";
1111/** Refresh the access token when fewer than this many ms remain before expiry. */
1212const TOKEN_REFRESH_BUFFER_MS = 15 * 60 * 1000 ;
1313
14+ export type Auth2Logger = {
15+ debug ?( message : string ) : void ;
16+ info ?( message : string ) : void ;
17+ warn ?( message : string ) : void ;
18+ error ?( message : string ) : void ;
19+ } ;
20+
1421export type Auth2StamperRefreshConfig = {
1522 authApiBaseUrl : string ;
1623 clientId : string ;
1724 redirectUri : string ;
25+ logger ?: Auth2Logger ;
1826} ;
1927
2028export class Auth2Stamper implements Auth2StamperWithKeyManagement {
@@ -123,16 +131,26 @@ export class Auth2Stamper implements Auth2StamperWithKeyManagement {
123131 * Returns true if a refresh succeeded, false otherwise.
124132 */
125133 async maybeRefreshTokens ( ) : Promise < boolean > {
134+ this . refreshConfig ?. logger ?. debug ?.( "Auth2Stamper.maybeRefreshTokens() called" ) ;
135+
126136 if ( this . refreshingTokensPromise ) {
137+ this . refreshConfig ?. logger ?. debug ?.( "Auth2Stamper.maybeRefreshTokens(): awaiting in-flight refresh" ) ;
127138 return this . refreshingTokensPromise ;
128139 }
129140
130- if (
131- ! this . refreshConfig ||
132- ! this . _refreshToken ||
133- ! this . _tokenExpiresAt ||
134- Date . now ( ) < this . _tokenExpiresAt - TOKEN_REFRESH_BUFFER_MS
135- ) {
141+ if ( ! this . refreshConfig ) {
142+ return false ;
143+ }
144+ if ( ! this . _refreshToken ) {
145+ this . refreshConfig . logger ?. debug ?.( "Auth2Stamper.maybeRefreshTokens(): skipped — missing refresh token" ) ;
146+ return false ;
147+ }
148+ if ( ! this . _tokenExpiresAt ) {
149+ this . refreshConfig . logger ?. debug ?.( "Auth2Stamper.maybeRefreshTokens(): skipped — missing token expiry" ) ;
150+ return false ;
151+ }
152+ if ( Date . now ( ) < this . _tokenExpiresAt - TOKEN_REFRESH_BUFFER_MS ) {
153+ this . refreshConfig . logger ?. debug ?.( "Auth2Stamper.maybeRefreshTokens(): skipped — token not near expiry" ) ;
136154 return false ;
137155 }
138156
@@ -141,6 +159,7 @@ export class Auth2Stamper implements Auth2StamperWithKeyManagement {
141159
142160 this . refreshingTokensPromise = ( async ( ) => {
143161 try {
162+ refreshConfig . logger ?. info ?.( "Auth2Stamper.maybeRefreshTokens(): attempting token refresh" ) ;
144163 const refreshed = await refreshTokenRequest ( {
145164 authApiBaseUrl : refreshConfig . authApiBaseUrl ,
146165 clientId : refreshConfig . clientId ,
@@ -154,9 +173,11 @@ export class Auth2Stamper implements Auth2StamperWithKeyManagement {
154173 refreshToken : refreshed . refreshToken ,
155174 expiresInMs : refreshed . expiresInMs ,
156175 } ) ;
176+ refreshConfig . logger ?. info ?.( "Auth2Stamper.maybeRefreshTokens(): token refresh succeeded" ) ;
157177 return true ;
158178 } catch ( error ) {
159- console . error ( "Failed to refresh tokens:" , error ) ;
179+ const message = error instanceof Error ? error . message : String ( error ) ;
180+ refreshConfig . logger ?. error ?.( `Auth2Stamper.maybeRefreshTokens(): token refresh failed: ${ message } ` ) ;
160181 return false ;
161182 } finally {
162183 this . refreshingTokensPromise = null ;
@@ -166,11 +187,15 @@ export class Auth2Stamper implements Auth2StamperWithKeyManagement {
166187 return this . refreshingTokensPromise ;
167188 }
168189 async stamp ( params : { data : Buffer ; type ?: "PKI" } | { data : Buffer ; type : "OIDC" } ) : Promise < string > {
190+ this . refreshConfig ?. logger ?. debug ?.( "Auth2Stamper.stamp(): called" ) ;
191+
169192 if ( ! this . _keyPair || ! this . _keyInfo ) {
170193 throw new Error ( "Auth2Stamper not initialized. Call init() first." ) ;
171194 }
172195
196+ this . refreshConfig ?. logger ?. debug ?.( "Auth2Stamper.stamp(): awaiting maybeRefreshTokens()" ) ;
173197 await this . maybeRefreshTokens ( ) ;
198+ this . refreshConfig ?. logger ?. debug ?.( "Auth2Stamper.stamp(): maybeRefreshTokens() completed" ) ;
174199
175200 if ( ! this . auth2Token ) {
176201 throw new Error ( "Auth2Stamper not initialized. Call init() first." ) ;
0 commit comments