@mrck-labs/vanaheim-shared 0.1.1 → 0.2.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.
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Query Keys Factory
3
+ *
4
+ * Centralized query key management for TanStack Query.
5
+ * Used by both desktop and mobile apps for consistent cache invalidation.
6
+ *
7
+ * @example
8
+ * import { queryKeys } from '@mrck-labs/vanaheim-shared/query'
9
+ *
10
+ * // In a query hook
11
+ * useQuery({
12
+ * queryKey: queryKeys.focusSessions.today(),
13
+ * queryFn: ...
14
+ * })
15
+ *
16
+ * // Invalidating
17
+ * queryClient.invalidateQueries({ queryKey: queryKeys.focusSessions.all })
18
+ */
19
+ declare const queryKeys: {
20
+ readonly expenses: {
21
+ readonly all: readonly ["expenses"];
22
+ readonly lists: () => readonly ["expenses", "list"];
23
+ readonly list: (filters?: {
24
+ isActive?: boolean;
25
+ categoryId?: string;
26
+ }) => readonly ["expenses", "list", {
27
+ isActive?: boolean;
28
+ categoryId?: string;
29
+ } | undefined];
30
+ readonly detail: (id: string) => readonly ["expenses", "detail", string];
31
+ };
32
+ readonly expenseCategories: {
33
+ readonly all: readonly ["expenseCategories"];
34
+ readonly list: () => readonly ["expenseCategories", "list"];
35
+ };
36
+ readonly expensePayments: {
37
+ readonly all: readonly ["expensePayments"];
38
+ readonly lists: () => readonly ["expensePayments", "list"];
39
+ readonly list: (filters?: {
40
+ expenseId?: string;
41
+ dateFrom?: string;
42
+ dateTo?: string;
43
+ }) => readonly ["expensePayments", "list", {
44
+ expenseId?: string;
45
+ dateFrom?: string;
46
+ dateTo?: string;
47
+ } | undefined];
48
+ readonly detail: (id: string) => readonly ["expensePayments", "detail", string];
49
+ };
50
+ readonly incomes: {
51
+ readonly all: readonly ["incomes"];
52
+ readonly lists: () => readonly ["incomes", "list"];
53
+ readonly list: (filters?: {
54
+ isActive?: boolean;
55
+ categoryId?: string;
56
+ }) => readonly ["incomes", "list", {
57
+ isActive?: boolean;
58
+ categoryId?: string;
59
+ } | undefined];
60
+ readonly detail: (id: string) => readonly ["incomes", "detail", string];
61
+ };
62
+ readonly incomeCategories: {
63
+ readonly all: readonly ["incomeCategories"];
64
+ readonly list: () => readonly ["incomeCategories", "list"];
65
+ };
66
+ readonly incomePayments: {
67
+ readonly all: readonly ["incomePayments"];
68
+ readonly lists: () => readonly ["incomePayments", "list"];
69
+ readonly list: (filters?: {
70
+ incomeId?: string;
71
+ dateFrom?: string;
72
+ dateTo?: string;
73
+ }) => readonly ["incomePayments", "list", {
74
+ incomeId?: string;
75
+ dateFrom?: string;
76
+ dateTo?: string;
77
+ } | undefined];
78
+ readonly detail: (id: string) => readonly ["incomePayments", "detail", string];
79
+ };
80
+ readonly exchangeRates: {
81
+ readonly all: readonly ["exchangeRates"];
82
+ readonly list: () => readonly ["exchangeRates", "list"];
83
+ };
84
+ readonly focusSessions: {
85
+ readonly all: readonly ["focusSessions"];
86
+ readonly lists: () => readonly ["focusSessions", "list"];
87
+ readonly list: (filters?: {
88
+ date?: string;
89
+ categoryId?: string;
90
+ status?: string;
91
+ startedAfter?: string;
92
+ startedBefore?: string;
93
+ }) => readonly ["focusSessions", "list", {
94
+ date?: string;
95
+ categoryId?: string;
96
+ status?: string;
97
+ startedAfter?: string;
98
+ startedBefore?: string;
99
+ } | undefined];
100
+ readonly today: () => readonly ["focusSessions", "today"];
101
+ readonly active: () => readonly ["focusSessions", "active"];
102
+ readonly detail: (id: string) => readonly ["focusSessions", "detail", string];
103
+ };
104
+ readonly focusCategories: {
105
+ readonly all: readonly ["focusCategories"];
106
+ readonly list: () => readonly ["focusCategories", "list"];
107
+ };
108
+ readonly settings: {
109
+ readonly all: readonly ["settings"];
110
+ readonly detail: (key: string) => readonly ["settings", string];
111
+ };
112
+ readonly lieuDays: {
113
+ readonly all: readonly ["lieuDays"];
114
+ readonly list: () => readonly ["lieuDays", "list"];
115
+ readonly balance: () => readonly ["lieuDays", "balance"];
116
+ readonly detail: (id: string) => readonly ["lieuDays", "detail", string];
117
+ };
118
+ readonly efLinks: {
119
+ readonly all: readonly ["efLinks"];
120
+ readonly list: () => readonly ["efLinks", "list"];
121
+ readonly detail: (id: string) => readonly ["efLinks", "detail", string];
122
+ };
123
+ readonly bankConnections: {
124
+ readonly all: readonly ["bankConnections"];
125
+ readonly list: () => readonly ["bankConnections", "list"];
126
+ readonly detail: (id: string) => readonly ["bankConnections", "detail", string];
127
+ };
128
+ readonly bankTransactions: {
129
+ readonly all: readonly ["bankTransactions"];
130
+ readonly lists: () => readonly ["bankTransactions", "list"];
131
+ readonly list: (filters?: {
132
+ connectionId?: string;
133
+ dateFrom?: string;
134
+ dateTo?: string;
135
+ }) => readonly ["bankTransactions", "list", {
136
+ connectionId?: string;
137
+ dateFrom?: string;
138
+ dateTo?: string;
139
+ } | undefined];
140
+ readonly stats: (connectionId?: string) => readonly ["bankTransactions", "stats", string | undefined];
141
+ };
142
+ readonly healthCategories: {
143
+ readonly all: readonly ["healthCategories"];
144
+ readonly list: () => readonly ["healthCategories", "list"];
145
+ readonly detail: (id: string) => readonly ["healthCategories", "detail", string];
146
+ };
147
+ readonly healthHabits: {
148
+ readonly all: readonly ["healthHabits"];
149
+ readonly lists: () => readonly ["healthHabits", "list"];
150
+ readonly list: (filters?: {
151
+ categoryId?: string;
152
+ isActive?: boolean;
153
+ }) => readonly ["healthHabits", "list", {
154
+ categoryId?: string;
155
+ isActive?: boolean;
156
+ } | undefined];
157
+ readonly detail: (id: string) => readonly ["healthHabits", "detail", string];
158
+ };
159
+ readonly healthCompletions: {
160
+ readonly all: readonly ["healthCompletions"];
161
+ readonly lists: () => readonly ["healthCompletions", "list"];
162
+ readonly list: (filters?: {
163
+ habitId?: string;
164
+ dateFrom?: string;
165
+ dateTo?: string;
166
+ }) => readonly ["healthCompletions", "list", {
167
+ habitId?: string;
168
+ dateFrom?: string;
169
+ dateTo?: string;
170
+ } | undefined];
171
+ readonly forHabit: (habitId: string) => readonly ["healthCompletions", "habit", string];
172
+ readonly forDate: (date: string) => readonly ["healthCompletions", "date", string];
173
+ };
174
+ readonly healthStats: {
175
+ readonly all: readonly ["healthStats"];
176
+ readonly forDate: (date?: string) => readonly ["healthStats", string];
177
+ };
178
+ readonly promptCategories: {
179
+ readonly all: readonly ["promptCategories"];
180
+ readonly list: () => readonly ["promptCategories", "list"];
181
+ readonly detail: (id: string) => readonly ["promptCategories", "detail", string];
182
+ };
183
+ readonly promptLabels: {
184
+ readonly all: readonly ["promptLabels"];
185
+ readonly list: () => readonly ["promptLabels", "list"];
186
+ readonly detail: (id: string) => readonly ["promptLabels", "detail", string];
187
+ };
188
+ readonly prompts: {
189
+ readonly all: readonly ["prompts"];
190
+ readonly lists: () => readonly ["prompts", "list"];
191
+ readonly list: (filters?: {
192
+ categoryId?: string;
193
+ labelId?: string;
194
+ isFavorite?: boolean;
195
+ search?: string;
196
+ }) => readonly ["prompts", "list", {
197
+ categoryId?: string;
198
+ labelId?: string;
199
+ isFavorite?: boolean;
200
+ search?: string;
201
+ } | undefined];
202
+ readonly detail: (id: string) => readonly ["prompts", "detail", string];
203
+ };
204
+ readonly trainingActivities: {
205
+ readonly all: readonly ["trainingActivities"];
206
+ readonly list: () => readonly ["trainingActivities", "list"];
207
+ readonly detail: (id: string) => readonly ["trainingActivities", "detail", string];
208
+ readonly byStravaType: (stravaType: string) => readonly ["trainingActivities", "strava", string];
209
+ };
210
+ readonly trainingSessions: {
211
+ readonly all: readonly ["trainingSessions"];
212
+ readonly lists: () => readonly ["trainingSessions", "list"];
213
+ readonly list: (filters?: {
214
+ activityId?: string;
215
+ dateFrom?: string;
216
+ dateTo?: string;
217
+ source?: "manual" | "strava";
218
+ }) => readonly ["trainingSessions", "list", {
219
+ activityId?: string;
220
+ dateFrom?: string;
221
+ dateTo?: string;
222
+ source?: "manual" | "strava";
223
+ } | undefined];
224
+ readonly detail: (id: string) => readonly ["trainingSessions", "detail", string];
225
+ readonly byStravaId: (stravaActivityId: string) => readonly ["trainingSessions", "strava", string];
226
+ };
227
+ readonly plannedSessions: {
228
+ readonly all: readonly ["plannedSessions"];
229
+ readonly lists: () => readonly ["plannedSessions", "list"];
230
+ readonly list: (filters?: {
231
+ activityId?: string;
232
+ dateFrom?: string;
233
+ dateTo?: string;
234
+ isCompleted?: boolean;
235
+ }) => readonly ["plannedSessions", "list", {
236
+ activityId?: string;
237
+ dateFrom?: string;
238
+ dateTo?: string;
239
+ isCompleted?: boolean;
240
+ } | undefined];
241
+ readonly detail: (id: string) => readonly ["plannedSessions", "detail", string];
242
+ readonly upcoming: () => readonly ["plannedSessions", "upcoming"];
243
+ };
244
+ readonly races: {
245
+ readonly all: readonly ["races"];
246
+ readonly lists: () => readonly ["races", "list"];
247
+ readonly list: (filters?: {
248
+ type?: "race" | "event" | "goal";
249
+ status?: "upcoming" | "completed" | "dns" | "dnf";
250
+ dateFrom?: string;
251
+ dateTo?: string;
252
+ }) => readonly ["races", "list", {
253
+ type?: "race" | "event" | "goal";
254
+ status?: "upcoming" | "completed" | "dns" | "dnf";
255
+ dateFrom?: string;
256
+ dateTo?: string;
257
+ } | undefined];
258
+ readonly detail: (id: string) => readonly ["races", "detail", string];
259
+ readonly next: () => readonly ["races", "next"];
260
+ };
261
+ readonly trainingStats: {
262
+ readonly all: readonly ["trainingStats"];
263
+ readonly forRange: (dateFrom?: string, dateTo?: string) => readonly ["trainingStats", string | undefined, string | undefined];
264
+ };
265
+ readonly strava: {
266
+ readonly all: readonly ["strava"];
267
+ readonly athlete: () => readonly ["strava", "athlete"];
268
+ readonly connected: () => readonly ["strava", "connected"];
269
+ readonly activities: (options?: {
270
+ after?: number;
271
+ before?: number;
272
+ }) => readonly ["strava", "activities", {
273
+ after?: number;
274
+ before?: number;
275
+ } | undefined];
276
+ };
277
+ readonly journalEntries: {
278
+ readonly all: readonly ["journalEntries"];
279
+ readonly lists: () => readonly ["journalEntries", "list"];
280
+ readonly list: (filters?: {
281
+ dateFrom?: string;
282
+ dateTo?: string;
283
+ }) => readonly ["journalEntries", "list", {
284
+ dateFrom?: string;
285
+ dateTo?: string;
286
+ } | undefined];
287
+ readonly forDate: (date: string) => readonly ["journalEntries", "date", string];
288
+ };
289
+ readonly journalData: {
290
+ readonly all: readonly ["journalData"];
291
+ readonly forDate: (date: string) => readonly ["journalData", string];
292
+ };
293
+ readonly chatConversations: {
294
+ readonly all: readonly ["chatConversations"];
295
+ readonly list: () => readonly ["chatConversations", "list"];
296
+ readonly detail: (id: string) => readonly ["chatConversations", "detail", string];
297
+ };
298
+ readonly chatMessages: {
299
+ readonly all: readonly ["chatMessages"];
300
+ readonly forConversation: (conversationId: string) => readonly ["chatMessages", "conversation", string];
301
+ };
302
+ readonly googleCalendar: {
303
+ readonly all: readonly ["googleCalendar"];
304
+ readonly calendars: () => readonly ["googleCalendar", "calendars"];
305
+ readonly events: (calendarId: string, timeMin?: string, timeMax?: string) => readonly ["googleCalendar", "events", string, string | undefined, string | undefined];
306
+ };
307
+ readonly linear: {
308
+ readonly all: readonly ["linear"];
309
+ readonly issues: (filters?: {
310
+ projectId?: string;
311
+ status?: string;
312
+ }) => readonly ["linear", "issues", {
313
+ projectId?: string;
314
+ status?: string;
315
+ } | undefined];
316
+ readonly projects: () => readonly ["linear", "projects"];
317
+ };
318
+ };
319
+ type QueryKeys = typeof queryKeys;
320
+
321
+ export { type QueryKeys, queryKeys };
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/query/index.ts
21
+ var query_exports = {};
22
+ __export(query_exports, {
23
+ queryKeys: () => queryKeys
24
+ });
25
+ module.exports = __toCommonJS(query_exports);
26
+ var queryKeys = {
27
+ // -------------------------------------------------------------------------
28
+ // Expenses
29
+ // -------------------------------------------------------------------------
30
+ expenses: {
31
+ all: ["expenses"],
32
+ lists: () => [...queryKeys.expenses.all, "list"],
33
+ list: (filters) => [...queryKeys.expenses.lists(), filters],
34
+ detail: (id) => [...queryKeys.expenses.all, "detail", id]
35
+ },
36
+ // Expense Categories
37
+ expenseCategories: {
38
+ all: ["expenseCategories"],
39
+ list: () => [...queryKeys.expenseCategories.all, "list"]
40
+ },
41
+ // Expense Payments
42
+ expensePayments: {
43
+ all: ["expensePayments"],
44
+ lists: () => [...queryKeys.expensePayments.all, "list"],
45
+ list: (filters) => [...queryKeys.expensePayments.lists(), filters],
46
+ detail: (id) => [...queryKeys.expensePayments.all, "detail", id]
47
+ },
48
+ // -------------------------------------------------------------------------
49
+ // Income
50
+ // -------------------------------------------------------------------------
51
+ incomes: {
52
+ all: ["incomes"],
53
+ lists: () => [...queryKeys.incomes.all, "list"],
54
+ list: (filters) => [...queryKeys.incomes.lists(), filters],
55
+ detail: (id) => [...queryKeys.incomes.all, "detail", id]
56
+ },
57
+ // Income Categories
58
+ incomeCategories: {
59
+ all: ["incomeCategories"],
60
+ list: () => [...queryKeys.incomeCategories.all, "list"]
61
+ },
62
+ // Income Payments
63
+ incomePayments: {
64
+ all: ["incomePayments"],
65
+ lists: () => [...queryKeys.incomePayments.all, "list"],
66
+ list: (filters) => [...queryKeys.incomePayments.lists(), filters],
67
+ detail: (id) => [...queryKeys.incomePayments.all, "detail", id]
68
+ },
69
+ // Exchange Rates
70
+ exchangeRates: {
71
+ all: ["exchangeRates"],
72
+ list: () => [...queryKeys.exchangeRates.all, "list"]
73
+ },
74
+ // -------------------------------------------------------------------------
75
+ // Focus
76
+ // -------------------------------------------------------------------------
77
+ focusSessions: {
78
+ all: ["focusSessions"],
79
+ lists: () => [...queryKeys.focusSessions.all, "list"],
80
+ list: (filters) => [...queryKeys.focusSessions.lists(), filters],
81
+ today: () => [...queryKeys.focusSessions.all, "today"],
82
+ active: () => [...queryKeys.focusSessions.all, "active"],
83
+ detail: (id) => [...queryKeys.focusSessions.all, "detail", id]
84
+ },
85
+ // Focus Categories
86
+ focusCategories: {
87
+ all: ["focusCategories"],
88
+ list: () => [...queryKeys.focusCategories.all, "list"]
89
+ },
90
+ // -------------------------------------------------------------------------
91
+ // Settings
92
+ // -------------------------------------------------------------------------
93
+ settings: {
94
+ all: ["settings"],
95
+ detail: (key) => [...queryKeys.settings.all, key]
96
+ },
97
+ // -------------------------------------------------------------------------
98
+ // EF Work (Lieu Days & Links)
99
+ // -------------------------------------------------------------------------
100
+ lieuDays: {
101
+ all: ["lieuDays"],
102
+ list: () => [...queryKeys.lieuDays.all, "list"],
103
+ balance: () => [...queryKeys.lieuDays.all, "balance"],
104
+ detail: (id) => [...queryKeys.lieuDays.all, "detail", id]
105
+ },
106
+ efLinks: {
107
+ all: ["efLinks"],
108
+ list: () => [...queryKeys.efLinks.all, "list"],
109
+ detail: (id) => [...queryKeys.efLinks.all, "detail", id]
110
+ },
111
+ // -------------------------------------------------------------------------
112
+ // Banking
113
+ // -------------------------------------------------------------------------
114
+ bankConnections: {
115
+ all: ["bankConnections"],
116
+ list: () => [...queryKeys.bankConnections.all, "list"],
117
+ detail: (id) => [...queryKeys.bankConnections.all, "detail", id]
118
+ },
119
+ bankTransactions: {
120
+ all: ["bankTransactions"],
121
+ lists: () => [...queryKeys.bankTransactions.all, "list"],
122
+ list: (filters) => [...queryKeys.bankTransactions.lists(), filters],
123
+ stats: (connectionId) => [...queryKeys.bankTransactions.all, "stats", connectionId]
124
+ },
125
+ // -------------------------------------------------------------------------
126
+ // Health
127
+ // -------------------------------------------------------------------------
128
+ healthCategories: {
129
+ all: ["healthCategories"],
130
+ list: () => [...queryKeys.healthCategories.all, "list"],
131
+ detail: (id) => [...queryKeys.healthCategories.all, "detail", id]
132
+ },
133
+ healthHabits: {
134
+ all: ["healthHabits"],
135
+ lists: () => [...queryKeys.healthHabits.all, "list"],
136
+ list: (filters) => [...queryKeys.healthHabits.lists(), filters],
137
+ detail: (id) => [...queryKeys.healthHabits.all, "detail", id]
138
+ },
139
+ healthCompletions: {
140
+ all: ["healthCompletions"],
141
+ lists: () => [...queryKeys.healthCompletions.all, "list"],
142
+ list: (filters) => [...queryKeys.healthCompletions.lists(), filters],
143
+ forHabit: (habitId) => [...queryKeys.healthCompletions.all, "habit", habitId],
144
+ forDate: (date) => [...queryKeys.healthCompletions.all, "date", date]
145
+ },
146
+ healthStats: {
147
+ all: ["healthStats"],
148
+ forDate: (date) => [...queryKeys.healthStats.all, date ?? "today"]
149
+ },
150
+ // -------------------------------------------------------------------------
151
+ // Prompts
152
+ // -------------------------------------------------------------------------
153
+ promptCategories: {
154
+ all: ["promptCategories"],
155
+ list: () => [...queryKeys.promptCategories.all, "list"],
156
+ detail: (id) => [...queryKeys.promptCategories.all, "detail", id]
157
+ },
158
+ promptLabels: {
159
+ all: ["promptLabels"],
160
+ list: () => [...queryKeys.promptLabels.all, "list"],
161
+ detail: (id) => [...queryKeys.promptLabels.all, "detail", id]
162
+ },
163
+ prompts: {
164
+ all: ["prompts"],
165
+ lists: () => [...queryKeys.prompts.all, "list"],
166
+ list: (filters) => [...queryKeys.prompts.lists(), filters],
167
+ detail: (id) => [...queryKeys.prompts.all, "detail", id]
168
+ },
169
+ // -------------------------------------------------------------------------
170
+ // Training
171
+ // -------------------------------------------------------------------------
172
+ trainingActivities: {
173
+ all: ["trainingActivities"],
174
+ list: () => [...queryKeys.trainingActivities.all, "list"],
175
+ detail: (id) => [...queryKeys.trainingActivities.all, "detail", id],
176
+ byStravaType: (stravaType) => [...queryKeys.trainingActivities.all, "strava", stravaType]
177
+ },
178
+ trainingSessions: {
179
+ all: ["trainingSessions"],
180
+ lists: () => [...queryKeys.trainingSessions.all, "list"],
181
+ list: (filters) => [...queryKeys.trainingSessions.lists(), filters],
182
+ detail: (id) => [...queryKeys.trainingSessions.all, "detail", id],
183
+ byStravaId: (stravaActivityId) => [...queryKeys.trainingSessions.all, "strava", stravaActivityId]
184
+ },
185
+ plannedSessions: {
186
+ all: ["plannedSessions"],
187
+ lists: () => [...queryKeys.plannedSessions.all, "list"],
188
+ list: (filters) => [...queryKeys.plannedSessions.lists(), filters],
189
+ detail: (id) => [...queryKeys.plannedSessions.all, "detail", id],
190
+ upcoming: () => [...queryKeys.plannedSessions.all, "upcoming"]
191
+ },
192
+ races: {
193
+ all: ["races"],
194
+ lists: () => [...queryKeys.races.all, "list"],
195
+ list: (filters) => [...queryKeys.races.lists(), filters],
196
+ detail: (id) => [...queryKeys.races.all, "detail", id],
197
+ next: () => [...queryKeys.races.all, "next"]
198
+ },
199
+ trainingStats: {
200
+ all: ["trainingStats"],
201
+ forRange: (dateFrom, dateTo) => [...queryKeys.trainingStats.all, dateFrom, dateTo]
202
+ },
203
+ // Strava
204
+ strava: {
205
+ all: ["strava"],
206
+ athlete: () => [...queryKeys.strava.all, "athlete"],
207
+ connected: () => [...queryKeys.strava.all, "connected"],
208
+ activities: (options) => [...queryKeys.strava.all, "activities", options]
209
+ },
210
+ // -------------------------------------------------------------------------
211
+ // Journal
212
+ // -------------------------------------------------------------------------
213
+ journalEntries: {
214
+ all: ["journalEntries"],
215
+ lists: () => [...queryKeys.journalEntries.all, "list"],
216
+ list: (filters) => [...queryKeys.journalEntries.lists(), filters],
217
+ forDate: (date) => [...queryKeys.journalEntries.all, "date", date]
218
+ },
219
+ // Journal data (aggregated)
220
+ journalData: {
221
+ all: ["journalData"],
222
+ forDate: (date) => [...queryKeys.journalData.all, date]
223
+ },
224
+ // -------------------------------------------------------------------------
225
+ // Chat
226
+ // -------------------------------------------------------------------------
227
+ chatConversations: {
228
+ all: ["chatConversations"],
229
+ list: () => [...queryKeys.chatConversations.all, "list"],
230
+ detail: (id) => [...queryKeys.chatConversations.all, "detail", id]
231
+ },
232
+ chatMessages: {
233
+ all: ["chatMessages"],
234
+ forConversation: (conversationId) => [...queryKeys.chatMessages.all, "conversation", conversationId]
235
+ },
236
+ // -------------------------------------------------------------------------
237
+ // Google Calendar
238
+ // -------------------------------------------------------------------------
239
+ googleCalendar: {
240
+ all: ["googleCalendar"],
241
+ calendars: () => [...queryKeys.googleCalendar.all, "calendars"],
242
+ events: (calendarId, timeMin, timeMax) => [...queryKeys.googleCalendar.all, "events", calendarId, timeMin, timeMax]
243
+ },
244
+ // -------------------------------------------------------------------------
245
+ // Linear
246
+ // -------------------------------------------------------------------------
247
+ linear: {
248
+ all: ["linear"],
249
+ issues: (filters) => [...queryKeys.linear.all, "issues", filters],
250
+ projects: () => [...queryKeys.linear.all, "projects"]
251
+ }
252
+ };
253
+ // Annotate the CommonJS export names for ESM import in node:
254
+ 0 && (module.exports = {
255
+ queryKeys
256
+ });
257
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/query/index.ts"],"sourcesContent":["/**\n * Query Keys Factory\n *\n * Centralized query key management for TanStack Query.\n * Used by both desktop and mobile apps for consistent cache invalidation.\n *\n * @example\n * import { queryKeys } from '@mrck-labs/vanaheim-shared/query'\n *\n * // In a query hook\n * useQuery({\n * queryKey: queryKeys.focusSessions.today(),\n * queryFn: ...\n * })\n *\n * // Invalidating\n * queryClient.invalidateQueries({ queryKey: queryKeys.focusSessions.all })\n */\n\n// ============================================================================\n// Query Keys Factory\n// ============================================================================\n\nexport const queryKeys = {\n // -------------------------------------------------------------------------\n // Expenses\n // -------------------------------------------------------------------------\n expenses: {\n all: ['expenses'] as const,\n lists: () => [...queryKeys.expenses.all, 'list'] as const,\n list: (filters?: { isActive?: boolean; categoryId?: string }) =>\n [...queryKeys.expenses.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.expenses.all, 'detail', id] as const,\n },\n\n // Expense Categories\n expenseCategories: {\n all: ['expenseCategories'] as const,\n list: () => [...queryKeys.expenseCategories.all, 'list'] as const,\n },\n\n // Expense Payments\n expensePayments: {\n all: ['expensePayments'] as const,\n lists: () => [...queryKeys.expensePayments.all, 'list'] as const,\n list: (filters?: { expenseId?: string; dateFrom?: string; dateTo?: string }) =>\n [...queryKeys.expensePayments.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.expensePayments.all, 'detail', id] as const,\n },\n\n // -------------------------------------------------------------------------\n // Income\n // -------------------------------------------------------------------------\n incomes: {\n all: ['incomes'] as const,\n lists: () => [...queryKeys.incomes.all, 'list'] as const,\n list: (filters?: { isActive?: boolean; categoryId?: string }) =>\n [...queryKeys.incomes.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.incomes.all, 'detail', id] as const,\n },\n\n // Income Categories\n incomeCategories: {\n all: ['incomeCategories'] as const,\n list: () => [...queryKeys.incomeCategories.all, 'list'] as const,\n },\n\n // Income Payments\n incomePayments: {\n all: ['incomePayments'] as const,\n lists: () => [...queryKeys.incomePayments.all, 'list'] as const,\n list: (filters?: { incomeId?: string; dateFrom?: string; dateTo?: string }) =>\n [...queryKeys.incomePayments.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.incomePayments.all, 'detail', id] as const,\n },\n\n // Exchange Rates\n exchangeRates: {\n all: ['exchangeRates'] as const,\n list: () => [...queryKeys.exchangeRates.all, 'list'] as const,\n },\n\n // -------------------------------------------------------------------------\n // Focus\n // -------------------------------------------------------------------------\n focusSessions: {\n all: ['focusSessions'] as const,\n lists: () => [...queryKeys.focusSessions.all, 'list'] as const,\n list: (filters?: {\n date?: string\n categoryId?: string\n status?: string\n startedAfter?: string\n startedBefore?: string\n }) => [...queryKeys.focusSessions.lists(), filters] as const,\n today: () => [...queryKeys.focusSessions.all, 'today'] as const,\n active: () => [...queryKeys.focusSessions.all, 'active'] as const,\n detail: (id: string) => [...queryKeys.focusSessions.all, 'detail', id] as const,\n },\n\n // Focus Categories\n focusCategories: {\n all: ['focusCategories'] as const,\n list: () => [...queryKeys.focusCategories.all, 'list'] as const,\n },\n\n // -------------------------------------------------------------------------\n // Settings\n // -------------------------------------------------------------------------\n settings: {\n all: ['settings'] as const,\n detail: (key: string) => [...queryKeys.settings.all, key] as const,\n },\n\n // -------------------------------------------------------------------------\n // EF Work (Lieu Days & Links)\n // -------------------------------------------------------------------------\n lieuDays: {\n all: ['lieuDays'] as const,\n list: () => [...queryKeys.lieuDays.all, 'list'] as const,\n balance: () => [...queryKeys.lieuDays.all, 'balance'] as const,\n detail: (id: string) => [...queryKeys.lieuDays.all, 'detail', id] as const,\n },\n\n efLinks: {\n all: ['efLinks'] as const,\n list: () => [...queryKeys.efLinks.all, 'list'] as const,\n detail: (id: string) => [...queryKeys.efLinks.all, 'detail', id] as const,\n },\n\n // -------------------------------------------------------------------------\n // Banking\n // -------------------------------------------------------------------------\n bankConnections: {\n all: ['bankConnections'] as const,\n list: () => [...queryKeys.bankConnections.all, 'list'] as const,\n detail: (id: string) => [...queryKeys.bankConnections.all, 'detail', id] as const,\n },\n\n bankTransactions: {\n all: ['bankTransactions'] as const,\n lists: () => [...queryKeys.bankTransactions.all, 'list'] as const,\n list: (filters?: { connectionId?: string; dateFrom?: string; dateTo?: string }) =>\n [...queryKeys.bankTransactions.lists(), filters] as const,\n stats: (connectionId?: string) =>\n [...queryKeys.bankTransactions.all, 'stats', connectionId] as const,\n },\n\n // -------------------------------------------------------------------------\n // Health\n // -------------------------------------------------------------------------\n healthCategories: {\n all: ['healthCategories'] as const,\n list: () => [...queryKeys.healthCategories.all, 'list'] as const,\n detail: (id: string) => [...queryKeys.healthCategories.all, 'detail', id] as const,\n },\n\n healthHabits: {\n all: ['healthHabits'] as const,\n lists: () => [...queryKeys.healthHabits.all, 'list'] as const,\n list: (filters?: { categoryId?: string; isActive?: boolean }) =>\n [...queryKeys.healthHabits.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.healthHabits.all, 'detail', id] as const,\n },\n\n healthCompletions: {\n all: ['healthCompletions'] as const,\n lists: () => [...queryKeys.healthCompletions.all, 'list'] as const,\n list: (filters?: { habitId?: string; dateFrom?: string; dateTo?: string }) =>\n [...queryKeys.healthCompletions.lists(), filters] as const,\n forHabit: (habitId: string) => [...queryKeys.healthCompletions.all, 'habit', habitId] as const,\n forDate: (date: string) => [...queryKeys.healthCompletions.all, 'date', date] as const,\n },\n\n healthStats: {\n all: ['healthStats'] as const,\n forDate: (date?: string) => [...queryKeys.healthStats.all, date ?? 'today'] as const,\n },\n\n // -------------------------------------------------------------------------\n // Prompts\n // -------------------------------------------------------------------------\n promptCategories: {\n all: ['promptCategories'] as const,\n list: () => [...queryKeys.promptCategories.all, 'list'] as const,\n detail: (id: string) => [...queryKeys.promptCategories.all, 'detail', id] as const,\n },\n\n promptLabels: {\n all: ['promptLabels'] as const,\n list: () => [...queryKeys.promptLabels.all, 'list'] as const,\n detail: (id: string) => [...queryKeys.promptLabels.all, 'detail', id] as const,\n },\n\n prompts: {\n all: ['prompts'] as const,\n lists: () => [...queryKeys.prompts.all, 'list'] as const,\n list: (filters?: {\n categoryId?: string\n labelId?: string\n isFavorite?: boolean\n search?: string\n }) => [...queryKeys.prompts.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.prompts.all, 'detail', id] as const,\n },\n\n // -------------------------------------------------------------------------\n // Training\n // -------------------------------------------------------------------------\n trainingActivities: {\n all: ['trainingActivities'] as const,\n list: () => [...queryKeys.trainingActivities.all, 'list'] as const,\n detail: (id: string) => [...queryKeys.trainingActivities.all, 'detail', id] as const,\n byStravaType: (stravaType: string) =>\n [...queryKeys.trainingActivities.all, 'strava', stravaType] as const,\n },\n\n trainingSessions: {\n all: ['trainingSessions'] as const,\n lists: () => [...queryKeys.trainingSessions.all, 'list'] as const,\n list: (filters?: {\n activityId?: string\n dateFrom?: string\n dateTo?: string\n source?: 'manual' | 'strava'\n }) => [...queryKeys.trainingSessions.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.trainingSessions.all, 'detail', id] as const,\n byStravaId: (stravaActivityId: string) =>\n [...queryKeys.trainingSessions.all, 'strava', stravaActivityId] as const,\n },\n\n plannedSessions: {\n all: ['plannedSessions'] as const,\n lists: () => [...queryKeys.plannedSessions.all, 'list'] as const,\n list: (filters?: {\n activityId?: string\n dateFrom?: string\n dateTo?: string\n isCompleted?: boolean\n }) => [...queryKeys.plannedSessions.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.plannedSessions.all, 'detail', id] as const,\n upcoming: () => [...queryKeys.plannedSessions.all, 'upcoming'] as const,\n },\n\n races: {\n all: ['races'] as const,\n lists: () => [...queryKeys.races.all, 'list'] as const,\n list: (filters?: {\n type?: 'race' | 'event' | 'goal'\n status?: 'upcoming' | 'completed' | 'dns' | 'dnf'\n dateFrom?: string\n dateTo?: string\n }) => [...queryKeys.races.lists(), filters] as const,\n detail: (id: string) => [...queryKeys.races.all, 'detail', id] as const,\n next: () => [...queryKeys.races.all, 'next'] as const,\n },\n\n trainingStats: {\n all: ['trainingStats'] as const,\n forRange: (dateFrom?: string, dateTo?: string) =>\n [...queryKeys.trainingStats.all, dateFrom, dateTo] as const,\n },\n\n // Strava\n strava: {\n all: ['strava'] as const,\n athlete: () => [...queryKeys.strava.all, 'athlete'] as const,\n connected: () => [...queryKeys.strava.all, 'connected'] as const,\n activities: (options?: { after?: number; before?: number }) =>\n [...queryKeys.strava.all, 'activities', options] as const,\n },\n\n // -------------------------------------------------------------------------\n // Journal\n // -------------------------------------------------------------------------\n journalEntries: {\n all: ['journalEntries'] as const,\n lists: () => [...queryKeys.journalEntries.all, 'list'] as const,\n list: (filters?: { dateFrom?: string; dateTo?: string }) =>\n [...queryKeys.journalEntries.lists(), filters] as const,\n forDate: (date: string) => [...queryKeys.journalEntries.all, 'date', date] as const,\n },\n\n // Journal data (aggregated)\n journalData: {\n all: ['journalData'] as const,\n forDate: (date: string) => [...queryKeys.journalData.all, date] as const,\n },\n\n // -------------------------------------------------------------------------\n // Chat\n // -------------------------------------------------------------------------\n chatConversations: {\n all: ['chatConversations'] as const,\n list: () => [...queryKeys.chatConversations.all, 'list'] as const,\n detail: (id: string) => [...queryKeys.chatConversations.all, 'detail', id] as const,\n },\n\n chatMessages: {\n all: ['chatMessages'] as const,\n forConversation: (conversationId: string) =>\n [...queryKeys.chatMessages.all, 'conversation', conversationId] as const,\n },\n\n // -------------------------------------------------------------------------\n // Google Calendar\n // -------------------------------------------------------------------------\n googleCalendar: {\n all: ['googleCalendar'] as const,\n calendars: () => [...queryKeys.googleCalendar.all, 'calendars'] as const,\n events: (calendarId: string, timeMin?: string, timeMax?: string) =>\n [...queryKeys.googleCalendar.all, 'events', calendarId, timeMin, timeMax] as const,\n },\n\n // -------------------------------------------------------------------------\n // Linear\n // -------------------------------------------------------------------------\n linear: {\n all: ['linear'] as const,\n issues: (filters?: { projectId?: string; status?: string }) =>\n [...queryKeys.linear.all, 'issues', filters] as const,\n projects: () => [...queryKeys.linear.all, 'projects'] as const,\n },\n} as const\n\n// ============================================================================\n// Type Exports\n// ============================================================================\n\nexport type QueryKeys = typeof queryKeys\n\n"],"mappings":"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","names":[]}