garmin-personal-api-mcp 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/api.js.map +1 -1
- package/dist/auth.js.map +1 -1
- package/dist/cli/clients.js +22 -0
- package/dist/cli/clients.js.map +1 -1
- package/dist/cli/setup.js.map +1 -1
- package/dist/cli/status.js +21 -2
- package/dist/cli/status.js.map +1 -1
- package/dist/cli/system.js.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/fit.js.map +1 -1
- package/dist/format.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keystore.js.map +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# garmin-personal-api-mcp
|
|
2
2
|
|
|
3
|
-
[](https://github.com/aaronhaddad/garmin-connect-mcp-claude-connector/releases/latest)
|
|
4
|
+
[](https://www.npmjs.com/package/garmin-personal-api-mcp)
|
|
5
5
|
[](https://github.com/aaronhaddad/garmin-connect-mcp-claude-connector/actions/workflows/ci.yml)
|
|
6
6
|
[](LICENSE)
|
|
7
7
|
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAErF,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK1D,MAAM,OAAO,cAAe,SAAQ,KAAK;IAE5B,MAAM;IACN,IAAI;IAFf,YACW,MAAc,EACd,IAAY,EACrB,MAAe;QAEf,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;sBAJrC,MAAM;oBACN,IAAI;QAIb,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,IAAY,EAAE,MAAe;IACrE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,GAAG;YACN,OAAO,mCAAmC,IAAI,6EAA6E,MAAM,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACrL,KAAK,GAAG,CAAC;QACT,KAAK,GAAG;YACN,OAAO,kGAAkG,UAAU,EAAE,KAAK,aAAa,EAAE,CAAC;QAC5I,KAAK,GAAG;YACN,OAAO,cAAc,IAAI,kIAAkI,CAAC;QAC9J,KAAK,GAAG;YACN,OAAO,oFAAoF,CAAC;QAC9F;YACE,OAAO,MAAM,IAAI,GAAG;gBAClB,CAAC,CAAC,kCAAkC,MAAM,iDAAiD;gBAC3F,CAAC,CAAC,wBAAwB,MAAM,QAAQ,IAAI,GAAG,CAAC;IACtD,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,oBAAoB;IACpB,wBAAwB;IACxB,qBAAqB;IACrB,sBAAsB;IACtB,gBAAgB;IAChB,eAAe;IACf,qBAAqB;IACrB,0BAA0B;IAC1B,iBAAiB;IACjB,uBAAuB;IACvB,uBAAuB;IACvB,kBAAkB;IAClB,oBAAoB;IACpB,4BAA4B;CACpB,CAAC;AAEX,MAAM,OAAO,YAAY;IACM,MAAM;IAAnC,YAA6B,MAAoB;sBAApB,MAAM;IAAiB,CAAC;IAE7C,KAAK,CAAC,OAAO,CAAC,IAAY,EAAE,MAA0B,EAAE,MAAc,EAAE,MAAoB;QAClG,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,KAAK,SAAS;gBAAE,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAE3G,MAAM,IAAI,GAAG,KAAK,EAAE,KAAc,EAAE,EAAE;YACpC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACxD,IAAI,CAAC;gBACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE;oBACtB,OAAO,EAAE;wBACP,MAAM,EAAE,MAAM;wBACd,aAAa,EAAE,UAAU,KAAK,EAAE;wBAChC,YAAY,EAAE,GAAG,YAAY,IAAI,OAAO,EAAE;qBAC3C;oBACD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO;iBAC9D,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,GAAG,YAAY,YAAY,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBAC/D,MAAM,IAAI,KAAK,CAAC,iCAAiC,kBAAkB,GAAG,IAAI,SAAS,IAAI,uCAAuC,CAAC,CAAC;gBAClI,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC,CAAC;QAEF,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,sEAAsE;QACtE,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACjG,OAAO,GAAG,CAAC;IACb,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,IAAY,EAAE,MAAe,EAAE,MAAoB;QAC3D,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAU,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,IAAY,EAAE,MAAoB;QAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,yEAAyE,EAAE,MAAM,CAAC,CAAC;QACnI,OAAO,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,oBAAoB;IACpB,eAAe,GAAG,CAAC,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,2CAA2C,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC3G,cAAc,GAAG,CAAC,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,sCAAsC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAErG,uBAAuB;IACvB,gBAAgB,GAAG,CACjB,CAAkG,EAClG,CAAe,EACf,EAAE,CACF,IAAI,CAAC,GAAG,CACN,oDAAoD,EACpD,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,EACvH,CAAC,CACF,CAAC;IACJ,QAAQ,GAAG,CAAC,EAAU,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACvG,gBAAgB,GAAG,CAAC,EAAU,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACxH,gBAAgB,GAAG,CAAC,EAAU,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,oCAAoC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAE/G,gCAAgC;IAChC,UAAU,GAAG,CAAC,IAAY,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,iCAAiC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzG,QAAQ,GAAG,CAAC,IAAY,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACjG,cAAc,GAAG,CAAC,IAAY,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,2CAA2C,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACvH,SAAS,GAAG,CAAC,IAAY,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,oDAAoD,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAClI,UAAU,GAAG,CAAC,IAAY,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,qCAAqC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACpH,QAAQ,GAAG,CAAC,IAAY,EAAE,CAAe,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,gCAAgC,IAAI,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAE7G,oEAAoE;IACpE,KAAK,GAAG,CAAC,IAAmB,EAAE,KAAa,EAAE,GAAW,EAAE,CAAe,EAAE,EAAE;QAC3E,MAAM,CAAC,GAAc,eAAe,CAAC,IAAI,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC;CACH;AASD,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAE;QACd,IAAI,EAAE,GAAG,EAAE,CAAC,wCAAwC;QACpD,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACxD,OAAO,EAAE,EAAE;KACZ;IACD,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,0CAA0C,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAC1F,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,2CAA2C,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAC5F,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,8CAA8C,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAClG,KAAK,EAAE;QACL,IAAI,EAAE,GAAG,EAAE,CAAC,gDAAgD;QAC5D,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACxD,OAAO,EAAE,EAAE;KACZ;IACD,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACxE,WAAW,EAAE;QACX,IAAI,EAAE,GAAG,EAAE,CAAC,sDAAsD;QAClE,MAAM,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;QACxD,OAAO,EAAE,EAAE;KACZ;IACD,MAAM,EAAE;QACN,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAAI,CAAC,EAAE;QACxD,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACtC,OAAO,EAAE,EAAE;KACZ;IACD,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,gDAAgD,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACtG,kBAAkB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,oDAAoD,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;CAC9E,CAAC;AAItC,+FAA+F;AAC/F,MAAM,UAAU,UAAU,CAAC,KAAa,EAAE,GAAW,EAAE,OAAe;IACpE,MAAM,GAAG,GAAuB,EAAE,CAAC;IACnC,IAAI,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACrF,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,GAAG,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAoB,EAAE,IAAmB,EAAE,KAAa,EAAE,GAAW,EAAE,MAAoB;IAC1H,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;IACrE,MAAM,OAAO,GAAW,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM;QAAE,OAAO,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAClF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAQ,OAAoB,CAAC,IAAI,EAAE,CAAC;IACtE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClH,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChF,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC,CAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACjG,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kBAAkB;AAElB,MAAM,CAAC,MAAM,OAAO,GAAG,qBAAqB,CAAC;AAE7C,MAAM,UAAU,SAAS,CAAC,CAAS;IACjC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AACD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACjE,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAO,EAAE,CAAS,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AAEtF,kGAAkG;AAClG,MAAM,UAAU,WAAW,CAAC,KAAa,EAAE,GAAG,GAAG,IAAI,IAAI,EAAE;IACzD,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,GAAG,CAAC,iBAAiB,EAAE,GAAG,MAAM,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,CAAC,KAAK,WAAW;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,MAAM,GAAG,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5C,IAAI,GAAG;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACpE,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAAE,OAAO,CAAC,CAAC;IACvE,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,wEAAwE,CAAC,CAAC;AACrG,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAa,EAAE,GAAuB;IACjE,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,IAAI,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC,cAAc,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;IAChF,IAAI,IAAI,GAAG,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,4CAA4C,CAAC,CAAC;IACnG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChB,CAAC","sourcesContent":["/**\n * Thin client for the Garmin Connect Personal API (read-only, GET only).\n * Endpoint paths follow Garmin's official client: github.com/garmin/connect-personal-api-python\n */\nimport { BASE_URL, PACKAGE_NAME, REQUEST_TIMEOUT_MS, VERSION } from \"./constants.js\";\nimport { TokenManager } from \"./auth.js\";\nimport { KEY_STOP_NOTE, keyFixHint } from \"./keystore.js\";\n\nexport type Json = null | boolean | number | string | Json[] | { [key: string]: Json };\ntype Params = Record<string, string | number | boolean | undefined>;\n\nexport class GarminApiError extends Error {\n constructor(\n readonly status: number,\n readonly path: string,\n detail?: string,\n ) {\n super(httpErrorMessage(status, path, detail));\n this.name = \"GarminApiError\";\n }\n}\n\nfunction httpErrorMessage(status: number, path: string, detail?: string): string {\n switch (status) {\n case 400:\n return `Garmin rejected the request for ${path} (HTTP 400). Check the dates are YYYY-MM-DD and the range is not too long.${detail ? ` Garmin said: ${detail.slice(0, 200)}` : \"\"}`;\n case 401:\n case 403:\n return `Garmin rejected the Personal API key. It has probably expired or been deleted. Ask the user to ${keyFixHint()}. ${KEY_STOP_NOTE}`;\n case 404:\n return `Not found: ${path}. The ID may be wrong, or the Personal API does not expose this endpoint. Use garmin_list_activities to find valid activity IDs.`;\n case 429:\n return \"Garmin's rate limit was hit. Wait a minute, then retry with a narrower date range.\";\n default:\n return status >= 500\n ? `Garmin's servers returned HTTP ${status}. This is usually temporary; try again shortly.`\n : `Garmin returned HTTP ${status} for ${path}.`;\n }\n}\n\n/** Paths the raw tool may call. Mirrors the documented Personal API services. */\nexport const ALLOWED_PATH_PREFIXES = [\n \"/activity-service/\",\n \"/activitylist-service/\",\n \"/biometric-service/\",\n \"/fitnessage-service/\",\n \"/goal-service/\",\n \"/hrv-service/\",\n \"/nutrition-service/\",\n \"/periodichealth-service/\",\n \"/sleep-service/\",\n \"/usersummary-service/\",\n \"/userprofile-service/\",\n \"/weight-service/\",\n \"/wellness-service/\",\n \"/wellnessactivity-service/\",\n] as const;\n\nexport class GarminClient {\n constructor(private readonly tokens: TokenManager) {}\n\n private async request(path: string, params: Params | undefined, accept: string, signal?: AbortSignal): Promise<Response> {\n const url = new URL(`${BASE_URL}${path}`);\n for (const [k, v] of Object.entries(params ?? {})) if (v !== undefined) url.searchParams.set(k, String(v));\n\n const send = async (force: boolean) => {\n const token = await this.tokens.getToken(force, signal);\n const timeout = AbortSignal.timeout(REQUEST_TIMEOUT_MS);\n try {\n return await fetch(url, {\n headers: {\n Accept: accept,\n Authorization: `Bearer ${token}`,\n \"User-Agent\": `${PACKAGE_NAME}/${VERSION}`,\n },\n signal: signal ? AbortSignal.any([signal, timeout]) : timeout,\n });\n } catch (err) {\n if (err instanceof DOMException && err.name === \"TimeoutError\") {\n throw new Error(`Garmin did not respond within ${REQUEST_TIMEOUT_MS / 1000}s for ${path}. Try again or narrow the date range.`);\n }\n throw err;\n }\n };\n\n let res = await send(false);\n // A token can be revoked before its exp; retry once with a fresh one.\n if (res.status === 401) res = await send(true);\n if (!res.ok) throw new GarminApiError(res.status, path, await res.text().catch(() => undefined));\n return res;\n }\n\n async get(path: string, params?: Params, signal?: AbortSignal): Promise<Json> {\n const res = await this.request(path, params, \"application/json\", signal);\n const text = await res.text();\n return text ? (JSON.parse(text) as Json) : null;\n }\n\n async getBytes(path: string, signal?: AbortSignal): Promise<Uint8Array> {\n const res = await this.request(path, undefined, \"application/zip, application/x-zip-compressed, application/octet-stream\", signal);\n return new Uint8Array(await res.arrayBuffer());\n }\n\n // ---- Profile ----\n profileSettings = (s?: AbortSignal) => this.get(\"/userprofile-service/userprofile/settings\", undefined, s);\n heartRateZones = (s?: AbortSignal) => this.get(\"/biometric-service/heartRateZones/v2\", undefined, s);\n\n // ---- Activities ----\n searchActivities = (\n p: { start?: number; limit?: number; startDate?: string; endDate?: string; activityType?: string },\n s?: AbortSignal,\n ) =>\n this.get(\n \"/activitylist-service/activities/search/activities\",\n { start: p.start ?? 0, limit: p.limit ?? 20, startDate: p.startDate, endDate: p.endDate, activityType: p.activityType },\n s,\n );\n activity = (id: string, s?: AbortSignal) => this.get(`/activity-service/activity/${id}`, undefined, s);\n activityWorkouts = (id: string, s?: AbortSignal) => this.get(`/activity-service/activity/${id}/workouts`, undefined, s);\n downloadActivity = (id: string, s?: AbortSignal) => this.getBytes(`/download-service/files/activity/${id}`, s);\n\n // ---- Single-day wellness ----\n dailySleep = (date: string, s?: AbortSignal) => this.get(\"/sleep-service/sleep/dailySleep\", { date }, s);\n dailyHrv = (date: string, s?: AbortSignal) => this.get(`/hrv-service/hrv/${date}`, undefined, s);\n dailyHeartRate = (date: string, s?: AbortSignal) => this.get(\"/wellness-service/wellness/dailyHeartRate\", { date }, s);\n dailySpo2 = (date: string, s?: AbortSignal) => this.get(`/wellness-service/wellness/daily/spo2acclimation/${date}`, undefined, s);\n fitnessAge = (date: string, s?: AbortSignal) => this.get(`/fitnessage-service/fitnessage/v2/${date}`, undefined, s);\n foodLogs = (date: string, s?: AbortSignal) => this.get(`/nutrition-service/food/logs/${date}`, undefined, s);\n\n // ---- Date ranges (chunked by the caller; see rangeEndpoints) ----\n range = (name: RangeEndpoint, start: string, end: string, s?: AbortSignal) => {\n const e: RangeSpec = RANGE_ENDPOINTS[name];\n return this.get(e.path(start, end), e.params?.(start, end), s);\n };\n}\n\ninterface RangeSpec {\n path: (start: string, end: string) => string;\n params?: (start: string, end: string) => Params;\n /** Longest range one request accepts. Conservative where Garmin hasn't documented it. */\n maxDays: number;\n}\n\nexport const RANGE_ENDPOINTS = {\n dailySummaries: {\n path: () => \"/usersummary-service/v2/dailysummaries\",\n params: (startDate, endDate) => ({ startDate, endDate }),\n maxDays: 28,\n },\n steps: { path: (a, b) => `/usersummary-service/stats/steps/daily/${a}/${b}`, maxDays: 28 },\n stress: { path: (a, b) => `/usersummary-service/stats/stress/daily/${a}/${b}`, maxDays: 28 },\n hydration: { path: (a, b) => `/usersummary-service/stats/hydration/daily/${a}/${b}`, maxDays: 28 },\n sleep: {\n path: () => \"/sleep-service/sleep/dailySleepSummariesByDate\",\n params: (startDate, endDate) => ({ startDate, endDate }),\n maxDays: 31,\n },\n hrv: { path: (a, b) => `/hrv-service/hrv/daily/${a}/${b}`, maxDays: 28 },\n bodyBattery: {\n path: () => \"/wellness-service/wellness/bodyBattery/reports/daily\",\n params: (startDate, endDate) => ({ startDate, endDate }),\n maxDays: 28,\n },\n weight: {\n path: (a, b) => `/weight-service/weight/range/${a}/${b}`,\n params: () => ({ includeAll: \"true\" }),\n maxDays: 90,\n },\n weightGoals: { path: (a, b) => `/goal-service/goal/user/effective/weightgoal/${a}/${b}`, maxDays: 90 },\n wellnessActivities: { path: (a, b) => `/wellnessactivity-service/activity/summary/range/${a}/${b}`, maxDays: 28 },\n} satisfies Record<string, RangeSpec>;\n\nexport type RangeEndpoint = keyof typeof RANGE_ENDPOINTS;\n\n/** Splits [start, end] (inclusive, YYYY-MM-DD) into consecutive windows of at most maxDays. */\nexport function chunkRange(start: string, end: string, maxDays: number): [string, string][] {\n const out: [string, string][] = [];\n let cur = parseDate(start);\n const last = parseDate(end);\n while (cur <= last) {\n const stop = new Date(Math.min(addDays(cur, maxDays - 1).getTime(), last.getTime()));\n out.push([fmtDate(cur), fmtDate(stop)]);\n cur = addDays(stop, 1);\n }\n return out;\n}\n\n/**\n * Fetches a range endpoint in chunks and merges the results: arrays are concatenated,\n * objects with a single array field (e.g. `{ data: [...] }`) have that field concatenated,\n * anything else comes back as a list of per-chunk results.\n */\nexport async function fetchRange(client: GarminClient, name: RangeEndpoint, start: string, end: string, signal?: AbortSignal): Promise<Json> {\n const chunks = chunkRange(start, end, RANGE_ENDPOINTS[name].maxDays);\n const results: Json[] = [];\n for (const [a, b] of chunks) results.push(await client.range(name, a, b, signal));\n if (results.length === 1) return results[0];\n if (results.every(Array.isArray)) return (results as Json[][]).flat();\n const objs = results.filter((r): r is { [k: string]: Json } => !!r && typeof r === \"object\" && !Array.isArray(r));\n if (objs.length === results.length) {\n const arrayKeys = Object.keys(objs[0]).filter((k) => Array.isArray(objs[0][k]));\n if (arrayKeys.length === 1) {\n const k = arrayKeys[0];\n return { ...objs[0], [k]: objs.flatMap((o) => (Array.isArray(o[k]) ? (o[k] as Json[]) : [])) };\n }\n }\n return results;\n}\n\n// ---- Dates ----\n\nexport const DATE_RE = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nexport function parseDate(s: string): Date {\n const [y, m, d] = s.split(\"-\").map(Number);\n return new Date(Date.UTC(y, m - 1, d));\n}\nexport const fmtDate = (d: Date) => d.toISOString().slice(0, 10);\nexport const addDays = (d: Date, n: number) => new Date(d.getTime() + n * 86_400_000);\n\n/** Accepts YYYY-MM-DD, \"today\", \"yesterday\" or \"N days ago\", in the machine's local time zone. */\nexport function resolveDate(input: string, now = new Date()): string {\n const s = input.trim().toLowerCase();\n const local = new Date(now.getTime() - now.getTimezoneOffset() * 60_000);\n const today = fmtDate(local);\n if (s === \"today\") return today;\n if (s === \"yesterday\") return fmtDate(addDays(parseDate(today), -1));\n const ago = /^(\\d+)\\s*days?\\s*ago$/.exec(s);\n if (ago) return fmtDate(addDays(parseDate(today), -Number(ago[1])));\n if (DATE_RE.test(s) && !Number.isNaN(parseDate(s).getTime())) return s;\n throw new Error(`\"${input}\" is not a date. Use YYYY-MM-DD, \"today\", \"yesterday\" or \"N days ago\".`);\n}\n\nexport function resolveRange(start: string, end: string | undefined): [string, string] {\n const a = resolveDate(start);\n const b = resolveDate(end ?? \"today\");\n if (a > b) throw new Error(`start_date ${a} is after end_date ${b}. Swap them.`);\n const days = (parseDate(b).getTime() - parseDate(a).getTime()) / 86_400_000 + 1;\n if (days > 366) throw new Error(`That range is ${days} days. Ask for at most 366 days at a time.`);\n return [a, b];\n}\n"]}
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Exchanges a Personal API key for a short-lived (24 h) bearer token and caches it,\n * in memory and on disk (0600), keyed by a fingerprint of the key so a new key\n * never reuses an old token.\n */\nimport { createHash } from \"node:crypto\";\nimport { mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport {\n BASE_URL,\n PACKAGE_NAME,\n REQUEST_TIMEOUT_MS,\n TOKEN_CACHE_FILE,\n TOKEN_PATH,\n TOKEN_REFRESH_WINDOW_MS,\n VERSION,\n} from \"./constants.js\";\nimport { KEY_STOP_NOTE, keyFixHint } from \"./keystore.js\";\n\nexport interface BearerToken {\n accessToken: string;\n /** Epoch milliseconds. */\n expiresAt: number;\n}\n\nexport class GarminAuthError extends Error {\n constructor(\n message: string,\n readonly status?: number,\n ) {\n super(message);\n this.name = \"GarminAuthError\";\n }\n}\n\nconst fingerprint = (key: string) => createHash(\"sha256\").update(`${BASE_URL}\\0${key}`).digest(\"hex\");\n\nexport function jwtExpiry(token: string): number {\n try {\n const payload = JSON.parse(Buffer.from(token.split(\".\")[1], \"base64url\").toString(\"utf8\")) as {\n exp?: number;\n };\n if (typeof payload.exp === \"number\") return payload.exp * 1000;\n } catch {\n // fall through\n }\n // Garmin documents 24 h validity; assume that if the claim is unreadable.\n return Date.now() + 24 * 60 * 60 * 1000;\n}\n\n/** Decoded JWT payload, for showing granted scopes in `status`. Never verified, never trusted. */\nexport function jwtClaims(token: string): Record<string, unknown> {\n try {\n return JSON.parse(Buffer.from(token.split(\".\")[1], \"base64url\").toString(\"utf8\")) as Record<string, unknown>;\n } catch {\n return {};\n }\n}\n\n/** One token request, no caching. Used by setup to validate a freshly pasted key. */\nexport async function exchangeKey(key: string, signal?: AbortSignal): Promise<BearerToken> {\n let res: Response;\n try {\n res = await fetch(`${BASE_URL}${TOKEN_PATH}`, {\n method: \"POST\",\n headers: {\n Accept: \"*/*\",\n Authorization: `ApiKey ${key}`,\n \"User-Agent\": `${PACKAGE_NAME}/${VERSION}`,\n },\n signal: signal ? AbortSignal.any([signal, AbortSignal.timeout(REQUEST_TIMEOUT_MS)]) : AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n } catch (err) {\n if (err instanceof DOMException && err.name === \"TimeoutError\") {\n throw new GarminAuthError(\"Garmin's token service did not answer within 30 seconds. Check your connection and try again.\");\n }\n throw new GarminAuthError(`Could not reach Garmin (${(err as Error).message}). Check your internet connection.`);\n }\n if (res.status === 401 || res.status === 403) {\n throw new GarminAuthError(\n `Garmin rejected the Personal API key. It may be mistyped, expired or deleted. To fix it, ${keyFixHint()}. ${KEY_STOP_NOTE}`,\n res.status,\n );\n }\n if (!res.ok) {\n throw new GarminAuthError(`Garmin's token service returned HTTP ${res.status}. Try again in a minute.`, res.status);\n }\n const accessToken = (await res.text()).trim().replace(/^\"|\"$/g, \"\");\n if (!accessToken.includes(\".\")) {\n throw new GarminAuthError(\"Garmin's token service returned something that is not a token. Try again later.\");\n }\n return { accessToken, expiresAt: jwtExpiry(accessToken) };\n}\n\nexport class TokenManager {\n private memory?: { fp: string; token: BearerToken };\n private inflight?: Promise<BearerToken>;\n\n constructor(\n private readonly getKey: () => string,\n private readonly cacheFile: string | null = TOKEN_CACHE_FILE,\n ) {}\n\n async getToken(forceRefresh = false, signal?: AbortSignal): Promise<string> {\n const key = this.getKey();\n const fp = fingerprint(key);\n if (!forceRefresh) {\n const cached = this.memory?.fp === fp ? this.memory.token : this.readDisk(fp);\n if (cached && cached.expiresAt - Date.now() > TOKEN_REFRESH_WINDOW_MS) {\n this.memory = { fp, token: cached };\n return cached.accessToken;\n }\n }\n // Collapse concurrent refreshes from parallel tool calls into one request.\n const pending =\n this.inflight ??\n (this.inflight = exchangeKey(key, signal).finally(() => {\n this.inflight = undefined;\n }));\n const token = await pending;\n this.memory = { fp, token };\n this.writeDisk(fp, token);\n return token.accessToken;\n }\n\n private readDisk(fp: string): BearerToken | undefined {\n if (!this.cacheFile) return undefined;\n try {\n const data = JSON.parse(readFileSync(this.cacheFile, \"utf8\")) as { fp: string } & BearerToken;\n return data.fp === fp ? { accessToken: data.accessToken, expiresAt: data.expiresAt } : undefined;\n } catch {\n return undefined;\n }\n }\n\n private writeDisk(fp: string, token: BearerToken): void {\n if (!this.cacheFile) return;\n try {\n mkdirSync(dirname(this.cacheFile), { recursive: true, mode: 0o700 });\n writeFileSync(this.cacheFile, JSON.stringify({ fp, ...token }), { mode: 0o600 });\n } catch {\n // A read-only home directory only costs one extra token request per start.\n }\n }\n}\n"]}
|
package/dist/cli/clients.js
CHANGED
|
@@ -28,6 +28,28 @@ export function claudeDesktopConfigPath() {
|
|
|
28
28
|
return join(process.env.XDG_CONFIG_HOME ?? join(home, ".config"), "Claude", "claude_desktop_config.json");
|
|
29
29
|
}
|
|
30
30
|
const cursorConfigPath = () => join(homedir(), ".cursor", "mcp.json");
|
|
31
|
+
/**
|
|
32
|
+
* Our Claude Desktop extension, if installed. Matched by manifest name, because the extension ID
|
|
33
|
+
* differs between a double-clicked .mcpb (`local.mcpb.…`) and a directory install. Only reports
|
|
34
|
+
* whether a key is set; never reads the key itself out of the settings file.
|
|
35
|
+
*/
|
|
36
|
+
export function findDesktopExtension(appDir = dirname(claudeDesktopConfigPath())) {
|
|
37
|
+
try {
|
|
38
|
+
const installs = JSON.parse(readFileSync(join(appDir, "extensions-installations.json"), "utf8"));
|
|
39
|
+
const ext = Object.values(installs.extensions ?? {}).find((e) => e.manifest?.name === PACKAGE_NAME);
|
|
40
|
+
if (!ext)
|
|
41
|
+
return undefined;
|
|
42
|
+
let settings = {};
|
|
43
|
+
const settingsPath = join(appDir, "Claude Extensions Settings", `${ext.id}.json`);
|
|
44
|
+
if (existsSync(settingsPath))
|
|
45
|
+
settings = JSON.parse(readFileSync(settingsPath, "utf8"));
|
|
46
|
+
const key = settings.userConfig?.api_key;
|
|
47
|
+
return { version: ext.version, enabled: settings.isEnabled === true, hasKey: typeof key === "string" && key.trim() !== "" };
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
31
53
|
export function hasCommand(cmd) {
|
|
32
54
|
const probe = process.platform === "win32" ? spawnSync("where", [cmd]) : spawnSync("sh", ["-c", `command -v ${cmd}`]);
|
|
33
55
|
return probe.status === 0;
|
package/dist/cli/clients.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/cli/clients.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"clients.js","sourceRoot":"","sources":["../../src/cli/clients.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Registers this server with MCP clients: Claude Desktop (JSON config), Claude Code (`claude mcp add`),\n * Cursor (JSON config), or prints a snippet for anything else.\n */\nimport { spawnSync } from \"node:child_process\";\nimport { copyFileSync, existsSync, mkdirSync, readFileSync, realpathSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { PACKAGE_NAME, SERVER_NAME } from \"../constants.js\";\n\nexport interface LaunchCommand {\n command: string;\n args: string[];\n /** \"npx\" when launched from the npm cache, \"local\" when run from a clone/global install. */\n kind: \"npx\" | \"local\";\n}\n\n/**\n * How a client should start the server. From `npx` we register `npx -y <pkg>` so updates\n * flow in; from a git clone or global install we register the absolute node + script path,\n * which also works for GUI apps that don't inherit your shell PATH (nvm, fnm, Homebrew).\n */\nexport function launchCommand(): LaunchCommand {\n const entry = realpathSync(join(dirname(fileURLToPath(import.meta.url)), \"..\", \"index.js\"));\n if (/[\\\\/]_npx[\\\\/]/.test(entry)) return { command: \"npx\", args: [\"-y\", PACKAGE_NAME], kind: \"npx\" };\n return { command: process.execPath, args: [entry], kind: \"local\" };\n}\n\nexport interface ClientTarget {\n id: \"claude-desktop\" | \"claude-code\" | \"cursor\";\n label: string;\n detected: boolean;\n hint: string;\n}\n\nexport function claudeDesktopConfigPath(): string {\n const home = homedir();\n if (process.platform === \"darwin\") return join(home, \"Library\", \"Application Support\", \"Claude\", \"claude_desktop_config.json\");\n if (process.platform === \"win32\") return join(process.env.APPDATA ?? join(home, \"AppData\", \"Roaming\"), \"Claude\", \"claude_desktop_config.json\");\n return join(process.env.XDG_CONFIG_HOME ?? join(home, \".config\"), \"Claude\", \"claude_desktop_config.json\");\n}\n\nconst cursorConfigPath = () => join(homedir(), \".cursor\", \"mcp.json\");\n\nexport interface DesktopExtension {\n version: string;\n enabled: boolean;\n hasKey: boolean;\n}\n\n/**\n * Our Claude Desktop extension, if installed. Matched by manifest name, because the extension ID\n * differs between a double-clicked .mcpb (`local.mcpb.…`) and a directory install. Only reports\n * whether a key is set; never reads the key itself out of the settings file.\n */\nexport function findDesktopExtension(appDir = dirname(claudeDesktopConfigPath())): DesktopExtension | undefined {\n try {\n const installs = JSON.parse(readFileSync(join(appDir, \"extensions-installations.json\"), \"utf8\")) as {\n extensions?: Record<string, { id: string; version: string; manifest?: { name?: string } }>;\n };\n const ext = Object.values(installs.extensions ?? {}).find((e) => e.manifest?.name === PACKAGE_NAME);\n if (!ext) return undefined;\n let settings: { isEnabled?: boolean; userConfig?: { api_key?: unknown } } = {};\n const settingsPath = join(appDir, \"Claude Extensions Settings\", `${ext.id}.json`);\n if (existsSync(settingsPath)) settings = JSON.parse(readFileSync(settingsPath, \"utf8\"));\n const key = settings.userConfig?.api_key;\n return { version: ext.version, enabled: settings.isEnabled === true, hasKey: typeof key === \"string\" && key.trim() !== \"\" };\n } catch {\n return undefined;\n }\n}\n\nexport function hasCommand(cmd: string): boolean {\n const probe = process.platform === \"win32\" ? spawnSync(\"where\", [cmd]) : spawnSync(\"sh\", [\"-c\", `command -v ${cmd}`]);\n return probe.status === 0;\n}\n\nexport function detectClients(): ClientTarget[] {\n const desktop = claudeDesktopConfigPath();\n return [\n {\n id: \"claude-desktop\",\n label: \"Claude Desktop\",\n detected: existsSync(dirname(desktop)),\n hint: \"also makes it available to claude.ai chats linked to this computer\",\n },\n { id: \"claude-code\", label: \"Claude Code\", detected: hasCommand(\"claude\"), hint: \"via `claude mcp add --scope user`\" },\n { id: \"cursor\", label: \"Cursor\", detected: existsSync(dirname(cursorConfigPath())), hint: \"~/.cursor/mcp.json\" },\n ];\n}\n\n/** Adds/replaces our entry in an `mcpServers` JSON file, keeping a .bak of the previous file. */\nexport function upsertJsonConfig(path: string, launch: LaunchCommand): { backup?: string; replaced: boolean } {\n let config: { mcpServers?: Record<string, unknown> } & Record<string, unknown> = {};\n let backup: string | undefined;\n if (existsSync(path)) {\n const raw = readFileSync(path, \"utf8\");\n if (raw.trim()) {\n try {\n config = JSON.parse(raw);\n } catch {\n throw new Error(`${path} is not valid JSON, so I left it alone. Fix it or add the snippet by hand.`);\n }\n }\n backup = `${path}.bak`;\n copyFileSync(path, backup);\n } else {\n mkdirSync(dirname(path), { recursive: true });\n }\n config.mcpServers ??= {};\n const replaced = SERVER_NAME in config.mcpServers;\n config.mcpServers[SERVER_NAME] = { command: launch.command, args: launch.args };\n writeFileSync(path, `${JSON.stringify(config, null, 2)}\\n`);\n return { backup, replaced };\n}\n\nexport function registerClaudeCode(launch: LaunchCommand): string {\n // Replace any previous registration so re-running setup is safe.\n spawnSync(\"claude\", [\"mcp\", \"remove\", \"--scope\", \"user\", SERVER_NAME], { encoding: \"utf8\" });\n const res = spawnSync(\"claude\", [\"mcp\", \"add\", \"--scope\", \"user\", SERVER_NAME, \"--\", launch.command, ...launch.args], { encoding: \"utf8\" });\n if (res.status !== 0) throw new Error(`\\`claude mcp add\\` failed: ${(res.stderr || res.stdout).trim()}`);\n return \"added to Claude Code (user scope)\";\n}\n\nexport function registerClient(id: ClientTarget[\"id\"], launch: LaunchCommand): string {\n switch (id) {\n case \"claude-desktop\": {\n const path = claudeDesktopConfigPath();\n const { backup, replaced } = upsertJsonConfig(path, launch);\n return `${replaced ? \"updated\" : \"added to\"} ${path}${backup ? ` (backup: ${backup})` : \"\"}`;\n }\n case \"cursor\": {\n const path = cursorConfigPath();\n const { replaced } = upsertJsonConfig(path, launch);\n return `${replaced ? \"updated\" : \"added to\"} ${path}`;\n }\n case \"claude-code\":\n return registerClaudeCode(launch);\n }\n}\n\nexport function configSnippet(launch: LaunchCommand): string {\n return JSON.stringify({ mcpServers: { [SERVER_NAME]: { command: launch.command, args: launch.args } } }, null, 2);\n}\n"]}
|
package/dist/cli/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/cli/setup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,YAAY,EAAa,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACnF,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,kBAAkB,EAClB,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,YAAY,EACZ,UAAU,EACV,aAAa,EACb,YAAY,EACZ,aAAa,GAEd,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAqB,MAAM,cAAc,CAAC;AAC9G,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQlG,6CAA6C;AAC7C,SAAS,IAAI,CAAI,KAAQ;IACvB,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,CAAC,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,KAA2B,CAAC;AACrC,CAAC;AAED,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAQpE,KAAK,UAAU,MAAM,CAAC,GAAW;IAC/B,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,CAAC;IACvE,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAErI,uFAAuF;IACvF,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,YAAY,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACnJ,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,MAAM,GAAG,KAAK;QAClB,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,WAAW,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE;QACvK,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,QAAQ,CAAC,OAAa;IAC7B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,UAAU,CAAC;QAAE,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,CAAC,CAAW,CAAC;IACzH,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC/D,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAY;IACpC,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAC9B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAK,GAAe,EAAE;IACnD,kGAAkG;IAClG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACrF,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAC7E,IAAI,OAAO,KAAK,UAAU;YAAE,aAAa,CAAC,GAAG,CAAC,CAAC;;YAC1C,YAAY,CAAC,GAAG,CAAC,CAAC;QACvB,aAAa,CAAC,EAAE,GAAG,YAAY,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;QACjF,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,iBAAiB,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAC/J,IAAI,CAAC,KAAK,CAAC,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,mCAAmC,aAAa,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC;QACzG,OAAO;IACT,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC,CAAC;IACxG,CAAC;IAED,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,CAAC,CAAC,KAAK,CAAC,gCAAgC,OAAO,GAAG,CAAC,CAAC;IAEpD,sCAAsC;IACtC,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,iBAAiB,IAAI,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACvH,MAAM,MAAM,GAAG,IAAI,CACjB,MAAM,CAAC,CAAC,MAAM,CAAC;YACb,OAAO,EAAE,2BAA2B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,QAAQ,CAAC,QAAQ,GAAG,MAAM,cAAc;YACxG,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,2BAA2B,EAAE;gBACxD,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,2BAA2B,EAAE;gBACvD,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,0CAA0C,EAAE;aACxE;SACF,CAAC,CACH,CAAC;QACF,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACtB,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACrC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,CAAC,CAAC,KAAK,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YACD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,CAAC,CAAC,IAAI,CACJ;QACE,qEAAqE;QACrE,EAAE;QACF,+CAA+C;QAC/C,2CAA2C;QAC3C,0CAA0C;QAC1C,+CAA+C;QAC/C,EAAE;QACF,UAAU,YAAY,EAAE;QACxB,UAAU,QAAQ,EAAE;KACrB,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,oCAAoC,CACrC,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,6CAA6C,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IACnH,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,EAAE;YAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,2DAA2D,YAAY,EAAE,CAAC,CAAC;IACjG,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CACrB,MAAM,CAAC,CAAC,MAAM,CAAC;QACb,OAAO,EAAE,qEAAqE;QAC9E,OAAO,EAAE;YACP,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/B,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/B,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE;YACjC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC/B,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,IAAI,EAAE,cAAc,EAAE;SAClE;QACD,YAAY,EAAE,GAAG;KAClB,CAAC,CACH,CAAC;IAEF,iFAAiF;IACjF,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9D,IAAI,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,6CAA6C,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC3I,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,GAAG,IAAI,CAAC;gBACX,aAAa,GAAG,IAAI,CAAC;gBACrB,MAAM;YACR,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CACjB,MAAM,CAAC,CAAC,QAAQ,CAAC;YACf,OAAO,EAAE,iCAAiC;YAC1C,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,4EAA4E,CAAC,CAAC,CAAC,SAAS,CAAC;SAC5I,CAAC,CACH,CAAC,IAAI,EAAE,CAAC;QAET,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACxC,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;YAClC,GAAG,GAAG,MAAM,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA4B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YACtG,IAAI,OAAO,KAAK,CAAC,EAAE,CAAC;gBAClB,CAAC,CAAC,MAAM,CAAC,gEAAgE,CAAC,CAAC;gBAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,MAAM,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;IACtB,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE;QACpD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACnB,CAAC,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACnC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IACH,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IACtC,CAAC,CAAC,IAAI,CACJ;QACE,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS;QACvE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,oCAAoC;QACxF,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;QACzI,+DAA+D;KAChE;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,EACb,mBAAmB,CACpB,CAAC;IAEF,yCAAyC;IACzC,MAAM,cAAc,GAAG;QACrB,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAmB,EAAE,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,4CAA4C,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7I,EAAE,KAAK,EAAE,MAAe,EAAE,KAAK,EAAE,WAAW,gBAAgB,EAAE,EAAE,IAAI,EAAE,mDAAmD,EAAE;KAC5H,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,4BAA4B,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC;IAEnK,IAAI,CAAC;QACH,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YAC3B,aAAa,CAAC,GAAG,CAAC,CAAC;YACnB,aAAa,EAAE,CAAC,CAAC,+CAA+C;QAClE,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,GAAG,CAAC,CAAC;YAClB,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,CAAC,CAAC,MAAM,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,MAAM,QAAQ,GAAa;QACzB,GAAG,YAAY,EAAE;QACjB,OAAO;QACP,YAAY,EAAE,UAAU,CAAC,CAAC,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;QACnE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KAClC,CAAC;IACF,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,gBAAgB,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEnK,IAAI,aAAa,EAAE,CAAC;QAClB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,oCAAoC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QAC1G,IAAI,IAAI;YAAE,cAAc,EAAE,CAAC;IAC7B,CAAC;IAED,6CAA6C;IAC7C,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,MAAM,cAAc,CAAC,KAAK,CAAC,CAAC;IAElD,CAAC,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;AACpF,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAiB;IAC7C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;IAChC,MAAM,OAAO,GAAG;QACd,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAkC,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACjJ,EAAE,KAAK,EAAE,OAAgB,EAAE,KAAK,EAAE,qCAAqC,EAAE;KAC1E,CAAC;IACF,MAAM,MAAM,GAAG,IAAI,CACjB,MAAM,CAAC,CAAC,WAAW,CAAC;QAClB,OAAO,EAAE,+DAA+D;QACxE,OAAO;QACP,aAAa,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,QAAQ,EAAE,KAAK;KAChB,CAAC,CACH,CAAC;IACF,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,EAAE,KAAK,OAAO,EAAE,CAAC;YACnB,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC;YAC5C,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,KAAK,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7F,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC;IACxH,CAAC;IACD,KAAK,KAAK,CAAC;AACb,CAAC","sourcesContent":["import * as p from \"@clack/prompts\";\nimport { GarminClient, type Json } from \"../api.js\";\nimport { exchangeKey, GarminAuthError, jwtClaims, TokenManager } from \"../auth.js\";\nimport { DEFAULT_KEY_FILE, DOCS_URL, KEY_PAGE_URL, VERSION } from \"../constants.js\";\nimport { isObj, summarizeActivity } from \"../format.js\";\nimport {\n daysUntilKeyExpiry,\n deleteKeychain,\n deleteKeyFile,\n keychainAvailable,\n maskKey,\n readSettings,\n resolveKey,\n writeKeychain,\n writeKeyFile,\n writeSettings,\n type Settings,\n} from \"../keystore.js\";\nimport { configSnippet, detectClients, launchCommand, registerClient, type ClientTarget } from \"./clients.js\";\nimport { canReadClipboard, clearClipboard, openUrl, readClipboard, readStdin } from \"./system.js\";\n\nexport interface SetupFlags {\n keyStdin?: boolean;\n storage?: \"keychain\" | \"file\";\n noClients?: boolean;\n}\n\n/** Exits cleanly on Ctrl-C at any prompt. */\nfunction must<T>(value: T): Exclude<T, symbol> {\n if (p.isCancel(value)) {\n p.cancel(\"Setup cancelled. Nothing was changed.\");\n process.exit(130);\n }\n return value as Exclude<T, symbol>;\n}\n\nconst looksLikeKey = (s: string) => s.length >= 16 && !/\\s/.test(s);\n\ninterface Verified {\n scopes: string[];\n profileName?: string;\n latest?: string;\n}\n\nasync function verify(key: string): Promise<Verified> {\n const token = await exchangeKey(key);\n const claims = jwtClaims(token.accessToken);\n const scopeClaim = claims.scope ?? claims.scopes ?? claims.authorities;\n const scopes = Array.isArray(scopeClaim) ? scopeClaim.map(String) : typeof scopeClaim === \"string\" ? scopeClaim.split(/[\\s,]+/) : [];\n\n // Same client the server uses, pinned to this key and without touching the disk cache.\n const client = new GarminClient(new TokenManager(() => key, null));\n const [profile, recent] = await Promise.all([client.profileSettings().catch(() => null), client.searchActivities({ limit: 1 }).catch(() => null)]);\n const name = pickName(profile);\n const first = Array.isArray(recent) ? summarizeActivity(recent[0]) : undefined;\n const latest = first\n ? `${first.name ?? first.type ?? \"activity\"}${first.distance_km ? `, ${first.distance_km} km` : \"\"}${first.start_local ? ` on ${first.start_local.slice(0, 10)}` : \"\"}`\n : undefined;\n return { scopes: scopes.filter(Boolean), profileName: name, latest };\n}\n\nfunction pickName(profile: Json): string | undefined {\n if (!isObj(profile)) return undefined;\n for (const k of [\"displayName\", \"fullName\", \"userName\"]) if (typeof profile[k] === \"string\") return profile[k] as string;\n if (isObj(profile.userData)) return pickName(profile.userData);\n return undefined;\n}\n\nfunction expiryFromChoice(days: number): string {\n const d = new Date();\n d.setDate(d.getDate() + days);\n return d.toISOString().slice(0, 10);\n}\n\nexport async function runSetup(flags: SetupFlags = {}): Promise<void> {\n // ---------- Non-interactive path: pbpaste | garmin-personal-api-mcp setup --key-stdin ----------\n if (flags.keyStdin) {\n const key = await readStdin();\n if (!looksLikeKey(key)) throw new Error(\"stdin did not contain a Personal API key.\");\n const v = await verify(key);\n const storage = flags.storage ?? (keychainAvailable() ? \"keychain\" : \"file\");\n if (storage === \"keychain\") writeKeychain(key);\n else writeKeyFile(key);\n writeSettings({ ...readSettings(), storage, setupAt: new Date().toISOString() });\n console.error(`Key verified${v.profileName ? ` for ${v.profileName}` : \"\"} and saved to ${storage === \"keychain\" ? \"the macOS Keychain\" : DEFAULT_KEY_FILE}.`);\n if (!flags.noClients) console.error(`\\nAdd this to your MCP client:\\n${configSnippet(launchCommand())}`);\n return;\n }\n\n if (!process.stdin.isTTY) {\n throw new Error(\"Setup is interactive. Run it in a terminal, or pipe the key in with `--key-stdin`.\");\n }\n\n console.clear();\n p.intro(` Garmin Connect MCP · setup v${VERSION} `);\n\n // ---------- Existing key? ----------\n const existing = resolveKey();\n if (existing) {\n const days = daysUntilKeyExpiry();\n const status = days === undefined ? \"\" : days < 0 ? \" · EXPIRED\" : ` · expires in ${days} day${days === 1 ? \"\" : \"s\"}`;\n const choice = must(\n await p.select({\n message: `A key is already saved (${maskKey(existing.key)} in ${existing.location}${status}). What now?`,\n options: [\n { value: \"replace\", label: \"Replace it with a new key\" },\n { value: \"verify\", label: \"Just check it still works\" },\n { value: \"clients\", label: \"Keep it, and connect Claude / other apps\" },\n ],\n }),\n );\n if (choice === \"verify\") {\n const s = p.spinner();\n s.start(\"Asking Garmin\");\n try {\n const v = await verify(existing.key);\n s.stop(`Working${v.profileName ? `: signed in as ${v.profileName}` : \"\"}${v.latest ? ` · latest: ${v.latest}` : \"\"}`);\n } catch (e) {\n s.error((e as Error).message);\n }\n p.outro(\"Done.\");\n return;\n }\n if (choice === \"clients\") {\n await connectClients(flags);\n p.outro(\"Done. Restart the apps you connected.\");\n return;\n }\n }\n\n // ---------- Step 1: create the key in Garmin Connect ----------\n p.note(\n [\n \"Garmin lets you create a key for your own data, no approval needed.\",\n \"\",\n \" 1. Sign in to Garmin Connect in the browser\",\n \" 2. Settings → Personal API → Create Key\",\n \" 3. Accept the terms and pick an expiry\",\n \" 4. Copy the key. Garmin shows it only once.\",\n \"\",\n `Page: ${KEY_PAGE_URL}`,\n `Docs: ${DOCS_URL}`,\n ].join(\"\\n\"),\n \"Step 1 · Create a Personal API key\",\n );\n\n const open = must(await p.confirm({ message: \"Open the Personal API page in your browser?\", initialValue: true }));\n if (open) {\n const ok = await openUrl(KEY_PAGE_URL);\n if (!ok) p.log.warn(`Couldn't open a browser here. Open this link yourself:\\n${KEY_PAGE_URL}`);\n }\n\n const expiryDays = must(\n await p.select({\n message: \"Which expiry did you pick? (so I can remind you before it runs out)\",\n options: [\n { value: 30, label: \"30 days\" },\n { value: 90, label: \"90 days\" },\n { value: 180, label: \"180 days\" },\n { value: 365, label: \"1 year\" },\n { value: 0, label: \"Not sure / no expiry\", hint: \"no reminders\" },\n ],\n initialValue: 365,\n }),\n );\n\n // ---------- Step 2: get the key into this program without echoing it ----------\n let key = \"\";\n let fromClipboard = false;\n for (let attempt = 0; attempt < 3 && !key; attempt++) {\n const clip = canReadClipboard() ? readClipboard() : undefined;\n if (clip && looksLikeKey(clip)) {\n const use = must(await p.confirm({ message: `Found a key-like value on your clipboard (${maskKey(clip)}). Use it?`, initialValue: true }));\n if (use) {\n key = clip;\n fromClipboard = true;\n break;\n }\n }\n const pasted = must(\n await p.password({\n message: \"Paste the key (input is hidden)\",\n mask: \"•\",\n validate: (v) => (!v || !looksLikeKey(v.trim()) ? \"That doesn't look like a key: it should be one long string without spaces.\" : undefined),\n }),\n ).trim();\n\n const s = p.spinner();\n s.start(\"Checking the key with Garmin\");\n try {\n await exchangeKey(pasted);\n s.stop(\"Garmin accepted the key\");\n key = pasted;\n } catch (e) {\n s.error(e instanceof GarminAuthError ? e.message : `Couldn't check the key: ${(e as Error).message}`);\n if (attempt === 2) {\n p.cancel(\"Three failed attempts. Create a fresh key and run setup again.\");\n process.exit(1);\n }\n }\n }\n\n // ---------- Step 3: show what we can see ----------\n const s = p.spinner();\n s.start(\"Reading your account\");\n const verified = await verify(key).catch((e: Error) => {\n s.error(e.message);\n p.cancel(\"The key was not saved.\");\n return process.exit(1);\n });\n s.stop(\"Connected to Garmin Connect\");\n p.note(\n [\n verified.profileName ? `Account: ${verified.profileName}` : undefined,\n verified.latest ? `Latest: ${verified.latest}` : \"Latest: no activities found yet\",\n verified.scopes.length ? `Access: ${verified.scopes.map((x) => x.replace(/^PERSONAL_API_/, \"\").toLowerCase()).join(\", \")}` : undefined,\n \"Mode: read-only. Nothing can be written to your account.\",\n ]\n .filter(Boolean)\n .join(\"\\n\"),\n \"Step 2 · Verified\",\n );\n\n // ---------- Step 4: store it ----------\n const storageOptions = [\n ...(keychainAvailable() ? [{ value: \"keychain\" as const, label: \"macOS Keychain\", hint: \"recommended: encrypted, tied to your login\" }] : []),\n { value: \"file\" as const, label: `File at ${DEFAULT_KEY_FILE}`, hint: \"chmod 600, shared with Garmin's own Python client\" },\n ];\n const storage = flags.storage ?? (storageOptions.length === 1 ? \"file\" : must(await p.select({ message: \"Where should the key live?\", options: storageOptions })));\n\n try {\n if (storage === \"keychain\") {\n writeKeychain(key);\n deleteKeyFile(); // don't leave a second, plain-text copy behind\n } else {\n writeKeyFile(key);\n deleteKeychain();\n }\n } catch (e) {\n p.cancel((e as Error).message);\n process.exit(1);\n }\n const settings: Settings = {\n ...readSettings(),\n storage,\n keyExpiresOn: expiryDays ? expiryFromChoice(expiryDays) : undefined,\n setupAt: new Date().toISOString(),\n };\n writeSettings(settings);\n p.log.success(`Saved to ${storage === \"keychain\" ? \"the macOS Keychain\" : DEFAULT_KEY_FILE}${settings.keyExpiresOn ? ` · expires ${settings.keyExpiresOn}` : \"\"}`);\n\n if (fromClipboard) {\n const wipe = must(await p.confirm({ message: \"Clear the key from your clipboard?\", initialValue: true }));\n if (wipe) clearClipboard();\n }\n\n // ---------- Step 5: connect apps ----------\n if (!flags.noClients) await connectClients(flags);\n\n p.outro(\"All set. Restart Claude, then try: “How was my pacing on my last run?”\");\n}\n\nasync function connectClients(flags: SetupFlags): Promise<void> {\n const launch = launchCommand();\n const clients = detectClients();\n const options = [\n ...clients.map((c) => ({ value: c.id as ClientTarget[\"id\"] | \"print\", label: `${c.label}${c.detected ? \"\" : \" (not detected)\"}`, hint: c.hint })),\n { value: \"print\" as const, label: \"Show me the JSON to paste elsewhere\" },\n ];\n const picked = must(\n await p.multiselect({\n message: \"Connect it to which apps? (space to toggle, enter to confirm)\",\n options,\n initialValues: clients.filter((c) => c.detected).map((c) => c.id),\n required: false,\n }),\n );\n for (const id of picked) {\n if (id === \"print\") {\n p.note(configSnippet(launch), \"MCP config\");\n continue;\n }\n try {\n p.log.success(`${clients.find((c) => c.id === id)?.label}: ${registerClient(id, launch)}`);\n } catch (e) {\n p.log.error(`${id}: ${(e as Error).message}`);\n }\n }\n if (launch.kind === \"local\") {\n p.log.info(`Registered as \\`${launch.command} ${launch.args.join(\" \")}\\`. If you move this folder, run setup again.`);\n }\n void flags;\n}\n"]}
|
package/dist/cli/status.js
CHANGED
|
@@ -2,12 +2,19 @@ import * as p from "@clack/prompts";
|
|
|
2
2
|
import { exchangeKey, jwtClaims } from "../auth.js";
|
|
3
3
|
import { DEFAULT_KEY_FILE, SERVER_NAME, TOKEN_CACHE_FILE, VERSION } from "../constants.js";
|
|
4
4
|
import { daysUntilKeyExpiry, deleteKeychain, deleteKeyFile, maskKey, readSettings, resolveKey, writeSettings } from "../keystore.js";
|
|
5
|
-
import { claudeDesktopConfigPath } from "./clients.js";
|
|
5
|
+
import { claudeDesktopConfigPath, findDesktopExtension } from "./clients.js";
|
|
6
6
|
import { existsSync, readFileSync, rmSync } from "node:fs";
|
|
7
7
|
export async function runStatus() {
|
|
8
8
|
p.intro(` Garmin Connect MCP · status v${VERSION} `);
|
|
9
9
|
const key = resolveKey();
|
|
10
10
|
if (!key) {
|
|
11
|
+
const ext = findDesktopExtension();
|
|
12
|
+
if (ext) {
|
|
13
|
+
// Extension-only users have no command-line key, and that's fine.
|
|
14
|
+
p.log.info(`No key saved for the command line. ${extensionLine(ext)}`);
|
|
15
|
+
p.outro(ext.enabled && ext.hasKey ? "The extension is set up; fix its key in Claude Desktop → Settings → Extensions if Claude reports a problem." : "Finish setting up the extension in Claude Desktop → Settings → Extensions.");
|
|
16
|
+
return 0;
|
|
17
|
+
}
|
|
11
18
|
p.log.error("No key saved. Run `npx garmin-personal-api-mcp setup`.");
|
|
12
19
|
p.outro("");
|
|
13
20
|
return 1;
|
|
@@ -40,10 +47,22 @@ export async function runStatus() {
|
|
|
40
47
|
}
|
|
41
48
|
const desktop = claudeDesktopConfigPath();
|
|
42
49
|
const inDesktop = existsSync(desktop) && readFileSync(desktop, "utf8").includes(`"${SERVER_NAME}"`);
|
|
43
|
-
|
|
50
|
+
const ext = findDesktopExtension();
|
|
51
|
+
if (ext) {
|
|
52
|
+
p.log.info(`${extensionLine(ext)} It uses the key saved in its own settings, not the one checked above.`);
|
|
53
|
+
if (inDesktop)
|
|
54
|
+
p.log.warn(`Claude Desktop also has a "${SERVER_NAME}" entry in ${desktop}, so Garmin tools appear twice. Remove one of them.`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
p.log.info(`Claude Desktop: ${inDesktop ? "connected" : "not connected"} (${desktop})`);
|
|
58
|
+
}
|
|
44
59
|
p.outro(ok ? "Healthy." : "Fix the key with `npx garmin-personal-api-mcp setup`.");
|
|
45
60
|
return ok ? 0 : 1;
|
|
46
61
|
}
|
|
62
|
+
function extensionLine(ext) {
|
|
63
|
+
const state = !ext.hasKey ? "installed, but no key is set in its settings" : ext.enabled ? "installed and on" : "installed, but switched off";
|
|
64
|
+
return `Claude Desktop extension: v${ext.version}, ${state}.`;
|
|
65
|
+
}
|
|
47
66
|
export function runLogout() {
|
|
48
67
|
const kc = deleteKeychain();
|
|
49
68
|
const file = deleteKeyFile();
|
package/dist/cli/status.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACrI,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cli/status.ts"],"names":[],"mappings":"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","sourcesContent":["import * as p from \"@clack/prompts\";\nimport { exchangeKey, jwtClaims } from \"../auth.js\";\nimport { DEFAULT_KEY_FILE, SERVER_NAME, TOKEN_CACHE_FILE, VERSION } from \"../constants.js\";\nimport { daysUntilKeyExpiry, deleteKeychain, deleteKeyFile, maskKey, readSettings, resolveKey, writeSettings } from \"../keystore.js\";\nimport { claudeDesktopConfigPath, type DesktopExtension, findDesktopExtension } from \"./clients.js\";\nimport { existsSync, readFileSync, rmSync } from \"node:fs\";\n\nexport async function runStatus(): Promise<number> {\n p.intro(` Garmin Connect MCP · status v${VERSION} `);\n const key = resolveKey();\n if (!key) {\n const ext = findDesktopExtension();\n if (ext) {\n // Extension-only users have no command-line key, and that's fine.\n p.log.info(`No key saved for the command line. ${extensionLine(ext)}`);\n p.outro(ext.enabled && ext.hasKey ? \"The extension is set up; fix its key in Claude Desktop → Settings → Extensions if Claude reports a problem.\" : \"Finish setting up the extension in Claude Desktop → Settings → Extensions.\");\n return 0;\n }\n p.log.error(\"No key saved. Run `npx garmin-personal-api-mcp setup`.\");\n p.outro(\"\");\n return 1;\n }\n p.log.info(`Key ${maskKey(key.key)} from ${key.location}`);\n const days = daysUntilKeyExpiry();\n if (days !== undefined) {\n const msg = `Key expires ${readSettings().keyExpiresOn} (${days < 0 ? \"expired\" : `in ${days} days`})`;\n if (days < 0) p.log.error(msg);\n else if (days <= 14) p.log.warn(msg);\n else p.log.info(msg);\n }\n\n const s = p.spinner();\n s.start(\"Checking with Garmin\");\n let ok = true;\n try {\n const t = await exchangeKey(key.key);\n const claims = jwtClaims(t.accessToken);\n s.stop(`Garmin accepted the key · token valid until ${new Date(t.expiresAt).toLocaleString()}`);\n const scope = claims.scope ?? claims.authorities;\n if (scope) p.log.info(`Scopes: ${Array.isArray(scope) ? scope.join(\", \") : String(scope)}`);\n } catch (e) {\n ok = false;\n s.error((e as Error).message);\n }\n\n const desktop = claudeDesktopConfigPath();\n const inDesktop = existsSync(desktop) && readFileSync(desktop, \"utf8\").includes(`\"${SERVER_NAME}\"`);\n const ext = findDesktopExtension();\n if (ext) {\n p.log.info(`${extensionLine(ext)} It uses the key saved in its own settings, not the one checked above.`);\n if (inDesktop) p.log.warn(`Claude Desktop also has a \"${SERVER_NAME}\" entry in ${desktop}, so Garmin tools appear twice. Remove one of them.`);\n } else {\n p.log.info(`Claude Desktop: ${inDesktop ? \"connected\" : \"not connected\"} (${desktop})`);\n }\n p.outro(ok ? \"Healthy.\" : \"Fix the key with `npx garmin-personal-api-mcp setup`.\");\n return ok ? 0 : 1;\n}\n\nfunction extensionLine(ext: DesktopExtension): string {\n const state = !ext.hasKey ? \"installed, but no key is set in its settings\" : ext.enabled ? \"installed and on\" : \"installed, but switched off\";\n return `Claude Desktop extension: v${ext.version}, ${state}.`;\n}\n\nexport function runLogout(): void {\n const kc = deleteKeychain();\n const file = deleteKeyFile();\n if (existsSync(TOKEN_CACHE_FILE)) rmSync(TOKEN_CACHE_FILE);\n writeSettings({});\n console.error(\n kc || file\n ? `Removed the saved key${kc ? \" from the Keychain\" : \"\"}${file ? ` and ${DEFAULT_KEY_FILE}` : \"\"}, and the cached token.\\nAlso delete the key in Garmin Connect (Settings → Personal API) if you no longer need it.`\n : \"No saved key found. Nothing to remove.\",\n );\n}\n"]}
|
package/dist/cli/system.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/cli/system.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"system.js","sourceRoot":"","sources":["../../src/cli/system.ts"],"names":[],"mappings":"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","sourcesContent":["import { spawn, spawnSync } from \"node:child_process\";\n\n/** Opens a URL in the default browser. Resolves false if no opener exists (e.g. SSH session). */\nexport function openUrl(url: string): Promise<boolean> {\n const [cmd, args] =\n process.platform === \"darwin\"\n ? [\"open\", [url]]\n : process.platform === \"win32\"\n ? [\"cmd\", [\"/c\", \"start\", \"\", url]]\n : [\"xdg-open\", [url]];\n return new Promise((resolve) => {\n try {\n const child = spawn(cmd, args as string[], { stdio: \"ignore\", detached: true });\n child.on(\"error\", () => resolve(false));\n child.on(\"spawn\", () => {\n child.unref();\n resolve(true);\n });\n } catch {\n resolve(false);\n }\n });\n}\n\nconst CLIPBOARD_READERS: [string, string[]][] =\n process.platform === \"darwin\"\n ? [[\"pbpaste\", []]]\n : process.platform === \"win32\"\n ? [[\"powershell\", [\"-NoProfile\", \"-Command\", \"Get-Clipboard\"]]]\n : [\n [\"wl-paste\", [\"--no-newline\"]],\n [\"xclip\", [\"-selection\", \"clipboard\", \"-o\"]],\n [\"xsel\", [\"--clipboard\", \"--output\"]],\n ];\n\nexport function readClipboard(): string | undefined {\n for (const [cmd, args] of CLIPBOARD_READERS) {\n const res = spawnSync(cmd, args, { encoding: \"utf8\" });\n if (res.status === 0) return res.stdout.trim() || undefined;\n }\n return undefined;\n}\n\nexport const canReadClipboard = () => CLIPBOARD_READERS.some(([cmd]) => spawnSync(process.platform === \"win32\" ? \"where\" : \"sh\", process.platform === \"win32\" ? [cmd] : [\"-c\", `command -v ${cmd}`]).status === 0);\n\nexport function clearClipboard(): boolean {\n const writers: [string, string[]][] =\n process.platform === \"darwin\"\n ? [[\"pbcopy\", []]]\n : process.platform === \"win32\"\n ? [[\"powershell\", [\"-NoProfile\", \"-Command\", \"Set-Clipboard -Value $null\"]]]\n : [\n [\"wl-copy\", [\"--clear\"]],\n [\"xclip\", [\"-selection\", \"clipboard\"]],\n [\"xsel\", [\"--clipboard\", \"--clear\"]],\n ];\n for (const [cmd, args] of writers) {\n if (spawnSync(cmd, args, { input: \"\" }).status === 0) return true;\n }\n return false;\n}\n\n/** Reads all of stdin (for `pbpaste | garmin-personal-api-mcp setup --key-stdin`). */\nexport async function readStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) chunks.push(chunk as Buffer);\n return Buffer.concat(chunks).toString(\"utf8\").trim();\n}\n"]}
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAsC,CAAC;AAE5E,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,wCAAwC,CAAC;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3G,MAAM,CAAC,MAAM,UAAU,GAAG,+DAA+D,CAAC;AAE1F,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,0DAA0D,CAAC;AACvF,MAAM,CAAC,MAAM,QAAQ,GAAG,yEAAyE,CAAC;AAElG,MAAM,CAAC,MAAM,eAAe,GAAG,yBAAyB,CAAC;AACzD,4FAA4F;AAC5F,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACpD,gGAAgG;AAChG,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AAEzE,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;AACjG,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;AACrH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,iEAAiE;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAsC,CAAC;AAE5E,MAAM,CAAC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;AACrC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAE5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,wCAAwC,CAAC;AACzE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3G,MAAM,CAAC,MAAM,UAAU,GAAG,+DAA+D,CAAC;AAE1F,+DAA+D;AAC/D,MAAM,CAAC,MAAM,YAAY,GAAG,0DAA0D,CAAC;AACvF,MAAM,CAAC,MAAM,QAAQ,GAAG,yEAAyE,CAAC;AAElG,MAAM,CAAC,MAAM,eAAe,GAAG,yBAAyB,CAAC;AACzD,4FAA4F;AAC5F,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACpD,gGAAgG;AAChG,MAAM,CAAC,MAAM,sBAAsB,GAAG,kCAAkC,CAAC;AAEzE,8FAA8F;AAC9F,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;AACjG,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,yBAAyB,CAAC,CAAC;AACrH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAC;AAC9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,yBAAyB,CAAC;AAE1D,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AACzC,iEAAiE;AACjE,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACtD,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC","sourcesContent":["import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\nimport { createRequire } from \"node:module\";\n\nconst require = createRequire(import.meta.url);\nconst pkg = require(\"../package.json\") as { name: string; version: string };\n\nexport const PACKAGE_NAME = pkg.name;\nexport const VERSION = pkg.version;\nexport const SERVER_NAME = \"garmin-connect\";\n\nexport const DEFAULT_BASE_URL = \"https://personal.connectapi.garmin.com\";\nexport const BASE_URL = (process.env.GARMIN_PERSONAL_API_BASE_URL ?? DEFAULT_BASE_URL).replace(/\\/+$/, \"\");\nexport const TOKEN_PATH = \"/personalapitoken-service/personal-api/personal-api-key/token\";\n\n/** Where Garmin Connect lets you create a Personal API key. */\nexport const KEY_PAGE_URL = \"https://connect.garmin.com/app/settings/personalApiToken\";\nexport const DOCS_URL = \"https://developer.garmin.com/gc-developer-program/personal/personal-api\";\n\nexport const API_KEY_ENV_VAR = \"GARMIN_PERSONAL_API_KEY\";\n/** manifest.json sets this to \"mcpb\" when Claude Desktop runs us as a desktop extension. */\nexport const RUNTIME_ENV_VAR = \"GARMIN_MCP_RUNTIME\";\n/** Shown in Claude Desktop's extension list; keep in sync with manifest.json `display_name`. */\nexport const EXTENSION_DISPLAY_NAME = \"Personal Data for Garmin Connect\";\n\n/** Same default path as Garmin's official Python client, so either tool can reuse the key. */\nexport const DEFAULT_KEY_FILE = join(homedir(), \".config\", \"garmin\", \"connect-personal-api-key\");\nexport const CONFIG_DIR = process.env.GARMIN_MCP_CONFIG_DIR ?? join(homedir(), \".config\", \"garmin-personal-api-mcp\");\nexport const TOKEN_CACHE_FILE = join(CONFIG_DIR, \"token.json\");\nexport const SETTINGS_FILE = join(CONFIG_DIR, \"settings.json\");\n\nexport const KEYCHAIN_SERVICE = \"garmin-connect-personal-api\";\nexport const KEYCHAIN_ACCOUNT = \"garmin-personal-api-mcp\";\n\nexport const REQUEST_TIMEOUT_MS = 30_000;\n/** Refresh the 24 h bearer token when less than this remains. */\nexport const TOKEN_REFRESH_WINDOW_MS = 60 * 60 * 1000;\nexport const CHARACTER_LIMIT = 25_000;\n"]}
|
package/dist/fit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fit.js","sourceRoot":"","sources":["../src/fit.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fit.js","sourceRoot":"","sources":["../src/fit.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Turns the original activity file (a ZIP holding a .fit) into per-distance splits,\n * laps and a pacing analysis, using Garmin's own FIT SDK.\n */\nimport { unzipSync } from \"fflate\";\nimport { Decoder, Stream } from \"@garmin/fitsdk\";\n\nexport interface FitRecord {\n t: number; // epoch ms\n dist?: number; // metres\n hr?: number;\n cad?: number; // steps/min for running, rpm otherwise\n alt?: number; // metres\n}\n\nexport interface Split {\n index: number;\n distance_m: number;\n moving_s: number;\n pace_s_per_km: number;\n avg_hr?: number;\n max_hr?: number;\n avg_cadence?: number;\n elev_gain_m?: number;\n partial: boolean;\n}\n\nexport interface Lap {\n index: number;\n distance_m: number;\n timer_s: number;\n pace_s_per_km?: number;\n avg_hr?: number;\n max_hr?: number;\n}\n\nexport interface Session {\n sport?: string;\n sub_sport?: string;\n start_time?: string;\n distance_m?: number;\n timer_s?: number;\n elapsed_s?: number;\n avg_hr?: number;\n max_hr?: number;\n avg_cadence?: number;\n total_ascent_m?: number;\n calories?: number;\n training_effect_aerobic?: number;\n training_effect_anaerobic?: number;\n}\n\nexport interface PacingAnalysis {\n first_split_pace_s_per_km: number;\n last_split_pace_s_per_km: number;\n fastest_split: number;\n slowest_split: number;\n /** Second half minus first half average pace, s/km. Positive means you slowed down. */\n half_split_delta_s_per_km: number;\n /** Coefficient of variation of full-split paces, %. Under ~3% is very even. */\n pace_variability_pct: number;\n verdict: string;\n}\n\nexport interface FitSummary {\n session?: Session;\n splits: Split[];\n laps: Lap[];\n pacing?: PacingAnalysis;\n /** Seconds removed from split times because the device was stopped. */\n paused_s: number;\n record_count: number;\n}\n\n/** Pulls the first .fit out of Garmin's download ZIP. Accepts a bare .fit too. */\nexport function extractFit(bytes: Uint8Array): Uint8Array {\n if (bytes[0] === 0x50 && bytes[1] === 0x4b) {\n const files = unzipSync(bytes);\n const name = Object.keys(files).find((n) => n.toLowerCase().endsWith(\".fit\"));\n if (!name) {\n const names = Object.keys(files).join(\", \") || \"nothing\";\n throw new Error(`The activity download has no .fit file (it contains ${names}). Manually uploaded GPX/TCX activities can't be split.`);\n }\n return files[name];\n }\n return bytes;\n}\n\ntype Mesg = Record<string, unknown>;\nconst num = (v: unknown) => (typeof v === \"number\" && Number.isFinite(v) ? v : undefined);\nconst time = (v: unknown) => (v instanceof Date ? v.getTime() : undefined);\n\nexport function decodeFit(fit: Uint8Array): Record<string, Mesg[]> {\n const stream = Stream.fromArrayBuffer(fit.slice().buffer);\n if (!Decoder.isFIT(stream)) throw new Error(\"The file is not a FIT file.\");\n // includeUnknownData keeps Garmin's undocumented messages (e.g. 140, 79), keyed by message number.\n const { messages, errors } = new Decoder(stream).read({ convertDateTimesToDates: true, expandSubFields: true, expandComponents: true, mergeHeartRates: true, includeUnknownData: true });\n if (errors.length && !messages.recordMesgs?.length) {\n throw new Error(`Could not decode the FIT file: ${String(errors[0])}`);\n }\n return messages as unknown as Record<string, Mesg[]>;\n}\n\nexport function summarizeFit(fit: Uint8Array, splitMeters = 1000): FitSummary {\n const m = decodeFit(fit);\n const s = (m.sessionMesgs ?? [])[0];\n const sport = typeof s?.sport === \"string\" ? s.sport : undefined;\n const running = sport === \"running\" || sport === \"walking\" || sport === \"hiking\";\n\n const records: FitRecord[] = (m.recordMesgs ?? [])\n .map((r) => {\n const cad = num(r.cadence);\n return {\n t: time(r.timestamp) ?? NaN,\n dist: num(r.distance),\n hr: num(r.heartRate),\n // FIT stores running cadence per leg; double it to the familiar steps/min.\n cad: cad === undefined ? undefined : running ? (cad + (num(r.fractionalCadence) ?? 0)) * 2 : cad,\n alt: num(r.enhancedAltitude) ?? num(r.altitude),\n };\n })\n .filter((r) => Number.isFinite(r.t));\n\n const { splits, pausedS } = computeSplits(records, splitMeters, timerPauses(m.eventMesgs ?? []));\n\n const laps: Lap[] = (m.lapMesgs ?? []).map((l, i) => {\n const d = num(l.totalDistance) ?? 0;\n const t = num(l.totalTimerTime) ?? 0;\n return {\n index: i + 1,\n distance_m: round(d, 1),\n timer_s: round(t, 1),\n pace_s_per_km: d > 0 ? round((t / d) * 1000, 1) : undefined,\n avg_hr: num(l.avgHeartRate),\n max_hr: num(l.maxHeartRate),\n };\n });\n\n const session: Session | undefined = s && {\n sport,\n sub_sport: typeof s.subSport === \"string\" ? s.subSport : undefined,\n start_time: s.startTime instanceof Date ? s.startTime.toISOString() : undefined,\n distance_m: num(s.totalDistance),\n timer_s: num(s.totalTimerTime),\n elapsed_s: num(s.totalElapsedTime),\n avg_hr: num(s.avgHeartRate),\n max_hr: num(s.maxHeartRate),\n avg_cadence: running ? mul(num(s.avgRunningCadence) ?? num(s.avgCadence), 2) : num(s.avgCadence),\n total_ascent_m: num(s.totalAscent),\n calories: num(s.totalCalories),\n training_effect_aerobic: num(s.totalTrainingEffect),\n training_effect_anaerobic: num(s.totalAnaerobicTrainingEffect),\n };\n\n return { session, splits, laps, pacing: analysePacing(splits), paused_s: round(pausedS, 1), record_count: records.length };\n}\n\n/**\n * Garmin's own per-activity physiology, from two undocumented FIT messages its watches write:\n * 79 \"user metrics\": field 17 = VO2 max going into the activity\n * 140 \"physiological metrics\": 7 = VO2 max after it, 27 > 0 only when the activity produced a new\n * VO2 max reading, 4/20 = aerobic/anaerobic training effect x10, 9 = recovery time (min),\n * 17 = performance condition\n * VO2 max is stored as METs x 65536; x 3.5 gives ml/kg/min. VO2 max and training effect were checked\n * against Garmin Connect; recovery time and performance condition follow community decoders and are unverified.\n */\nexport interface PerformanceMetrics {\n sport?: string;\n sub_sport?: string;\n start_time?: string;\n vo2max_before?: number;\n vo2max_after?: number;\n /** True when Garmin computed a VO2 max from this activity (a dot on its VO2 max chart). */\n new_vo2max_reading: boolean;\n recovery_time_h?: number;\n training_effect_aerobic?: number;\n training_effect_anaerobic?: number;\n performance_condition?: number;\n}\n\nconst vo2 = (raw: unknown) => {\n const v = num(raw);\n return v ? round((v * 3.5) / 65536, 2) : undefined;\n};\n\nexport function performanceMetrics(m: Record<string, Mesg[]>): PerformanceMetrics {\n const s = (m.sessionMesgs ?? [])[0];\n const p = (m[\"140\"] ?? [])[0] ?? {};\n const u = (m[\"79\"] ?? [])[0] ?? {};\n const sport = typeof s?.sport === \"string\" ? s.sport : undefined;\n const tenths = (v: unknown) => (num(v) === undefined ? undefined : round(num(v)! / 10, 1));\n const recovery = num(p[9]);\n return {\n sport,\n sub_sport: typeof s?.subSport === \"string\" ? s.subSport : undefined,\n start_time: s?.startTime instanceof Date ? s.startTime.toISOString() : undefined,\n vo2max_before: vo2(u[17]),\n vo2max_after: vo2(p[7]),\n new_vo2max_reading: (num(p[27]) ?? 0) > 0,\n recovery_time_h: recovery ? round(recovery / 60, 1) : undefined,\n training_effect_aerobic: num(s?.totalTrainingEffect) ?? tenths(p[4]),\n training_effect_anaerobic: num(s?.totalAnaerobicTrainingEffect) ?? tenths(p[20]),\n // Garmin only shows performance condition on runs; 0 elsewhere means \"not measured\".\n performance_condition: sport === \"running\" ? num(p[17]) : undefined,\n };\n}\n\nconst mul = (v: number | undefined, k: number) => (v === undefined ? undefined : v * k);\nconst round = (v: number, dp = 0) => Math.round(v * 10 ** dp) / 10 ** dp;\n\n/** [stopMs, startMs] windows from timer stop/start events (manual or auto-pause). */\nexport function timerPauses(events: Mesg[]): [number, number][] {\n const out: [number, number][] = [];\n let stoppedAt: number | undefined;\n for (const e of events) {\n if (e.event !== \"timer\") continue;\n const t = time(e.timestamp);\n if (t === undefined) continue;\n const type = String(e.eventType);\n if (type.startsWith(\"stop\") && stoppedAt === undefined) stoppedAt = t;\n else if (type === \"start\" && stoppedAt !== undefined) {\n out.push([stoppedAt, t]);\n stoppedAt = undefined;\n }\n }\n return out;\n}\n\n/**\n * Splits by distance with linear interpolation at each boundary, so a 1 km split ends\n * exactly at 1000 m rather than at the nearest record. Paused time is excluded using the\n * timer events when present, otherwise any gap over 10 s with under 2 m of movement.\n */\nexport function computeSplits(records: FitRecord[], splitMeters: number, pauses: [number, number][] = []): { splits: Split[]; pausedS: number } {\n const pts = records.filter((r) => r.dist !== undefined) as (FitRecord & { dist: number })[];\n if (pts.length < 2) return { splits: [], pausedS: 0 };\n\n // Moving clock: real time minus paused time, so pace reflects running only.\n // The first record usually lands a few metres in; back-extrapolate to 0 m at the same\n // speed so split 1 covers the full distance.\n const d01 = pts[1].dist - pts[0].dist;\n const lead = pts[0].dist > 0 && pts[0].dist < 50 && d01 > 0 ? (pts[0].dist * (pts[1].t - pts[0].t)) / 1000 / d01 : 0;\n const moving: number[] = [lead];\n let pausedS = 0;\n for (let i = 1; i < pts.length; i++) {\n const a = pts[i - 1];\n const b = pts[i];\n let dt = (b.t - a.t) / 1000;\n let paused = 0;\n if (pauses.length) {\n for (const [ps, pe] of pauses) paused += Math.max(0, Math.min(b.t, pe) - Math.max(a.t, ps)) / 1000;\n } else if (dt > 10 && b.dist - a.dist < 2) {\n paused = dt;\n }\n paused = Math.min(paused, dt);\n pausedS += paused;\n dt -= paused;\n moving.push(moving[i - 1] + dt);\n }\n\n const splits: Split[] = [];\n let boundary = splitMeters;\n let startIdx = 0;\n let startMoving = 0;\n let startDist = lead > 0 ? 0 : pts[0].dist;\n const total = pts[pts.length - 1].dist;\n\n const finish = (endIdx: number, endMoving: number, endDist: number, partial: boolean) => {\n const seg = pts.slice(startIdx, endIdx + 1);\n const hrs = seg.map((r) => r.hr).filter((v): v is number => v !== undefined);\n const cads = seg.map((r) => r.cad).filter((v): v is number => v !== undefined && v > 0);\n let gain = 0;\n let hasAlt = false;\n for (let j = 1; j < seg.length; j++) {\n const a = seg[j - 1].alt;\n const b = seg[j].alt;\n if (a !== undefined && b !== undefined) {\n hasAlt = true;\n if (b > a) gain += b - a;\n }\n }\n const d = endDist - startDist;\n const t = endMoving - startMoving;\n if (d < 1 || t <= 0) return;\n splits.push({\n index: splits.length + 1,\n distance_m: round(d, 1),\n moving_s: round(t, 1),\n pace_s_per_km: round((t / d) * 1000, 1),\n avg_hr: hrs.length ? Math.round(hrs.reduce((x, y) => x + y, 0) / hrs.length) : undefined,\n max_hr: hrs.length ? Math.max(...hrs) : undefined,\n avg_cadence: cads.length ? Math.round(cads.reduce((x, y) => x + y, 0) / cads.length) : undefined,\n elev_gain_m: hasAlt ? round(gain, 1) : undefined,\n partial,\n });\n };\n\n for (let i = 1; i < pts.length; i++) {\n const a = pts[i - 1];\n const b = pts[i];\n while (b.dist >= boundary && a.dist < boundary) {\n const f = (boundary - a.dist) / (b.dist - a.dist);\n const tAt = moving[i - 1] + f * (moving[i] - moving[i - 1]);\n finish(i, tAt, boundary, false);\n startIdx = i;\n startMoving = tAt;\n startDist = boundary;\n boundary += splitMeters;\n }\n }\n // Remainder, ignored when it's GPS noise after stopping.\n if (total - startDist >= Math.min(50, splitMeters * 0.05)) finish(pts.length - 1, moving[pts.length - 1], total, true);\n return { splits, pausedS };\n}\n\nexport function analysePacing(splits: Split[]): PacingAnalysis | undefined {\n const full = splits.filter((s) => !s.partial);\n if (full.length < 2) return undefined;\n const paces = full.map((s) => s.pace_s_per_km);\n const mean = paces.reduce((a, b) => a + b, 0) / paces.length;\n const sd = Math.sqrt(paces.reduce((a, b) => a + (b - mean) ** 2, 0) / paces.length);\n const half = Math.floor(paces.length / 2);\n const avg = (xs: number[]) => xs.reduce((a, b) => a + b, 0) / xs.length;\n const firstHalf = avg(paces.slice(0, half));\n const secondHalf = avg(paces.slice(paces.length - half));\n const delta = secondHalf - firstHalf;\n const cv = (sd / mean) * 100;\n const fastest = full[paces.indexOf(Math.min(...paces))].index;\n const slowest = full[paces.indexOf(Math.max(...paces))].index;\n\n let verdict: string;\n if (cv < 3 && Math.abs(delta) < 8) verdict = \"Even pacing.\";\n else if (delta <= -8) verdict = \"Negative split: the second half was faster.\";\n else if (delta >= 30 || (fastest === 1 && slowest === full[full.length - 1].index && delta >= 15))\n verdict = \"Went out too fast: big fade in the second half.\";\n else if (delta >= 8) verdict = \"Positive split: slowed through the run.\";\n else verdict = \"Uneven pacing without a clear trend (hills, traffic lights or intervals?).\";\n\n return {\n first_split_pace_s_per_km: paces[0],\n last_split_pace_s_per_km: paces[paces.length - 1],\n fastest_split: fastest,\n slowest_split: slowest,\n half_split_delta_s_per_km: round(delta, 1),\n pace_variability_pct: round(cv, 1),\n verdict,\n };\n}\n\nexport function fmtPace(sPerKm: number | undefined): string {\n if (sPerKm === undefined || !Number.isFinite(sPerKm)) return \"–\";\n const r = Math.round(sPerKm);\n return `${Math.floor(r / 60)}:${String(r % 60).padStart(2, \"0\")}/km`;\n}\n\nexport function fmtDuration(s: number | undefined): string {\n if (s === undefined || !Number.isFinite(s)) return \"–\";\n const r = Math.round(s);\n const h = Math.floor(r / 3600);\n const m = Math.floor((r % 3600) / 60);\n const sec = r % 60;\n return h ? `${h}:${String(m).padStart(2, \"0\")}:${String(sec).padStart(2, \"0\")}` : `${m}:${String(sec).padStart(2, \"0\")}`;\n}\n"]}
|
package/dist/format.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"format.js","sourceRoot":"","sources":["../src/format.ts"],"names":[],"mappings":"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","sourcesContent":["import { CHARACTER_LIMIT } from \"./constants.js\";\nimport type { Json } from \"./api.js\";\nimport { fmtDuration, fmtPace } from \"./fit.js\";\n\ntype Obj = { [k: string]: Json };\nexport const isObj = (v: unknown): v is Obj => !!v && typeof v === \"object\" && !Array.isArray(v);\n\n/** Drops null/undefined/empty-string fields recursively; keeps zeros and false. */\nexport function compact(v: Json): Json {\n if (Array.isArray(v)) return v.map(compact);\n if (isObj(v)) {\n const out: Obj = {};\n for (const [k, x] of Object.entries(v)) {\n if (x === null || x === undefined || x === \"\") continue;\n out[k] = compact(x);\n }\n return out;\n }\n return v;\n}\n\n/**\n * Keeps a JSON payload under CHARACTER_LIMIT without cutting text mid-structure:\n * long arrays (usually per-minute samples) are evenly downsampled, halving until it fits.\n */\nexport function fitJson(value: Json, limit = CHARACTER_LIMIT): { value: Json; text: string; downsampled: boolean } {\n let v = compact(value);\n let text = JSON.stringify(v);\n if (text.length <= limit) return { value: v, text, downsampled: false };\n for (let cap = 512; cap >= 4; cap = Math.floor(cap / 2)) {\n v = downsample(compact(value), cap);\n text = JSON.stringify(v);\n if (text.length <= limit) return { value: v, text, downsampled: true };\n }\n throw new Error(\n \"The response is too large even after downsampling. Ask for a shorter date range, or use a summary tool such as garmin_get_daily_summaries.\",\n );\n}\n\nfunction downsample(v: Json, cap: number): Json {\n if (Array.isArray(v)) {\n const arr = v.length > cap ? Array.from({ length: cap }, (_, i) => v[Math.floor((i * v.length) / cap)]) : v;\n return arr.map((x) => downsample(x, cap));\n }\n if (isObj(v)) return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, downsample(x, cap)]));\n return v;\n}\n\nexport function jsonResult(value: Json, note?: string) {\n const { text, downsampled } = fitJson(value);\n const notes = [note, downsampled ? \"Long sample arrays were evenly downsampled to fit; ask for a single day for full resolution.\" : undefined]\n .filter(Boolean)\n .join(\" \");\n return { content: [{ type: \"text\" as const, text: notes ? `${notes}\\n\\n${text}` : text }] };\n}\n\nexport const textResult = (text: string) => ({ content: [{ type: \"text\" as const, text }] });\n\n// ---- Activity summaries (field names as returned by Garmin Connect's activity list) ----\n\nconst g = (o: Obj, k: string) => o[k];\nconst n = (v: Json | undefined) => (typeof v === \"number\" && Number.isFinite(v) ? v : undefined);\nconst str = (v: Json | undefined) => (typeof v === \"string\" ? v : undefined);\n\nexport interface ActivitySummary {\n activity_id: number | string;\n name?: string;\n type?: string;\n start_local?: string;\n distance_km?: number;\n duration?: string;\n moving_time?: string;\n avg_pace?: string;\n avg_hr?: number;\n max_hr?: number;\n elevation_gain_m?: number;\n calories?: number;\n avg_cadence?: number;\n training_effect?: number;\n}\n\nexport function summarizeActivity(raw: Json): ActivitySummary | undefined {\n if (!isObj(raw)) return undefined;\n const id = g(raw, \"activityId\");\n if (typeof id !== \"number\" && typeof id !== \"string\") return undefined;\n const summary = isObj(raw.summaryDTO) ? raw.summaryDTO : raw; // detail endpoint nests stats\n const type = isObj(raw.activityType) ? str(raw.activityType.typeKey) : isObj(raw.activityTypeDTO) ? str(raw.activityTypeDTO.typeKey) : undefined;\n const dist = n(g(summary, \"distance\"));\n const dur = n(g(summary, \"duration\"));\n const moving = n(g(summary, \"movingDuration\"));\n const speed = n(g(summary, \"averageSpeed\"));\n const isFoot = !!type && /run|walk|hik|trail|treadmill/.test(type);\n return {\n activity_id: id,\n name: str(raw.activityName),\n type,\n start_local: str(g(summary, \"startTimeLocal\")) ?? str(raw.startTimeLocal),\n distance_km: dist !== undefined ? Math.round(dist / 10) / 100 : undefined,\n duration: dur !== undefined ? fmtDuration(dur) : undefined,\n moving_time: moving !== undefined ? fmtDuration(moving) : undefined,\n avg_pace: isFoot && speed ? fmtPace(1000 / speed) : undefined,\n avg_hr: n(g(summary, \"averageHR\")),\n max_hr: n(g(summary, \"maxHR\")),\n elevation_gain_m: n(g(summary, \"elevationGain\")),\n calories: n(g(summary, \"calories\")),\n avg_cadence: n(g(summary, \"averageRunningCadenceInStepsPerMinute\")) ?? n(g(summary, \"averageRunCadence\")),\n training_effect: n(g(summary, \"aerobicTrainingEffect\")) ?? n(g(summary, \"trainingEffect\")),\n };\n}\n\nexport function activityLine(a: ActivitySummary): string {\n const bits = [\n a.distance_km !== undefined ? `${a.distance_km} km` : undefined,\n a.duration,\n a.avg_pace,\n a.avg_hr ? `avg HR ${a.avg_hr}` : undefined,\n a.elevation_gain_m ? `+${Math.round(a.elevation_gain_m)} m` : undefined,\n ].filter(Boolean);\n return `- **${a.name ?? \"Untitled\"}** (${a.type ?? \"activity\"}, ${a.start_local ?? \"?\"}) · id ${a.activity_id}\\n ${bits.join(\" · \")}`;\n}\n"]}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,IAAI,GAAG,2BAA2B,OAAO;;;;;;;;;;;;;;sGAcuD,CAAC;AAEvG,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1C,CAAC,CAAC;IAEF,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,EAAE,CAAC;YACb,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACnD,UAAU,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,KAAK,OAAO,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACnH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpD,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAA0C,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACpI,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACtD,SAAS,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,KAAK,IAAI,CAAC;QACV,KAAK,WAAW;YACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO;QACT,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAEzC,MAAM,IAAI,GAAG,2BAA2B,OAAO;;;;;;;;;;;;;;sGAcuD,CAAC;AAEvG,KAAK,UAAU,IAAI;IACjB,MAAM,CAAC,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,EAAE;QAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1C,CAAC,CAAC;IAEF,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,EAAE,CAAC;YACb,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACnD,UAAU,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QACD,KAAK,OAAO,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,KAAK,UAAU,IAAI,OAAO,KAAK,MAAM;gBAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;YACnH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC;YACpD,MAAM,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,OAA0C,EAAE,SAAS,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;YACpI,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,MAAM,SAAS,EAAE,CAAC;YACrC,OAAO;QACT,CAAC;QACD,KAAK,QAAQ,EAAE,CAAC;YACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACtD,SAAS,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,KAAK,IAAI,CAAC;QACV,KAAK,WAAW;YACd,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrB,OAAO;QACT,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAClB,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,oBAAoB,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC;YACtD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IAC5B,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n/**\n * garmin-personal-api-mcp\n * (no args) | serve start the MCP server on stdio (what Claude runs)\n * setup interactive wizard: create, verify and save your key; connect apps\n * status check the saved key against Garmin\n * logout remove the saved key and token cache\n */\nimport { VERSION } from \"./constants.js\";\n\nconst HELP = `garmin-personal-api-mcp ${VERSION}\nMCP server for your own Garmin Connect data, via Garmin's official Personal API.\n\nUsage:\n npx garmin-personal-api-mcp setup Interactive setup: key + connect Claude\n npx garmin-personal-api-mcp status Check the saved key still works\n npx garmin-personal-api-mcp logout Remove the saved key\n npx garmin-personal-api-mcp Run the server on stdio (used by MCP clients)\n\nSetup flags:\n --key-stdin Read the key from stdin (e.g. pbpaste | ... setup --key-stdin)\n --storage <kind> keychain | file\n --no-clients Don't register with any apps\n\nKey lookup order: $GARMIN_PERSONAL_API_KEY, macOS Keychain, ~/.config/garmin/connect-personal-api-key`;\n\nasync function main(): Promise<void> {\n const [cmd = \"serve\", ...rest] = process.argv.slice(2);\n const flag = (name: string) => rest.includes(`--${name}`);\n const value = (name: string) => {\n const i = rest.indexOf(`--${name}`);\n return i >= 0 ? rest[i + 1] : undefined;\n };\n\n switch (cmd) {\n case \"serve\": {\n const { startStdio } = await import(\"./server.js\");\n startStdio();\n return;\n }\n case \"setup\": {\n const storage = value(\"storage\");\n if (storage && storage !== \"keychain\" && storage !== \"file\") throw new Error(\"--storage must be keychain or file\");\n const { runSetup } = await import(\"./cli/setup.js\");\n await runSetup({ keyStdin: flag(\"key-stdin\"), storage: storage as \"keychain\" | \"file\" | undefined, noClients: flag(\"no-clients\") });\n return;\n }\n case \"status\": {\n const { runStatus } = await import(\"./cli/status.js\");\n process.exitCode = await runStatus();\n return;\n }\n case \"logout\": {\n const { runLogout } = await import(\"./cli/status.js\");\n runLogout();\n return;\n }\n case \"-v\":\n case \"--version\":\n console.log(VERSION);\n return;\n case \"-h\":\n case \"--help\":\n case \"help\":\n console.log(HELP);\n return;\n default:\n console.error(`Unknown command \"${cmd}\".\\n\\n${HELP}`);\n process.exitCode = 2;\n }\n}\n\nmain().catch((err: unknown) => {\n console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);\n process.exit(1);\n});\n"]}
|
package/dist/keystore.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keystore.js","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keystore.js","sourceRoot":"","sources":["../src/keystore.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Where the Personal API key lives. Lookup order:\n * 1. GARMIN_PERSONAL_API_KEY environment variable\n * 2. macOS Keychain (written by `garmin-personal-api-mcp setup`)\n * 3. ~/.config/garmin/connect-personal-api-key (shared with Garmin's official Python client)\n */\nimport { spawnSync } from \"node:child_process\";\nimport { chmodSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport {\n API_KEY_ENV_VAR,\n CONFIG_DIR,\n DEFAULT_KEY_FILE,\n EXTENSION_DISPLAY_NAME,\n KEY_PAGE_URL,\n KEYCHAIN_ACCOUNT,\n KEYCHAIN_SERVICE,\n RUNTIME_ENV_VAR,\n SETTINGS_FILE,\n} from \"./constants.js\";\n\nexport type KeySource = \"env\" | \"keychain\" | \"file\";\n\nexport interface ResolvedKey {\n key: string;\n source: KeySource;\n location: string;\n}\n\nexport interface Settings {\n storage?: Exclude<KeySource, \"env\">;\n /** ISO date the user said the key expires, for reminders. */\n keyExpiresOn?: string;\n setupAt?: string;\n}\n\n/** True when Claude Desktop runs us as a desktop extension, where the key comes from its settings, not `setup`. */\nexport const isExtension = (): boolean => process.env[RUNTIME_ENV_VAR] === \"mcpb\";\n\n/** How the user replaces a missing or rejected key, phrased for where we're running. Completes \"Ask the user to …\". */\nexport function keyFixHint(): string {\n return isExtension()\n ? `open Claude Desktop → Settings → Extensions → ${EXTENSION_DISPLAY_NAME}, and paste a new key created at ${KEY_PAGE_URL}`\n : \"run `npx garmin-personal-api-mcp setup` in a terminal to add a new key\";\n}\n\n/** Appended to key errors: without it the model goes looking for the data in a browser instead of telling the user. */\nexport const KEY_STOP_NOTE = \"Only the user can fix this: tell them, and don't try to get the data another way (such as a browser).\";\n\nexport const keychainAvailable = (): boolean =>\n process.platform === \"darwin\" && existsSync(\"/usr/bin/security\");\n\nfunction runSecurity(args: string[], input?: string) {\n return spawnSync(\"/usr/bin/security\", args, { input, encoding: \"utf8\" });\n}\n\nexport function readKeychain(): string | undefined {\n if (!keychainAvailable()) return undefined;\n const res = runSecurity([\"find-generic-password\", \"-a\", KEYCHAIN_ACCOUNT, \"-s\", KEYCHAIN_SERVICE, \"-w\"]);\n const value = res.status === 0 ? res.stdout.trim() : \"\";\n return value || undefined;\n}\n\n/**\n * Writes via `security -i` (commands on stdin) so the key never appears in the\n * process list the way a `-w <key>` argument would.\n */\nexport function writeKeychain(key: string): void {\n const escaped = key.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n const cmd = `add-generic-password -U -a \"${KEYCHAIN_ACCOUNT}\" -s \"${KEYCHAIN_SERVICE}\" -l \"Garmin Connect Personal API key\" -w \"${escaped}\"\\n`;\n const res = runSecurity([\"-i\"], cmd);\n if (res.status !== 0 || /error/i.test(res.stderr)) {\n throw new Error(`Could not save the key to the macOS Keychain: ${res.stderr.trim() || `exit ${res.status}`}`);\n }\n}\n\nexport function deleteKeychain(): boolean {\n if (!keychainAvailable()) return false;\n return runSecurity([\"delete-generic-password\", \"-a\", KEYCHAIN_ACCOUNT, \"-s\", KEYCHAIN_SERVICE]).status === 0;\n}\n\nexport function readKeyFile(path = DEFAULT_KEY_FILE): string | undefined {\n try {\n const value = readFileSync(path, \"utf8\").trim();\n return value || undefined;\n } catch {\n return undefined;\n }\n}\n\nexport function writeKeyFile(key: string, path = DEFAULT_KEY_FILE): void {\n mkdirSync(dirname(path), { recursive: true, mode: 0o700 });\n writeFileSync(path, `${key}\\n`, { mode: 0o600 });\n chmodSync(path, 0o600);\n}\n\nexport function deleteKeyFile(path = DEFAULT_KEY_FILE): boolean {\n if (!existsSync(path)) return false;\n rmSync(path);\n return true;\n}\n\nexport function resolveKey(): ResolvedKey | undefined {\n const env = process.env[API_KEY_ENV_VAR]?.trim();\n if (env) return { key: env, source: \"env\", location: `$${API_KEY_ENV_VAR}` };\n const kc = readKeychain();\n if (kc) return { key: kc, source: \"keychain\", location: `macOS Keychain (${KEYCHAIN_SERVICE})` };\n const file = readKeyFile();\n if (file) return { key: file, source: \"file\", location: DEFAULT_KEY_FILE };\n return undefined;\n}\n\nexport function readSettings(): Settings {\n try {\n return JSON.parse(readFileSync(SETTINGS_FILE, \"utf8\")) as Settings;\n } catch {\n return {};\n }\n}\n\nexport function writeSettings(settings: Settings): void {\n mkdirSync(CONFIG_DIR, { recursive: true, mode: 0o700 });\n writeFileSync(SETTINGS_FILE, JSON.stringify(settings, null, 2), { mode: 0o600 });\n}\n\n/** Days until the key expires, or undefined if unknown. Negative once expired. */\nexport function daysUntilKeyExpiry(settings = readSettings(), now = new Date()): number | undefined {\n if (!settings.keyExpiresOn) return undefined;\n const ms = new Date(`${settings.keyExpiresOn}T23:59:59`).getTime() - now.getTime();\n return Math.floor(ms / 86_400_000);\n}\n\n/** Masked preview such as `gk_a1…9f2c`, safe to print. */\nexport function maskKey(key: string): string {\n if (key.length <= 10) return \"•\".repeat(key.length);\n return `${key.slice(0, 4)}…${key.slice(-4)}`;\n}\n"]}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAkB,UAAU,EAAE,MAAM,eAAe,CAAC;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,SAAS,YAAY;IACnB,OAAO,WAAW,EAAE;QAClB,CAAC,CAAC,wEAAwE,UAAU,EAAE,KAAK,aAAa,EAAE;QAC1G,CAAC,CAAC,2MAA2M,GAAG,aAAa,CAAC;AAClO,CAAC;AAED,6FAA6F;AAC7F,SAAS,MAAM;IACb,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,iIAAiI;AACjI,MAAM,UAAU,aAAa,CAAC,MAA6B,EAAE,IAAwB;IACnF,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC9E,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,gDAAgD,UAAU,EAAE,GAAG,CAAC;IACrF,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,uBAAuB,IAAI,yCAAyC,UAAU,EAAE,GAAG,CAAC;IAC1G,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EACvC;QACE,YAAY,EACV,+pBAA+pB;YAC/pB,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;KAC5D,CACF,CAAC;IACF,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,UAAU,CAAC,YAAY,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,oBAAoB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1H,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,UAAU,EAAkB,UAAU,EAAE,MAAM,eAAe,CAAC;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,SAAS,YAAY;IACnB,OAAO,WAAW,EAAE;QAClB,CAAC,CAAC,wEAAwE,UAAU,EAAE,KAAK,aAAa,EAAE;QAC1G,CAAC,CAAC,2MAA2M,GAAG,aAAa,CAAC;AAClO,CAAC;AAED,6FAA6F;AAC7F,SAAS,MAAM;IACb,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC,CAAC;IAC5C,OAAO,KAAK,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,iIAAiI;AACjI,MAAM,UAAU,aAAa,CAAC,MAA6B,EAAE,IAAwB;IACnF,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,KAAK,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC9E,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,gDAAgD,UAAU,EAAE,GAAG,CAAC;IACrF,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO,uBAAuB,IAAI,yCAAyC,UAAU,EAAE,GAAG,CAAC;IAC1G,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;AAE1D,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,IAAI,SAAS,CAC1B,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EACvC;QACE,YAAY,EACV,+pBAA+pB;YAC/pB,aAAa,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;KAC5D,CACF,CAAC;IACF,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,UAAU,CAAC,YAAY,CAAC,CAAC;IACzB,MAAM,GAAG,GAAG,UAAU,EAAE,CAAC;IACzB,OAAO,CAAC,KAAK,CAAC,2BAA2B,OAAO,oBAAoB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC;AAC1H,CAAC","sourcesContent":["import { McpServer } from \"@modelcontextprotocol/server\";\nimport { serveStdio } from \"@modelcontextprotocol/server/stdio\";\nimport { GarminClient } from \"./api.js\";\nimport { TokenManager } from \"./auth.js\";\nimport { SERVER_NAME, VERSION } from \"./constants.js\";\nimport { daysUntilKeyExpiry, isExtension, KEY_STOP_NOTE, keyFixHint, type KeySource, resolveKey } from \"./keystore.js\";\nimport { registerTools } from \"./tools.js\";\n\nfunction noKeyMessage(): string {\n return isExtension()\n ? `No Garmin Personal API key is set in this extension. Ask the user to ${keyFixHint()}. ${KEY_STOP_NOTE}`\n : \"No Garmin Personal API key is set up on this computer. Ask the user to run `npx garmin-personal-api-mcp setup` in a terminal (it walks them through creating and saving the key), then restart this app. \" + KEY_STOP_NOTE;\n}\n\n/** Key is resolved per token refresh, so a key added by `setup` works without restarting. */\nfunction getKey(): string {\n const found = resolveKey();\n if (!found) throw new Error(noKeyMessage());\n return found.key;\n}\n\n/** The expiry date in settings belongs to the key `setup` saved; an env key (e.g. from the extension) may be a different one. */\nexport function keyExpiryNote(source: KeySource | undefined, days: number | undefined): string {\n if (source === undefined || source === \"env\" || days === undefined) return \"\";\n if (days < 0) return ` The saved key has expired; tell the user to ${keyFixHint()}.`;\n if (days <= 7) return ` The key expires in ${days} day(s); mention that the user should ${keyFixHint()}.`;\n return \"\";\n}\n\nconst client = new GarminClient(new TokenManager(getKey));\n\nexport function createServer(): McpServer {\n const server = new McpServer(\n { name: SERVER_NAME, version: VERSION },\n {\n instructions:\n \"Read-only access to the user's own Garmin Connect data through Garmin's official Personal API: activities (with exact splits from the .FIT file), sleep, HRV, Body Battery, stress, steps, weight and nutrition. Start with garmin_get_day for recovery questions and garmin_list_activities → garmin_get_activity_splits for training questions. Dates accept YYYY-MM-DD, 'today', 'yesterday' or 'N days ago'. For VO2 max (as Garmin Connect shows it), training effect and recovery time use garmin_get_performance_metrics, which decodes them from the activity files. Training readiness, training status and race predictions are computed on Garmin's servers and are not available.\" +\n keyExpiryNote(resolveKey()?.source, daysUntilKeyExpiry()),\n },\n );\n registerTools(server, client);\n return server;\n}\n\nexport function startStdio(): void {\n serveStdio(createServer);\n const key = resolveKey();\n console.error(`garmin-personal-api-mcp ${VERSION} on stdio · key: ${key ? key.location : `not set (${keyFixHint()})`}`);\n}\n"]}
|
package/dist/tools.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACL,qBAAqB,EACrB,UAAU,EAIV,WAAW,EACX,YAAY,GACb,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAA2B,kBAAkB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAClI,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7F,MAAM,SAAS,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAW,CAAC;AAErH,MAAM,OAAO,GAAG,CAAC;KACd,MAAM,EAAE;KACR,GAAG,CAAC,CAAC,CAAC;KACN,QAAQ,CAAC,wEAAwE,CAAC,CAAC;AACtF,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,wEAAwE,CAAC,CAAC;AAC5G,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC,CAAC;AACpH,MAAM,UAAU,GAAG,CAAC;KACjB,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;KAC/D,SAAS,CAAC,MAAM,CAAC;KACjB,QAAQ,CAAC,yDAAyD,CAAC,CAAC;AACvE,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,2DAA2D,CAAC,CAAC;AAEtI,MAAM,UAAU,aAAa,CAAC,MAAiB,EAAE,MAAoB;IACnE,4CAA4C;IAC5C,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,KAAK,EAAE,4BAA4B;QACnC,WAAW,EACT,wMAAwM;QAC1M,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;QACnB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9I,OAAO,UAAU,CAAC,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAa,EAAE,CAAC,CAAC;IAClE,CAAC,CACF,CAAC;IAEF,+CAA+C;IAC/C,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;QACE,KAAK,EAAE,iBAAiB;QACxB,WAAW,EAAE;;;;;+EAK4D;QACzE,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC;YAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uEAAuE,CAAC;YACnH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC9E,aAAa,EAAE,CAAC;iBACb,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,sHAAsH,CAAC;YACnI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;YACxF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACjF,eAAe,EAAE,MAAM;SACxB,CAAC;QACF,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,EAAE;QACrF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CACvC;YACE,KAAK,EAAE,MAAM;YACb,KAAK;YACL,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3D,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS;YACrD,YAAY,EAAE,aAAa;SAC5B,EACD,GAAG,CAAC,MAAM,CAAC,MAAM,CAClB,CAAC;QACF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,IAAI,eAAe,KAAK,MAAM;YAAE,OAAO,UAAU,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,MAAM,KAAK,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACrI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QACzE,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,UAAU,CAAC,kEAAkE,CAAC,CAAC;QACzG,MAAM,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,MAAM,aAAa,EAAE,EAAE,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;QAC/E,IAAI,IAAI,CAAC,MAAM,KAAK,KAAK;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,0CAA0C,MAAM,GAAG,KAAK,GAAG,CAAC,CAAC;QACvG,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;QACE,KAAK,EAAE,kBAAkB;QACzB,WAAW,EACT,mLAAmL;QACrL,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;QACjF,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,EAAE;QAC9C,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClE,IAAI,eAAe,KAAK,MAAM;YAAE,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QACvD,MAAM,CAAC,GAAG,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC;YAAE,OAAO,UAAU,CAAC,GAAG,EAAE,sDAAsD,CAAC,CAAC;QACvF,OAAO,UAAU,CACf;YACE,KAAK,CAAC,CAAC,IAAI,IAAI,UAAU,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG;YAC9C,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;iBACjB,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,CAAC;iBACnE,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,EAAE;YACF,wEAAwE;SACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,4BAA4B,EAC5B;QACE,KAAK,EAAE,0BAA0B;QACjC,WAAW,EAAE;;sJAEmI;QAChJ,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC;YAC1B,WAAW,EAAE,UAAU;YACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,yEAAyE,CAAC;YACrJ,eAAe,EAAE,MAAM;SACxB,CAAC;QACF,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,EAAE;QAC5D,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;QAC9D,IAAI,eAAe,KAAK,MAAM;YAAE,OAAO,UAAU,CAAC,OAA0B,CAAC,CAAC;QAC9E,MAAM,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;QAC1B,MAAM,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,CAAC;QAChE,MAAM,KAAK,GAAG,CAAC,cAAc,WAAW,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9E,IAAI,CAAC,EAAE,CAAC;YACN,KAAK,CAAC,IAAI,CACR;gBACE,CAAC,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;gBACjF,UAAU,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE;gBAClC,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;gBAC3F,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC7D,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;gBAClE,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,CAAC,SAAS;aACxD;iBACE,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,KAAK,CAAC,CACf,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,GAAG,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,UAAU,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;QAC7G,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,6DAA6D,EAAE,mCAAmC,CAAC,CAAC;QAC5H,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CACR,KAAK,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,EAAE,CAAC,QAAQ,CAAC,MAAM,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,WAAW,IAAI,GAAG,MAAM,EAAE,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CACpR,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAC/E,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC;YACN,KAAK,CAAC,IAAI,CACR,EAAE,EACF,WAAW,EACX,KAAK,CAAC,CAAC,OAAO,EAAE,EAChB,WAAW,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC,UAAU,OAAO,CAAC,CAAC,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,CAAC,aAAa,aAAa,CAAC,CAAC,aAAa,EAAE,EAC5J,gCAAgC,CAAC,CAAC,yBAAyB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,yBAAyB,OAAO,EAC/G,iCAAiC,CAAC,CAAC,oBAAoB,2BAA2B,CACnF,CAAC;QACJ,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gBAAgB,EAAE,uCAAuC,EAAE,uBAAuB,CAAC,CAAC;YACnG,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC;YACpJ,CAAC;QACH,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,kFAAkF,CAAC,CAAC;QAC/H,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,gCAAgC,EAChC;QACE,KAAK,EAAE,qCAAqC;QAC5C,WAAW,EAAE;;;;;;;yFAOsE;QACnF,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC;YAC1B,WAAW,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;YACxH,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YAC9G,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;YACjG,eAAe,EAAE,MAAM;SACxB,CAAC;QACF,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,EAAE,GAAG,EAAE,EAAE;QACrE,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QACjC,MAAM,OAAO,GAAmE,EAAE,CAAC;QACnF,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,CAAC,GAAG,iBAAiB,CAAC,MAAM,MAAM,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,EAAE,MAAM,CAAC,CAAC;YAClG,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9G,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;gBAAE,IAAI,CAAC;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACpJ,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAClD,IAAI,CAAC;gBACH,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,kBAAkB,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7G,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,EAAE,GAAG,CAAC,EAAE,OAAO,EAAG,CAAW,CAAC,OAAO,EAAE,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAA6C,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAC9E,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,aAAa,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC;QAChI,MAAM,MAAM,GAAG;YACb,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;YAChL,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACpC,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC3B,WAAW,EAAE,CAAC,CAAC,EAAE;gBACjB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,YAAa,CAAC;gBACrC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY;gBACzB,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAa,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS;aACtH,CAAC,CAAC;YACH,UAAU,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACrG,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAG,CAAyB,CAAC,OAAO,EAAE,CAAC,CAAC;YACzI,IAAI,EAAE,yJAAyJ;SAChK,CAAC;QACF,IAAI,eAAe,KAAK,MAAM;YAAE,OAAO,UAAU,CAAC,MAAyB,CAAC,CAAC;QAE7E,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,KAAK,YAAY,EAAE,WAAW,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,YAAY,WAAW,CAAC,CAAC,CAAC,iCAAiC,GAAG,CAAC,CAAC;QAC/M,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,iIAAiI,CAAC,CAAC;QAC5K,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC;YAClC,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,qBAAqB,EAAE,wCAAwC,EAAE,mBAAmB,CAAC,CAAC;YACrG,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,eAAe;gBAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,IAAI,GAAG,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACzN,CAAC;QACD,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;YACd,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,iBAAiB,EAAE,8EAA8E,EAAE,2BAA2B,CAAC,CAAC;YAC/I,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,uBAAuB,IAAI,GAAG,MAAM,CAAC,CAAC,yBAAyB,IAAI,GAAG,MAAM,CAAC,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,qBAAqB,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,qBAAqB,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAC/V,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,MAAM,CAAC,OAAO,CAAC,MAAM,8CAA8C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC1L,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QACnC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CACF,CAAC;IAEF,MAAM,CAAC,YAAY,CACjB,8BAA8B,EAC9B;QACE,KAAK,EAAE,6BAA6B;QACpC,WAAW,EACT,4LAA4L;QAC9L,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC;YAC1B,WAAW,EAAE,UAAU;YACvB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;SACjG,CAAC;QACF,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;KACxG,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5E,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QAC5G,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC;QAClE,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC/E,CAAC,CACF,CAAC;IAEF,iDAAiD;IACjD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACT,iRAAiR;QACnR,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,EAAE,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAS,CAAC,CAAC;QACvG,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACvE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC7B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;SAC5E,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAsB,CAAC;QACvH,OAAO,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7I,CAAC,CACF,CAAC;IAEF,2CAA2C;IAC3C,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,QAAuB,EAAE,KAAa,EAAE,WAAmB,EAAE,EAAE,CAC9F,MAAM,CAAC,YAAY,CACjB,IAAI,EACJ;QACE,KAAK;QACL,WAAW,EAAE,GAAG,WAAW,uEAAuE;QAClG,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QACvE,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,EAAE;QACtC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5G,CAAC,CACF,CAAC;IAEJ,SAAS,CACP,4BAA4B,EAC5B,gBAAgB,EAChB,iBAAiB,EACjB,sMAAsM,CACvM,CAAC;IACF,SAAS,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,gFAAgF,CAAC,CAAC;IAClI,SAAS,CAAC,gBAAgB,EAAE,KAAK,EAAE,KAAK,EAAE,8HAA8H,CAAC,CAAC;IAC1K,SAAS,CAAC,yBAAyB,EAAE,aAAa,EAAE,cAAc,EAAE,oEAAoE,CAAC,CAAC;IAC1I,SAAS,CAAC,mBAAmB,EAAE,QAAQ,EAAE,QAAQ,EAAE,gCAAgC,CAAC,CAAC;IACrF,SAAS,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,EAAE,gCAAgC,CAAC,CAAC;IAClF,SAAS,CAAC,sBAAsB,EAAE,WAAW,EAAE,WAAW,EAAE,uCAAuC,CAAC,CAAC;IACrG,SAAS,CACP,mBAAmB,EACnB,QAAQ,EACR,2BAA2B,EAC3B,sMAAsM,CACvM,CAAC;IACF,SAAS,CAAC,yBAAyB,EAAE,aAAa,EAAE,cAAc,EAAE,0CAA0C,CAAC,CAAC;IAChH,SAAS,CACP,gCAAgC,EAChC,oBAAoB,EACpB,qBAAqB,EACrB,sFAAsF,CACvF,CAAC;IAEF,sDAAsD;IACtD,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,WAAmB,EAAE,EAAgD,EAAE,EAAE,CACrH,MAAM,CAAC,YAAY,CACjB,IAAI,EACJ,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,EAC/G,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,EAAE;QACtB,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC5B,OAAO,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IACvE,CAAC,CACF,CAAC;IAEJ,OAAO,CAAC,yBAAyB,EAAE,cAAc,EAAE,6HAA6H,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IACrM,OAAO,CAAC,uBAAuB,EAAE,sBAAsB,EAAE,0DAA0D,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IAC5I,OAAO,CAAC,iBAAiB,EAAE,UAAU,EAAE,0CAA0C,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACrG,OAAO,CAAC,wBAAwB,EAAE,aAAa,EAAE,0DAA0D,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC;IAChI,OAAO,CAAC,sBAAsB,EAAE,UAAU,EAAE,wEAAwE,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEvI,iDAAiD;IACjD,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EAAE;+BACY,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;2DACJ;QACrD,WAAW,EAAE,CAAC,CAAC,YAAY,CAAC;YAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;YACtE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;SACrH,CAAC;QACF,WAAW,EAAE,SAAS;KACvB,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE;QAC9B,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,MAAM,IAAI,KAAK,CAAC,+CAA+C,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtG,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,CAAC,CACF,CAAC;AACJ,CAAC;AAED,kFAAkF;AAClF,KAAK,UAAU,QAAQ,CAAO,KAAU,EAAE,KAAa,EAAE,EAA2B;IAClF,MAAM,GAAG,GAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,KAAK,IAAI,EAAE;QACxB,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACjF,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { mkdirSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport type { McpServer } from \"@modelcontextprotocol/server\";\nimport * as z from \"zod/v4\";\nimport {\n ALLOWED_PATH_PREFIXES,\n fetchRange,\n type GarminClient,\n type Json,\n type RangeEndpoint,\n resolveDate,\n resolveRange,\n} from \"./api.js\";\nimport { decodeFit, extractFit, fmtDuration, fmtPace, type PerformanceMetrics, performanceMetrics, summarizeFit } from \"./fit.js\";\nimport { activityLine, isObj, jsonResult, summarizeActivity, textResult } from \"./format.js\";\n\nconst READ_ONLY = { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true } as const;\n\nconst DateArg = z\n .string()\n .min(1)\n .describe('Date as YYYY-MM-DD, or \"today\", \"yesterday\", \"N days ago\" (local time)');\nconst StartArg = DateArg.describe('First day, inclusive: YYYY-MM-DD, \"today\", \"yesterday\" or \"N days ago\"');\nconst EndArg = z.string().optional().describe('Last day, inclusive. Defaults to today. Same formats as start_date');\nconst ActivityId = z\n .union([z.string().regex(/^\\d+$/), z.number().int().positive()])\n .transform(String)\n .describe(\"Numeric Garmin activity ID, from garmin_list_activities\");\nconst Format = z.enum([\"markdown\", \"json\"]).default(\"markdown\").describe(\"'markdown' for a readable summary, 'json' for every field\");\n\nexport function registerTools(server: McpServer, client: GarminClient): void {\n // ---------------- Profile ----------------\n server.registerTool(\n \"garmin_get_profile\",\n {\n title: \"Profile & heart-rate zones\",\n description:\n \"The user's Garmin profile settings (units, weight, height, birth year, lactate threshold where set) plus their heart-rate zones. Call this first when you need zones or units to interpret other data.\",\n inputSchema: z.strictObject({}),\n annotations: READ_ONLY,\n },\n async (_args, ctx) => {\n const s = ctx.mcpReq.signal;\n const [profile, zones] = await Promise.all([client.profileSettings(s), client.heartRateZones(s).catch((e: Error) => ({ error: e.message }))]);\n return jsonResult({ profile, heart_rate_zones: zones as Json });\n },\n );\n\n // ---------------- Activities ----------------\n server.registerTool(\n \"garmin_list_activities\",\n {\n title: \"List activities\",\n description: `List recorded activities (runs, gym sessions, rides…), newest first, with distance, time, pace and heart rate.\n\nExamples:\n - \"my runs this month\" -> start_date=\"2026-10-01\", activity_type=\"running\"\n - \"last 5 activities\" -> limit=5\nUse garmin_get_activity_splits on an activity_id for per-km splits and pacing.`,\n inputSchema: z.strictObject({\n start_date: z.string().optional().describe(\"Only activities on/after this day (YYYY-MM-DD, 'today', 'N days ago')\"),\n end_date: z.string().optional().describe(\"Only activities on/before this day\"),\n activity_type: z\n .string()\n .optional()\n .describe(\"Garmin type key, e.g. running, treadmill_running, trail_running, cycling, indoor_cycling, strength_training, walking\"),\n limit: z.number().int().min(1).max(100).default(20).describe(\"Max activities to return\"),\n offset: z.number().int().min(0).default(0).describe(\"Skip this many, for paging\"),\n response_format: Format,\n }),\n annotations: READ_ONLY,\n },\n async ({ start_date, end_date, activity_type, limit, offset, response_format }, ctx) => {\n const raw = await client.searchActivities(\n {\n start: offset,\n limit,\n startDate: start_date ? resolveDate(start_date) : undefined,\n endDate: end_date ? resolveDate(end_date) : undefined,\n activityType: activity_type,\n },\n ctx.mcpReq.signal,\n );\n const list = Array.isArray(raw) ? raw : isObj(raw) && Array.isArray(raw.activityList) ? raw.activityList : [];\n if (response_format === \"json\") return jsonResult({ offset, count: list.length, has_more: list.length === limit, activities: list });\n const items = list.map(summarizeActivity).filter((a) => a !== undefined);\n if (!items.length) return textResult(\"No activities match. Widen the date range or drop activity_type.\");\n const lines = [`# ${items.length} activities`, \"\", ...items.map(activityLine)];\n if (list.length === limit) lines.push(\"\", `More may exist: call again with offset=${offset + limit}.`);\n return textResult(lines.join(\"\\n\"));\n },\n );\n\n server.registerTool(\n \"garmin_get_activity\",\n {\n title: \"Activity details\",\n description:\n \"Garmin's computed summary for one activity: distance, durations, pace/speed, HR, cadence, elevation, training effect, calories. For per-km splits use garmin_get_activity_splits.\",\n inputSchema: z.strictObject({ activity_id: ActivityId, response_format: Format }),\n annotations: READ_ONLY,\n },\n async ({ activity_id, response_format }, ctx) => {\n const raw = await client.activity(activity_id, ctx.mcpReq.signal);\n if (response_format === \"json\") return jsonResult(raw);\n const a = summarizeActivity(raw);\n if (!a) return jsonResult(raw, \"Could not summarise this activity; raw data follows.\");\n return textResult(\n [\n `# ${a.name ?? \"Activity\"} (${a.type ?? \"?\"})`,\n ...Object.entries(a)\n .filter(([k, v]) => v !== undefined && k !== \"name\" && k !== \"type\")\n .map(([k, v]) => `- ${k.replace(/_/g, \" \")}: ${v}`),\n \"\",\n \"Call again with response_format='json' for every field Garmin returns.\",\n ].join(\"\\n\"),\n );\n },\n );\n\n server.registerTool(\n \"garmin_get_activity_splits\",\n {\n title: \"Splits & pacing analysis\",\n description: `Downloads the original .FIT recording and computes exact distance splits (default 1 km, interpolated at each boundary, pauses excluded), per-split HR, cadence and climb, the device laps, and a pacing verdict (even, negative split, faded).\n\nUse this for \"how was my pacing\", \"did I go out too fast\", \"compare km 1 to km 5\". Works for any GPS or footpod activity recorded on a Garmin device.`,\n inputSchema: z.strictObject({\n activity_id: ActivityId,\n split_meters: z.number().int().min(100).max(10_000).default(1000).describe(\"Split length in metres: 1000 for km, 1609 for miles, 400 for track laps\"),\n response_format: Format,\n }),\n annotations: READ_ONLY,\n },\n async ({ activity_id, split_meters, response_format }, ctx) => {\n const bytes = await client.downloadActivity(activity_id, ctx.mcpReq.signal);\n const summary = summarizeFit(extractFit(bytes), split_meters);\n if (response_format === \"json\") return jsonResult(summary as unknown as Json);\n const s = summary.session;\n const unit = split_meters === 1000 ? \"km\" : `${split_meters} m`;\n const lines = [`# Activity ${activity_id}${s?.sport ? ` (${s.sport})` : \"\"}`];\n if (s) {\n lines.push(\n [\n s.distance_m !== undefined ? `${(s.distance_m / 1000).toFixed(2)} km` : undefined,\n `moving ${fmtDuration(s.timer_s)}`,\n s.distance_m && s.timer_s ? `avg ${fmtPace((s.timer_s / s.distance_m) * 1000)}` : undefined,\n s.avg_hr ? `HR ${s.avg_hr} avg / ${s.max_hr} max` : undefined,\n s.avg_cadence ? `cadence ${Math.round(s.avg_cadence)}` : undefined,\n s.total_ascent_m ? `+${s.total_ascent_m} m` : undefined,\n ]\n .filter(Boolean)\n .join(\" · \"),\n );\n }\n if (summary.paused_s > 5) lines.push(`Paused ${fmtDuration(summary.paused_s)} (excluded from split times).`);\n lines.push(\"\", `| ${unit} | dist | time | pace | avg HR | max HR | cadence | climb |`, \"|---|---|---|---|---|---|---|---|\");\n for (const sp of summary.splits) {\n lines.push(\n `| ${sp.index}${sp.partial ? \"*\" : \"\"} | ${(sp.distance_m / 1000).toFixed(2)} | ${fmtDuration(sp.moving_s)} | ${fmtPace(sp.pace_s_per_km)} | ${sp.avg_hr ?? \"–\"} | ${sp.max_hr ?? \"–\"} | ${sp.avg_cadence ?? \"–\"} | ${sp.elev_gain_m !== undefined ? `+${sp.elev_gain_m}` : \"–\"} |`,\n );\n }\n if (summary.splits.some((x) => x.partial)) lines.push(\"\", \"\\\\* partial split\");\n const p = summary.pacing;\n if (p) {\n lines.push(\n \"\",\n \"## Pacing\",\n `- ${p.verdict}`,\n `- First ${fmtPace(p.first_split_pace_s_per_km)}, last ${fmtPace(p.last_split_pace_s_per_km)}; fastest split ${p.fastest_split}, slowest ${p.slowest_split}`,\n `- Second half vs first half: ${p.half_split_delta_s_per_km > 0 ? \"+\" : \"\"}${p.half_split_delta_s_per_km} s/km`,\n `- Split-to-split variability: ${p.pace_variability_pct}% (under 3% is very even)`,\n );\n }\n if (summary.laps.length > 1) {\n lines.push(\"\", \"## Device laps\", \"| lap | dist | time | pace | avg HR |\", \"|---|---|---|---|---|\");\n for (const l of summary.laps) {\n lines.push(`| ${l.index} | ${(l.distance_m / 1000).toFixed(2)} | ${fmtDuration(l.timer_s)} | ${fmtPace(l.pace_s_per_km)} | ${l.avg_hr ?? \"–\"} |`);\n }\n }\n if (!summary.splits.length) lines.push(\"\", \"No distance data in this recording (e.g. a gym session), so there are no splits.\");\n return textResult(lines.join(\"\\n\"));\n },\n );\n\n server.registerTool(\n \"garmin_get_performance_metrics\",\n {\n title: \"VO2 max, training effect & recovery\",\n description: `Garmin's own VO2 max, read the way Garmin Connect shows it, plus per-activity aerobic/anaerobic training effect, recovery time and performance condition. Decoded from the original .FIT files, since the Personal API has no VO2 max endpoint.\n\nReturns the current VO2 max (whole number, as Garmin's apps round it, plus the precise value), every new VO2 max reading in the window (Garmin only updates it on qualifying runs and power-meter rides), and a row per activity.\n\nExamples:\n - \"what's my VO2 max?\" / \"how is my VO2 max trending?\" -> last_n=20\n - \"how hard was today's workout, how long to recover?\" -> last_n=1\nEach activity costs one file download, so keep last_n small unless a trend is asked for.`,\n inputSchema: z.strictObject({\n activity_id: ActivityId.optional().describe(\"One activity, from garmin_list_activities. Omit to scan recent activities\"),\n last_n: z.number().int().min(1).max(30).default(10).describe(\"How many recent activities to scan (all types)\"),\n activity_type: z.string().optional().describe(\"Only this Garmin type key, e.g. running, cycling\"),\n response_format: Format,\n }),\n annotations: READ_ONLY,\n },\n async ({ activity_id, last_n, activity_type, response_format }, ctx) => {\n const signal = ctx.mcpReq.signal;\n const targets: { id: string; name?: string; type?: string; start?: string }[] = [];\n if (activity_id) {\n const a = summarizeActivity(await client.activity(activity_id, signal));\n targets.push({ id: activity_id, name: a?.name, type: a?.type, start: a?.start_local });\n } else {\n const raw = await client.searchActivities({ limit: last_n, activityType: activity_type }, signal);\n const list = Array.isArray(raw) ? raw : isObj(raw) && Array.isArray(raw.activityList) ? raw.activityList : [];\n for (const a of list.map(summarizeActivity)) if (a) targets.push({ id: String(a.activity_id), name: a.name, type: a.type, start: a.start_local });\n }\n const rows = await mapLimit(targets, 3, async (t) => {\n try {\n return { ...t, m: performanceMetrics(decodeFit(extractFit(await client.downloadActivity(t.id, signal)))) };\n } catch (e) {\n return { ...t, skipped: (e as Error).message };\n }\n });\n const ok = rows.filter((r): r is typeof r & { m: PerformanceMetrics } => \"m\" in r && !!r.m);\n const readings = ok.filter((r) => r.m.new_vo2max_reading && r.m.vo2max_after);\n const newest = ok[0];\n const current = newest?.m.new_vo2max_reading ? newest.m.vo2max_after : (newest?.m.vo2max_before ?? readings[0]?.m.vo2max_after);\n const result = {\n vo2max: current === undefined ? undefined : { value: Math.round(current), precise: current, as_of: newest?.start?.slice(0, 10), last_reading: readings[0]?.start?.slice(0, 10) },\n vo2max_readings: readings.map((r) => ({\n date: r.start?.slice(0, 10),\n activity_id: r.id,\n type: r.type,\n vo2max: Math.round(r.m.vo2max_after!),\n precise: r.m.vo2max_after,\n change: r.m.vo2max_before !== undefined ? Math.round((r.m.vo2max_after! - r.m.vo2max_before) * 100) / 100 : undefined,\n })),\n activities: ok.map((r) => ({ date: r.start, activity_id: r.id, name: r.name, type: r.type, ...r.m })),\n skipped: rows.filter((r) => \"skipped\" in r).map((r) => ({ activity_id: r.id, type: r.type, reason: (r as { skipped: string }).skipped })),\n note: \"VO2 max and training effect match Garmin Connect. Recovery time and performance condition come from undocumented FIT fields; treat them as approximate.\",\n };\n if (response_format === \"json\") return jsonResult(result as unknown as Json);\n\n const lines: string[] = [];\n if (result.vo2max) {\n const v = result.vo2max;\n lines.push(`# VO2 max: ${v.value} ml/kg/min`, `Precise ${v.precise.toFixed(2)} as of ${v.as_of}${v.last_reading ? `; last updated by the ${v.last_reading} activity` : \"; no new reading in this window\"}.`);\n } else {\n lines.push(\"# VO2 max: not available\", \"None of these activities carry a VO2 max. Garmin needs a qualifying outdoor run (or a ride with a power meter) to estimate one.\");\n }\n if (result.vo2max_readings.length) {\n lines.push(\"\", \"## VO2 max readings\", \"| date | activity | VO2 max | change |\", \"|---|---|---|---|\");\n for (const r of result.vo2max_readings) lines.push(`| ${r.date} | ${r.type ?? \"?\"} | ${r.vo2max} (${r.precise?.toFixed(2)}) | ${r.change === undefined ? \"–\" : `${r.change > 0 ? \"+\" : \"\"}${r.change.toFixed(2)}`} |`);\n }\n if (ok.length) {\n lines.push(\"\", \"## Per activity\", \"| date | activity | aerobic TE | anaerobic TE | recovery | perf. condition |\", \"|---|---|---|---|---|---|\");\n for (const r of ok) {\n const m = r.m;\n lines.push(`| ${r.start?.slice(0, 16) ?? \"?\"} | ${r.name ?? r.type ?? r.id} | ${m.training_effect_aerobic ?? \"–\"} | ${m.training_effect_anaerobic ?? \"–\"} | ${m.recovery_time_h !== undefined ? `${m.recovery_time_h} h` : \"–\"} | ${m.performance_condition !== undefined ? `${m.performance_condition > 0 ? \"+\" : \"\"}${m.performance_condition}` : \"–\"} |`);\n }\n }\n if (result.skipped.length) lines.push(\"\", `Skipped ${result.skipped.length} without a FIT file (e.g. manual entries): ${result.skipped.map((s) => s.type ?? s.activity_id).join(\", \")}.`);\n lines.push(\"\", `_${result.note}_`);\n return textResult(lines.join(\"\\n\"));\n },\n );\n\n server.registerTool(\n \"garmin_download_activity_fit\",\n {\n title: \"Save original activity file\",\n description:\n \"Saves an activity's original file (Garmin's ZIP containing the .fit) to a folder on this computer, for import into other tools such as Runalyze or Golden Cheetah. Returns the saved path.\",\n inputSchema: z.strictObject({\n activity_id: ActivityId,\n directory: z.string().optional().describe(\"Folder to save into. Defaults to ~/Downloads/garmin\"),\n }),\n annotations: { readOnlyHint: false, destructiveHint: false, idempotentHint: true, openWorldHint: true },\n },\n async ({ activity_id, directory }, ctx) => {\n const bytes = await client.downloadActivity(activity_id, ctx.mcpReq.signal);\n const dir = resolve((directory ?? join(homedir(), \"Downloads\", \"garmin\")).replace(/^~(?=$|\\/)/, homedir()));\n mkdirSync(dir, { recursive: true });\n const isZip = bytes[0] === 0x50 && bytes[1] === 0x4b;\n const file = join(dir, `${activity_id}.${isZip ? \"zip\" : \"fit\"}`);\n writeFileSync(file, bytes);\n return textResult(`Saved ${(bytes.length / 1024).toFixed(0)} KB to ${file}`);\n },\n );\n\n // ---------------- Day overview ----------------\n server.registerTool(\n \"garmin_get_day\",\n {\n title: \"One day at a glance\",\n description:\n \"Everything for one day in one call: daily summary (steps, calories, resting HR, stress, intensity minutes), sleep, overnight HRV, Body Battery and activities. Best first call for 'how recovered am I today' or 'how was yesterday'. Parts Garmin has no data for are omitted.\",\n inputSchema: z.strictObject({ date: DateArg.default(\"today\") }),\n annotations: READ_ONLY,\n },\n async ({ date }, ctx) => {\n const d = resolveDate(date);\n const s = ctx.mcpReq.signal;\n const settle = async (p: Promise<Json>) => p.catch((e: Error) => ({ unavailable: e.message }) as Json);\n const [summary, sleep, hrv, bodyBattery, activities] = await Promise.all([\n settle(client.range(\"dailySummaries\", d, d, s)),\n settle(client.dailySleep(d, s)),\n settle(client.dailyHrv(d, s)),\n settle(client.range(\"bodyBattery\", d, d, s)),\n settle(client.searchActivities({ startDate: d, endDate: d, limit: 20 }, s)),\n ]);\n const acts = (Array.isArray(activities) ? activities : []).map(summarizeActivity).filter(Boolean) as unknown as Json[];\n return jsonResult({ date: d, daily_summary: summary, sleep, hrv, body_battery: bodyBattery, activities: acts.length ? acts : activities });\n },\n );\n\n // ---------------- Ranges ----------------\n const rangeTool = (name: string, endpoint: RangeEndpoint, title: string, description: string) =>\n server.registerTool(\n name,\n {\n title,\n description: `${description}\\n\\nLong ranges are fetched in chunks automatically (up to 366 days).`,\n inputSchema: z.strictObject({ start_date: StartArg, end_date: EndArg }),\n annotations: READ_ONLY,\n },\n async ({ start_date, end_date }, ctx) => {\n const [a, b] = resolveRange(start_date, end_date);\n return jsonResult(await fetchRange(client, endpoint, a, b, ctx.mcpReq.signal), `${title}, ${a} to ${b}.`);\n },\n );\n\n rangeTool(\n \"garmin_get_daily_summaries\",\n \"dailySummaries\",\n \"Daily summaries\",\n \"Per-day totals: steps, distance, active and total calories, resting/min/max heart rate, average and max stress, intensity minutes, floors, Body Battery high/low. Best tool for trends across weeks.\",\n );\n rangeTool(\"garmin_get_sleep\", \"sleep\", \"Sleep\", \"Per-night sleep: duration, deep/light/REM/awake time, sleep score, and timing.\");\n rangeTool(\"garmin_get_hrv\", \"hrv\", \"HRV\", \"Per-night heart-rate variability: last-night average, weekly average, baseline range and status (balanced, unbalanced, low).\");\n rangeTool(\"garmin_get_body_battery\", \"bodyBattery\", \"Body Battery\", \"Per-day Body Battery: charged, drained, highest and lowest values.\");\n rangeTool(\"garmin_get_stress\", \"stress\", \"Stress\", \"Per-day all-day stress levels.\");\n rangeTool(\"garmin_get_steps\", \"steps\", \"Steps\", \"Per-day step totals and goals.\");\n rangeTool(\"garmin_get_hydration\", \"hydration\", \"Hydration\", \"Per-day logged water intake and goal.\");\n rangeTool(\n \"garmin_get_weight\",\n \"weight\",\n \"Weight & body composition\",\n \"Every weigh-in in the range (Garmin usually reports weight in grams: divide by 1000 for kg), with BMI, body fat, muscle mass and water where a smart scale recorded them. Use for bulk/cut progress.\",\n );\n rangeTool(\"garmin_get_weight_goals\", \"weightGoals\", \"Weight goals\", \"Weight goals in effect during the range.\");\n rangeTool(\n \"garmin_get_wellness_activities\",\n \"wellnessActivities\",\n \"Wellness activities\",\n \"Wellness activity summaries (e.g. breathwork and relaxation sessions) for the range.\",\n );\n\n // ---------------- Single-day detail ----------------\n const dayTool = (name: string, title: string, description: string, fn: (d: string, s: AbortSignal) => Promise<Json>) =>\n server.registerTool(\n name,\n { title, description, inputSchema: z.strictObject({ date: DateArg.default(\"today\") }), annotations: READ_ONLY },\n async ({ date }, ctx) => {\n const d = resolveDate(date);\n return jsonResult(await fn(d, ctx.mcpReq.signal), `${title}, ${d}.`);\n },\n );\n\n dayTool(\"garmin_get_sleep_detail\", \"Sleep detail\", \"One night's sleep in full: stages timeline, sleep score breakdown, respiration, restless moments, SpO2 and HR during sleep.\", client.dailySleep);\n dayTool(\"garmin_get_heart_rate\", \"Heart rate (all day)\", \"One day's resting HR and the all-day heart-rate samples.\", client.dailyHeartRate);\n dayTool(\"garmin_get_spo2\", \"Pulse Ox\", \"One day's SpO2 readings and acclimation.\", client.dailySpo2);\n dayTool(\"garmin_get_fitness_age\", \"Fitness age\", \"Garmin's fitness age estimate and its inputs for a date.\", client.fitnessAge);\n dayTool(\"garmin_get_nutrition\", \"Food log\", \"Foods and macros logged in Garmin Connect's nutrition log for one day.\", client.foodLogs);\n\n // ---------------- Escape hatch ----------------\n server.registerTool(\n \"garmin_api_get\",\n {\n title: \"Raw Personal API GET\",\n description: `Call any documented Personal API endpoint directly, for data the other tools don't cover (e.g. menstrual cycle summaries, activity workouts).\nPath must start with one of: ${ALLOWED_PATH_PREFIXES.join(\", \")}.\nExample: path=\"/activity-service/activity/123456/workouts\"`,\n inputSchema: z.strictObject({\n path: z.string().startsWith(\"/\").describe(\"API path beginning with /\"),\n params: z.record(z.string(), z.union([z.string(), z.number(), z.boolean()])).optional().describe(\"Query parameters\"),\n }),\n annotations: READ_ONLY,\n },\n async ({ path, params }, ctx) => {\n if (path.includes(\"..\") || !ALLOWED_PATH_PREFIXES.some((p) => path.startsWith(p))) {\n throw new Error(`Path not allowed. It must start with one of ${ALLOWED_PATH_PREFIXES.join(\", \")}.`);\n }\n return jsonResult(await client.get(path, params, ctx.mcpReq.signal));\n },\n );\n}\n\n/** Runs `fn` over `items` with at most `limit` in flight, keeping input order. */\nasync function mapLimit<T, R>(items: T[], limit: number, fn: (item: T) => Promise<R>): Promise<R[]> {\n const out: R[] = new Array(items.length);\n let next = 0;\n const worker = async () => {\n while (next < items.length) {\n const i = next++;\n out[i] = await fn(items[i]);\n }\n };\n await Promise.all(Array.from({ length: Math.min(limit, items.length) }, worker));\n return out;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "garmin-personal-api-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "MCP server for your own Garmin Connect data (activities with FIT splits, sleep, HRV, Body Battery, weight) via Garmin's official Personal API, with an interactive key setup wizard.",
|
|
5
5
|
"main": "dist/server.js",
|
|
6
6
|
"scripts": {
|