@@ -148,6 +148,7 @@ export class OAuth extends Context.Tag("OAuth")<OAuth, OAuthImpl>() { }
148148
149149interface OAuthImpl {
150150 login : ( server : PolarEnvironment ) => Effect . Effect < Token , OAuthError , never > ;
151+ logout : ( ) => Effect . Effect < void , OAuthError , never > ;
151152 refresh : ( token : Token ) => Effect . Effect < Token , OAuthError , never > ;
152153 isAuthenticated : (
153154 server : PolarEnvironment ,
@@ -186,6 +187,9 @@ export const make = Effect.gen(function* () {
186187 return savedToken ;
187188 } ) . pipe ( Effect . scoped , Effect . provide ( OAuthRequirementsLayer ) ) ;
188189
190+ const logout = ( ) =>
191+ deleteTokenFile . pipe ( Effect . provide ( OAuthRequirementsLayer ) ) ;
192+
189193 const refresh = ( token : Token ) =>
190194 Effect . gen ( function * ( ) {
191195 const refreshedToken = yield * refreshAccessToken ( token ) ;
@@ -224,6 +228,7 @@ export const make = Effect.gen(function* () {
224228
225229 return OAuth . of ( {
226230 login,
231+ logout,
227232 refresh,
228233 isAuthenticated,
229234 getAccessToken,
@@ -321,6 +326,17 @@ const saveToken = (token: Token) =>
321326 return yield * writeToTokenFile ( token ) . pipe ( Effect . map ( ( ) => token ) ) ;
322327 } ) ;
323328
329+ const deleteTokenFile = Effect . gen ( function * ( ) {
330+ const fileSystem = yield * FileSystem . FileSystem ;
331+ const filePath = yield * tokenFilePath ;
332+
333+ yield * Effect . logDebug ( "Deleting token file..." ) ;
334+
335+ return yield * fileSystem . remove ( filePath ) . pipe (
336+ Effect . catchAll ( ( ) => Effect . void ) ,
337+ ) ;
338+ } ) ;
339+
324340const generateRandomString = Effect . sync ( ( ) => randomBytes ( 48 ) . toString ( "hex" ) ) ;
325341
326342const generateHash = ( value : string ) =>
@@ -458,7 +474,7 @@ const refreshAccessToken = (token: Token) =>
458474 server : token . server ,
459475 } ) . pipe (
460476 Effect . catchTag ( "ParseError" , ( error ) =>
461- Effect . die (
477+ Effect . fail (
462478 new OAuthError ( {
463479 message : "Failed to parse token response into a Token Schema" ,
464480 cause : error ,
@@ -544,7 +560,7 @@ const redeemCodeForAccessToken = (
544560 server,
545561 } ) . pipe (
546562 Effect . catchTag ( "ParseError" , ( error ) =>
547- Effect . die (
563+ Effect . fail (
548564 new OAuthError ( {
549565 message : "Failed to parse token response into a Token Schema" ,
550566 cause : error ,
0 commit comments