@nativesquare/soma 0.17.1 → 0.18.1
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/garmin.d.ts.map +1 -1
- package/dist/client/garmin.js +15 -5
- package/dist/client/garmin.js.map +1 -1
- package/dist/client/strava.d.ts.map +1 -1
- package/dist/client/strava.js +20 -4
- package/dist/client/strava.js.map +1 -1
- package/dist/client/types.d.ts +100 -34
- package/dist/client/types.d.ts.map +1 -1
- package/dist/client/types.js +19 -1
- package/dist/client/types.js.map +1 -1
- package/dist/component/_generated/component.d.ts +19 -1
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/garmin/private.d.ts +34 -0
- package/dist/component/garmin/private.d.ts.map +1 -1
- package/dist/component/garmin/private.js +221 -51
- package/dist/component/garmin/private.js.map +1 -1
- package/dist/component/garmin/webhooks.d.ts +18 -0
- package/dist/component/garmin/webhooks.d.ts.map +1 -1
- package/dist/component/garmin/webhooks.js +107 -35
- package/dist/component/garmin/webhooks.js.map +1 -1
- package/dist/component/strava/webhooks.d.ts +1 -1
- package/dist/component/strava/webhooks.d.ts.map +1 -1
- package/dist/component/strava/webhooks.js +2 -2
- package/dist/component/strava/webhooks.js.map +1 -1
- package/package.json +1 -1
- package/src/client/garmin.ts +20 -6
- package/src/client/strava.ts +23 -4
- package/src/client/types.ts +113 -37
- package/src/component/_generated/component.ts +19 -19
- package/src/component/garmin/private.ts +221 -51
- package/src/component/garmin/webhooks.ts +107 -35
- package/src/component/strava/webhooks.ts +360 -359
|
@@ -152,7 +152,11 @@ async function ingestAndUpdate(
|
|
|
152
152
|
* Handle a webhook for Garmin activities (push or ping mode).
|
|
153
153
|
*/
|
|
154
154
|
export const handleGarminWebhookActivities = action({
|
|
155
|
-
args: {
|
|
155
|
+
args: {
|
|
156
|
+
payload: v.any(),
|
|
157
|
+
autoIngest: v.optional(v.boolean()),
|
|
158
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
159
|
+
},
|
|
156
160
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
157
161
|
const shouldIngest = args.autoIngest !== false;
|
|
158
162
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -160,7 +164,7 @@ export const handleGarminWebhookActivities = action({
|
|
|
160
164
|
if (pushResult.success && pushResult.data.activities.length > 0) {
|
|
161
165
|
const result: WebhookResult = await ctx.runAction(
|
|
162
166
|
internal.garmin.private.processActivityPushPayload,
|
|
163
|
-
{ payload: args.payload },
|
|
167
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
164
168
|
);
|
|
165
169
|
return shouldIngest
|
|
166
170
|
? await ingestAndUpdate(ctx, result, api.public.ingestActivity)
|
|
@@ -187,7 +191,11 @@ export const handleGarminWebhookActivities = action({
|
|
|
187
191
|
* Handle a webhook for Garmin activity details (push or ping mode).
|
|
188
192
|
*/
|
|
189
193
|
export const handleGarminWebhookActivityDetails = action({
|
|
190
|
-
args: {
|
|
194
|
+
args: {
|
|
195
|
+
payload: v.any(),
|
|
196
|
+
autoIngest: v.optional(v.boolean()),
|
|
197
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
198
|
+
},
|
|
191
199
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
192
200
|
const shouldIngest = args.autoIngest !== false;
|
|
193
201
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -199,7 +207,7 @@ export const handleGarminWebhookActivityDetails = action({
|
|
|
199
207
|
) {
|
|
200
208
|
const result: WebhookResult = await ctx.runAction(
|
|
201
209
|
internal.garmin.private.processActivityDetailsPushPayload,
|
|
202
|
-
{ payload: args.payload },
|
|
210
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
203
211
|
);
|
|
204
212
|
return shouldIngest
|
|
205
213
|
? await ingestAndUpdate(ctx, result, api.public.ingestActivity)
|
|
@@ -230,7 +238,11 @@ export const handleGarminWebhookActivityDetails = action({
|
|
|
230
238
|
* Handle a webhook for Garmin manually updated activities (push or ping mode).
|
|
231
239
|
*/
|
|
232
240
|
export const handleGarminWebhookManuallyUpdatedActivities = action({
|
|
233
|
-
args: {
|
|
241
|
+
args: {
|
|
242
|
+
payload: v.any(),
|
|
243
|
+
autoIngest: v.optional(v.boolean()),
|
|
244
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
245
|
+
},
|
|
234
246
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
235
247
|
const shouldIngest = args.autoIngest !== false;
|
|
236
248
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -245,7 +257,7 @@ export const handleGarminWebhookManuallyUpdatedActivities = action({
|
|
|
245
257
|
const result: WebhookResult = await ctx.runAction(
|
|
246
258
|
internal.garmin.private
|
|
247
259
|
.processManuallyUpdatedActivitiesPushPayload,
|
|
248
|
-
{ payload: args.payload },
|
|
260
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
249
261
|
);
|
|
250
262
|
return shouldIngest
|
|
251
263
|
? await ingestAndUpdate(ctx, result, api.public.ingestActivity)
|
|
@@ -279,7 +291,11 @@ export const handleGarminWebhookManuallyUpdatedActivities = action({
|
|
|
279
291
|
* Handle a webhook for Garmin Move IQ auto-detected activities (push or ping mode).
|
|
280
292
|
*/
|
|
281
293
|
export const handleGarminWebhookMoveIQ = action({
|
|
282
|
-
args: {
|
|
294
|
+
args: {
|
|
295
|
+
payload: v.any(),
|
|
296
|
+
autoIngest: v.optional(v.boolean()),
|
|
297
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
298
|
+
},
|
|
283
299
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
284
300
|
const shouldIngest = args.autoIngest !== false;
|
|
285
301
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -291,7 +307,7 @@ export const handleGarminWebhookMoveIQ = action({
|
|
|
291
307
|
) {
|
|
292
308
|
const result: WebhookResult = await ctx.runAction(
|
|
293
309
|
internal.garmin.private.processMoveIQPushPayload,
|
|
294
|
-
{ payload: args.payload },
|
|
310
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
295
311
|
);
|
|
296
312
|
return shouldIngest
|
|
297
313
|
? await ingestAndUpdate(ctx, result, api.public.ingestActivity)
|
|
@@ -322,7 +338,11 @@ export const handleGarminWebhookMoveIQ = action({
|
|
|
322
338
|
* Handle a webhook for Garmin blood pressure summaries (push or ping mode).
|
|
323
339
|
*/
|
|
324
340
|
export const handleGarminWebhookBloodPressures = action({
|
|
325
|
-
args: {
|
|
341
|
+
args: {
|
|
342
|
+
payload: v.any(),
|
|
343
|
+
autoIngest: v.optional(v.boolean()),
|
|
344
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
345
|
+
},
|
|
326
346
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
327
347
|
const shouldIngest = args.autoIngest !== false;
|
|
328
348
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -334,7 +354,7 @@ export const handleGarminWebhookBloodPressures = action({
|
|
|
334
354
|
) {
|
|
335
355
|
const result: WebhookResult = await ctx.runAction(
|
|
336
356
|
internal.garmin.private.processBloodPressurePushPayload,
|
|
337
|
-
{ payload: args.payload },
|
|
357
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
338
358
|
);
|
|
339
359
|
return shouldIngest
|
|
340
360
|
? await ingestAndUpdate(ctx, result, api.public.ingestBody)
|
|
@@ -365,7 +385,11 @@ export const handleGarminWebhookBloodPressures = action({
|
|
|
365
385
|
* Handle a webhook for Garmin body composition summaries (push or ping mode).
|
|
366
386
|
*/
|
|
367
387
|
export const handleGarminWebhookBodyCompositions = action({
|
|
368
|
-
args: {
|
|
388
|
+
args: {
|
|
389
|
+
payload: v.any(),
|
|
390
|
+
autoIngest: v.optional(v.boolean()),
|
|
391
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
392
|
+
},
|
|
369
393
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
370
394
|
const shouldIngest = args.autoIngest !== false;
|
|
371
395
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -377,7 +401,7 @@ export const handleGarminWebhookBodyCompositions = action({
|
|
|
377
401
|
) {
|
|
378
402
|
const result: WebhookResult = await ctx.runAction(
|
|
379
403
|
internal.garmin.private.processBodyCompositionsPushPayload,
|
|
380
|
-
{ payload: args.payload },
|
|
404
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
381
405
|
);
|
|
382
406
|
return shouldIngest
|
|
383
407
|
? await ingestAndUpdate(ctx, result, api.public.ingestBody)
|
|
@@ -408,7 +432,11 @@ export const handleGarminWebhookBodyCompositions = action({
|
|
|
408
432
|
* Handle a webhook for Garmin daily summaries (push or ping mode).
|
|
409
433
|
*/
|
|
410
434
|
export const handleGarminWebhookDailies = action({
|
|
411
|
-
args: {
|
|
435
|
+
args: {
|
|
436
|
+
payload: v.any(),
|
|
437
|
+
autoIngest: v.optional(v.boolean()),
|
|
438
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
439
|
+
},
|
|
412
440
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
413
441
|
const shouldIngest = args.autoIngest !== false;
|
|
414
442
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -420,7 +448,7 @@ export const handleGarminWebhookDailies = action({
|
|
|
420
448
|
) {
|
|
421
449
|
const result: WebhookResult = await ctx.runAction(
|
|
422
450
|
internal.garmin.private.processDailiesPushPayload,
|
|
423
|
-
{ payload: args.payload },
|
|
451
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
424
452
|
);
|
|
425
453
|
return shouldIngest
|
|
426
454
|
? await ingestAndUpdate(ctx, result, api.public.ingestDaily)
|
|
@@ -451,7 +479,11 @@ export const handleGarminWebhookDailies = action({
|
|
|
451
479
|
* Handle a webhook for Garmin epoch summaries (push or ping mode).
|
|
452
480
|
*/
|
|
453
481
|
export const handleGarminWebhookEpochs = action({
|
|
454
|
-
args: {
|
|
482
|
+
args: {
|
|
483
|
+
payload: v.any(),
|
|
484
|
+
autoIngest: v.optional(v.boolean()),
|
|
485
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
486
|
+
},
|
|
455
487
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
456
488
|
const shouldIngest = args.autoIngest !== false;
|
|
457
489
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -463,7 +495,7 @@ export const handleGarminWebhookEpochs = action({
|
|
|
463
495
|
) {
|
|
464
496
|
const result: WebhookResult = await ctx.runAction(
|
|
465
497
|
internal.garmin.private.processEpochPushPayload,
|
|
466
|
-
{ payload: args.payload },
|
|
498
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
467
499
|
);
|
|
468
500
|
return shouldIngest
|
|
469
501
|
? await ingestAndUpdate(ctx, result, api.public.ingestDaily)
|
|
@@ -494,7 +526,11 @@ export const handleGarminWebhookEpochs = action({
|
|
|
494
526
|
* Handle a webhook for Garmin health snapshot summaries (push or ping mode).
|
|
495
527
|
*/
|
|
496
528
|
export const handleGarminWebhookHealthSnapshot = action({
|
|
497
|
-
args: {
|
|
529
|
+
args: {
|
|
530
|
+
payload: v.any(),
|
|
531
|
+
autoIngest: v.optional(v.boolean()),
|
|
532
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
533
|
+
},
|
|
498
534
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
499
535
|
const shouldIngest = args.autoIngest !== false;
|
|
500
536
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -506,7 +542,7 @@ export const handleGarminWebhookHealthSnapshot = action({
|
|
|
506
542
|
) {
|
|
507
543
|
const result: WebhookResult = await ctx.runAction(
|
|
508
544
|
internal.garmin.private.processHealthSnapshotPushPayload,
|
|
509
|
-
{ payload: args.payload },
|
|
545
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
510
546
|
);
|
|
511
547
|
return shouldIngest
|
|
512
548
|
? await ingestAndUpdate(ctx, result, api.public.ingestDaily)
|
|
@@ -537,7 +573,11 @@ export const handleGarminWebhookHealthSnapshot = action({
|
|
|
537
573
|
* Handle a webhook for Garmin sleep summaries (push or ping mode).
|
|
538
574
|
*/
|
|
539
575
|
export const handleGarminWebhookSleeps = action({
|
|
540
|
-
args: {
|
|
576
|
+
args: {
|
|
577
|
+
payload: v.any(),
|
|
578
|
+
autoIngest: v.optional(v.boolean()),
|
|
579
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
580
|
+
},
|
|
541
581
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
542
582
|
const shouldIngest = args.autoIngest !== false;
|
|
543
583
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -549,7 +589,7 @@ export const handleGarminWebhookSleeps = action({
|
|
|
549
589
|
) {
|
|
550
590
|
const result: WebhookResult = await ctx.runAction(
|
|
551
591
|
internal.garmin.private.processSleepsPushPayload,
|
|
552
|
-
{ payload: args.payload },
|
|
592
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
553
593
|
);
|
|
554
594
|
return shouldIngest
|
|
555
595
|
? await ingestAndUpdate(ctx, result, api.public.ingestSleep)
|
|
@@ -580,7 +620,11 @@ export const handleGarminWebhookSleeps = action({
|
|
|
580
620
|
* Handle a webhook for Garmin skin temperature summaries (push or ping mode).
|
|
581
621
|
*/
|
|
582
622
|
export const handleGarminWebhookSkinTemp = action({
|
|
583
|
-
args: {
|
|
623
|
+
args: {
|
|
624
|
+
payload: v.any(),
|
|
625
|
+
autoIngest: v.optional(v.boolean()),
|
|
626
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
627
|
+
},
|
|
584
628
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
585
629
|
const shouldIngest = args.autoIngest !== false;
|
|
586
630
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -592,7 +636,7 @@ export const handleGarminWebhookSkinTemp = action({
|
|
|
592
636
|
) {
|
|
593
637
|
const result: WebhookResult = await ctx.runAction(
|
|
594
638
|
internal.garmin.private.processSkinTemperaturePushPayload,
|
|
595
|
-
{ payload: args.payload },
|
|
639
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
596
640
|
);
|
|
597
641
|
return shouldIngest
|
|
598
642
|
? await ingestAndUpdate(ctx, result, api.public.ingestBody)
|
|
@@ -623,7 +667,11 @@ export const handleGarminWebhookSkinTemp = action({
|
|
|
623
667
|
* Handle a webhook for Garmin user metrics (push or ping mode).
|
|
624
668
|
*/
|
|
625
669
|
export const handleGarminWebhookUserMetrics = action({
|
|
626
|
-
args: {
|
|
670
|
+
args: {
|
|
671
|
+
payload: v.any(),
|
|
672
|
+
autoIngest: v.optional(v.boolean()),
|
|
673
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
674
|
+
},
|
|
627
675
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
628
676
|
const shouldIngest = args.autoIngest !== false;
|
|
629
677
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -635,7 +683,7 @@ export const handleGarminWebhookUserMetrics = action({
|
|
|
635
683
|
) {
|
|
636
684
|
const result: WebhookResult = await ctx.runAction(
|
|
637
685
|
internal.garmin.private.processUserMetricsPushPayload,
|
|
638
|
-
{ payload: args.payload },
|
|
686
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
639
687
|
);
|
|
640
688
|
return shouldIngest
|
|
641
689
|
? await ingestAndUpdate(ctx, result, api.public.ingestBody)
|
|
@@ -666,7 +714,11 @@ export const handleGarminWebhookUserMetrics = action({
|
|
|
666
714
|
* Handle a webhook for Garmin menstrual cycle tracking (push or ping mode).
|
|
667
715
|
*/
|
|
668
716
|
export const handleGarminWebhookMenstrualCycleTracking = action({
|
|
669
|
-
args: {
|
|
717
|
+
args: {
|
|
718
|
+
payload: v.any(),
|
|
719
|
+
autoIngest: v.optional(v.boolean()),
|
|
720
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
721
|
+
},
|
|
670
722
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
671
723
|
const shouldIngest = args.autoIngest !== false;
|
|
672
724
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -678,7 +730,7 @@ export const handleGarminWebhookMenstrualCycleTracking = action({
|
|
|
678
730
|
) {
|
|
679
731
|
const result: WebhookResult = await ctx.runAction(
|
|
680
732
|
internal.garmin.private.processMenstrualCycleTrackingPushPayload,
|
|
681
|
-
{ payload: args.payload },
|
|
733
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
682
734
|
);
|
|
683
735
|
return shouldIngest
|
|
684
736
|
? await ingestAndUpdate(ctx, result, api.public.ingestMenstruation)
|
|
@@ -709,7 +761,11 @@ export const handleGarminWebhookMenstrualCycleTracking = action({
|
|
|
709
761
|
* Handle a webhook for Garmin HRV summaries (push or ping mode).
|
|
710
762
|
*/
|
|
711
763
|
export const handleGarminWebhookHRVSummary = action({
|
|
712
|
-
args: {
|
|
764
|
+
args: {
|
|
765
|
+
payload: v.any(),
|
|
766
|
+
autoIngest: v.optional(v.boolean()),
|
|
767
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
768
|
+
},
|
|
713
769
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
714
770
|
const shouldIngest = args.autoIngest !== false;
|
|
715
771
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -721,7 +777,7 @@ export const handleGarminWebhookHRVSummary = action({
|
|
|
721
777
|
) {
|
|
722
778
|
const result: WebhookResult = await ctx.runAction(
|
|
723
779
|
internal.garmin.private.processHRVSummaryPushPayload,
|
|
724
|
-
{ payload: args.payload },
|
|
780
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
725
781
|
);
|
|
726
782
|
return shouldIngest
|
|
727
783
|
? await ingestAndUpdate(ctx, result, api.public.ingestDaily)
|
|
@@ -752,7 +808,11 @@ export const handleGarminWebhookHRVSummary = action({
|
|
|
752
808
|
* Handle a webhook for Garmin stress detail summaries (push or ping mode).
|
|
753
809
|
*/
|
|
754
810
|
export const handleGarminWebhookStress = action({
|
|
755
|
-
args: {
|
|
811
|
+
args: {
|
|
812
|
+
payload: v.any(),
|
|
813
|
+
autoIngest: v.optional(v.boolean()),
|
|
814
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
815
|
+
},
|
|
756
816
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
757
817
|
const shouldIngest = args.autoIngest !== false;
|
|
758
818
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -764,7 +824,7 @@ export const handleGarminWebhookStress = action({
|
|
|
764
824
|
) {
|
|
765
825
|
const result: WebhookResult = await ctx.runAction(
|
|
766
826
|
internal.garmin.private.processStressPushPayload,
|
|
767
|
-
{ payload: args.payload },
|
|
827
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
768
828
|
);
|
|
769
829
|
return shouldIngest
|
|
770
830
|
? await ingestAndUpdate(ctx, result, api.public.ingestDaily)
|
|
@@ -795,7 +855,11 @@ export const handleGarminWebhookStress = action({
|
|
|
795
855
|
* Handle a webhook for Garmin pulse oximetry (SpO2) summaries (push or ping mode).
|
|
796
856
|
*/
|
|
797
857
|
export const handleGarminWebhookPulseOx = action({
|
|
798
|
-
args: {
|
|
858
|
+
args: {
|
|
859
|
+
payload: v.any(),
|
|
860
|
+
autoIngest: v.optional(v.boolean()),
|
|
861
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
862
|
+
},
|
|
799
863
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
800
864
|
const shouldIngest = args.autoIngest !== false;
|
|
801
865
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -807,7 +871,7 @@ export const handleGarminWebhookPulseOx = action({
|
|
|
807
871
|
) {
|
|
808
872
|
const result: WebhookResult = await ctx.runAction(
|
|
809
873
|
internal.garmin.private.processPulseOxPushPayload,
|
|
810
|
-
{ payload: args.payload },
|
|
874
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
811
875
|
);
|
|
812
876
|
return shouldIngest
|
|
813
877
|
? await ingestAndUpdate(ctx, result, api.public.ingestDaily)
|
|
@@ -838,7 +902,11 @@ export const handleGarminWebhookPulseOx = action({
|
|
|
838
902
|
* Handle a webhook for Garmin respiration summaries (push or ping mode).
|
|
839
903
|
*/
|
|
840
904
|
export const handleGarminWebhookRespiration = action({
|
|
841
|
-
args: {
|
|
905
|
+
args: {
|
|
906
|
+
payload: v.any(),
|
|
907
|
+
autoIngest: v.optional(v.boolean()),
|
|
908
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
909
|
+
},
|
|
842
910
|
handler: async (ctx, args): Promise<WebhookResult> => {
|
|
843
911
|
const shouldIngest = args.autoIngest !== false;
|
|
844
912
|
if (isWebhookPushMode(args.payload)) {
|
|
@@ -850,7 +918,7 @@ export const handleGarminWebhookRespiration = action({
|
|
|
850
918
|
) {
|
|
851
919
|
const result: WebhookResult = await ctx.runAction(
|
|
852
920
|
internal.garmin.private.processRespirationPushPayload,
|
|
853
|
-
{ payload: args.payload },
|
|
921
|
+
{ payload: args.payload, rawPassthrough: args.rawPassthrough ?? false },
|
|
854
922
|
);
|
|
855
923
|
return shouldIngest
|
|
856
924
|
? await ingestAndUpdate(ctx, result, api.public.ingestDaily)
|
|
@@ -890,7 +958,11 @@ type GarminDeregistrationResult = WebhookResult<Record<string, unknown> | null>;
|
|
|
890
958
|
* who deregisters after a prior in-app disconnect).
|
|
891
959
|
*/
|
|
892
960
|
export const handleGarminWebhookDeregistration = action({
|
|
893
|
-
args: {
|
|
961
|
+
args: {
|
|
962
|
+
payload: v.any(),
|
|
963
|
+
autoIngest: v.optional(v.boolean()),
|
|
964
|
+
rawPassthrough: v.optional(v.boolean()),
|
|
965
|
+
},
|
|
894
966
|
handler: async (ctx, args): Promise<GarminDeregistrationResult> => {
|
|
895
967
|
const shouldIngest = args.autoIngest !== false;
|
|
896
968
|
|