Simplify Access to `SynchronizedRef` in R

I have a SynchronizedRef<A> in R in some places that is updated every N minutes in background.

I would like to hide the implementation (SynchronizedRef) when accessing the service and directly access A, from:
const accessTokenRef = yield* $(AccessToken);
const accessToken = yield* $(SynchronizedRef.get(accessTokenRef));

to:
const accessToken = yield* $(AccessToken);


This is the service that provides the AccessToken and updates it:
const AccessTokenLive = Layer.scoped(
    AccessToken,
    Effect.gen(function* ($) {
        const authorizationRequest = Effect.request(
            new AuthorizationRequest(),
            AuthorizationRequestResolver,
        );

        const response = yield* $(authorizationRequest);

        const accessTokenRef = yield* $(SynchronizedRef.make(response.accessToken));

        const updateAccessToken = Effect.tap(
            authorizationRequest,
            ({ accessToken }) =>
                SynchronizedRef.update(accessTokenRef, () => accessToken).pipe(
                    Effect.tap(() => Effect.logDebug(accessToken)),
                ),
        );

        yield* $(
            Effect.scheduleForked(
                Effect.void,
                Schedule.modifyDelayEffect(
                    Schedule.fixed(Duration.seconds(response.expiresIn)),
                    () =>
                        Effect.map(updateAccessToken, ({ expiresIn }) =>
                            Duration.seconds(expiresIn),
                        ),
                ),
            ),
        );

        return accessTokenRef;
    }),
).pipe(Layer.provide(AuthorizationRequestResolverLive));


I tried some approaches without success unfortunately. Is it possible?
Was this page helpful?