@okrlinkhub/okrhub 0.1.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.
Files changed (148) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +579 -0
  3. package/dist/client/_generated/_ignore.d.ts +1 -0
  4. package/dist/client/_generated/_ignore.d.ts.map +1 -0
  5. package/dist/client/_generated/_ignore.js +3 -0
  6. package/dist/client/_generated/_ignore.js.map +1 -0
  7. package/dist/client/index.d.ts +593 -0
  8. package/dist/client/index.d.ts.map +1 -0
  9. package/dist/client/index.js +704 -0
  10. package/dist/client/index.js.map +1 -0
  11. package/dist/component/_generated/api.d.ts +72 -0
  12. package/dist/component/_generated/api.d.ts.map +1 -0
  13. package/dist/component/_generated/api.js +31 -0
  14. package/dist/component/_generated/api.js.map +1 -0
  15. package/dist/component/_generated/component.d.ts +1986 -0
  16. package/dist/component/_generated/component.d.ts.map +1 -0
  17. package/dist/component/_generated/component.js +11 -0
  18. package/dist/component/_generated/component.js.map +1 -0
  19. package/dist/component/_generated/dataModel.d.ts +46 -0
  20. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  21. package/dist/component/_generated/dataModel.js +11 -0
  22. package/dist/component/_generated/dataModel.js.map +1 -0
  23. package/dist/component/_generated/server.d.ts +121 -0
  24. package/dist/component/_generated/server.d.ts.map +1 -0
  25. package/dist/component/_generated/server.js +78 -0
  26. package/dist/component/_generated/server.js.map +1 -0
  27. package/dist/component/convex.config.d.ts +3 -0
  28. package/dist/component/convex.config.d.ts.map +1 -0
  29. package/dist/component/convex.config.js +3 -0
  30. package/dist/component/convex.config.js.map +1 -0
  31. package/dist/component/entities/batch.d.ts +121 -0
  32. package/dist/component/entities/batch.d.ts.map +1 -0
  33. package/dist/component/entities/batch.js +81 -0
  34. package/dist/component/entities/batch.js.map +1 -0
  35. package/dist/component/entities/index.d.ts +13 -0
  36. package/dist/component/entities/index.d.ts.map +1 -0
  37. package/dist/component/entities/index.js +22 -0
  38. package/dist/component/entities/index.js.map +1 -0
  39. package/dist/component/entities/indicatorForecasts.d.ts +61 -0
  40. package/dist/component/entities/indicatorForecasts.d.ts.map +1 -0
  41. package/dist/component/entities/indicatorForecasts.js +180 -0
  42. package/dist/component/entities/indicatorForecasts.js.map +1 -0
  43. package/dist/component/entities/indicatorValues.d.ts +77 -0
  44. package/dist/component/entities/indicatorValues.d.ts.map +1 -0
  45. package/dist/component/entities/indicatorValues.js +218 -0
  46. package/dist/component/entities/indicatorValues.js.map +1 -0
  47. package/dist/component/entities/indicators.d.ts +90 -0
  48. package/dist/component/entities/indicators.d.ts.map +1 -0
  49. package/dist/component/entities/indicators.js +239 -0
  50. package/dist/component/entities/indicators.js.map +1 -0
  51. package/dist/component/entities/initiatives.d.ts +103 -0
  52. package/dist/component/entities/initiatives.d.ts.map +1 -0
  53. package/dist/component/entities/initiatives.js +275 -0
  54. package/dist/component/entities/initiatives.js.map +1 -0
  55. package/dist/component/entities/keyResults.d.ts +111 -0
  56. package/dist/component/entities/keyResults.d.ts.map +1 -0
  57. package/dist/component/entities/keyResults.js +284 -0
  58. package/dist/component/entities/keyResults.js.map +1 -0
  59. package/dist/component/entities/milestones.d.ts +93 -0
  60. package/dist/component/entities/milestones.d.ts.map +1 -0
  61. package/dist/component/entities/milestones.js +249 -0
  62. package/dist/component/entities/milestones.js.map +1 -0
  63. package/dist/component/entities/objectives.d.ts +99 -0
  64. package/dist/component/entities/objectives.d.ts.map +1 -0
  65. package/dist/component/entities/objectives.js +261 -0
  66. package/dist/component/entities/objectives.js.map +1 -0
  67. package/dist/component/entities/risks.d.ts +126 -0
  68. package/dist/component/entities/risks.d.ts.map +1 -0
  69. package/dist/component/entities/risks.js +315 -0
  70. package/dist/component/entities/risks.js.map +1 -0
  71. package/dist/component/externalId.d.ts +79 -0
  72. package/dist/component/externalId.d.ts.map +1 -0
  73. package/dist/component/externalId.js +124 -0
  74. package/dist/component/externalId.js.map +1 -0
  75. package/dist/component/lib/hmac.d.ts +18 -0
  76. package/dist/component/lib/hmac.d.ts.map +1 -0
  77. package/dist/component/lib/hmac.js +35 -0
  78. package/dist/component/lib/hmac.js.map +1 -0
  79. package/dist/component/lib/index.d.ts +7 -0
  80. package/dist/component/lib/index.d.ts.map +1 -0
  81. package/dist/component/lib/index.js +6 -0
  82. package/dist/component/lib/index.js.map +1 -0
  83. package/dist/component/lib/types.d.ts +30 -0
  84. package/dist/component/lib/types.d.ts.map +1 -0
  85. package/dist/component/lib/types.js +7 -0
  86. package/dist/component/lib/types.js.map +1 -0
  87. package/dist/component/lib/validation.d.ts +15 -0
  88. package/dist/component/lib/validation.d.ts.map +1 -0
  89. package/dist/component/lib/validation.js +29 -0
  90. package/dist/component/lib/validation.js.map +1 -0
  91. package/dist/component/okrhub.d.ts +31 -0
  92. package/dist/component/okrhub.d.ts.map +1 -0
  93. package/dist/component/okrhub.js +45 -0
  94. package/dist/component/okrhub.js.map +1 -0
  95. package/dist/component/schema.d.ts +943 -0
  96. package/dist/component/schema.d.ts.map +1 -0
  97. package/dist/component/schema.js +437 -0
  98. package/dist/component/schema.js.map +1 -0
  99. package/dist/component/sync/http.d.ts +30 -0
  100. package/dist/component/sync/http.d.ts.map +1 -0
  101. package/dist/component/sync/http.js +114 -0
  102. package/dist/component/sync/http.js.map +1 -0
  103. package/dist/component/sync/index.d.ts +7 -0
  104. package/dist/component/sync/index.d.ts.map +1 -0
  105. package/dist/component/sync/index.js +7 -0
  106. package/dist/component/sync/index.js.map +1 -0
  107. package/dist/component/sync/processor.d.ts +20 -0
  108. package/dist/component/sync/processor.d.ts.map +1 -0
  109. package/dist/component/sync/processor.js +67 -0
  110. package/dist/component/sync/processor.js.map +1 -0
  111. package/dist/component/sync/queue.d.ts +40 -0
  112. package/dist/component/sync/queue.d.ts.map +1 -0
  113. package/dist/component/sync/queue.js +176 -0
  114. package/dist/component/sync/queue.js.map +1 -0
  115. package/dist/react/index.d.ts +2 -0
  116. package/dist/react/index.d.ts.map +1 -0
  117. package/dist/react/index.js +6 -0
  118. package/dist/react/index.js.map +1 -0
  119. package/package.json +117 -0
  120. package/src/client/_generated/_ignore.ts +1 -0
  121. package/src/client/index.ts +1004 -0
  122. package/src/component/_generated/api.ts +88 -0
  123. package/src/component/_generated/component.ts +2685 -0
  124. package/src/component/_generated/dataModel.ts +60 -0
  125. package/src/component/_generated/server.ts +156 -0
  126. package/src/component/convex.config.ts +3 -0
  127. package/src/component/entities/batch.ts +90 -0
  128. package/src/component/entities/index.ts +64 -0
  129. package/src/component/entities/indicatorForecasts.ts +205 -0
  130. package/src/component/entities/indicatorValues.ts +254 -0
  131. package/src/component/entities/indicators.ts +290 -0
  132. package/src/component/entities/initiatives.ts +342 -0
  133. package/src/component/entities/keyResults.ts +334 -0
  134. package/src/component/entities/milestones.ts +296 -0
  135. package/src/component/entities/objectives.ts +294 -0
  136. package/src/component/entities/risks.ts +383 -0
  137. package/src/component/externalId.ts +172 -0
  138. package/src/component/lib/hmac.ts +53 -0
  139. package/src/component/lib/index.ts +7 -0
  140. package/src/component/lib/types.ts +31 -0
  141. package/src/component/lib/validation.ts +41 -0
  142. package/src/component/okrhub.ts +110 -0
  143. package/src/component/schema.ts +574 -0
  144. package/src/component/sync/http.ts +138 -0
  145. package/src/component/sync/index.ts +11 -0
  146. package/src/component/sync/processor.ts +77 -0
  147. package/src/component/sync/queue.ts +201 -0
  148. package/src/react/index.ts +7 -0
@@ -0,0 +1,218 @@
1
+ /**
2
+ * Indicator Values Entity for OKRHub Component
3
+ *
4
+ * CRUD operations and queries for Indicator Values.
5
+ */
6
+ import { v } from "convex/values";
7
+ import { mutation, query } from "../_generated/server.js";
8
+ import { assertValidExternalId } from "../lib/validation.js";
9
+ import { indicatorValuePayloadValidator, SyncStatusSchema } from "../schema.js";
10
+ // ============================================================================
11
+ // LOCAL CRUD MUTATIONS
12
+ // ============================================================================
13
+ /**
14
+ * Creates an indicator value locally and queues for sync
15
+ */
16
+ export const createIndicatorValue = mutation({
17
+ args: {
18
+ sourceApp: v.string(),
19
+ sourceUrl: v.optional(v.string()),
20
+ indicatorExternalId: v.string(),
21
+ value: v.number(),
22
+ date: v.number(),
23
+ },
24
+ returns: v.object({
25
+ success: v.boolean(),
26
+ externalId: v.string(),
27
+ localId: v.id("indicatorValues"),
28
+ queueId: v.optional(v.id("syncQueue")),
29
+ error: v.optional(v.string()),
30
+ }),
31
+ handler: async (ctx, args) => {
32
+ const { sourceApp, sourceUrl, indicatorExternalId, value, date } = args;
33
+ try {
34
+ assertValidExternalId(indicatorExternalId, "indicatorExternalId");
35
+ const uuid = crypto.randomUUID();
36
+ const externalId = `${sourceApp}:indicatorValue:${uuid}`;
37
+ const now = Date.now();
38
+ const localId = await ctx.db.insert("indicatorValues", {
39
+ externalId,
40
+ indicatorExternalId,
41
+ value,
42
+ date,
43
+ syncStatus: "pending",
44
+ createdAt: now,
45
+ });
46
+ const payload = JSON.stringify({
47
+ externalId,
48
+ indicatorExternalId,
49
+ value,
50
+ date,
51
+ sourceUrl,
52
+ createdAt: now,
53
+ });
54
+ const queueId = await ctx.db.insert("syncQueue", {
55
+ entityType: "indicatorValue",
56
+ externalId,
57
+ payload,
58
+ status: "pending",
59
+ attempts: 0,
60
+ createdAt: now,
61
+ });
62
+ return {
63
+ success: true,
64
+ externalId,
65
+ localId,
66
+ queueId,
67
+ };
68
+ }
69
+ catch (error) {
70
+ const errorMessage = error && typeof error === "object" && "message" in error
71
+ ? error.message
72
+ : "Unknown error";
73
+ return {
74
+ success: false,
75
+ externalId: "",
76
+ localId: "",
77
+ error: errorMessage,
78
+ };
79
+ }
80
+ },
81
+ });
82
+ // ============================================================================
83
+ // LOCAL QUERY FUNCTIONS
84
+ // ============================================================================
85
+ /**
86
+ * Gets all local indicator values
87
+ */
88
+ export const getAllIndicatorValues = query({
89
+ args: {},
90
+ returns: v.array(v.object({
91
+ _id: v.id("indicatorValues"),
92
+ _creationTime: v.number(),
93
+ externalId: v.string(),
94
+ indicatorExternalId: v.string(),
95
+ value: v.number(),
96
+ date: v.number(),
97
+ syncStatus: SyncStatusSchema,
98
+ createdAt: v.number(),
99
+ })),
100
+ handler: async (ctx) => {
101
+ return await ctx.db.query("indicatorValues").collect();
102
+ },
103
+ });
104
+ // ============================================================================
105
+ // UPDATE MUTATIONS
106
+ // ============================================================================
107
+ /**
108
+ * Updates an indicator value locally and queues for sync
109
+ * Resets syncStatus to "pending"
110
+ */
111
+ export const updateIndicatorValue = mutation({
112
+ args: {
113
+ externalId: v.string(),
114
+ value: v.optional(v.number()),
115
+ date: v.optional(v.number()),
116
+ },
117
+ returns: v.object({
118
+ success: v.boolean(),
119
+ externalId: v.string(),
120
+ queueId: v.optional(v.id("syncQueue")),
121
+ error: v.optional(v.string()),
122
+ }),
123
+ handler: async (ctx, args) => {
124
+ const { externalId, value, date } = args;
125
+ try {
126
+ // Find the indicator value by externalId
127
+ const indicatorValue = await ctx.db
128
+ .query("indicatorValues")
129
+ .withIndex("by_external_id", (q) => q.eq("externalId", externalId))
130
+ .first();
131
+ if (!indicatorValue) {
132
+ return {
133
+ success: false,
134
+ externalId,
135
+ error: `Indicator value not found: ${externalId}`,
136
+ };
137
+ }
138
+ const now = Date.now();
139
+ // Update the indicator value
140
+ await ctx.db.patch(indicatorValue._id, {
141
+ ...(value !== undefined && { value }),
142
+ ...(date !== undefined && { date }),
143
+ syncStatus: "pending",
144
+ });
145
+ // Create payload for sync with updated values
146
+ const updatedIndicatorValue = {
147
+ externalId,
148
+ indicatorExternalId: indicatorValue.indicatorExternalId,
149
+ value: value ?? indicatorValue.value,
150
+ date: date ?? indicatorValue.date,
151
+ };
152
+ const payload = JSON.stringify(updatedIndicatorValue);
153
+ // Add to sync queue
154
+ const queueId = await ctx.db.insert("syncQueue", {
155
+ entityType: "indicatorValue",
156
+ externalId,
157
+ payload,
158
+ status: "pending",
159
+ attempts: 0,
160
+ createdAt: now,
161
+ });
162
+ return {
163
+ success: true,
164
+ externalId,
165
+ queueId,
166
+ };
167
+ }
168
+ catch (error) {
169
+ const errorMessage = error && typeof error === "object" && "message" in error
170
+ ? error.message
171
+ : "Unknown error";
172
+ return {
173
+ success: false,
174
+ externalId,
175
+ error: errorMessage,
176
+ };
177
+ }
178
+ },
179
+ });
180
+ // ============================================================================
181
+ // PUBLIC MUTATIONS - Entry points for consumers
182
+ // ============================================================================
183
+ /**
184
+ * Insert an indicator value into LinkHub
185
+ */
186
+ export const insertIndicatorValue = mutation({
187
+ args: {
188
+ indicatorValue: indicatorValuePayloadValidator,
189
+ },
190
+ returns: v.object({
191
+ success: v.boolean(),
192
+ externalId: v.string(),
193
+ queueId: v.optional(v.id("syncQueue")),
194
+ error: v.optional(v.string()),
195
+ }),
196
+ handler: async (ctx, args) => {
197
+ const { indicatorValue } = args;
198
+ // Validate external IDs
199
+ assertValidExternalId(indicatorValue.externalId, "indicatorValue.externalId");
200
+ assertValidExternalId(indicatorValue.indicatorExternalId, "indicatorValue.indicatorExternalId");
201
+ // Add to sync queue
202
+ const payload = JSON.stringify(indicatorValue);
203
+ const queueId = await ctx.db.insert("syncQueue", {
204
+ entityType: "indicatorValue",
205
+ externalId: indicatorValue.externalId,
206
+ payload,
207
+ status: "pending",
208
+ attempts: 0,
209
+ createdAt: Date.now(),
210
+ });
211
+ return {
212
+ success: true,
213
+ externalId: indicatorValue.externalId,
214
+ queueId,
215
+ };
216
+ },
217
+ });
218
+ //# sourceMappingURL=indicatorValues.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicatorValues.js","sourceRoot":"","sources":["../../../src/component/entities/indicatorValues.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Indicators Entity for OKRHub Component
3
+ *
4
+ * CRUD operations and queries for Indicators.
5
+ */
6
+ import type { Id } from "../_generated/dataModel.js";
7
+ /**
8
+ * Creates an indicator locally and queues for sync
9
+ */
10
+ export declare const createIndicator: import("convex/server").RegisteredMutation<"public", {
11
+ isReverse?: boolean | undefined;
12
+ sourceUrl?: string | undefined;
13
+ symbol: string;
14
+ description: string;
15
+ companyExternalId: string;
16
+ periodicity: "weekly" | "monthly" | "quarterly" | "semesterly" | "yearly";
17
+ sourceApp: string;
18
+ }, Promise<{
19
+ success: boolean;
20
+ externalId: string;
21
+ localId: import("convex/values").GenericId<"indicators">;
22
+ queueId: import("convex/values").GenericId<"syncQueue">;
23
+ error?: undefined;
24
+ } | {
25
+ success: boolean;
26
+ externalId: string;
27
+ localId: Id<"indicators">;
28
+ error: string;
29
+ queueId?: undefined;
30
+ }>>;
31
+ /**
32
+ * Gets all local indicators
33
+ */
34
+ export declare const getAllIndicators: import("convex/server").RegisteredQuery<"public", {}, Promise<{
35
+ _id: import("convex/values").GenericId<"indicators">;
36
+ _creationTime: number;
37
+ isReverse?: boolean | undefined;
38
+ deletedAt?: number | undefined;
39
+ symbol: string;
40
+ externalId: string;
41
+ description: string;
42
+ createdAt: number;
43
+ companyExternalId: string;
44
+ periodicity: "weekly" | "monthly" | "quarterly" | "semesterly" | "yearly";
45
+ syncStatus: "pending" | "synced" | "failed";
46
+ slug: string;
47
+ }[]>>;
48
+ /**
49
+ * Updates an indicator locally and queues for sync
50
+ * Resets syncStatus to "pending"
51
+ */
52
+ export declare const updateIndicator: import("convex/server").RegisteredMutation<"public", {
53
+ symbol?: string | undefined;
54
+ description?: string | undefined;
55
+ periodicity?: "weekly" | "monthly" | "quarterly" | "semesterly" | "yearly" | undefined;
56
+ isReverse?: boolean | undefined;
57
+ externalId: string;
58
+ }, Promise<{
59
+ success: boolean;
60
+ externalId: string;
61
+ error: string;
62
+ queueId?: undefined;
63
+ } | {
64
+ success: boolean;
65
+ externalId: string;
66
+ queueId: import("convex/values").GenericId<"syncQueue">;
67
+ error?: undefined;
68
+ }>>;
69
+ /**
70
+ * Insert an indicator into LinkHub
71
+ */
72
+ export declare const insertIndicator: import("convex/server").RegisteredMutation<"public", {
73
+ indicator: {
74
+ createdAt?: number | undefined;
75
+ isReverse?: boolean | undefined;
76
+ automationUrl?: string | undefined;
77
+ automationDescription?: string | undefined;
78
+ forecastDate?: number | undefined;
79
+ symbol: string;
80
+ externalId: string;
81
+ description: string;
82
+ companyExternalId: string;
83
+ periodicity: "weekly" | "monthly" | "quarterly" | "semesterly" | "yearly";
84
+ };
85
+ }, Promise<{
86
+ success: boolean;
87
+ externalId: string;
88
+ queueId: import("convex/values").GenericId<"syncQueue">;
89
+ }>>;
90
+ //# sourceMappingURL=indicators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicators.d.ts","sourceRoot":"","sources":["../../../src/component/entities/indicators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAarD;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;aAkFL,EAAE,CAAC,YAAY,CAAC;;;GAKrC,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;KAwB3B,CAAC;AAMH;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;GAyF1B,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;GAqC1B,CAAC"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Indicators Entity for OKRHub Component
3
+ *
4
+ * CRUD operations and queries for Indicators.
5
+ */
6
+ import { v } from "convex/values";
7
+ import { mutation, query } from "../_generated/server.js";
8
+ import { generateExternalId } from "../externalId.js";
9
+ import { assertValidExternalId, generateSlug } from "../lib/validation.js";
10
+ import { indicatorPayloadValidator, PeriodicitySchema, SyncStatusSchema, } from "../schema.js";
11
+ // ============================================================================
12
+ // LOCAL CRUD MUTATIONS
13
+ // ============================================================================
14
+ /**
15
+ * Creates an indicator locally and queues for sync
16
+ */
17
+ export const createIndicator = mutation({
18
+ args: {
19
+ sourceApp: v.string(),
20
+ sourceUrl: v.optional(v.string()),
21
+ companyExternalId: v.string(),
22
+ description: v.string(),
23
+ symbol: v.string(),
24
+ periodicity: PeriodicitySchema,
25
+ isReverse: v.optional(v.boolean()),
26
+ },
27
+ returns: v.object({
28
+ success: v.boolean(),
29
+ externalId: v.string(),
30
+ localId: v.id("indicators"),
31
+ queueId: v.optional(v.id("syncQueue")),
32
+ error: v.optional(v.string()),
33
+ }),
34
+ handler: async (ctx, args) => {
35
+ const { sourceApp, sourceUrl, companyExternalId, description, symbol, periodicity, isReverse, } = args;
36
+ try {
37
+ assertValidExternalId(companyExternalId, "companyExternalId");
38
+ const externalId = generateExternalId(sourceApp, "indicator");
39
+ const slug = generateSlug(sourceApp, description);
40
+ const now = Date.now();
41
+ const localId = await ctx.db.insert("indicators", {
42
+ externalId,
43
+ companyExternalId,
44
+ description,
45
+ symbol,
46
+ periodicity,
47
+ isReverse,
48
+ slug,
49
+ syncStatus: "pending",
50
+ createdAt: now,
51
+ });
52
+ const payload = JSON.stringify({
53
+ externalId,
54
+ companyExternalId,
55
+ description,
56
+ symbol,
57
+ periodicity,
58
+ isReverse,
59
+ sourceUrl,
60
+ createdAt: now,
61
+ });
62
+ const queueId = await ctx.db.insert("syncQueue", {
63
+ entityType: "indicator",
64
+ externalId,
65
+ payload,
66
+ status: "pending",
67
+ attempts: 0,
68
+ createdAt: now,
69
+ });
70
+ return {
71
+ success: true,
72
+ externalId,
73
+ localId,
74
+ queueId,
75
+ };
76
+ }
77
+ catch (error) {
78
+ const errorMessage = error && typeof error === "object" && "message" in error
79
+ ? error.message
80
+ : "Unknown error";
81
+ return {
82
+ success: false,
83
+ externalId: "",
84
+ localId: "",
85
+ error: errorMessage,
86
+ };
87
+ }
88
+ },
89
+ });
90
+ // ============================================================================
91
+ // LOCAL QUERY FUNCTIONS
92
+ // ============================================================================
93
+ /**
94
+ * Gets all local indicators
95
+ */
96
+ export const getAllIndicators = query({
97
+ args: {},
98
+ returns: v.array(v.object({
99
+ _id: v.id("indicators"),
100
+ _creationTime: v.number(),
101
+ externalId: v.string(),
102
+ companyExternalId: v.string(),
103
+ description: v.string(),
104
+ symbol: v.string(),
105
+ periodicity: PeriodicitySchema,
106
+ isReverse: v.optional(v.boolean()),
107
+ slug: v.string(),
108
+ syncStatus: SyncStatusSchema,
109
+ createdAt: v.number(),
110
+ deletedAt: v.optional(v.number()),
111
+ })),
112
+ handler: async (ctx) => {
113
+ return await ctx.db
114
+ .query("indicators")
115
+ .filter((q) => q.eq(q.field("deletedAt"), undefined))
116
+ .collect();
117
+ },
118
+ });
119
+ // ============================================================================
120
+ // UPDATE MUTATIONS
121
+ // ============================================================================
122
+ /**
123
+ * Updates an indicator locally and queues for sync
124
+ * Resets syncStatus to "pending"
125
+ */
126
+ export const updateIndicator = mutation({
127
+ args: {
128
+ externalId: v.string(),
129
+ description: v.optional(v.string()),
130
+ symbol: v.optional(v.string()),
131
+ periodicity: v.optional(PeriodicitySchema),
132
+ isReverse: v.optional(v.boolean()),
133
+ },
134
+ returns: v.object({
135
+ success: v.boolean(),
136
+ externalId: v.string(),
137
+ queueId: v.optional(v.id("syncQueue")),
138
+ error: v.optional(v.string()),
139
+ }),
140
+ handler: async (ctx, args) => {
141
+ const { externalId, description, symbol, periodicity, isReverse, } = args;
142
+ try {
143
+ // Find the indicator by externalId
144
+ const indicator = await ctx.db
145
+ .query("indicators")
146
+ .withIndex("by_external_id", (q) => q.eq("externalId", externalId))
147
+ .first();
148
+ if (!indicator) {
149
+ return {
150
+ success: false,
151
+ externalId,
152
+ error: `Indicator not found: ${externalId}`,
153
+ };
154
+ }
155
+ const now = Date.now();
156
+ // Update the indicator
157
+ await ctx.db.patch(indicator._id, {
158
+ ...(description !== undefined && { description }),
159
+ ...(symbol !== undefined && { symbol }),
160
+ ...(periodicity !== undefined && { periodicity }),
161
+ ...(isReverse !== undefined && { isReverse }),
162
+ syncStatus: "pending",
163
+ });
164
+ // Create payload for sync with updated values
165
+ const updatedIndicator = {
166
+ externalId,
167
+ companyExternalId: indicator.companyExternalId,
168
+ description: description ?? indicator.description,
169
+ symbol: symbol ?? indicator.symbol,
170
+ periodicity: periodicity ?? indicator.periodicity,
171
+ isReverse: isReverse ?? indicator.isReverse,
172
+ };
173
+ const payload = JSON.stringify(updatedIndicator);
174
+ // Add to sync queue
175
+ const queueId = await ctx.db.insert("syncQueue", {
176
+ entityType: "indicator",
177
+ externalId,
178
+ payload,
179
+ status: "pending",
180
+ attempts: 0,
181
+ createdAt: now,
182
+ });
183
+ return {
184
+ success: true,
185
+ externalId,
186
+ queueId,
187
+ };
188
+ }
189
+ catch (error) {
190
+ const errorMessage = error && typeof error === "object" && "message" in error
191
+ ? error.message
192
+ : "Unknown error";
193
+ return {
194
+ success: false,
195
+ externalId,
196
+ error: errorMessage,
197
+ };
198
+ }
199
+ },
200
+ });
201
+ // ============================================================================
202
+ // PUBLIC MUTATIONS - Entry points for consumers
203
+ // ============================================================================
204
+ /**
205
+ * Insert an indicator into LinkHub
206
+ */
207
+ export const insertIndicator = mutation({
208
+ args: {
209
+ indicator: indicatorPayloadValidator,
210
+ },
211
+ returns: v.object({
212
+ success: v.boolean(),
213
+ externalId: v.string(),
214
+ queueId: v.optional(v.id("syncQueue")),
215
+ error: v.optional(v.string()),
216
+ }),
217
+ handler: async (ctx, args) => {
218
+ const { indicator } = args;
219
+ // Validate external IDs
220
+ assertValidExternalId(indicator.externalId, "indicator.externalId");
221
+ assertValidExternalId(indicator.companyExternalId, "indicator.companyExternalId");
222
+ // Add to sync queue
223
+ const payload = JSON.stringify(indicator);
224
+ const queueId = await ctx.db.insert("syncQueue", {
225
+ entityType: "indicator",
226
+ externalId: indicator.externalId,
227
+ payload,
228
+ status: "pending",
229
+ attempts: 0,
230
+ createdAt: Date.now(),
231
+ });
232
+ return {
233
+ success: true,
234
+ externalId: indicator.externalId,
235
+ queueId,
236
+ };
237
+ },
238
+ });
239
+ //# sourceMappingURL=indicators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indicators.js","sourceRoot":"","sources":["../../../src/component/entities/indicators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Initiatives Entity for OKRHub Component
3
+ *
4
+ * CRUD operations and queries for Initiatives.
5
+ */
6
+ import type { Id } from "../_generated/dataModel.js";
7
+ /**
8
+ * Creates an initiative locally and queues for sync
9
+ * Note: relativeImpact/overallImpact/isNew are set by linkhub based on priority
10
+ */
11
+ export declare const createInitiative: import("convex/server").RegisteredMutation<"public", {
12
+ status?: "ON_TIME" | "OVERDUE" | "FINISHED" | undefined;
13
+ finishedAt?: number | undefined;
14
+ sourceUrl?: string | undefined;
15
+ description: string;
16
+ teamExternalId: string;
17
+ priority: "lowest" | "low" | "medium" | "high" | "highest";
18
+ assigneeExternalId: string;
19
+ createdByExternalId: string;
20
+ riskExternalId: string;
21
+ sourceApp: string;
22
+ }, Promise<{
23
+ success: boolean;
24
+ externalId: string;
25
+ localId: import("convex/values").GenericId<"initiatives">;
26
+ queueId: import("convex/values").GenericId<"syncQueue">;
27
+ error?: undefined;
28
+ } | {
29
+ success: boolean;
30
+ externalId: string;
31
+ localId: Id<"initiatives">;
32
+ error: string;
33
+ queueId?: undefined;
34
+ }>>;
35
+ /**
36
+ * Gets all local initiatives
37
+ */
38
+ export declare const getAllInitiatives: import("convex/server").RegisteredQuery<"public", {}, Promise<{
39
+ _id: import("convex/values").GenericId<"initiatives">;
40
+ _creationTime: number;
41
+ updatedAt?: number | undefined;
42
+ finishedAt?: number | undefined;
43
+ deletedAt?: number | undefined;
44
+ externalId: string;
45
+ description: string;
46
+ teamExternalId: string;
47
+ createdAt: number;
48
+ priority: "lowest" | "low" | "medium" | "high" | "highest";
49
+ assigneeExternalId: string;
50
+ createdByExternalId: string;
51
+ riskExternalId: string;
52
+ status: "ON_TIME" | "OVERDUE" | "FINISHED";
53
+ syncStatus: "pending" | "synced" | "failed";
54
+ slug: string;
55
+ }[]>>;
56
+ /**
57
+ * Updates an initiative locally and queues for sync
58
+ * Resets syncStatus to "pending"
59
+ */
60
+ export declare const updateInitiative: import("convex/server").RegisteredMutation<"public", {
61
+ description?: string | undefined;
62
+ priority?: "lowest" | "low" | "medium" | "high" | "highest" | undefined;
63
+ assigneeExternalId?: string | undefined;
64
+ riskExternalId?: string | undefined;
65
+ status?: "ON_TIME" | "OVERDUE" | "FINISHED" | undefined;
66
+ finishedAt?: number | undefined;
67
+ externalId: string;
68
+ }, Promise<{
69
+ success: boolean;
70
+ externalId: string;
71
+ error: string;
72
+ queueId?: undefined;
73
+ } | {
74
+ success: boolean;
75
+ externalId: string;
76
+ queueId: import("convex/values").GenericId<"syncQueue">;
77
+ error?: undefined;
78
+ }>>;
79
+ /**
80
+ * Insert an initiative into LinkHub
81
+ */
82
+ export declare const insertInitiative: import("convex/server").RegisteredMutation<"public", {
83
+ initiative: {
84
+ createdAt?: number | undefined;
85
+ updatedAt?: number | undefined;
86
+ isNew?: boolean | undefined;
87
+ finishedAt?: number | undefined;
88
+ externalUrl?: string | undefined;
89
+ externalId: string;
90
+ description: string;
91
+ teamExternalId: string;
92
+ priority: "lowest" | "low" | "medium" | "high" | "highest";
93
+ assigneeExternalId: string;
94
+ createdByExternalId: string;
95
+ riskExternalId: string;
96
+ status: "ON_TIME" | "OVERDUE" | "FINISHED";
97
+ };
98
+ }, Promise<{
99
+ success: boolean;
100
+ externalId: string;
101
+ queueId: import("convex/values").GenericId<"syncQueue">;
102
+ }>>;
103
+ //# sourceMappingURL=initiatives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initiatives.d.ts","sourceRoot":"","sources":["../../../src/component/entities/initiatives.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,4BAA4B,CAAC;AAcrD;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;aAiGN,EAAE,CAAC,aAAa,CAAC;;;GAKtC,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;KA4B5B,CAAC;AAMH;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;GA4G3B,CAAC;AAMH;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;GAiD3B,CAAC"}