@clipin/convex-wearables 0.0.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/LICENSE +203 -0
- package/README.md +616 -0
- package/dist/client/_generated/_ignore.d.ts +1 -0
- package/dist/client/_generated/_ignore.d.ts.map +1 -0
- package/dist/client/_generated/_ignore.js +4 -0
- package/dist/client/_generated/_ignore.js.map +1 -0
- package/dist/client/index.d.ts +244 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +555 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +689 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +112 -0
- package/dist/client/types.js.map +1 -0
- package/dist/component/_generated/_ignore.d.ts +1 -0
- package/dist/component/_generated/_ignore.d.ts.map +1 -0
- package/dist/component/_generated/_ignore.js +4 -0
- package/dist/component/_generated/_ignore.js.map +1 -0
- package/dist/component/_generated/api.d.ts +13 -0
- package/dist/component/_generated/api.d.ts.map +1 -0
- package/dist/component/_generated/api.js +14 -0
- package/dist/component/_generated/api.js.map +1 -0
- package/dist/component/_generated/dataModel.d.ts +28 -0
- package/dist/component/_generated/dataModel.d.ts.map +1 -0
- package/dist/component/_generated/dataModel.js +11 -0
- package/dist/component/_generated/dataModel.js.map +1 -0
- package/dist/component/_generated/server.d.ts +23 -0
- package/dist/component/_generated/server.d.ts.map +1 -0
- package/dist/component/_generated/server.js +18 -0
- package/dist/component/_generated/server.js.map +1 -0
- package/dist/component/backfillJobs.d.ts +121 -0
- package/dist/component/backfillJobs.d.ts.map +1 -0
- package/dist/component/backfillJobs.js +233 -0
- package/dist/component/backfillJobs.js.map +1 -0
- package/dist/component/connections.d.ts +159 -0
- package/dist/component/connections.d.ts.map +1 -0
- package/dist/component/connections.js +288 -0
- package/dist/component/connections.js.map +1 -0
- package/dist/component/convex.config.d.ts +3 -0
- package/dist/component/convex.config.d.ts.map +1 -0
- package/dist/component/convex.config.js +6 -0
- package/dist/component/convex.config.js.map +1 -0
- package/dist/component/dataPoints.d.ts +81 -0
- package/dist/component/dataPoints.d.ts.map +1 -0
- package/dist/component/dataPoints.js +258 -0
- package/dist/component/dataPoints.js.map +1 -0
- package/dist/component/dataSources.d.ts +56 -0
- package/dist/component/dataSources.d.ts.map +1 -0
- package/dist/component/dataSources.js +95 -0
- package/dist/component/dataSources.js.map +1 -0
- package/dist/component/events.d.ts +203 -0
- package/dist/component/events.d.ts.map +1 -0
- package/dist/component/events.js +251 -0
- package/dist/component/events.js.map +1 -0
- package/dist/component/garminBackfill.d.ts +40 -0
- package/dist/component/garminBackfill.d.ts.map +1 -0
- package/dist/component/garminBackfill.js +296 -0
- package/dist/component/garminBackfill.js.map +1 -0
- package/dist/component/garminWebhooks.d.ts +17 -0
- package/dist/component/garminWebhooks.d.ts.map +1 -0
- package/dist/component/garminWebhooks.js +505 -0
- package/dist/component/garminWebhooks.js.map +1 -0
- package/dist/component/httpHandlers.d.ts +32 -0
- package/dist/component/httpHandlers.d.ts.map +1 -0
- package/dist/component/httpHandlers.js +131 -0
- package/dist/component/httpHandlers.js.map +1 -0
- package/dist/component/lifecycle.d.ts +12 -0
- package/dist/component/lifecycle.d.ts.map +1 -0
- package/dist/component/lifecycle.js +79 -0
- package/dist/component/lifecycle.js.map +1 -0
- package/dist/component/menstrualCycles.d.ts +98 -0
- package/dist/component/menstrualCycles.d.ts.map +1 -0
- package/dist/component/menstrualCycles.js +112 -0
- package/dist/component/menstrualCycles.js.map +1 -0
- package/dist/component/oauthActions.d.ts +52 -0
- package/dist/component/oauthActions.d.ts.map +1 -0
- package/dist/component/oauthActions.js +208 -0
- package/dist/component/oauthActions.js.map +1 -0
- package/dist/component/oauthStates.d.ts +47 -0
- package/dist/component/oauthStates.d.ts.map +1 -0
- package/dist/component/oauthStates.js +77 -0
- package/dist/component/oauthStates.js.map +1 -0
- package/dist/component/providerSettings.d.ts +15 -0
- package/dist/component/providerSettings.d.ts.map +1 -0
- package/dist/component/providerSettings.js +57 -0
- package/dist/component/providerSettings.js.map +1 -0
- package/dist/component/providers/garmin.d.ts +306 -0
- package/dist/component/providers/garmin.d.ts.map +1 -0
- package/dist/component/providers/garmin.js +675 -0
- package/dist/component/providers/garmin.js.map +1 -0
- package/dist/component/providers/oauth.d.ts +42 -0
- package/dist/component/providers/oauth.d.ts.map +1 -0
- package/dist/component/providers/oauth.js +181 -0
- package/dist/component/providers/oauth.js.map +1 -0
- package/dist/component/providers/polar.d.ts +6 -0
- package/dist/component/providers/polar.d.ts.map +1 -0
- package/dist/component/providers/polar.js +175 -0
- package/dist/component/providers/polar.js.map +1 -0
- package/dist/component/providers/registry.d.ts +14 -0
- package/dist/component/providers/registry.d.ts.map +1 -0
- package/dist/component/providers/registry.js +32 -0
- package/dist/component/providers/registry.js.map +1 -0
- package/dist/component/providers/strava.d.ts +45 -0
- package/dist/component/providers/strava.d.ts.map +1 -0
- package/dist/component/providers/strava.js +182 -0
- package/dist/component/providers/strava.js.map +1 -0
- package/dist/component/providers/suunto.d.ts +5 -0
- package/dist/component/providers/suunto.d.ts.map +1 -0
- package/dist/component/providers/suunto.js +502 -0
- package/dist/component/providers/suunto.js.map +1 -0
- package/dist/component/providers/types.d.ts +139 -0
- package/dist/component/providers/types.d.ts.map +1 -0
- package/dist/component/providers/types.js +5 -0
- package/dist/component/providers/types.js.map +1 -0
- package/dist/component/providers/whoop.d.ts +4 -0
- package/dist/component/providers/whoop.d.ts.map +1 -0
- package/dist/component/providers/whoop.js +439 -0
- package/dist/component/providers/whoop.js.map +1 -0
- package/dist/component/schema.d.ts +429 -0
- package/dist/component/schema.d.ts.map +1 -0
- package/dist/component/schema.js +282 -0
- package/dist/component/schema.js.map +1 -0
- package/dist/component/sdkPush.d.ts +143 -0
- package/dist/component/sdkPush.d.ts.map +1 -0
- package/dist/component/sdkPush.js +338 -0
- package/dist/component/sdkPush.js.map +1 -0
- package/dist/component/summaries.d.ts +129 -0
- package/dist/component/summaries.d.ts.map +1 -0
- package/dist/component/summaries.js +129 -0
- package/dist/component/summaries.js.map +1 -0
- package/dist/component/syncJobs.d.ts +142 -0
- package/dist/component/syncJobs.d.ts.map +1 -0
- package/dist/component/syncJobs.js +136 -0
- package/dist/component/syncJobs.js.map +1 -0
- package/dist/component/syncWorkflow.d.ts +99 -0
- package/dist/component/syncWorkflow.d.ts.map +1 -0
- package/dist/component/syncWorkflow.js +579 -0
- package/dist/component/syncWorkflow.js.map +1 -0
- package/dist/component/workflowManager.d.ts +3 -0
- package/dist/component/workflowManager.d.ts.map +1 -0
- package/dist/component/workflowManager.js +17 -0
- package/dist/component/workflowManager.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
export declare const getByUser: import("convex/server").RegisteredQuery<"public", {
|
|
2
|
+
limit?: number | undefined;
|
|
3
|
+
userId: string;
|
|
4
|
+
}, Promise<{
|
|
5
|
+
_id: import("convex/values").GenericId<"syncJobs">;
|
|
6
|
+
_creationTime: number;
|
|
7
|
+
error?: string | undefined;
|
|
8
|
+
mode?: "manual" | "cron" | "webhook" | undefined;
|
|
9
|
+
triggerSource?: string | undefined;
|
|
10
|
+
completedAt?: number | undefined;
|
|
11
|
+
recordsProcessed?: number | undefined;
|
|
12
|
+
workflowId?: string | undefined;
|
|
13
|
+
windowStart?: number | undefined;
|
|
14
|
+
windowEnd?: number | undefined;
|
|
15
|
+
attempt?: number | undefined;
|
|
16
|
+
lastHeartbeatAt?: number | undefined;
|
|
17
|
+
cursor?: string | undefined;
|
|
18
|
+
currentPhase?: "events" | "dataPoints" | "summaries" | undefined;
|
|
19
|
+
provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
|
|
20
|
+
status: "queued" | "running" | "completed" | "failed" | "canceled";
|
|
21
|
+
userId: string;
|
|
22
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
23
|
+
idempotencyKey: string;
|
|
24
|
+
startedAt: number;
|
|
25
|
+
}[]>>;
|
|
26
|
+
export declare const getRunning: import("convex/server").RegisteredQuery<"internal", {}, Promise<{
|
|
27
|
+
_id: import("convex/values").GenericId<"syncJobs">;
|
|
28
|
+
_creationTime: number;
|
|
29
|
+
error?: string | undefined;
|
|
30
|
+
mode?: "manual" | "cron" | "webhook" | undefined;
|
|
31
|
+
triggerSource?: string | undefined;
|
|
32
|
+
completedAt?: number | undefined;
|
|
33
|
+
recordsProcessed?: number | undefined;
|
|
34
|
+
workflowId?: string | undefined;
|
|
35
|
+
windowStart?: number | undefined;
|
|
36
|
+
windowEnd?: number | undefined;
|
|
37
|
+
attempt?: number | undefined;
|
|
38
|
+
lastHeartbeatAt?: number | undefined;
|
|
39
|
+
cursor?: string | undefined;
|
|
40
|
+
currentPhase?: "events" | "dataPoints" | "summaries" | undefined;
|
|
41
|
+
provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
|
|
42
|
+
status: "queued" | "running" | "completed" | "failed" | "canceled";
|
|
43
|
+
userId: string;
|
|
44
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
45
|
+
idempotencyKey: string;
|
|
46
|
+
startedAt: number;
|
|
47
|
+
}[]>>;
|
|
48
|
+
export declare const getById: import("convex/server").RegisteredQuery<"internal", {
|
|
49
|
+
jobId: import("convex/values").GenericId<"syncJobs">;
|
|
50
|
+
}, Promise<{
|
|
51
|
+
_id: import("convex/values").GenericId<"syncJobs">;
|
|
52
|
+
_creationTime: number;
|
|
53
|
+
error?: string | undefined;
|
|
54
|
+
mode?: "manual" | "cron" | "webhook" | undefined;
|
|
55
|
+
triggerSource?: string | undefined;
|
|
56
|
+
completedAt?: number | undefined;
|
|
57
|
+
recordsProcessed?: number | undefined;
|
|
58
|
+
workflowId?: string | undefined;
|
|
59
|
+
windowStart?: number | undefined;
|
|
60
|
+
windowEnd?: number | undefined;
|
|
61
|
+
attempt?: number | undefined;
|
|
62
|
+
lastHeartbeatAt?: number | undefined;
|
|
63
|
+
cursor?: string | undefined;
|
|
64
|
+
currentPhase?: "events" | "dataPoints" | "summaries" | undefined;
|
|
65
|
+
provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
|
|
66
|
+
status: "queued" | "running" | "completed" | "failed" | "canceled";
|
|
67
|
+
userId: string;
|
|
68
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
69
|
+
idempotencyKey: string;
|
|
70
|
+
startedAt: number;
|
|
71
|
+
} | null>>;
|
|
72
|
+
export declare const getActiveByIdempotencyKey: import("convex/server").RegisteredQuery<"internal", {
|
|
73
|
+
idempotencyKey: string;
|
|
74
|
+
}, Promise<{
|
|
75
|
+
_id: import("convex/values").GenericId<"syncJobs">;
|
|
76
|
+
_creationTime: number;
|
|
77
|
+
error?: string | undefined;
|
|
78
|
+
mode?: "manual" | "cron" | "webhook" | undefined;
|
|
79
|
+
triggerSource?: string | undefined;
|
|
80
|
+
completedAt?: number | undefined;
|
|
81
|
+
recordsProcessed?: number | undefined;
|
|
82
|
+
workflowId?: string | undefined;
|
|
83
|
+
windowStart?: number | undefined;
|
|
84
|
+
windowEnd?: number | undefined;
|
|
85
|
+
attempt?: number | undefined;
|
|
86
|
+
lastHeartbeatAt?: number | undefined;
|
|
87
|
+
cursor?: string | undefined;
|
|
88
|
+
currentPhase?: "events" | "dataPoints" | "summaries" | undefined;
|
|
89
|
+
provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
|
|
90
|
+
status: "queued" | "running" | "completed" | "failed" | "canceled";
|
|
91
|
+
userId: string;
|
|
92
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
93
|
+
idempotencyKey: string;
|
|
94
|
+
startedAt: number;
|
|
95
|
+
} | null>>;
|
|
96
|
+
export declare const getByWorkflowId: import("convex/server").RegisteredQuery<"internal", {
|
|
97
|
+
workflowId: string;
|
|
98
|
+
}, Promise<{
|
|
99
|
+
_id: import("convex/values").GenericId<"syncJobs">;
|
|
100
|
+
_creationTime: number;
|
|
101
|
+
error?: string | undefined;
|
|
102
|
+
mode?: "manual" | "cron" | "webhook" | undefined;
|
|
103
|
+
triggerSource?: string | undefined;
|
|
104
|
+
completedAt?: number | undefined;
|
|
105
|
+
recordsProcessed?: number | undefined;
|
|
106
|
+
workflowId?: string | undefined;
|
|
107
|
+
windowStart?: number | undefined;
|
|
108
|
+
windowEnd?: number | undefined;
|
|
109
|
+
attempt?: number | undefined;
|
|
110
|
+
lastHeartbeatAt?: number | undefined;
|
|
111
|
+
cursor?: string | undefined;
|
|
112
|
+
currentPhase?: "events" | "dataPoints" | "summaries" | undefined;
|
|
113
|
+
provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
|
|
114
|
+
status: "queued" | "running" | "completed" | "failed" | "canceled";
|
|
115
|
+
userId: string;
|
|
116
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
117
|
+
idempotencyKey: string;
|
|
118
|
+
startedAt: number;
|
|
119
|
+
} | null>>;
|
|
120
|
+
export declare const create: import("convex/server").RegisteredMutation<"internal", {
|
|
121
|
+
mode?: "manual" | "cron" | "webhook" | undefined;
|
|
122
|
+
triggerSource?: string | undefined;
|
|
123
|
+
startedAt?: number | undefined;
|
|
124
|
+
windowStart?: number | undefined;
|
|
125
|
+
windowEnd?: number | undefined;
|
|
126
|
+
provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
|
|
127
|
+
userId: string;
|
|
128
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
129
|
+
idempotencyKey: string;
|
|
130
|
+
}, Promise<import("convex/values").GenericId<"syncJobs">>>;
|
|
131
|
+
export declare const updateStatus: import("convex/server").RegisteredMutation<"internal", {
|
|
132
|
+
error?: string | undefined;
|
|
133
|
+
recordsProcessed?: number | undefined;
|
|
134
|
+
workflowId?: string | undefined;
|
|
135
|
+
attempt?: number | undefined;
|
|
136
|
+
lastHeartbeatAt?: number | undefined;
|
|
137
|
+
cursor?: string | undefined;
|
|
138
|
+
currentPhase?: "events" | "dataPoints" | "summaries" | undefined;
|
|
139
|
+
status: "queued" | "running" | "completed" | "failed" | "canceled";
|
|
140
|
+
jobId: import("convex/values").GenericId<"syncJobs">;
|
|
141
|
+
}, Promise<void>>;
|
|
142
|
+
//# sourceMappingURL=syncJobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncJobs.d.ts","sourceRoot":"","sources":["../../src/component/syncJobs.ts"],"names":[],"mappings":"AAUA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;KAapB,CAAC;AAEH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;KASrB,CAAC;AAEH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;UAQlB,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;UAkBpC,CAAC;AAEH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;UAW1B,CAAC;AAMH,eAAO,MAAM,MAAM;;;;;;;;;;0DA4BjB,CAAC;AAEH,eAAO,MAAM,YAAY;;;;;;;;;;iBA0BvB,CAAC"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { v } from "convex/values";
|
|
2
|
+
import { internalMutation, internalQuery, query } from "./_generated/server";
|
|
3
|
+
import { providerName, syncJobStatus } from "./schema";
|
|
4
|
+
const syncPhase = v.union(v.literal("events"), v.literal("dataPoints"), v.literal("summaries"));
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Queries
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
export const getByUser = query({
|
|
9
|
+
args: {
|
|
10
|
+
userId: v.string(),
|
|
11
|
+
limit: v.optional(v.number()),
|
|
12
|
+
},
|
|
13
|
+
returns: v.array(v.any()),
|
|
14
|
+
handler: async (ctx, args) => {
|
|
15
|
+
return await ctx.db
|
|
16
|
+
.query("syncJobs")
|
|
17
|
+
.withIndex("by_user", (idx) => idx.eq("userId", args.userId))
|
|
18
|
+
.order("desc")
|
|
19
|
+
.take(args.limit ?? 10);
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
export const getRunning = internalQuery({
|
|
23
|
+
args: {},
|
|
24
|
+
returns: v.array(v.any()),
|
|
25
|
+
handler: async (ctx) => {
|
|
26
|
+
return await ctx.db
|
|
27
|
+
.query("syncJobs")
|
|
28
|
+
.withIndex("by_status", (idx) => idx.eq("status", "running"))
|
|
29
|
+
.collect();
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
export const getById = internalQuery({
|
|
33
|
+
args: {
|
|
34
|
+
jobId: v.id("syncJobs"),
|
|
35
|
+
},
|
|
36
|
+
returns: v.union(v.any(), v.null()),
|
|
37
|
+
handler: async (ctx, args) => {
|
|
38
|
+
return await ctx.db.get(args.jobId);
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
export const getActiveByIdempotencyKey = internalQuery({
|
|
42
|
+
args: {
|
|
43
|
+
idempotencyKey: v.string(),
|
|
44
|
+
},
|
|
45
|
+
returns: v.union(v.any(), v.null()),
|
|
46
|
+
handler: async (ctx, args) => {
|
|
47
|
+
const job = await ctx.db
|
|
48
|
+
.query("syncJobs")
|
|
49
|
+
.withIndex("by_idempotency_key", (idx) => idx.eq("idempotencyKey", args.idempotencyKey))
|
|
50
|
+
.order("desc")
|
|
51
|
+
.first();
|
|
52
|
+
if (!job) {
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
return job.status === "queued" || job.status === "running" ? job : null;
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
export const getByWorkflowId = internalQuery({
|
|
59
|
+
args: {
|
|
60
|
+
workflowId: v.string(),
|
|
61
|
+
},
|
|
62
|
+
returns: v.union(v.any(), v.null()),
|
|
63
|
+
handler: async (ctx, args) => {
|
|
64
|
+
return await ctx.db
|
|
65
|
+
.query("syncJobs")
|
|
66
|
+
.withIndex("by_workflow", (idx) => idx.eq("workflowId", args.workflowId))
|
|
67
|
+
.first();
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// Mutations
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
export const create = internalMutation({
|
|
74
|
+
args: {
|
|
75
|
+
connectionId: v.id("connections"),
|
|
76
|
+
userId: v.string(),
|
|
77
|
+
provider: providerName,
|
|
78
|
+
mode: v.optional(v.union(v.literal("manual"), v.literal("cron"), v.literal("webhook"))),
|
|
79
|
+
triggerSource: v.optional(v.string()),
|
|
80
|
+
idempotencyKey: v.string(),
|
|
81
|
+
startedAt: v.optional(v.number()),
|
|
82
|
+
windowStart: v.optional(v.number()),
|
|
83
|
+
windowEnd: v.optional(v.number()),
|
|
84
|
+
},
|
|
85
|
+
returns: v.id("syncJobs"),
|
|
86
|
+
handler: async (ctx, args) => {
|
|
87
|
+
return await ctx.db.insert("syncJobs", {
|
|
88
|
+
connectionId: args.connectionId,
|
|
89
|
+
userId: args.userId,
|
|
90
|
+
provider: args.provider,
|
|
91
|
+
mode: args.mode,
|
|
92
|
+
triggerSource: args.triggerSource,
|
|
93
|
+
idempotencyKey: args.idempotencyKey,
|
|
94
|
+
status: "queued",
|
|
95
|
+
startedAt: args.startedAt ?? Date.now(),
|
|
96
|
+
windowStart: args.windowStart,
|
|
97
|
+
windowEnd: args.windowEnd,
|
|
98
|
+
attempt: 0,
|
|
99
|
+
});
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
export const updateStatus = internalMutation({
|
|
103
|
+
args: {
|
|
104
|
+
jobId: v.id("syncJobs"),
|
|
105
|
+
status: syncJobStatus,
|
|
106
|
+
error: v.optional(v.string()),
|
|
107
|
+
recordsProcessed: v.optional(v.number()),
|
|
108
|
+
workflowId: v.optional(v.string()),
|
|
109
|
+
attempt: v.optional(v.number()),
|
|
110
|
+
lastHeartbeatAt: v.optional(v.number()),
|
|
111
|
+
cursor: v.optional(v.string()),
|
|
112
|
+
currentPhase: v.optional(syncPhase),
|
|
113
|
+
},
|
|
114
|
+
handler: async (ctx, args) => {
|
|
115
|
+
const updates = { status: args.status };
|
|
116
|
+
if (args.error !== undefined)
|
|
117
|
+
updates.error = args.error;
|
|
118
|
+
if (args.recordsProcessed !== undefined)
|
|
119
|
+
updates.recordsProcessed = args.recordsProcessed;
|
|
120
|
+
if (args.workflowId !== undefined)
|
|
121
|
+
updates.workflowId = args.workflowId;
|
|
122
|
+
if (args.attempt !== undefined)
|
|
123
|
+
updates.attempt = args.attempt;
|
|
124
|
+
if (args.lastHeartbeatAt !== undefined)
|
|
125
|
+
updates.lastHeartbeatAt = args.lastHeartbeatAt;
|
|
126
|
+
if (args.cursor !== undefined)
|
|
127
|
+
updates.cursor = args.cursor;
|
|
128
|
+
if (args.currentPhase !== undefined)
|
|
129
|
+
updates.currentPhase = args.currentPhase;
|
|
130
|
+
if (args.status === "completed" || args.status === "failed" || args.status === "canceled") {
|
|
131
|
+
updates.completedAt = Date.now();
|
|
132
|
+
}
|
|
133
|
+
await ctx.db.patch(args.jobId, updates);
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=syncJobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncJobs.js","sourceRoot":"","sources":["../../src/component/syncJobs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Durable sync orchestration for provider pull syncs.
|
|
3
|
+
*
|
|
4
|
+
* The old implementation executed a whole sync inline in one action. This
|
|
5
|
+
* module now enqueues a durable workflow per connection and keeps syncJobs as
|
|
6
|
+
* the user-visible progress surface.
|
|
7
|
+
*/
|
|
8
|
+
import type { NormalizedDailySummary, NormalizedDataPoint, NormalizedEvent } from "./providers/types";
|
|
9
|
+
export declare const requestConnectionSync: import("convex/server").RegisteredMutation<"internal", {
|
|
10
|
+
mode?: "manual" | "cron" | "webhook" | undefined;
|
|
11
|
+
triggerSource?: string | undefined;
|
|
12
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
13
|
+
windowStart: number;
|
|
14
|
+
windowEnd: number;
|
|
15
|
+
}, Promise<{
|
|
16
|
+
syncJobId: import("convex/values").GenericId<"syncJobs">;
|
|
17
|
+
workflowId: string;
|
|
18
|
+
deduped: boolean;
|
|
19
|
+
}>>;
|
|
20
|
+
export declare const fetchSyncPhaseBatch: import("convex/server").RegisteredAction<"internal", {
|
|
21
|
+
cursor?: string | undefined;
|
|
22
|
+
syncJobId: import("convex/values").GenericId<"syncJobs">;
|
|
23
|
+
phase: "events" | "dataPoints" | "summaries";
|
|
24
|
+
}, Promise<{
|
|
25
|
+
events: NormalizedEvent[];
|
|
26
|
+
dataPoints: never[];
|
|
27
|
+
summaries: never[];
|
|
28
|
+
nextCursor: string | null;
|
|
29
|
+
} | {
|
|
30
|
+
events: never[];
|
|
31
|
+
dataPoints: NormalizedDataPoint[];
|
|
32
|
+
summaries: never[];
|
|
33
|
+
nextCursor: string | null;
|
|
34
|
+
} | {
|
|
35
|
+
events: never[];
|
|
36
|
+
dataPoints: never[];
|
|
37
|
+
summaries: NormalizedDailySummary[];
|
|
38
|
+
nextCursor: string | null;
|
|
39
|
+
}>>;
|
|
40
|
+
export declare const runConnectionSync: import("convex/server").RegisteredMutation<"internal", {
|
|
41
|
+
fn: "You should not call this directly, call workflow.start instead";
|
|
42
|
+
args: {
|
|
43
|
+
syncJobId: import("convex/values").GenericId<"syncJobs">;
|
|
44
|
+
};
|
|
45
|
+
}, {
|
|
46
|
+
recordsProcessed: number;
|
|
47
|
+
}>;
|
|
48
|
+
export declare const handleConnectionSyncComplete: import("convex/server").RegisteredMutation<"internal", {
|
|
49
|
+
workflowId: string;
|
|
50
|
+
result: any;
|
|
51
|
+
context: {
|
|
52
|
+
syncJobId: import("convex/values").GenericId<"syncJobs">;
|
|
53
|
+
};
|
|
54
|
+
}, Promise<void>>;
|
|
55
|
+
export declare const syncConnection: import("convex/server").RegisteredAction<"public", {
|
|
56
|
+
clientId?: string | undefined;
|
|
57
|
+
clientSecret?: string | undefined;
|
|
58
|
+
subscriptionKey?: string | undefined;
|
|
59
|
+
startDate?: number | undefined;
|
|
60
|
+
endDate?: number | undefined;
|
|
61
|
+
syncWindowHours?: number | undefined;
|
|
62
|
+
provider: "garmin" | "suunto" | "polar" | "whoop" | "strava" | "apple" | "samsung" | "google";
|
|
63
|
+
connectionId: import("convex/values").GenericId<"connections">;
|
|
64
|
+
}, Promise<{
|
|
65
|
+
syncJobId: string;
|
|
66
|
+
workflowId: any;
|
|
67
|
+
deduped: any;
|
|
68
|
+
}>>;
|
|
69
|
+
export declare const syncAllActive: import("convex/server").RegisteredAction<"public", {
|
|
70
|
+
syncWindowHours?: number | undefined;
|
|
71
|
+
clientCredentials: {
|
|
72
|
+
garmin?: {
|
|
73
|
+
clientId: string;
|
|
74
|
+
clientSecret: string;
|
|
75
|
+
} | undefined;
|
|
76
|
+
suunto?: {
|
|
77
|
+
subscriptionKey?: string | undefined;
|
|
78
|
+
clientId: string;
|
|
79
|
+
clientSecret: string;
|
|
80
|
+
} | undefined;
|
|
81
|
+
polar?: {
|
|
82
|
+
clientId: string;
|
|
83
|
+
clientSecret: string;
|
|
84
|
+
} | undefined;
|
|
85
|
+
whoop?: {
|
|
86
|
+
clientId: string;
|
|
87
|
+
clientSecret: string;
|
|
88
|
+
} | undefined;
|
|
89
|
+
strava?: {
|
|
90
|
+
clientId: string;
|
|
91
|
+
clientSecret: string;
|
|
92
|
+
} | undefined;
|
|
93
|
+
};
|
|
94
|
+
}, Promise<{
|
|
95
|
+
enqueued: number;
|
|
96
|
+
deduped: number;
|
|
97
|
+
skipped: number;
|
|
98
|
+
}>>;
|
|
99
|
+
//# sourceMappingURL=syncWorkflow.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syncWorkflow.d.ts","sourceRoot":"","sources":["../../src/component/syncWorkflow.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAgK3B,eAAO,MAAM,qBAAqB;;;;;;;;;;GA6EhC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;GAgH9B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;;EAiK5B,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;iBA0CvC,CAAC;AAEH,eAAO,MAAM,cAAc;;;;;;;;;;;;;GA8DzB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiGxB,CAAC"}
|