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.
- package/README.md +84 -0
- package/dist/client.d.ts +14 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +56 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +101 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +184 -0
- package/dist/errors.js.map +1 -0
- package/dist/http-client.d.ts +32 -0
- package/dist/http-client.d.ts.map +1 -0
- package/dist/http-client.js +440 -0
- package/dist/http-client.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +2905 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +569 -0
- package/dist/types.js.map +1 -0
- package/dist/urls.d.ts +23 -0
- package/dist/urls.d.ts.map +1 -0
- package/dist/urls.js +92 -0
- package/dist/urls.js.map +1 -0
- package/package.json +69 -0
|
@@ -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
|
package/dist/urls.js.map
ADDED
|
@@ -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
|
+
}
|