garmin-connect-client 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.d.ts","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"AAGA,qBAAa,UAAU;IACrB,QAAQ,CAAC,iBAAiB,4BAA4B;IACtD,QAAQ,CAAC,SAAS,uDAAuD;IAEzE,QAAQ,CAAC,gBAAgB,6CAA6C;IACtE,QAAQ,CAAC,qBAAqB,sDAAsD;IACpF,QAAQ,CAAC,cAAc,mDAAmD;IAE1E,QAAQ,CAAC,aAAa,wDAAwD;IAE9E,QAAQ,CAAC,aAAa,sDAAsD;IAG5E,QAAQ,CAAC,gBAAgB,kBAAkB;IAG3C,YAAY,CAAC,QAAQ,GAAE,MAA8B,GAAG,MAAM;IAS9D,SAAS,CAAC,QAAQ,GAAE,MAA8B,EAAE,MAAM,GAAE,MAAgB,GAAG,MAAM;IAUrF,cAAc,CAAC,QAAQ,GAAE,MAA8B,EAAE,MAAM,GAAE,MAAgB,GAAG,MAAM;IAU1F,eAAe,CAAC,QAAQ,GAAE,MAA8B,GAAG,MAAM;IAKjE,WAAW,CAAC,QAAQ,GAAE,MAA8B,GAAG,MAAM;IAM7D,wBAAwB,IAAI,MAAM;IAOlC,mBAAmB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAQ3G,mBAAmB,IAAI,MAAM;IAM7B,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM;IAMhE,eAAe,CAAC,KAAK,SAAI,EAAE,KAAK,SAAK,GAAG,MAAM;IAI9C,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM;IAKpD,eAAe,CAAC,IAAI,SAAI,EAAE,OAAO,SAAK,EAAE,MAAM,SAAO,GAAG,MAAM;CAG/D"}
package/dist/urls.js ADDED
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GarminUrls = void 0;
4
+ const qs_1 = require("qs");
5
+ // Garmin Connect URL constants and construction methods
6
+ class GarminUrls {
7
+ constructor() {
8
+ this.GARMIN_SSO_ORIGIN = 'https://sso.garmin.com';
9
+ this.OAUTH_URL = 'https://connectapi.garmin.com/oauth-service/oauth';
10
+ // Mobile API endpoints
11
+ this.MOBILE_API_LOGIN = 'https://sso.garmin.com/mobile/api/login';
12
+ this.MOBILE_API_MFA_VERIFY = 'https://sso.garmin.com/mobile/api/mfa/verifyCode';
13
+ this.MOBILE_SERVICE = 'https://mobile.integration.garmin.com/gcm/ios';
14
+ // Activity API endpoints
15
+ this.ACTIVITY_BASE = 'https://connectapi.garmin.com/activitylist-service';
16
+ // Golf API endpoints
17
+ this.GOLF_API_BASE = 'https://golf.garmin.com/gcs-golfcommunity/api/v2';
18
+ // Client ID for mobile API authentication
19
+ this.CLIENT_ID_MOBILE = 'GCM_IOS_DARK';
20
+ }
21
+ // Constructs the sign-in page URL with query parameters
22
+ SIGN_IN_PAGE(clientId = this.CLIENT_ID_MOBILE) {
23
+ const parameters = {
24
+ clientId,
25
+ service: this.MOBILE_SERVICE,
26
+ };
27
+ return `https://sso.garmin.com/mobile/sso/en-US/sign-in?${(0, qs_1.stringify)(parameters)}`;
28
+ }
29
+ // Constructs the login API URL with query parameters
30
+ LOGIN_API(clientId = this.CLIENT_ID_MOBILE, locale = 'en-US') {
31
+ const parameters = {
32
+ clientId,
33
+ locale,
34
+ service: this.MOBILE_SERVICE,
35
+ };
36
+ return `${this.MOBILE_API_LOGIN}?${(0, qs_1.stringify)(parameters)}`;
37
+ }
38
+ // Constructs the MFA verify API URL with query parameters
39
+ MFA_VERIFY_API(clientId = this.CLIENT_ID_MOBILE, locale = 'en-US') {
40
+ const parameters = {
41
+ clientId,
42
+ locale,
43
+ service: this.MOBILE_SERVICE,
44
+ };
45
+ return `${this.MOBILE_API_MFA_VERIFY}?${(0, qs_1.stringify)(parameters)}`;
46
+ }
47
+ // Constructs the referer URL for sign-in page requests
48
+ SIGN_IN_REFERER(clientId = this.CLIENT_ID_MOBILE) {
49
+ return `https://sso.garmin.com/mobile/sso/en-US/sign-in?clientId=${clientId}&service=${encodeURIComponent(this.MOBILE_SERVICE)}`;
50
+ }
51
+ // Constructs the referer URL for MFA page requests
52
+ MFA_REFERER(clientId = this.CLIENT_ID_MOBILE) {
53
+ return `https://sso.garmin.com/mobile/sso/en-US/mfa?clientId=${clientId}&service=${encodeURIComponent(this.MOBILE_SERVICE)}`;
54
+ }
55
+ // Returns the base URL for OAuth preauthorized endpoint (without query params)
56
+ // Used for OAuth signing before building the final URL with query params
57
+ OAUTH_PREAUTHORIZED_BASE() {
58
+ return `${this.OAUTH_URL}/preauthorized`;
59
+ }
60
+ // Constructs the OAuth preauthorized URL with query parameters
61
+ // @param params - Base parameters (ticket, login-url, accepts-mfa-tokens)
62
+ // @param oauthParams - OAuth signature parameters to merge in
63
+ OAUTH_PREAUTHORIZED(parameters, oauthParameters) {
64
+ const baseUrl = this.OAUTH_PREAUTHORIZED_BASE();
65
+ const mergedParameters = oauthParameters ? { ...parameters, ...oauthParameters } : parameters;
66
+ return `${baseUrl}?${(0, qs_1.stringify)(mergedParameters)}`;
67
+ }
68
+ // Returns the base URL for OAuth exchange endpoint (without query params)
69
+ // Used for OAuth signing before building the final URL with query params
70
+ OAUTH_EXCHANGE_BASE() {
71
+ return `${this.OAUTH_URL}/exchange/user/2.0`;
72
+ }
73
+ // Constructs the OAuth exchange URL with query parameters
74
+ // @param oauthParams - OAuth signature parameters
75
+ OAUTH_EXCHANGE(oauthParameters) {
76
+ const baseUrl = this.OAUTH_EXCHANGE_BASE();
77
+ return `${baseUrl}?${(0, qs_1.stringify)(oauthParameters)}`;
78
+ }
79
+ // Activity API methods
80
+ ACTIVITY_SEARCH(start = 0, limit = 20) {
81
+ return `${this.ACTIVITY_BASE}/activities/search/activities?start=${start}&limit=${limit}`;
82
+ }
83
+ ACTIVITY_DETAIL(activityId) {
84
+ return `${this.ACTIVITY_BASE}/activities/${activityId}`;
85
+ }
86
+ // Golf API methods
87
+ GOLF_ACTIVITIES(page = 1, perPage = 20, locale = 'en') {
88
+ return `${this.GOLF_API_BASE}/activity?user-locale=${locale}&page=${page}&per-page=${perPage}`;
89
+ }
90
+ }
91
+ exports.GarminUrls = GarminUrls;
92
+ //# sourceMappingURL=urls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"urls.js","sourceRoot":"","sources":["../src/urls.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "garmin-connect-client",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript library for interacting with Garmin Connect",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist"
9
+ ],
10
+ "scripts": {
11
+ "build": "tsc",
12
+ "watch": "tsc --watch",
13
+ "clean": "rm -rf dist",
14
+ "lint": "eslint src --ext .ts",
15
+ "lint:fix": "eslint src --ext .ts --fix",
16
+ "test": "vitest",
17
+ "test:ui": "vitest --ui",
18
+ "test:run": "vitest run",
19
+ "test:coverage": "vitest run --coverage",
20
+ "format": "prettier --write \"src/**/*.{ts,tsx}\"",
21
+ "format:check": "prettier --check \"src/**/*.{ts,tsx}\"",
22
+ "prepare": "husky install",
23
+ "prepublishOnly": "npm run clean && npm run build"
24
+ },
25
+ "keywords": [
26
+ "garmin",
27
+ "garmin-connect",
28
+ "garmin-connect-client",
29
+ "typescript"
30
+ ],
31
+ "author": "",
32
+ "license": "MIT",
33
+ "repository": {
34
+ "type": "git",
35
+ "url": "https://github.com/orpjones/garmin-connect-client.git"
36
+ },
37
+ "engines": {
38
+ "node": ">=20.0.0"
39
+ },
40
+ "devDependencies": {
41
+ "@types/node": "^20.10.0",
42
+ "@types/tough-cookie": "^4.0.5",
43
+ "@typescript-eslint/eslint-plugin": "^8.0.0",
44
+ "@typescript-eslint/parser": "^8.0.0",
45
+ "@vitest/ui": "^1.1.0",
46
+ "dotenv": "^16.4.5",
47
+ "eslint": "^8.57.0",
48
+ "eslint-config-prettier": "^9.1.0",
49
+ "eslint-import-resolver-typescript": "^3.6.1",
50
+ "eslint-plugin-import": "^2.29.1",
51
+ "eslint-plugin-node": "^11.1.0",
52
+ "eslint-plugin-promise": "^6.1.1",
53
+ "eslint-plugin-unicorn": "^50.0.1",
54
+ "husky": "^9.0.11",
55
+ "prettier": "^3.2.4",
56
+ "typescript": "^5.3.3",
57
+ "vitest": "^1.1.0"
58
+ },
59
+ "dependencies": {
60
+ "@types/qs": "^6.14.0",
61
+ "axios": "^1.13.2",
62
+ "axios-cookiejar-support": "^4.0.7",
63
+ "form-data": "^4.0.5",
64
+ "oauth-1.0a": "^2.2.6",
65
+ "qs": "^6.14.0",
66
+ "tough-cookie": "^4.1.3",
67
+ "zod": "^3.22.4"
68
+ }
69
+ }