@nativesquare/soma 0.3.0 → 0.4.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 +167 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +150 -0
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/api.d.ts +2 -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 +56 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/garmin.d.ts +110 -0
- package/dist/component/garmin.d.ts.map +1 -0
- package/dist/component/garmin.js +454 -0
- package/dist/component/garmin.js.map +1 -0
- package/dist/component/public.d.ts +761 -761
- package/dist/component/schema.d.ts +390 -388
- package/dist/component/schema.d.ts.map +1 -1
- package/dist/component/schema.js +3 -2
- package/dist/component/schema.js.map +1 -1
- package/dist/component/strava.d.ts +5 -4
- package/dist/component/strava.d.ts.map +1 -1
- package/dist/component/strava.js +18 -1
- package/dist/component/strava.js.map +1 -1
- package/dist/component/validators/activity.d.ts +42 -42
- package/dist/component/validators/body.d.ts +47 -47
- package/dist/component/validators/daily.d.ts +17 -17
- package/dist/component/validators/plannedWorkout.d.ts +5 -5
- package/dist/component/validators/samples.d.ts +2 -2
- package/dist/component/validators/shared.d.ts +17 -17
- package/dist/component/validators/sleep.d.ts +17 -17
- package/dist/garmin/activity.d.ts +101 -0
- package/dist/garmin/activity.d.ts.map +1 -0
- package/dist/garmin/activity.js +207 -0
- package/dist/garmin/activity.js.map +1 -0
- package/dist/garmin/auth.d.ts +65 -0
- package/dist/garmin/auth.d.ts.map +1 -0
- package/dist/garmin/auth.js +155 -0
- package/dist/garmin/auth.js.map +1 -0
- package/dist/garmin/body.d.ts +26 -0
- package/dist/garmin/body.d.ts.map +1 -0
- package/dist/garmin/body.js +44 -0
- package/dist/garmin/body.js.map +1 -0
- package/dist/garmin/client.d.ts +99 -0
- package/dist/garmin/client.d.ts.map +1 -0
- package/dist/garmin/client.js +153 -0
- package/dist/garmin/client.js.map +1 -0
- package/dist/garmin/daily.d.ts +74 -0
- package/dist/garmin/daily.d.ts.map +1 -0
- package/dist/garmin/daily.js +143 -0
- package/dist/garmin/daily.js.map +1 -0
- package/dist/garmin/index.d.ts +20 -0
- package/dist/garmin/index.d.ts.map +1 -0
- package/dist/garmin/index.js +21 -0
- package/dist/garmin/index.js.map +1 -0
- package/dist/garmin/maps/activity-type.d.ts +7 -0
- package/dist/garmin/maps/activity-type.d.ts.map +1 -0
- package/dist/garmin/maps/activity-type.js +98 -0
- package/dist/garmin/maps/activity-type.js.map +1 -0
- package/dist/garmin/maps/sleep-level.d.ts +6 -0
- package/dist/garmin/maps/sleep-level.d.ts.map +1 -0
- package/dist/garmin/maps/sleep-level.js +21 -0
- package/dist/garmin/maps/sleep-level.js.map +1 -0
- package/dist/garmin/menstruation.d.ts +23 -0
- package/dist/garmin/menstruation.d.ts.map +1 -0
- package/dist/garmin/menstruation.js +34 -0
- package/dist/garmin/menstruation.js.map +1 -0
- package/dist/garmin/sleep.d.ts +62 -0
- package/dist/garmin/sleep.d.ts.map +1 -0
- package/dist/garmin/sleep.js +125 -0
- package/dist/garmin/sleep.js.map +1 -0
- package/dist/garmin/sync.d.ts +39 -0
- package/dist/garmin/sync.d.ts.map +1 -0
- package/dist/garmin/sync.js +175 -0
- package/dist/garmin/sync.js.map +1 -0
- package/dist/garmin/types.d.ts +212 -0
- package/dist/garmin/types.d.ts.map +1 -0
- package/dist/garmin/types.js +8 -0
- package/dist/garmin/types.js.map +1 -0
- package/dist/validators.d.ts +331 -331
- package/package.json +5 -1
- package/src/client/index.ts +194 -1
- package/src/component/_generated/api.ts +2 -0
- package/src/component/_generated/component.ts +62 -0
- package/src/component/garmin.ts +534 -0
- package/src/component/schema.ts +3 -2
- package/src/component/strava.ts +23 -1
- package/src/garmin/activity.test.ts +178 -0
- package/src/garmin/activity.ts +272 -0
- package/src/garmin/auth.test.ts +128 -0
- package/src/garmin/auth.ts +249 -0
- package/src/garmin/body.ts +59 -0
- package/src/garmin/client.ts +254 -0
- package/src/garmin/daily.ts +211 -0
- package/src/garmin/index.ts +76 -0
- package/src/garmin/maps/activity-type.test.ts +78 -0
- package/src/garmin/maps/activity-type.ts +116 -0
- package/src/garmin/maps/sleep-level.ts +22 -0
- package/src/garmin/menstruation.ts +42 -0
- package/src/garmin/sleep.test.ts +110 -0
- package/src/garmin/sleep.ts +170 -0
- package/src/garmin/sync.ts +223 -0
- package/src/garmin/types.ts +338 -0
package/dist/client/index.d.ts
CHANGED
|
@@ -20,6 +20,19 @@ export interface SomaStravaConfig {
|
|
|
20
20
|
*/
|
|
21
21
|
baseUrl?: string;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* Configuration for the Garmin integration.
|
|
25
|
+
*
|
|
26
|
+
* If not provided to the constructor, the Soma class will attempt to
|
|
27
|
+
* read `GARMIN_CONSUMER_KEY` and `GARMIN_CONSUMER_SECRET` from
|
|
28
|
+
* environment variables automatically.
|
|
29
|
+
*/
|
|
30
|
+
export interface SomaGarminConfig {
|
|
31
|
+
/** Your Garmin application's Consumer Key. */
|
|
32
|
+
consumerKey: string;
|
|
33
|
+
/** Your Garmin application's Consumer Secret. */
|
|
34
|
+
consumerSecret: string;
|
|
35
|
+
}
|
|
23
36
|
/**
|
|
24
37
|
* Client class for the @nativesquare/soma Convex component.
|
|
25
38
|
*
|
|
@@ -57,8 +70,10 @@ export interface SomaStravaConfig {
|
|
|
57
70
|
export declare class Soma {
|
|
58
71
|
component: SomaComponent;
|
|
59
72
|
private stravaConfig?;
|
|
73
|
+
private garminConfig?;
|
|
60
74
|
constructor(component: SomaComponent, options?: {
|
|
61
75
|
strava?: SomaStravaConfig;
|
|
76
|
+
garmin?: SomaGarminConfig;
|
|
62
77
|
});
|
|
63
78
|
/**
|
|
64
79
|
* Read Strava config from environment variables.
|
|
@@ -69,6 +84,15 @@ export declare class Soma {
|
|
|
69
84
|
* Get the resolved Strava config, or throw a clear error if not configured.
|
|
70
85
|
*/
|
|
71
86
|
private requireStravaConfig;
|
|
87
|
+
/**
|
|
88
|
+
* Read Garmin config from environment variables.
|
|
89
|
+
* Returns undefined if the required vars are not set.
|
|
90
|
+
*/
|
|
91
|
+
private readGarminEnv;
|
|
92
|
+
/**
|
|
93
|
+
* Get the resolved Garmin config, or throw a clear error if not configured.
|
|
94
|
+
*/
|
|
95
|
+
private requireGarminConfig;
|
|
72
96
|
/**
|
|
73
97
|
* Connect a user to a wearable provider.
|
|
74
98
|
*
|
|
@@ -560,6 +584,149 @@ export declare class Soma {
|
|
|
560
584
|
disconnectStrava(ctx: ActionCtx, args: {
|
|
561
585
|
userId: string;
|
|
562
586
|
}): Promise<null>;
|
|
587
|
+
/**
|
|
588
|
+
* Step 1 of the Garmin OAuth 1.0a flow: obtain a request token.
|
|
589
|
+
*
|
|
590
|
+
* Returns the temporary `token`, `tokenSecret`, and the `authUrl` to
|
|
591
|
+
* redirect the user to. The host app must store `token` and `tokenSecret`
|
|
592
|
+
* temporarily (e.g., in session/cookie) and pass them to `connectGarmin`
|
|
593
|
+
* after the user authorizes.
|
|
594
|
+
*
|
|
595
|
+
* @param ctx - Action context from the host app
|
|
596
|
+
* @param opts.callbackUrl - The URL Garmin will redirect to after authorization
|
|
597
|
+
* @returns `{ token, tokenSecret, authUrl }`
|
|
598
|
+
*
|
|
599
|
+
* @example
|
|
600
|
+
* ```ts
|
|
601
|
+
* const { token, tokenSecret, authUrl } = await soma.getGarminRequestToken(ctx, {
|
|
602
|
+
* callbackUrl: "https://your-app.com/api/garmin/callback",
|
|
603
|
+
* });
|
|
604
|
+
* // Store token + tokenSecret in session, redirect user to authUrl
|
|
605
|
+
* ```
|
|
606
|
+
*/
|
|
607
|
+
getGarminRequestToken(ctx: ActionCtx, opts: {
|
|
608
|
+
callbackUrl?: string;
|
|
609
|
+
}): Promise<{
|
|
610
|
+
authUrl: string;
|
|
611
|
+
token: string;
|
|
612
|
+
tokenSecret: string;
|
|
613
|
+
}>;
|
|
614
|
+
/**
|
|
615
|
+
* Step 3 of the Garmin OAuth 1.0a flow + initial data sync.
|
|
616
|
+
*
|
|
617
|
+
* Exchanges the request token + verifier for permanent access tokens,
|
|
618
|
+
* creates/reactivates the Soma connection, stores tokens securely,
|
|
619
|
+
* and syncs the last 30 days of all data types (activities, dailies,
|
|
620
|
+
* sleep, body composition, menstruation).
|
|
621
|
+
*
|
|
622
|
+
* Call this from your OAuth callback endpoint after receiving the
|
|
623
|
+
* `oauth_verifier` query parameter from Garmin.
|
|
624
|
+
*
|
|
625
|
+
* @param ctx - Action context from the host app
|
|
626
|
+
* @param args.userId - The host app's user identifier
|
|
627
|
+
* @param args.token - The request token from Step 1
|
|
628
|
+
* @param args.tokenSecret - The request token secret from Step 1
|
|
629
|
+
* @param args.verifier - The oauth_verifier from the callback
|
|
630
|
+
* @returns `{ connectionId, synced, errors }`
|
|
631
|
+
*
|
|
632
|
+
* @example
|
|
633
|
+
* ```ts
|
|
634
|
+
* export const handleGarminCallback = action({
|
|
635
|
+
* args: {
|
|
636
|
+
* userId: v.string(),
|
|
637
|
+
* token: v.string(),
|
|
638
|
+
* tokenSecret: v.string(),
|
|
639
|
+
* verifier: v.string(),
|
|
640
|
+
* },
|
|
641
|
+
* handler: async (ctx, args) => {
|
|
642
|
+
* return await soma.connectGarmin(ctx, args);
|
|
643
|
+
* },
|
|
644
|
+
* });
|
|
645
|
+
* ```
|
|
646
|
+
*/
|
|
647
|
+
connectGarmin(ctx: ActionCtx, args: {
|
|
648
|
+
userId: string;
|
|
649
|
+
token: string;
|
|
650
|
+
tokenSecret: string;
|
|
651
|
+
verifier: string;
|
|
652
|
+
}): Promise<{
|
|
653
|
+
connectionId: string;
|
|
654
|
+
errors: Array<{
|
|
655
|
+
error: string;
|
|
656
|
+
id: string;
|
|
657
|
+
type: string;
|
|
658
|
+
}>;
|
|
659
|
+
synced: {
|
|
660
|
+
activities: number;
|
|
661
|
+
body: number;
|
|
662
|
+
dailies: number;
|
|
663
|
+
menstruation: number;
|
|
664
|
+
sleep: number;
|
|
665
|
+
};
|
|
666
|
+
}>;
|
|
667
|
+
/**
|
|
668
|
+
* Sync all data types from Garmin for an already-connected user.
|
|
669
|
+
*
|
|
670
|
+
* Fetches activities, dailies, sleep, body composition, and menstruation
|
|
671
|
+
* data for the specified time range (defaults to last 30 days).
|
|
672
|
+
*
|
|
673
|
+
* @param ctx - Action context from the host app
|
|
674
|
+
* @param args.userId - The host app's user identifier
|
|
675
|
+
* @param args.startTimeInSeconds - Optional start of time range (Unix epoch seconds)
|
|
676
|
+
* @param args.endTimeInSeconds - Optional end of time range (Unix epoch seconds)
|
|
677
|
+
* @returns `{ synced, errors }`
|
|
678
|
+
*
|
|
679
|
+
* @example
|
|
680
|
+
* ```ts
|
|
681
|
+
* export const syncGarmin = action({
|
|
682
|
+
* args: { userId: v.string() },
|
|
683
|
+
* handler: async (ctx, { userId }) => {
|
|
684
|
+
* return await soma.syncGarmin(ctx, { userId });
|
|
685
|
+
* },
|
|
686
|
+
* });
|
|
687
|
+
* ```
|
|
688
|
+
*/
|
|
689
|
+
syncGarmin(ctx: ActionCtx, args: {
|
|
690
|
+
userId: string;
|
|
691
|
+
startTimeInSeconds?: number;
|
|
692
|
+
endTimeInSeconds?: number;
|
|
693
|
+
}): Promise<{
|
|
694
|
+
errors: Array<{
|
|
695
|
+
error: string;
|
|
696
|
+
id: string;
|
|
697
|
+
type: string;
|
|
698
|
+
}>;
|
|
699
|
+
synced: {
|
|
700
|
+
activities: number;
|
|
701
|
+
body: number;
|
|
702
|
+
dailies: number;
|
|
703
|
+
menstruation: number;
|
|
704
|
+
sleep: number;
|
|
705
|
+
};
|
|
706
|
+
}>;
|
|
707
|
+
/**
|
|
708
|
+
* Disconnect a user from Garmin.
|
|
709
|
+
*
|
|
710
|
+
* Deletes stored tokens and sets the connection to inactive.
|
|
711
|
+
* Garmin OAuth 1.0a tokens cannot be revoked via API, so cleanup
|
|
712
|
+
* is local only.
|
|
713
|
+
*
|
|
714
|
+
* @param ctx - Action context from the host app
|
|
715
|
+
* @param args.userId - The host app's user identifier
|
|
716
|
+
*
|
|
717
|
+
* @example
|
|
718
|
+
* ```ts
|
|
719
|
+
* export const disconnectGarmin = action({
|
|
720
|
+
* args: { userId: v.string() },
|
|
721
|
+
* handler: async (ctx, { userId }) => {
|
|
722
|
+
* await soma.disconnectGarmin(ctx, { userId });
|
|
723
|
+
* },
|
|
724
|
+
* });
|
|
725
|
+
* ```
|
|
726
|
+
*/
|
|
727
|
+
disconnectGarmin(ctx: ActionCtx, args: {
|
|
728
|
+
userId: string;
|
|
729
|
+
}): Promise<null>;
|
|
563
730
|
}
|
|
564
731
|
/**
|
|
565
732
|
* Common args shape for all ingestion methods.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGnE,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC;AAEzC;;;;;;GAMG;AACH,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,+CAA+C;IAC/C,YAAY,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,qBAAa,IAAI;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.js
CHANGED
|
@@ -36,9 +36,11 @@ import { buildAuthUrl } from "../strava/auth.js";
|
|
|
36
36
|
export class Soma {
|
|
37
37
|
component;
|
|
38
38
|
stravaConfig;
|
|
39
|
+
garminConfig;
|
|
39
40
|
constructor(component, options) {
|
|
40
41
|
this.component = component;
|
|
41
42
|
this.stravaConfig = options?.strava ?? this.readStravaEnv();
|
|
43
|
+
this.garminConfig = options?.garmin ?? this.readGarminEnv();
|
|
42
44
|
}
|
|
43
45
|
/**
|
|
44
46
|
* Read Strava config from environment variables.
|
|
@@ -66,6 +68,28 @@ export class Soma {
|
|
|
66
68
|
}
|
|
67
69
|
return this.stravaConfig;
|
|
68
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Read Garmin config from environment variables.
|
|
73
|
+
* Returns undefined if the required vars are not set.
|
|
74
|
+
*/
|
|
75
|
+
readGarminEnv() {
|
|
76
|
+
const consumerKey = process.env.GARMIN_CONSUMER_KEY;
|
|
77
|
+
const consumerSecret = process.env.GARMIN_CONSUMER_SECRET;
|
|
78
|
+
if (!consumerKey || !consumerSecret)
|
|
79
|
+
return undefined;
|
|
80
|
+
return { consumerKey, consumerSecret };
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get the resolved Garmin config, or throw a clear error if not configured.
|
|
84
|
+
*/
|
|
85
|
+
requireGarminConfig() {
|
|
86
|
+
if (!this.garminConfig) {
|
|
87
|
+
throw new Error("Garmin is not configured. Either set GARMIN_CONSUMER_KEY and " +
|
|
88
|
+
"GARMIN_CONSUMER_SECRET environment variables in the Convex dashboard, " +
|
|
89
|
+
"or pass { garmin: { consumerKey, consumerSecret } } to the Soma constructor.");
|
|
90
|
+
}
|
|
91
|
+
return this.garminConfig;
|
|
92
|
+
}
|
|
69
93
|
// ─── Connect / Disconnect ───────────────────────────────────────────────────
|
|
70
94
|
/**
|
|
71
95
|
* Connect a user to a wearable provider.
|
|
@@ -608,5 +632,131 @@ export class Soma {
|
|
|
608
632
|
baseUrl: config.baseUrl,
|
|
609
633
|
});
|
|
610
634
|
}
|
|
635
|
+
// ─── Garmin Integration ──────────────────────────────────────────────────────
|
|
636
|
+
// High-level methods that handle OAuth 1.0a, token storage, and data syncing
|
|
637
|
+
// for Garmin. Requires Garmin credentials to be configured either via
|
|
638
|
+
// environment variables or the constructor.
|
|
639
|
+
/**
|
|
640
|
+
* Step 1 of the Garmin OAuth 1.0a flow: obtain a request token.
|
|
641
|
+
*
|
|
642
|
+
* Returns the temporary `token`, `tokenSecret`, and the `authUrl` to
|
|
643
|
+
* redirect the user to. The host app must store `token` and `tokenSecret`
|
|
644
|
+
* temporarily (e.g., in session/cookie) and pass them to `connectGarmin`
|
|
645
|
+
* after the user authorizes.
|
|
646
|
+
*
|
|
647
|
+
* @param ctx - Action context from the host app
|
|
648
|
+
* @param opts.callbackUrl - The URL Garmin will redirect to after authorization
|
|
649
|
+
* @returns `{ token, tokenSecret, authUrl }`
|
|
650
|
+
*
|
|
651
|
+
* @example
|
|
652
|
+
* ```ts
|
|
653
|
+
* const { token, tokenSecret, authUrl } = await soma.getGarminRequestToken(ctx, {
|
|
654
|
+
* callbackUrl: "https://your-app.com/api/garmin/callback",
|
|
655
|
+
* });
|
|
656
|
+
* // Store token + tokenSecret in session, redirect user to authUrl
|
|
657
|
+
* ```
|
|
658
|
+
*/
|
|
659
|
+
async getGarminRequestToken(ctx, opts) {
|
|
660
|
+
const config = this.requireGarminConfig();
|
|
661
|
+
return await ctx.runAction(this.component.garmin.getGarminRequestToken, {
|
|
662
|
+
consumerKey: config.consumerKey,
|
|
663
|
+
consumerSecret: config.consumerSecret,
|
|
664
|
+
callbackUrl: opts.callbackUrl,
|
|
665
|
+
});
|
|
666
|
+
}
|
|
667
|
+
/**
|
|
668
|
+
* Step 3 of the Garmin OAuth 1.0a flow + initial data sync.
|
|
669
|
+
*
|
|
670
|
+
* Exchanges the request token + verifier for permanent access tokens,
|
|
671
|
+
* creates/reactivates the Soma connection, stores tokens securely,
|
|
672
|
+
* and syncs the last 30 days of all data types (activities, dailies,
|
|
673
|
+
* sleep, body composition, menstruation).
|
|
674
|
+
*
|
|
675
|
+
* Call this from your OAuth callback endpoint after receiving the
|
|
676
|
+
* `oauth_verifier` query parameter from Garmin.
|
|
677
|
+
*
|
|
678
|
+
* @param ctx - Action context from the host app
|
|
679
|
+
* @param args.userId - The host app's user identifier
|
|
680
|
+
* @param args.token - The request token from Step 1
|
|
681
|
+
* @param args.tokenSecret - The request token secret from Step 1
|
|
682
|
+
* @param args.verifier - The oauth_verifier from the callback
|
|
683
|
+
* @returns `{ connectionId, synced, errors }`
|
|
684
|
+
*
|
|
685
|
+
* @example
|
|
686
|
+
* ```ts
|
|
687
|
+
* export const handleGarminCallback = action({
|
|
688
|
+
* args: {
|
|
689
|
+
* userId: v.string(),
|
|
690
|
+
* token: v.string(),
|
|
691
|
+
* tokenSecret: v.string(),
|
|
692
|
+
* verifier: v.string(),
|
|
693
|
+
* },
|
|
694
|
+
* handler: async (ctx, args) => {
|
|
695
|
+
* return await soma.connectGarmin(ctx, args);
|
|
696
|
+
* },
|
|
697
|
+
* });
|
|
698
|
+
* ```
|
|
699
|
+
*/
|
|
700
|
+
async connectGarmin(ctx, args) {
|
|
701
|
+
const config = this.requireGarminConfig();
|
|
702
|
+
return await ctx.runAction(this.component.garmin.connectGarmin, {
|
|
703
|
+
...args,
|
|
704
|
+
consumerKey: config.consumerKey,
|
|
705
|
+
consumerSecret: config.consumerSecret,
|
|
706
|
+
});
|
|
707
|
+
}
|
|
708
|
+
/**
|
|
709
|
+
* Sync all data types from Garmin for an already-connected user.
|
|
710
|
+
*
|
|
711
|
+
* Fetches activities, dailies, sleep, body composition, and menstruation
|
|
712
|
+
* data for the specified time range (defaults to last 30 days).
|
|
713
|
+
*
|
|
714
|
+
* @param ctx - Action context from the host app
|
|
715
|
+
* @param args.userId - The host app's user identifier
|
|
716
|
+
* @param args.startTimeInSeconds - Optional start of time range (Unix epoch seconds)
|
|
717
|
+
* @param args.endTimeInSeconds - Optional end of time range (Unix epoch seconds)
|
|
718
|
+
* @returns `{ synced, errors }`
|
|
719
|
+
*
|
|
720
|
+
* @example
|
|
721
|
+
* ```ts
|
|
722
|
+
* export const syncGarmin = action({
|
|
723
|
+
* args: { userId: v.string() },
|
|
724
|
+
* handler: async (ctx, { userId }) => {
|
|
725
|
+
* return await soma.syncGarmin(ctx, { userId });
|
|
726
|
+
* },
|
|
727
|
+
* });
|
|
728
|
+
* ```
|
|
729
|
+
*/
|
|
730
|
+
async syncGarmin(ctx, args) {
|
|
731
|
+
const config = this.requireGarminConfig();
|
|
732
|
+
return await ctx.runAction(this.component.garmin.syncGarmin, {
|
|
733
|
+
...args,
|
|
734
|
+
consumerKey: config.consumerKey,
|
|
735
|
+
consumerSecret: config.consumerSecret,
|
|
736
|
+
});
|
|
737
|
+
}
|
|
738
|
+
/**
|
|
739
|
+
* Disconnect a user from Garmin.
|
|
740
|
+
*
|
|
741
|
+
* Deletes stored tokens and sets the connection to inactive.
|
|
742
|
+
* Garmin OAuth 1.0a tokens cannot be revoked via API, so cleanup
|
|
743
|
+
* is local only.
|
|
744
|
+
*
|
|
745
|
+
* @param ctx - Action context from the host app
|
|
746
|
+
* @param args.userId - The host app's user identifier
|
|
747
|
+
*
|
|
748
|
+
* @example
|
|
749
|
+
* ```ts
|
|
750
|
+
* export const disconnectGarmin = action({
|
|
751
|
+
* args: { userId: v.string() },
|
|
752
|
+
* handler: async (ctx, { userId }) => {
|
|
753
|
+
* await soma.disconnectGarmin(ctx, { userId });
|
|
754
|
+
* },
|
|
755
|
+
* });
|
|
756
|
+
* ```
|
|
757
|
+
*/
|
|
758
|
+
async disconnectGarmin(ctx, args) {
|
|
759
|
+
return await ctx.runAction(this.component.garmin.disconnectGarmin, args);
|
|
760
|
+
}
|
|
611
761
|
}
|
|
612
762
|
//# sourceMappingURL=index.js.map
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* To regenerate, run `npx convex dev`.
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
+
import type * as garmin from "../garmin.js";
|
|
9
10
|
import type * as private_ from "../private.js";
|
|
10
11
|
import type * as public_ from "../public.js";
|
|
11
12
|
import type * as strava from "../strava.js";
|
|
@@ -24,6 +25,7 @@ import type * as validators_shared from "../validators/shared.js";
|
|
|
24
25
|
import type * as validators_sleep from "../validators/sleep.js";
|
|
25
26
|
import type { ApiFromModules, FilterApi, FunctionReference } from "convex/server";
|
|
26
27
|
declare const fullApi: ApiFromModules<{
|
|
28
|
+
garmin: typeof garmin;
|
|
27
29
|
private: typeof private_;
|
|
28
30
|
public: typeof public_;
|
|
29
31
|
strava: typeof strava;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,KAAK,kBAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,KAAK,eAAe,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,KAAK,qBAAqB,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,KAAK,uBAAuB,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,KAAK,oBAAoB,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,KAAK,yBAAyB,MAAM,iCAAiC,CAAC;AAClF,OAAO,KAAK,KAAK,kBAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAGvB,QAAA,MAAM,OAAO,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,OAAO,QAAQ,CAAC;IACzB,MAAM,EAAE,OAAO,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,qBAAqB,EAAE,OAAO,mBAAmB,CAAC;IAClD,oBAAoB,EAAE,OAAO,kBAAkB,CAAC;IAChD,iBAAiB,EAAE,OAAO,eAAe,CAAC;IAC1C,uBAAuB,EAAE,OAAO,qBAAqB,CAAC;IACtD,kBAAkB,EAAE,OAAO,gBAAgB,CAAC;IAC5C,kBAAkB,EAAE,OAAO,gBAAgB,CAAC;IAC5C,kBAAkB,EAAE,OAAO,gBAAgB,CAAC;IAC5C,yBAAyB,EAAE,OAAO,uBAAuB,CAAC;IAC1D,sBAAsB,EAAE,OAAO,oBAAoB,CAAC;IACpD,2BAA2B,EAAE,OAAO,yBAAyB,CAAC;IAC9D,oBAAoB,EAAE,OAAO,kBAAkB,CAAC;IAChD,mBAAmB,EAAE,OAAO,iBAAiB,CAAC;IAC9C,kBAAkB,EAAE,OAAO,gBAAgB,CAAC;CAC7C,CAAiB,CAAC;AAEnB;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,EAAE,SAAS,CACzB,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CACjB,CAAC;AAElB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,CAC9B,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CACnB,CAAC;AAElB,eAAO,MAAM,UAAU,EAAqC,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AACA;;;;;;;GAOG;AAEH,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,KAAK,mBAAmB,MAAM,2BAA2B,CAAC;AACtE,OAAO,KAAK,KAAK,kBAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,KAAK,eAAe,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,KAAK,qBAAqB,MAAM,6BAA6B,CAAC;AAC1E,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,KAAK,uBAAuB,MAAM,+BAA+B,CAAC;AAC9E,OAAO,KAAK,KAAK,oBAAoB,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,KAAK,yBAAyB,MAAM,iCAAiC,CAAC;AAClF,OAAO,KAAK,KAAK,kBAAkB,MAAM,0BAA0B,CAAC;AACpE,OAAO,KAAK,KAAK,iBAAiB,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,KAAK,gBAAgB,MAAM,wBAAwB,CAAC;AAEhE,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EAClB,MAAM,eAAe,CAAC;AAGvB,QAAA,MAAM,OAAO,EAAE,cAAc,CAAC;IAC5B,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,QAAQ,CAAC;IACzB,MAAM,EAAE,OAAO,OAAO,CAAC;IACvB,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB,qBAAqB,EAAE,OAAO,mBAAmB,CAAC;IAClD,oBAAoB,EAAE,OAAO,kBAAkB,CAAC;IAChD,iBAAiB,EAAE,OAAO,eAAe,CAAC;IAC1C,uBAAuB,EAAE,OAAO,qBAAqB,CAAC;IACtD,kBAAkB,EAAE,OAAO,gBAAgB,CAAC;IAC5C,kBAAkB,EAAE,OAAO,gBAAgB,CAAC;IAC5C,kBAAkB,EAAE,OAAO,gBAAgB,CAAC;IAC5C,yBAAyB,EAAE,OAAO,uBAAuB,CAAC;IAC1D,sBAAsB,EAAE,OAAO,oBAAoB,CAAC;IACpD,2BAA2B,EAAE,OAAO,yBAAyB,CAAC;IAC9D,oBAAoB,EAAE,OAAO,kBAAkB,CAAC;IAChD,mBAAmB,EAAE,OAAO,iBAAiB,CAAC;IAC9C,kBAAkB,EAAE,OAAO,gBAAgB,CAAC;CAC7C,CAAiB,CAAC;AAEnB;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG,EAAE,SAAS,CACzB,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CACjB,CAAC;AAElB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAS,CAC9B,OAAO,OAAO,EACd,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CACnB,CAAC;AAElB,eAAO,MAAM,UAAU,EAAqC,EAAE,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/component/_generated/api.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB;;;;;;;GAOG;AAyBH,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE1D,MAAM,OAAO,GAkBR,MAAa,CAAC;AAEnB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,GAAG,GAGZ,MAAa,CAAC;AAElB;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,QAAQ,GAGjB,MAAa,CAAC;AAElB,MAAM,CAAC,MAAM,UAAU,GAAG,iBAAiB,EAAmB,CAAC"}
|
|
@@ -19,6 +19,62 @@ import type { FunctionReference } from "convex/server";
|
|
|
19
19
|
* ```
|
|
20
20
|
*/
|
|
21
21
|
export type ComponentApi<Name extends string | undefined = string | undefined> = {
|
|
22
|
+
garmin: {
|
|
23
|
+
connectGarmin: FunctionReference<"action", "internal", {
|
|
24
|
+
consumerKey: string;
|
|
25
|
+
consumerSecret: string;
|
|
26
|
+
token: string;
|
|
27
|
+
tokenSecret: string;
|
|
28
|
+
userId: string;
|
|
29
|
+
verifier: string;
|
|
30
|
+
}, {
|
|
31
|
+
connectionId: string;
|
|
32
|
+
errors: Array<{
|
|
33
|
+
error: string;
|
|
34
|
+
id: string;
|
|
35
|
+
type: string;
|
|
36
|
+
}>;
|
|
37
|
+
synced: {
|
|
38
|
+
activities: number;
|
|
39
|
+
body: number;
|
|
40
|
+
dailies: number;
|
|
41
|
+
menstruation: number;
|
|
42
|
+
sleep: number;
|
|
43
|
+
};
|
|
44
|
+
}, Name>;
|
|
45
|
+
disconnectGarmin: FunctionReference<"action", "internal", {
|
|
46
|
+
userId: string;
|
|
47
|
+
}, null, Name>;
|
|
48
|
+
getGarminRequestToken: FunctionReference<"action", "internal", {
|
|
49
|
+
callbackUrl?: string;
|
|
50
|
+
consumerKey: string;
|
|
51
|
+
consumerSecret: string;
|
|
52
|
+
}, {
|
|
53
|
+
authUrl: string;
|
|
54
|
+
token: string;
|
|
55
|
+
tokenSecret: string;
|
|
56
|
+
}, Name>;
|
|
57
|
+
syncGarmin: FunctionReference<"action", "internal", {
|
|
58
|
+
consumerKey: string;
|
|
59
|
+
consumerSecret: string;
|
|
60
|
+
endTimeInSeconds?: number;
|
|
61
|
+
startTimeInSeconds?: number;
|
|
62
|
+
userId: string;
|
|
63
|
+
}, {
|
|
64
|
+
errors: Array<{
|
|
65
|
+
error: string;
|
|
66
|
+
id: string;
|
|
67
|
+
type: string;
|
|
68
|
+
}>;
|
|
69
|
+
synced: {
|
|
70
|
+
activities: number;
|
|
71
|
+
body: number;
|
|
72
|
+
dailies: number;
|
|
73
|
+
menstruation: number;
|
|
74
|
+
sleep: number;
|
|
75
|
+
};
|
|
76
|
+
}, Name>;
|
|
77
|
+
};
|
|
22
78
|
public: {
|
|
23
79
|
connect: FunctionReference<"mutation", "internal", {
|
|
24
80
|
provider: string;
|