Extracted from FMClient (issue #75 — split fmClient.ts into focused
services). This first slice owns the in-memory issuance-time map and the
shouldRefreshSession decision logic. The actual createSession / 401-retry
HTTP work continues to live in FMClient and calls back into the tracker via
markIssued() / clear().
Subsequent slices of #75 will extract:
AuthService (createSession + login flow, currently embedded in FMClient)
Per-profile session-token lifecycle state.
Extracted from FMClient (issue #75 — split fmClient.ts into focused services). This first slice owns the in-memory issuance-time map and the
shouldRefreshSessiondecision logic. The actual createSession / 401-retry HTTP work continues to live in FMClient and calls back into the tracker via markIssued() / clear().Subsequent slices of #75 will extract: