Thanks for the response!
I decided to go with option #2 you mentioned. It is a long route which requires getting approval from Garmin for access to the Activity API, but I am working through it.
In the meantime I went with a Chrome Extension where the injected script makes a xhr request to the export_original url. I then upload the data to my server, parse the FIT file with the
fit-file-parser npm library and do the rest of my business logic.
This works as a hack, but I will be going with the Garmin Activity API as the proper long term solution.