@nativesquare/soma 0.9.4 → 0.10.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/dist/client/index.d.ts +91 -33
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +79 -35
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +18 -0
- package/dist/component/_generated/api.d.ts.map +1 -1
- package/dist/component/_generated/api.js.map +1 -1
- package/dist/component/_generated/component.d.ts +43 -9
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/garmin/auth.d.ts +0 -4
- package/dist/component/garmin/auth.d.ts.map +1 -1
- package/dist/component/garmin/auth.js +0 -8
- package/dist/component/garmin/auth.js.map +1 -1
- package/dist/component/garmin/private.d.ts +1 -1
- package/dist/component/garmin/private.d.ts.map +1 -1
- package/dist/component/garmin/private.js +0 -9
- package/dist/component/garmin/private.js.map +1 -1
- package/dist/component/garmin/public.d.ts.map +1 -1
- package/dist/component/garmin/public.js +6 -1
- package/dist/component/garmin/public.js.map +1 -1
- package/dist/component/schema.d.ts +2 -2
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +5 -3
- package/dist/component/schema.js.map +1 -1
- package/dist/{strava → component/strava}/auth.d.ts +15 -48
- package/dist/component/strava/auth.d.ts.map +1 -0
- package/dist/{strava → component/strava}/auth.js +4 -39
- package/dist/component/strava/auth.js.map +1 -0
- package/dist/component/strava/client.d.ts +8 -0
- package/dist/component/strava/client.d.ts.map +1 -0
- package/dist/component/strava/client.js +18 -0
- package/dist/component/strava/client.js.map +1 -0
- package/dist/component/strava/private.d.ts +19 -0
- package/dist/component/strava/private.d.ts.map +1 -1
- package/dist/component/strava/private.js +52 -2
- package/dist/component/strava/private.js.map +1 -1
- package/dist/component/strava/public.d.ts +87 -12
- package/dist/component/strava/public.d.ts.map +1 -1
- package/dist/component/strava/public.js +218 -92
- package/dist/component/strava/public.js.map +1 -1
- package/dist/component/strava/transform/activity.d.ts +19 -0
- package/dist/component/strava/transform/activity.d.ts.map +1 -0
- package/dist/{strava → component/strava/transform}/activity.js +21 -41
- package/dist/component/strava/transform/activity.js.map +1 -0
- package/dist/{strava → component/strava/transform}/athlete.d.ts +4 -10
- package/dist/component/strava/transform/athlete.d.ts.map +1 -0
- package/dist/{strava → component/strava/transform}/athlete.js +2 -8
- package/dist/component/strava/transform/athlete.js.map +1 -0
- package/dist/component/strava/transform/maps/sportType.d.ts +7 -0
- package/dist/component/strava/transform/maps/sportType.d.ts.map +1 -0
- package/dist/{strava/maps/sport-type.js → component/strava/transform/maps/sportType.js} +4 -2
- package/dist/component/strava/transform/maps/sportType.js.map +1 -0
- package/dist/component/strava/types/stravaApi/client/client.gen.d.ts +3 -0
- package/dist/component/strava/types/stravaApi/client/client.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/client/client.gen.js +236 -0
- package/dist/component/strava/types/stravaApi/client/client.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/client/index.d.ts +9 -0
- package/dist/component/strava/types/stravaApi/client/index.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/client/index.js +7 -0
- package/dist/component/strava/types/stravaApi/client/index.js.map +1 -0
- package/dist/component/strava/types/stravaApi/client/types.gen.d.ts +118 -0
- package/dist/component/strava/types/stravaApi/client/types.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/client/types.gen.js +3 -0
- package/dist/component/strava/types/stravaApi/client/types.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/client/utils.gen.d.ts +34 -0
- package/dist/component/strava/types/stravaApi/client/utils.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/client/utils.gen.js +229 -0
- package/dist/component/strava/types/stravaApi/client/utils.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/client.gen.d.ts +13 -0
- package/dist/component/strava/types/stravaApi/client.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/client.gen.js +4 -0
- package/dist/component/strava/types/stravaApi/client.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/core/auth.gen.d.ts +19 -0
- package/dist/component/strava/types/stravaApi/core/auth.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/core/auth.gen.js +15 -0
- package/dist/component/strava/types/stravaApi/core/auth.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/core/bodySerializer.gen.d.ts +26 -0
- package/dist/component/strava/types/stravaApi/core/bodySerializer.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/core/bodySerializer.gen.js +58 -0
- package/dist/component/strava/types/stravaApi/core/bodySerializer.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/core/params.gen.d.ts +44 -0
- package/dist/component/strava/types/stravaApi/core/params.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/core/params.gen.js +101 -0
- package/dist/component/strava/types/stravaApi/core/params.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/core/pathSerializer.gen.d.ts +34 -0
- package/dist/component/strava/types/stravaApi/core/pathSerializer.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/core/pathSerializer.gen.js +107 -0
- package/dist/component/strava/types/stravaApi/core/pathSerializer.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/core/queryKeySerializer.gen.d.ts +19 -0
- package/dist/component/strava/types/stravaApi/core/queryKeySerializer.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/core/queryKeySerializer.gen.js +93 -0
- package/dist/component/strava/types/stravaApi/core/queryKeySerializer.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/core/serverSentEvents.gen.d.ts +72 -0
- package/dist/component/strava/types/stravaApi/core/serverSentEvents.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/core/serverSentEvents.gen.js +134 -0
- package/dist/component/strava/types/stravaApi/core/serverSentEvents.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/core/types.gen.d.ts +79 -0
- package/dist/component/strava/types/stravaApi/core/types.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/core/types.gen.js +3 -0
- package/dist/component/strava/types/stravaApi/core/types.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/core/utils.gen.d.ts +20 -0
- package/dist/component/strava/types/stravaApi/core/utils.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/core/utils.gen.js +88 -0
- package/dist/component/strava/types/stravaApi/core/utils.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/index.d.ts +3 -0
- package/dist/component/strava/types/stravaApi/index.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/index.js +3 -0
- package/dist/component/strava/types/stravaApi/index.js.map +1 -0
- package/dist/component/strava/types/stravaApi/sdk.gen.d.ts +224 -0
- package/dist/component/strava/types/stravaApi/sdk.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/sdk.gen.js +361 -0
- package/dist/component/strava/types/stravaApi/sdk.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/types.gen.d.ts +2209 -0
- package/dist/component/strava/types/stravaApi/types.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/types.gen.js +3 -0
- package/dist/component/strava/types/stravaApi/types.gen.js.map +1 -0
- package/dist/component/strava/types/stravaApi/zod.gen.d.ts +5332 -0
- package/dist/component/strava/types/stravaApi/zod.gen.d.ts.map +1 -0
- package/dist/component/strava/types/stravaApi/zod.gen.js +1009 -0
- package/dist/component/strava/types/stravaApi/zod.gen.js.map +1 -0
- package/dist/component/strava/utils.d.ts +15 -0
- package/dist/component/strava/utils.d.ts.map +1 -0
- package/dist/component/strava/utils.js +36 -0
- package/dist/component/strava/utils.js.map +1 -0
- package/dist/component/utils.d.ts +5 -0
- package/dist/component/utils.d.ts.map +1 -0
- package/dist/component/utils.js +11 -0
- package/dist/component/utils.js.map +1 -0
- package/package.json +131 -130
- package/src/client/index.ts +121 -52
- package/src/component/_generated/api.ts +18 -0
- package/src/component/_generated/component.ts +44 -11
- package/src/component/garmin/auth.ts +0 -9
- package/src/component/garmin/private.ts +0 -12
- package/src/component/garmin/public.ts +8 -1
- package/src/component/schema.ts +5 -3
- package/src/{strava → component/strava}/auth.ts +143 -185
- package/src/component/strava/client.ts +20 -0
- package/src/component/strava/private.ts +147 -89
- package/src/component/strava/public.ts +268 -110
- package/src/{strava → component/strava/transform}/activity.ts +256 -276
- package/src/{strava → component/strava/transform}/athlete.ts +41 -47
- package/src/{strava/maps/sport-type.ts → component/strava/transform/maps/sportType.ts} +100 -99
- package/src/component/strava/types/specs/strava-api.json +4796 -0
- package/src/component/strava/types/stravaApi/client/client.gen.ts +290 -0
- package/src/component/strava/types/stravaApi/client/index.ts +25 -0
- package/src/component/strava/types/stravaApi/client/types.gen.ts +214 -0
- package/src/component/strava/types/stravaApi/client/utils.gen.ts +316 -0
- package/src/component/strava/types/stravaApi/client.gen.ts +16 -0
- package/src/component/strava/types/stravaApi/core/auth.gen.ts +41 -0
- package/src/component/strava/types/stravaApi/core/bodySerializer.gen.ts +82 -0
- package/src/component/strava/types/stravaApi/core/params.gen.ts +169 -0
- package/src/component/strava/types/stravaApi/core/pathSerializer.gen.ts +171 -0
- package/src/component/strava/types/stravaApi/core/queryKeySerializer.gen.ts +117 -0
- package/src/component/strava/types/stravaApi/core/serverSentEvents.gen.ts +243 -0
- package/src/component/strava/types/stravaApi/core/types.gen.ts +104 -0
- package/src/component/strava/types/stravaApi/core/utils.gen.ts +140 -0
- package/src/component/strava/types/stravaApi/index.ts +4 -0
- package/src/component/strava/types/stravaApi/sdk.gen.ts +410 -0
- package/src/component/strava/types/stravaApi/types.gen.ts +2435 -0
- package/src/component/strava/types/stravaApi/zod.gen.ts +1132 -0
- package/src/component/strava/utils.ts +52 -0
- package/src/component/utils.ts +11 -0
- package/dist/strava/activity.d.ts +0 -121
- package/dist/strava/activity.d.ts.map +0 -1
- package/dist/strava/activity.js.map +0 -1
- package/dist/strava/athlete.d.ts.map +0 -1
- package/dist/strava/athlete.js.map +0 -1
- package/dist/strava/auth.d.ts.map +0 -1
- package/dist/strava/auth.js.map +0 -1
- package/dist/strava/client.d.ts +0 -93
- package/dist/strava/client.d.ts.map +0 -1
- package/dist/strava/client.js +0 -158
- package/dist/strava/client.js.map +0 -1
- package/dist/strava/index.d.ts +0 -13
- package/dist/strava/index.d.ts.map +0 -1
- package/dist/strava/index.js +0 -17
- package/dist/strava/index.js.map +0 -1
- package/dist/strava/maps/sport-type.d.ts +0 -7
- package/dist/strava/maps/sport-type.d.ts.map +0 -1
- package/dist/strava/maps/sport-type.js.map +0 -1
- package/dist/strava/sync.d.ts +0 -104
- package/dist/strava/sync.d.ts.map +0 -1
- package/dist/strava/sync.js +0 -87
- package/dist/strava/sync.js.map +0 -1
- package/dist/strava/types.d.ts +0 -266
- package/dist/strava/types.d.ts.map +0 -1
- package/dist/strava/types.js +0 -8
- package/dist/strava/types.js.map +0 -1
- package/src/strava/activity.test.ts +0 -415
- package/src/strava/athlete.test.ts +0 -139
- package/src/strava/auth.test.ts +0 -78
- package/src/strava/client.ts +0 -212
- package/src/strava/index.ts +0 -54
- package/src/strava/maps/sport-type.test.ts +0 -69
- package/src/strava/sync.ts +0 -168
- package/src/strava/types.ts +0 -361
|
@@ -1,25 +1,14 @@
|
|
|
1
|
-
// ─── Strava OAuth Helpers
|
|
1
|
+
// ─── Strava OAuth 2.0 Helpers ────────────────────────────────────────────────
|
|
2
2
|
// Pure helper functions for the Strava OAuth 2.0 Authorization Code flow.
|
|
3
3
|
// No external dependencies — uses the global `fetch`.
|
|
4
|
-
const DEFAULT_BASE_URL = "https://www.strava.com";
|
|
5
4
|
/**
|
|
6
5
|
* Build the Strava OAuth authorization URL.
|
|
7
6
|
*
|
|
8
7
|
* Redirect the user to this URL to begin the OAuth flow. After the user
|
|
9
8
|
* grants access, Strava will redirect back to `redirectUri` with a `code`
|
|
10
9
|
* query parameter.
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```ts
|
|
14
|
-
* const url = buildAuthUrl({
|
|
15
|
-
* clientId: process.env.STRAVA_CLIENT_ID!,
|
|
16
|
-
* redirectUri: "https://your-app.com/api/strava/callback",
|
|
17
|
-
* });
|
|
18
|
-
* // Redirect user to `url`
|
|
19
|
-
* ```
|
|
20
10
|
*/
|
|
21
11
|
export function buildAuthUrl(opts) {
|
|
22
|
-
const base = (opts.baseUrl ?? DEFAULT_BASE_URL).replace(/\/+$/, "");
|
|
23
12
|
const params = new URLSearchParams({
|
|
24
13
|
client_id: opts.clientId,
|
|
25
14
|
redirect_uri: opts.redirectUri,
|
|
@@ -30,7 +19,7 @@ export function buildAuthUrl(opts) {
|
|
|
30
19
|
if (opts.state) {
|
|
31
20
|
params.set("state", opts.state);
|
|
32
21
|
}
|
|
33
|
-
return
|
|
22
|
+
return `https://www.strava.com/oauth/authorize?${params.toString()}`;
|
|
34
23
|
}
|
|
35
24
|
/**
|
|
36
25
|
* Exchange an authorization code for access and refresh tokens.
|
|
@@ -40,21 +29,9 @@ export function buildAuthUrl(opts) {
|
|
|
40
29
|
*
|
|
41
30
|
* @returns The token response including `access_token`, `refresh_token`,
|
|
42
31
|
* `expires_at`, and the authenticated `athlete` profile.
|
|
43
|
-
*
|
|
44
|
-
* @example
|
|
45
|
-
* ```ts
|
|
46
|
-
* const tokens = await exchangeCode({
|
|
47
|
-
* clientId: process.env.STRAVA_CLIENT_ID!,
|
|
48
|
-
* clientSecret: process.env.STRAVA_CLIENT_SECRET!,
|
|
49
|
-
* code: request.query.code,
|
|
50
|
-
* });
|
|
51
|
-
* // Store tokens.access_token, tokens.refresh_token, tokens.expires_at
|
|
52
|
-
* ```
|
|
53
32
|
*/
|
|
54
33
|
export async function exchangeCode(opts) {
|
|
55
|
-
const
|
|
56
|
-
const url = `${base}/oauth/token`;
|
|
57
|
-
const response = await fetch(url, {
|
|
34
|
+
const response = await fetch("https://www.strava.com/oauth/token", {
|
|
58
35
|
method: "POST",
|
|
59
36
|
headers: { "Content-Type": "application/json" },
|
|
60
37
|
body: JSON.stringify({
|
|
@@ -78,21 +55,9 @@ export async function exchangeCode(opts) {
|
|
|
78
55
|
*
|
|
79
56
|
* @returns A new token response with a fresh `access_token` and
|
|
80
57
|
* possibly a new `refresh_token`.
|
|
81
|
-
*
|
|
82
|
-
* @example
|
|
83
|
-
* ```ts
|
|
84
|
-
* const tokens = await refreshToken({
|
|
85
|
-
* clientId: process.env.STRAVA_CLIENT_ID!,
|
|
86
|
-
* clientSecret: process.env.STRAVA_CLIENT_SECRET!,
|
|
87
|
-
* refreshToken: storedRefreshToken,
|
|
88
|
-
* });
|
|
89
|
-
* // Update stored tokens
|
|
90
|
-
* ```
|
|
91
58
|
*/
|
|
92
59
|
export async function refreshToken(opts) {
|
|
93
|
-
const
|
|
94
|
-
const url = `${base}/oauth/token`;
|
|
95
|
-
const response = await fetch(url, {
|
|
60
|
+
const response = await fetch("https://www.strava.com/oauth/token", {
|
|
96
61
|
method: "POST",
|
|
97
62
|
headers: { "Content-Type": "application/json" },
|
|
98
63
|
body: JSON.stringify({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/component/strava/auth.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,sDAAsD;AA+BtD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAyB;IACpD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,SAAS,EAAE,IAAI,CAAC,QAAQ;QACxB,YAAY,EAAE,IAAI,CAAC,WAAW;QAC9B,aAAa,EAAE,MAAM;QACrB,eAAe,EAAE,MAAM;QACvB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,yCAAyC;KAC/D,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,0CAA0C,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC;AACvE,CAAC;AAaD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAyB;IAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oCAAoC,EAAE;QACjE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,UAAU,EAAE,oBAAoB;SACjC,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,IAAI,EAAE,CACzF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6B,CAAC;AAC7D,CAAC;AAaD;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,IAAyB;IAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,oCAAoC,EAAE;QACjE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;QAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,UAAU,EAAE,eAAe;SAC5B,CAAC;KACH,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,IAAI,KAAK,CACb,sCAAsC,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,MAAM,IAAI,EAAE,CACzF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA6B,CAAC;AAC7D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a configured Strava API client with Bearer auth.
|
|
3
|
+
*
|
|
4
|
+
* Each call creates a lightweight client instance — no connection pooling or
|
|
5
|
+
* shared state. Safe to create per-request.
|
|
6
|
+
*/
|
|
7
|
+
export declare function createStravaClient(accessToken: string): import("./types/stravaApi/client/types.gen.js").Client;
|
|
8
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/component/strava/client.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,0DAKrD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
// ─── Strava API Helper ──────────────────────────────────────────────────────
|
|
2
|
+
// Shared utility for calling the Strava API v3.
|
|
3
|
+
// Uses the auto-generated @hey-api/openapi-ts SDK.
|
|
4
|
+
import { createClient, createConfig } from "./types/stravaApi/client/index.js";
|
|
5
|
+
// ─── Strava API Client ─────────────────────────────────────────────────────
|
|
6
|
+
/**
|
|
7
|
+
* Create a configured Strava API client with Bearer auth.
|
|
8
|
+
*
|
|
9
|
+
* Each call creates a lightweight client instance — no connection pooling or
|
|
10
|
+
* shared state. Safe to create per-request.
|
|
11
|
+
*/
|
|
12
|
+
export function createStravaClient(accessToken) {
|
|
13
|
+
return createClient(createConfig({
|
|
14
|
+
baseUrl: "https://www.strava.com/api/v3",
|
|
15
|
+
headers: { Authorization: `Bearer ${accessToken}` },
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/component/strava/client.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,gDAAgD;AAChD,mDAAmD;AAEnD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAE/E,8EAA8E;AAE9E;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACpD,OAAO,YAAY,CAAC,YAAY,CAAC;QAC/B,OAAO,EAAE,+BAA+B;QACxC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,WAAW,EAAE,EAAE;KACpD,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -1,3 +1,22 @@
|
|
|
1
|
+
export declare const storePendingOAuth: import("convex/server").RegisteredMutation<"internal", {
|
|
2
|
+
state: string;
|
|
3
|
+
userId: string;
|
|
4
|
+
provider: string;
|
|
5
|
+
}, Promise<null>>;
|
|
6
|
+
export declare const getPendingOAuth: import("convex/server").RegisteredQuery<"internal", {
|
|
7
|
+
state: string;
|
|
8
|
+
}, Promise<{
|
|
9
|
+
_id: import("convex/values").GenericId<"pendingOAuth">;
|
|
10
|
+
_creationTime: number;
|
|
11
|
+
codeVerifier?: string | undefined;
|
|
12
|
+
state: string;
|
|
13
|
+
userId: string;
|
|
14
|
+
provider: string;
|
|
15
|
+
createdAt: number;
|
|
16
|
+
} | null>>;
|
|
17
|
+
export declare const deletePendingOAuth: import("convex/server").RegisteredMutation<"internal", {
|
|
18
|
+
state: string;
|
|
19
|
+
}, Promise<null>>;
|
|
1
20
|
/**
|
|
2
21
|
* Store or update OAuth tokens for a connection.
|
|
3
22
|
* Upserts by connectionId — one token record per connection.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../../../src/component/strava/private.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"private.d.ts","sourceRoot":"","sources":["../../../src/component/strava/private.ts"],"names":[],"mappings":"AAaA,eAAO,MAAM,iBAAiB;;;;iBAc5B,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;UAmB1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;iBAa7B,CAAC;AAIH;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;iBA4BtB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,SAAS;;;;;;;;;UAqBpB,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,YAAY;;iBAgBvB,CAAC"}
|
|
@@ -1,7 +1,57 @@
|
|
|
1
|
-
// ─── Internal Token CRUD
|
|
2
|
-
//
|
|
1
|
+
// ─── Internal Token & Pending OAuth CRUD ─────────────────────────────────────
|
|
2
|
+
// Called only from strava/public.ts. Not exposed to the host app.
|
|
3
3
|
import { v } from "convex/values";
|
|
4
4
|
import { internalMutation, internalQuery, } from "../_generated/server";
|
|
5
|
+
// ─── Internal Pending OAuth CRUD ─────────────────────────────────────────────
|
|
6
|
+
// Temporary storage for in-progress Strava OAuth flows.
|
|
7
|
+
// Bridges getStravaAuthUrl and completeStravaOAuth.
|
|
8
|
+
export const storePendingOAuth = internalMutation({
|
|
9
|
+
args: {
|
|
10
|
+
provider: v.string(),
|
|
11
|
+
state: v.string(),
|
|
12
|
+
userId: v.string(),
|
|
13
|
+
},
|
|
14
|
+
returns: v.null(),
|
|
15
|
+
handler: async (ctx, args) => {
|
|
16
|
+
await ctx.db.insert("pendingOAuth", {
|
|
17
|
+
...args,
|
|
18
|
+
createdAt: Date.now(),
|
|
19
|
+
});
|
|
20
|
+
return null;
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
export const getPendingOAuth = internalQuery({
|
|
24
|
+
args: { state: v.string() },
|
|
25
|
+
returns: v.union(v.object({
|
|
26
|
+
_id: v.id("pendingOAuth"),
|
|
27
|
+
_creationTime: v.number(),
|
|
28
|
+
provider: v.string(),
|
|
29
|
+
state: v.string(),
|
|
30
|
+
userId: v.string(),
|
|
31
|
+
createdAt: v.number(),
|
|
32
|
+
}), v.null()),
|
|
33
|
+
handler: async (ctx, args) => {
|
|
34
|
+
return await ctx.db
|
|
35
|
+
.query("pendingOAuth")
|
|
36
|
+
.withIndex("by_state", (q) => q.eq("state", args.state))
|
|
37
|
+
.first();
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
export const deletePendingOAuth = internalMutation({
|
|
41
|
+
args: { state: v.string() },
|
|
42
|
+
returns: v.null(),
|
|
43
|
+
handler: async (ctx, args) => {
|
|
44
|
+
const pending = await ctx.db
|
|
45
|
+
.query("pendingOAuth")
|
|
46
|
+
.withIndex("by_state", (q) => q.eq("state", args.state))
|
|
47
|
+
.first();
|
|
48
|
+
if (pending) {
|
|
49
|
+
await ctx.db.delete(pending._id);
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
// ─── Internal Token CRUD ─────────────────────────────────────────────────────
|
|
5
55
|
/**
|
|
6
56
|
* Store or update OAuth tokens for a connection.
|
|
7
57
|
* Upserts by connectionId — one token record per connection.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"private.js","sourceRoot":"","sources":["../../../src/component/strava/private.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"private.js","sourceRoot":"","sources":["../../../src/component/strava/private.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,kEAAkE;AAElE,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EACL,gBAAgB,EAChB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAE9B,gFAAgF;AAChF,wDAAwD;AACxD,oDAAoD;AAEpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,CAAC;IAChD,IAAI,EAAE;QACJ,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;KACnB;IACD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;IACjB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,cAAc,EAAE;YAClC,GAAG,IAAI;YACP,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAC;IAC3C,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;QACzB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB,CAAC,EACF,CAAC,CAAC,IAAI,EAAE,CACT;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,cAAc,CAAC;aACrB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACvD,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAG,gBAAgB,CAAC;IACjD,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE;IAC3B,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;IACjB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,EAAE;aACzB,KAAK,CAAC,cAAc,CAAC;aACrB,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;aACvD,KAAK,EAAE,CAAC;QACX,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,gBAAgB,CAAC;IAC1C,IAAI,EAAE;QACJ,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;QACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;QACxB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;KACtB;IACD,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;IACjB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE;aAC1B,KAAK,CAAC,gBAAgB,CAAC;aACvB,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CACxC;aACA,KAAK,EAAE,CAAC;QAEX,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;aAC1B,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,aAAa,CAAC;IACrC,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE;IAC3C,OAAO,EAAE,CAAC,CAAC,KAAK,CACd,CAAC,CAAC,MAAM,CAAC;QACP,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,gBAAgB,CAAC;QAC3B,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;QACzB,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC;QACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,SAAS,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;KAClC,CAAC,EACF,CAAC,CAAC,IAAI,EAAE,CACT;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,OAAO,MAAM,GAAG,CAAC,EAAE;aAChB,KAAK,CAAC,gBAAgB,CAAC;aACvB,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CACxC;aACA,KAAK,EAAE,CAAC;IACb,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,gBAAgB,CAAC;IAC3C,IAAI,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE;IAC3C,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE;IACjB,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,EAAE;aAC1B,KAAK,CAAC,gBAAgB,CAAC;aACvB,SAAS,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,EAAE,CAClC,CAAC,CAAC,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CACxC;aACA,KAAK,EAAE,CAAC;QAEX,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1,27 +1,78 @@
|
|
|
1
1
|
import type { Id } from "../_generated/dataModel";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Generate a Strava OAuth authorization URL.
|
|
4
|
+
*
|
|
5
|
+
* If `userId` is provided, the state parameter is stored in the component's
|
|
6
|
+
* `pendingOAuth` table so that `completeStravaOAuth` can look it up
|
|
7
|
+
* automatically when the callback fires. This is the recommended flow
|
|
8
|
+
* when using `registerRoutes`.
|
|
9
|
+
*
|
|
10
|
+
* If `userId` is omitted, the host app must store the returned `state`
|
|
11
|
+
* itself and pass the userId to `connectStrava` manually.
|
|
12
|
+
*/
|
|
13
|
+
export declare const getStravaAuthUrl: import("convex/server").RegisteredAction<"public", {
|
|
14
|
+
userId?: string | undefined;
|
|
15
|
+
scope?: string | undefined;
|
|
16
|
+
clientId: string;
|
|
17
|
+
redirectUri: string;
|
|
18
|
+
}, Promise<{
|
|
19
|
+
authUrl: string;
|
|
20
|
+
state: string;
|
|
21
|
+
}>>;
|
|
22
|
+
/**
|
|
23
|
+
* Full Strava OAuth callback handler (manual flow).
|
|
4
24
|
*
|
|
5
25
|
* Exchanges the authorization code for tokens, creates/reactivates the
|
|
6
26
|
* Soma connection, stores tokens securely, syncs the athlete profile,
|
|
7
27
|
* and syncs all activities.
|
|
8
28
|
*
|
|
29
|
+
* Used when the host app handles the callback itself and passes the
|
|
30
|
+
* userId directly (analogous to `connectGarmin`).
|
|
31
|
+
*
|
|
9
32
|
* Returns `{ connectionId, synced, errors }`.
|
|
10
33
|
*/
|
|
11
34
|
export declare const connectStrava: import("convex/server").RegisteredAction<"public", {
|
|
12
|
-
baseUrl?: string | undefined;
|
|
13
|
-
includeStreams?: boolean | undefined;
|
|
14
35
|
userId: string;
|
|
15
36
|
clientId: string;
|
|
16
37
|
clientSecret: string;
|
|
17
38
|
code: string;
|
|
18
39
|
}, Promise<{
|
|
19
40
|
connectionId: Id<"connections">;
|
|
20
|
-
synced:
|
|
21
|
-
|
|
22
|
-
|
|
41
|
+
synced: {
|
|
42
|
+
athletes: number;
|
|
43
|
+
activities: number;
|
|
44
|
+
};
|
|
45
|
+
errors: Array<{
|
|
46
|
+
type: string;
|
|
47
|
+
id: string;
|
|
23
48
|
error: string;
|
|
24
|
-
}
|
|
49
|
+
}>;
|
|
50
|
+
}>>;
|
|
51
|
+
/**
|
|
52
|
+
* Complete a Strava OAuth flow using stored pending state.
|
|
53
|
+
*
|
|
54
|
+
* Used by `registerRoutes` — the callback handler calls this with the
|
|
55
|
+
* `code` and `state` from the redirect. The action looks up the pending
|
|
56
|
+
* state (userId) stored during `getStravaAuthUrl`, exchanges for tokens,
|
|
57
|
+
* creates the connection, syncs data, and cleans up the pending entry.
|
|
58
|
+
*/
|
|
59
|
+
export declare const completeStravaOAuth: import("convex/server").RegisteredAction<"public", {
|
|
60
|
+
state: string;
|
|
61
|
+
clientId: string;
|
|
62
|
+
clientSecret: string;
|
|
63
|
+
code: string;
|
|
64
|
+
}, Promise<{
|
|
65
|
+
connectionId: Id<"connections">;
|
|
66
|
+
userId: string;
|
|
67
|
+
synced: {
|
|
68
|
+
athletes: number;
|
|
69
|
+
activities: number;
|
|
70
|
+
};
|
|
71
|
+
errors: Array<{
|
|
72
|
+
type: string;
|
|
73
|
+
id: string;
|
|
74
|
+
error: string;
|
|
75
|
+
}>;
|
|
25
76
|
}>>;
|
|
26
77
|
/**
|
|
27
78
|
* Incremental Strava sync for an already-connected user.
|
|
@@ -32,16 +83,41 @@ export declare const connectStrava: import("convex/server").RegisteredAction<"pu
|
|
|
32
83
|
* Returns `{ synced, errors }`.
|
|
33
84
|
*/
|
|
34
85
|
export declare const syncStrava: import("convex/server").RegisteredAction<"public", {
|
|
35
|
-
baseUrl?: string | undefined;
|
|
36
|
-
includeStreams?: boolean | undefined;
|
|
37
86
|
after?: number | undefined;
|
|
38
87
|
userId: string;
|
|
39
88
|
clientId: string;
|
|
40
89
|
clientSecret: string;
|
|
41
90
|
}, Promise<{
|
|
42
|
-
synced:
|
|
91
|
+
synced: {
|
|
92
|
+
athletes: number;
|
|
93
|
+
activities: number;
|
|
94
|
+
};
|
|
95
|
+
errors: Array<{
|
|
96
|
+
type: string;
|
|
97
|
+
id: string;
|
|
98
|
+
error: string;
|
|
99
|
+
}>;
|
|
100
|
+
}>>;
|
|
101
|
+
/**
|
|
102
|
+
* Fetch and ingest all Strava data types for a connected user.
|
|
103
|
+
*
|
|
104
|
+
* Called by the public actions (connectStrava, completeStravaOAuth, syncStrava)
|
|
105
|
+
* after obtaining a valid access token.
|
|
106
|
+
*/
|
|
107
|
+
export declare const syncAllTypes: import("convex/server").RegisteredAction<"public", {
|
|
108
|
+
after?: number | undefined;
|
|
109
|
+
before?: number | undefined;
|
|
110
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
111
|
+
userId: string;
|
|
112
|
+
accessToken: string;
|
|
113
|
+
}, Promise<{
|
|
114
|
+
synced: {
|
|
115
|
+
athletes: number;
|
|
116
|
+
activities: number;
|
|
117
|
+
};
|
|
43
118
|
errors: {
|
|
44
|
-
|
|
119
|
+
type: string;
|
|
120
|
+
id: string;
|
|
45
121
|
error: string;
|
|
46
122
|
}[];
|
|
47
123
|
}>>;
|
|
@@ -52,7 +128,6 @@ export declare const syncStrava: import("convex/server").RegisteredAction<"publi
|
|
|
52
128
|
* and sets the connection to inactive.
|
|
53
129
|
*/
|
|
54
130
|
export declare const disconnectStrava: import("convex/server").RegisteredAction<"public", {
|
|
55
|
-
baseUrl?: string | undefined;
|
|
56
131
|
userId: string;
|
|
57
132
|
clientId: string;
|
|
58
133
|
clientSecret: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/component/strava/public.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAO,EAAE,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../../src/component/strava/public.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAO,EAAE,EAAE,MAAM,yBAAyB,CAAC;AAmBvD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;GA2B3B,CAAC;AAEH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa;;;;;;kBAeR,EAAE,CAAC,aAAa,CAAC;YACvB;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;YACxC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;GA+C5D,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB;;;;;;kBAgBd,EAAE,CAAC,aAAa,CAAC;YACvB,MAAM;YACN;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;YACxC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;GAsE5D,CAAC;AAEH;;;;;;;GAOG;AACH,eAAO,MAAM,UAAU;;;;;;YAcX;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;YACxC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;GA+E5D,CAAC;AAIH;;;;;GAKG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;cAaO,MAAM;YAAM,MAAM;eAAS,MAAM;;GAmE/D,CAAC;AAIH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;iBAoD3B,CAAC"}
|