@adventurelabs/scout-core 1.5.4 → 2.0.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 (219) hide show
  1. package/README.md +47 -0
  2. package/dist/api_keys/actions.d.ts +0 -1
  3. package/dist/api_keys/actions.js +0 -14
  4. package/dist/client/index.d.ts +75 -0
  5. package/dist/client/index.js +82 -0
  6. package/dist/constants/index.d.ts +1 -0
  7. package/dist/constants/index.js +1 -0
  8. package/dist/helpers/analysis_usage/jobs_server.d.ts +25 -0
  9. package/dist/helpers/analysis_usage/jobs_server.js +10 -0
  10. package/dist/helpers/analysis_usage/tasks_server.d.ts +63 -0
  11. package/dist/helpers/analysis_usage/tasks_server.js +14 -0
  12. package/dist/helpers/artifacts.d.ts +0 -1
  13. package/dist/helpers/artifacts.js +10 -147
  14. package/dist/helpers/artifacts.queries.d.ts +26 -0
  15. package/dist/helpers/{artifacts.internal.js → artifacts.queries.js} +24 -41
  16. package/dist/helpers/auth.d.ts +1 -1
  17. package/dist/helpers/auth.js +2 -3
  18. package/dist/helpers/auth_server.d.ts +2 -0
  19. package/dist/helpers/auth_server.js +10 -0
  20. package/dist/helpers/certificates_server.d.ts +101 -0
  21. package/dist/helpers/certificates_server.js +42 -0
  22. package/dist/helpers/chat.d.ts +1 -2
  23. package/dist/helpers/chat.js +3 -38
  24. package/dist/helpers/chat.queries.d.ts +13 -0
  25. package/dist/helpers/chat.queries.js +39 -0
  26. package/dist/helpers/client_abilities_jwt_keys.js +0 -1
  27. package/dist/helpers/client_abilities_token_server.d.ts +1 -0
  28. package/dist/helpers/client_abilities_token_server.js +5 -2
  29. package/dist/helpers/connectivity.d.ts +1 -5
  30. package/dist/helpers/connectivity.js +7 -140
  31. package/dist/helpers/connectivity.queries.d.ts +18 -0
  32. package/dist/helpers/connectivity.queries.js +121 -0
  33. package/dist/helpers/contacts_server.d.ts +63 -0
  34. package/dist/helpers/contacts_server.js +18 -0
  35. package/dist/helpers/deviceTransfer.js +2 -11
  36. package/dist/helpers/deviceTransfer.queries.d.ts +4 -0
  37. package/dist/helpers/deviceTransfer.queries.js +11 -0
  38. package/dist/helpers/devices.js +4 -61
  39. package/dist/helpers/devices.queries.d.ts +4 -1
  40. package/dist/helpers/devices.queries.js +52 -0
  41. package/dist/helpers/document_templates.js +6 -52
  42. package/dist/helpers/document_templates.queries.d.ts +9 -0
  43. package/dist/helpers/document_templates.queries.js +56 -0
  44. package/dist/helpers/documents_server.d.ts +226 -0
  45. package/dist/helpers/documents_server.js +38 -0
  46. package/dist/helpers/email.d.ts +0 -6
  47. package/dist/helpers/email.js +1 -19
  48. package/dist/helpers/embeddings.d.ts +0 -5
  49. package/dist/helpers/embeddings.js +2 -19
  50. package/dist/helpers/embeddings.queries.d.ts +7 -0
  51. package/dist/helpers/{embeddings.internal.js → embeddings.queries.js} +2 -2
  52. package/dist/helpers/eventUtils.d.ts +3 -12
  53. package/dist/helpers/eventUtils.js +0 -10
  54. package/dist/helpers/events.d.ts +0 -1
  55. package/dist/helpers/events.js +7 -107
  56. package/dist/helpers/events.queries.d.ts +17 -0
  57. package/dist/helpers/{events.internal.js → events.queries.js} +24 -15
  58. package/dist/helpers/health_metrics.js +3 -38
  59. package/dist/helpers/health_metrics.queries.d.ts +12 -0
  60. package/dist/helpers/health_metrics.queries.js +39 -0
  61. package/dist/helpers/heartbeats.js +4 -83
  62. package/dist/helpers/heartbeats.queries.d.ts +11 -0
  63. package/dist/helpers/heartbeats.queries.js +76 -0
  64. package/dist/helpers/herd_allowed_domains.js +2 -12
  65. package/dist/helpers/{herd_allowed_domains_internal.d.ts → herd_allowed_domains.queries.d.ts} +1 -1
  66. package/dist/helpers/{herd_allowed_domains_internal.js → herd_allowed_domains.queries.js} +2 -2
  67. package/dist/helpers/herd_credentials_server.d.ts +76 -0
  68. package/dist/helpers/herd_credentials_server.js +22 -0
  69. package/dist/helpers/herd_modules.queries.js +10 -7
  70. package/dist/helpers/herd_roles.js +13 -148
  71. package/dist/helpers/herd_roles.queries.d.ts +18 -0
  72. package/dist/helpers/{herd_roles_internal.js → herd_roles.queries.js} +28 -28
  73. package/dist/helpers/herds.js +5 -47
  74. package/dist/helpers/herds.queries.d.ts +8 -1
  75. package/dist/helpers/herds.queries.js +48 -0
  76. package/dist/helpers/invitations.js +7 -58
  77. package/dist/helpers/invitations.queries.d.ts +10 -0
  78. package/dist/helpers/{invitations_internal.js → invitations.queries.js} +12 -12
  79. package/dist/helpers/issuers.js +6 -52
  80. package/dist/helpers/issuers.queries.d.ts +9 -0
  81. package/dist/helpers/issuers.queries.js +53 -0
  82. package/dist/helpers/layers.js +2 -20
  83. package/dist/helpers/layers.queries.d.ts +2 -1
  84. package/dist/helpers/layers.queries.js +9 -13
  85. package/dist/helpers/lifecycle_server.d.ts +175 -0
  86. package/dist/helpers/lifecycle_server.js +38 -0
  87. package/dist/helpers/localizations.js +5 -42
  88. package/dist/helpers/localizations.queries.d.ts +8 -0
  89. package/dist/helpers/localizations.queries.js +45 -0
  90. package/dist/helpers/maintenance_requests_server.d.ts +124 -0
  91. package/dist/helpers/maintenance_requests_server.js +34 -0
  92. package/dist/helpers/manufacturers.js +5 -43
  93. package/dist/helpers/manufacturers.queries.d.ts +10 -0
  94. package/dist/helpers/manufacturers.queries.js +46 -0
  95. package/dist/helpers/media_urls.d.ts +13 -0
  96. package/dist/helpers/media_urls.js +21 -0
  97. package/dist/helpers/models.js +8 -80
  98. package/dist/helpers/models.queries.d.ts +13 -0
  99. package/dist/helpers/models.queries.js +79 -0
  100. package/dist/helpers/observations_server.d.ts +51 -0
  101. package/dist/helpers/observations_server.js +22 -0
  102. package/dist/helpers/operating_contexts.js +39 -154
  103. package/dist/helpers/operating_contexts.queries.d.ts +48 -0
  104. package/dist/helpers/operating_contexts.queries.js +223 -0
  105. package/dist/helpers/operators.js +4 -57
  106. package/dist/helpers/operators.queries.d.ts +7 -0
  107. package/dist/helpers/operators.queries.js +55 -0
  108. package/dist/helpers/parts.d.ts +0 -87
  109. package/dist/helpers/parts.js +4 -90
  110. package/dist/helpers/parts_server.d.ts +260 -0
  111. package/dist/helpers/parts_server.js +71 -0
  112. package/dist/helpers/pins_server.d.ts +118 -0
  113. package/dist/helpers/pins_server.js +38 -0
  114. package/dist/helpers/plans.js +4 -56
  115. package/dist/helpers/plans.queries.d.ts +4 -1
  116. package/dist/helpers/plans.queries.js +39 -12
  117. package/dist/helpers/points_for_user_server.d.ts +9 -0
  118. package/dist/helpers/points_for_user_server.js +14 -0
  119. package/dist/helpers/product_compatibilities.js +6 -78
  120. package/dist/helpers/product_compatibilities.queries.d.ts +9 -0
  121. package/dist/helpers/product_compatibilities.queries.js +83 -0
  122. package/dist/helpers/product_numbers.js +6 -55
  123. package/dist/helpers/product_numbers.queries.d.ts +9 -0
  124. package/dist/helpers/product_numbers.queries.js +58 -0
  125. package/dist/helpers/products.js +6 -54
  126. package/dist/helpers/products.queries.d.ts +11 -0
  127. package/dist/helpers/products.queries.js +58 -0
  128. package/dist/helpers/providers.js +5 -71
  129. package/dist/helpers/providers.queries.d.ts +5 -1
  130. package/dist/helpers/providers.queries.js +52 -11
  131. package/dist/helpers/pubsub_token_server.d.ts +1 -0
  132. package/dist/helpers/pubsub_token_server.js +5 -2
  133. package/dist/helpers/segmentations_sam3.js +5 -78
  134. package/dist/helpers/segmentations_sam3.queries.d.ts +16 -0
  135. package/dist/helpers/segmentations_sam3.queries.js +81 -0
  136. package/dist/helpers/sensor_poses_server.d.ts +98 -0
  137. package/dist/helpers/sensor_poses_server.js +26 -0
  138. package/dist/helpers/session_incidents_server.d.ts +106 -0
  139. package/dist/helpers/session_incidents_server.js +22 -0
  140. package/dist/helpers/session_summaries.d.ts +2 -0
  141. package/dist/helpers/session_summaries.js +7 -23
  142. package/dist/helpers/session_summaries.queries.d.ts +6 -3
  143. package/dist/helpers/session_summaries.queries.js +27 -0
  144. package/dist/helpers/sessions.js +8 -122
  145. package/dist/helpers/sessions.queries.d.ts +14 -2
  146. package/dist/helpers/sessions.queries.js +88 -1
  147. package/dist/helpers/storage.js +0 -1
  148. package/dist/helpers/supabase_auth.d.ts +6 -0
  149. package/dist/helpers/supabase_auth.js +37 -0
  150. package/dist/helpers/tags.d.ts +0 -1
  151. package/dist/helpers/tags.js +13 -559
  152. package/dist/helpers/tags.queries.d.ts +33 -0
  153. package/dist/helpers/tags.queries.js +454 -0
  154. package/dist/helpers/user_credentials_server.d.ts +76 -0
  155. package/dist/helpers/user_credentials_server.js +22 -0
  156. package/dist/helpers/users.d.ts +2 -2
  157. package/dist/helpers/users.js +8 -107
  158. package/dist/helpers/users.queries.d.ts +9 -1
  159. package/dist/helpers/users.queries.js +107 -0
  160. package/dist/helpers/versions_software.d.ts +3 -1
  161. package/dist/helpers/versions_software.js +24 -0
  162. package/dist/helpers/versions_software_server.d.ts +83 -4
  163. package/dist/helpers/versions_software_server.js +23 -50
  164. package/dist/helpers/zones.d.ts +1 -16
  165. package/dist/helpers/zones.js +4 -104
  166. package/dist/helpers/zones.queries.d.ts +6 -0
  167. package/dist/helpers/zones.queries.js +78 -0
  168. package/dist/hooks/useAuthorizedRealtimeTopics.js +8 -2
  169. package/dist/hooks/useInfiniteQuery.js +18 -14
  170. package/dist/hooks/useScoutRealtimeBroadcast.js +8 -6
  171. package/dist/hooks/useScoutRealtimeDocuments.js +3 -2
  172. package/dist/hooks/useScoutRefresh.d.ts +9 -25
  173. package/dist/hooks/useScoutRefresh.js +33 -213
  174. package/dist/providers/ScoutRefreshProvider.d.ts +1 -1
  175. package/dist/providers/ScoutRefreshProvider.js +56 -13
  176. package/dist/server/index.d.ts +77 -0
  177. package/dist/server/index.js +79 -0
  178. package/dist/server/middleware.d.ts +2 -0
  179. package/dist/server/middleware.js +2 -0
  180. package/dist/server/supabase.d.ts +2 -0
  181. package/dist/server/supabase.js +2 -0
  182. package/dist/store/api.d.ts +40 -40
  183. package/dist/store/api.js +38 -109
  184. package/dist/store/configureStore.d.ts +0 -55
  185. package/dist/store/configureStore.js +1 -8
  186. package/dist/store/hooks.js +1 -0
  187. package/dist/supabase/client.d.ts +3 -0
  188. package/dist/supabase/client.js +10 -0
  189. package/dist/supabase/middleware.d.ts +1 -0
  190. package/dist/supabase/middleware.js +6 -20
  191. package/dist/supabase/server.d.ts +7 -2
  192. package/dist/supabase/server.js +13 -1
  193. package/dist/types/db.d.ts +2 -2
  194. package/dist/types/index.d.ts +5 -0
  195. package/dist/types/index.js +5 -0
  196. package/package.json +53 -4
  197. package/dist/api_keys/index.d.ts +0 -1
  198. package/dist/api_keys/index.js +0 -1
  199. package/dist/helpers/artifacts.internal.d.ts +0 -22
  200. package/dist/helpers/client_abilities_jwt_keys_internal.d.ts +0 -9
  201. package/dist/helpers/client_abilities_jwt_keys_internal.js +0 -20
  202. package/dist/helpers/connectivity.internal.d.ts +0 -10
  203. package/dist/helpers/connectivity.internal.js +0 -47
  204. package/dist/helpers/credentials.d.ts +0 -9
  205. package/dist/helpers/credentials.js +0 -92
  206. package/dist/helpers/embeddings.internal.d.ts +0 -5
  207. package/dist/helpers/events.internal.d.ts +0 -13
  208. package/dist/helpers/herd_roles_internal.d.ts +0 -18
  209. package/dist/helpers/index.d.ts +0 -56
  210. package/dist/helpers/index.js +0 -56
  211. package/dist/helpers/invitations_internal.d.ts +0 -10
  212. package/dist/helpers/versions_software_internal.d.ts +0 -6
  213. package/dist/helpers/versions_software_internal.js +0 -53
  214. package/dist/hooks/useDeviceDisplayName.d.ts +0 -8
  215. package/dist/hooks/useDeviceDisplayName.js +0 -49
  216. package/dist/index.d.ts +0 -108
  217. package/dist/index.js +0 -114
  218. package/dist/supabase/index.d.ts +0 -2
  219. package/dist/supabase/index.js +0 -2
@@ -1,26 +1,6 @@
1
1
  import { IWebResponse } from "../types/requests";
2
- import { generateSignedUrlsBatchWithClient, generateSignedUrlWithClient, } from "./storage_internal";
3
- import { isNonEmptyStorageFilePath } from "./storagePath";
4
- async function addArtifactMediaUrls(data, client) {
5
- const uniqueFilePaths = Array.from(new Set(data
6
- .map((artifact) => artifact.file_path)
7
- .filter(isNonEmptyStorageFilePath)));
8
- if (uniqueFilePaths.length === 0) {
9
- return data;
10
- }
11
- const signedUrls = await generateSignedUrlsBatchWithClient(client, uniqueFilePaths);
12
- const urlMap = new Map();
13
- uniqueFilePaths.forEach((path, index) => {
14
- urlMap.set(path, signedUrls[index]);
15
- });
16
- return data.map((artifact) => ({
17
- ...artifact,
18
- media_url: isNonEmptyStorageFilePath(artifact.file_path)
19
- ? urlMap.get(artifact.file_path) ?? null
20
- : null,
21
- }));
22
- }
23
- export async function getArtifactByIdWithClient(client, id) {
2
+ import { addArtifactMediaUrls } from "./media_urls";
3
+ export async function get_artifact_by_id_query(client, id) {
24
4
  const { data, error } = await client
25
5
  .from("artifacts")
26
6
  .select("*")
@@ -33,16 +13,10 @@ export async function getArtifactByIdWithClient(client, id) {
33
13
  return IWebResponse.success(null).to_compatible();
34
14
  }
35
15
  const artifact = data;
36
- let media_url = null;
37
- if (isNonEmptyStorageFilePath(artifact.file_path)) {
38
- media_url = await generateSignedUrlWithClient(client, artifact.file_path);
39
- }
40
- return IWebResponse.success({
41
- ...artifact,
42
- media_url,
43
- }).to_compatible();
16
+ const [artifactWithUrls] = await addArtifactMediaUrls(client, [artifact]);
17
+ return IWebResponse.success(artifactWithUrls).to_compatible();
44
18
  }
45
- export async function getArtifactsByHerdWithClient(client, herd_id, limit, offset, options) {
19
+ export async function get_artifacts_by_herd_query(client, herd_id, limit = 50, offset = 0, options) {
46
20
  const { data, error } = await client.rpc("get_artifacts_for_herd", {
47
21
  herd_id_caller: herd_id,
48
22
  limit_caller: limit,
@@ -56,10 +30,10 @@ export async function getArtifactsByHerdWithClient(client, herd_id, limit, offse
56
30
  if (!data) {
57
31
  return IWebResponse.error("No artifacts found for herd").to_compatible();
58
32
  }
59
- const artifactsWithUrls = await addArtifactMediaUrls(data, client);
33
+ const artifactsWithUrls = await addArtifactMediaUrls(client, data);
60
34
  return IWebResponse.success(artifactsWithUrls).to_compatible();
61
35
  }
62
- export async function getArtifactsByDeviceIdWithClient(client, device_id, limit, offset) {
36
+ export async function get_artifacts_by_device_id_query(client, device_id, limit = 50, offset = 0) {
63
37
  const { data, error } = await client.rpc("get_artifacts_for_device", {
64
38
  device_id_caller: device_id,
65
39
  limit_caller: limit,
@@ -71,10 +45,19 @@ export async function getArtifactsByDeviceIdWithClient(client, device_id, limit,
71
45
  if (!data) {
72
46
  return IWebResponse.error("No artifacts found for device").to_compatible();
73
47
  }
74
- const artifactsWithUrls = await addArtifactMediaUrls(data, client);
48
+ const artifactsWithUrls = await addArtifactMediaUrls(client, data);
75
49
  return IWebResponse.success(artifactsWithUrls).to_compatible();
76
50
  }
77
- export async function getArtifactsByDeviceIdsBatchWithClient(client, device_ids, limit_per_device, options) {
51
+ export async function get_total_artifacts_by_herd_query(client, herd_id) {
52
+ const { data, error } = await client.rpc("get_total_artifacts_for_herd", {
53
+ herd_id_caller: herd_id,
54
+ });
55
+ if (error) {
56
+ return IWebResponse.error(error.message).to_compatible();
57
+ }
58
+ return IWebResponse.success(data || 0).to_compatible();
59
+ }
60
+ export async function get_artifacts_by_device_ids_batch_query(client, device_ids, limit_per_device = 10, options) {
78
61
  if (device_ids.length === 0) {
79
62
  return {};
80
63
  }
@@ -88,7 +71,7 @@ export async function getArtifactsByDeviceIdsBatchWithClient(client, device_ids,
88
71
  console.warn("Error fetching artifacts batch:", error?.message);
89
72
  return {};
90
73
  }
91
- const artifactsWithUrls = await addArtifactMediaUrls(data, client);
74
+ const artifactsWithUrls = await addArtifactMediaUrls(client, data);
92
75
  const artifactsByDevice = {};
93
76
  artifactsWithUrls.forEach((artifact) => {
94
77
  if (!artifactsByDevice[artifact.device_id]) {
@@ -98,7 +81,7 @@ export async function getArtifactsByDeviceIdsBatchWithClient(client, device_ids,
98
81
  });
99
82
  return artifactsByDevice;
100
83
  }
101
- export async function insertArtifactWithClient(client, artifact) {
84
+ export async function insert_artifact_query(client, artifact) {
102
85
  const arr = Array.isArray(artifact) ? artifact : [artifact];
103
86
  const { data, error } = await client
104
87
  .from("artifacts")
@@ -109,7 +92,7 @@ export async function insertArtifactWithClient(client, artifact) {
109
92
  }
110
93
  return IWebResponse.success(data || []).to_compatible();
111
94
  }
112
- export async function updateArtifactWithClient(client, artifact) {
95
+ export async function update_artifact_query(client, artifact) {
113
96
  const arr = Array.isArray(artifact) ? artifact : [artifact];
114
97
  const results = [];
115
98
  for (const record of arr) {
@@ -129,7 +112,7 @@ export async function updateArtifactWithClient(client, artifact) {
129
112
  }
130
113
  return IWebResponse.success(results).to_compatible();
131
114
  }
132
- export async function deleteArtifactWithClient(client, id) {
115
+ export async function delete_artifact_query(client, id) {
133
116
  const ids = Array.isArray(id) ? id : [id];
134
117
  const { error } = await client.from("artifacts").delete().in("id", ids);
135
118
  if (error) {
@@ -137,12 +120,12 @@ export async function deleteArtifactWithClient(client, id) {
137
120
  }
138
121
  return IWebResponse.success(true).to_compatible();
139
122
  }
140
- export async function matchArtifactsByVertexEmbeddingWithClient(client, query_embedding, match_threshold, match_count, herd_id) {
123
+ export async function match_artifacts_by_vertex_embedding_query(client, query_embedding, match_threshold, match_count, options) {
141
124
  const { data, error } = await client.rpc("match_artifacts_by_vertex_embedding", {
142
125
  query_embedding,
143
126
  match_threshold,
144
127
  match_count,
145
- herd_id_caller: herd_id ?? null,
128
+ herd_id_caller: options?.herd_id ?? null,
146
129
  });
147
130
  if (error) {
148
131
  return IWebResponse.error(error.message).to_compatible();
@@ -1,7 +1,7 @@
1
1
  import { SupabaseClient } from "@supabase/supabase-js";
2
2
  import { Database } from "../types/supabase";
3
3
  import { IWebResponseCompatible } from "../types/requests";
4
- /** Deprecated */
4
+ /** @deprecated Use is_scout_email_valid. */
5
5
  export declare function isEmailValidForLogin(email: string, approved_domains?: string[]): boolean;
6
6
  export declare function isCurrentUserPlatformSuperadmin(client: SupabaseClient<Database>): Promise<boolean>;
7
7
  export declare function is_scout_email_valid(client: SupabaseClient<Database>, email: string): Promise<IWebResponseCompatible<boolean>>;
@@ -1,13 +1,12 @@
1
1
  import { validateEmail } from "./email";
2
2
  import { IWebResponse } from "../types/requests";
3
3
  const APPROVED_DOMAINS = ["adventurelabs.earth", "conservaition.ai"];
4
- /** Deprecated */
4
+ /** @deprecated Use is_scout_email_valid. */
5
5
  export function isEmailValidForLogin(email, approved_domains = APPROVED_DOMAINS) {
6
6
  return (validateEmail(email) && isEmailFromApprovedDomain(email, approved_domains));
7
7
  }
8
- /** Deprecated */
9
8
  function isEmailFromApprovedDomain(email, approved_domains = APPROVED_DOMAINS) {
10
- return approved_domains.filter((domain) => email.endsWith(domain)).length > 0;
9
+ return approved_domains.some((domain) => email.endsWith(domain));
11
10
  }
12
11
  export async function isCurrentUserPlatformSuperadmin(client) {
13
12
  const { data, error } = await client.rpc("is_platform_superadmin_current_user");
@@ -0,0 +1,2 @@
1
+ export declare function server_isCurrentUserPlatformSuperadmin(): Promise<boolean>;
2
+ export declare function server_is_scout_email_valid(email: string): Promise<import("../types").IWebResponseCompatible<boolean>>;
@@ -0,0 +1,10 @@
1
+ import { newServerClient } from "../supabase/server";
2
+ import { is_scout_email_valid, isCurrentUserPlatformSuperadmin, } from "./auth";
3
+ export async function server_isCurrentUserPlatformSuperadmin() {
4
+ const client = await newServerClient();
5
+ return isCurrentUserPlatformSuperadmin(client);
6
+ }
7
+ export async function server_is_scout_email_valid(email) {
8
+ const client = await newServerClient();
9
+ return is_scout_email_valid(client, email);
10
+ }
@@ -0,0 +1,101 @@
1
+ import { CertificateInsert, CertificateUpdate } from "../types/db";
2
+ export declare function server_get_certificates_by_device(device_id: number): Promise<import("../types").IWebResponseCompatible<{
3
+ created_at: string;
4
+ expiration: string | null;
5
+ id: number;
6
+ issuer: string;
7
+ part_id: number | null;
8
+ tracking_number: string | null;
9
+ type: string;
10
+ updated_at: string | null;
11
+ }[]>>;
12
+ export declare function server_get_certificate_by_device(certificate_id: number, device_id: number): Promise<import("../types").IWebResponseCompatible<{
13
+ created_at: string;
14
+ expiration: string | null;
15
+ id: number;
16
+ issuer: string;
17
+ part_id: number | null;
18
+ tracking_number: string | null;
19
+ type: string;
20
+ updated_at: string | null;
21
+ } | null>>;
22
+ export declare function server_create_certificate_by_device(device_id: number, row: CertificateInsert): Promise<import("../types").IWebResponseCompatible<{
23
+ created_at: string;
24
+ expiration: string | null;
25
+ id: number;
26
+ issuer: string;
27
+ part_id: number | null;
28
+ tracking_number: string | null;
29
+ type: string;
30
+ updated_at: string | null;
31
+ } | null>>;
32
+ export declare function server_update_certificate_by_device(certificate_id: number, device_id: number, patch: CertificateUpdate): Promise<import("../types").IWebResponseCompatible<{
33
+ created_at: string;
34
+ expiration: string | null;
35
+ id: number;
36
+ issuer: string;
37
+ part_id: number | null;
38
+ tracking_number: string | null;
39
+ type: string;
40
+ updated_at: string | null;
41
+ } | null>>;
42
+ export declare function server_delete_certificate_by_device(certificate_id: number, device_id: number): Promise<import("../types").IWebResponseCompatible<{
43
+ created_at: string;
44
+ expiration: string | null;
45
+ id: number;
46
+ issuer: string;
47
+ part_id: number | null;
48
+ tracking_number: string | null;
49
+ type: string;
50
+ updated_at: string | null;
51
+ } | null>>;
52
+ export declare function server_get_certificates_by_part(part_id: number): Promise<import("../types").IWebResponseCompatible<{
53
+ created_at: string;
54
+ expiration: string | null;
55
+ id: number;
56
+ issuer: string;
57
+ part_id: number | null;
58
+ tracking_number: string | null;
59
+ type: string;
60
+ updated_at: string | null;
61
+ }[]>>;
62
+ export declare function server_get_certificate_by_part(certificate_id: number, part_id: number): Promise<import("../types").IWebResponseCompatible<{
63
+ created_at: string;
64
+ expiration: string | null;
65
+ id: number;
66
+ issuer: string;
67
+ part_id: number | null;
68
+ tracking_number: string | null;
69
+ type: string;
70
+ updated_at: string | null;
71
+ } | null>>;
72
+ export declare function server_create_certificate_by_part(part_id: number, row: CertificateInsert): Promise<import("../types").IWebResponseCompatible<{
73
+ created_at: string;
74
+ expiration: string | null;
75
+ id: number;
76
+ issuer: string;
77
+ part_id: number | null;
78
+ tracking_number: string | null;
79
+ type: string;
80
+ updated_at: string | null;
81
+ } | null>>;
82
+ export declare function server_update_certificate_by_part(certificate_id: number, part_id: number, patch: CertificateUpdate): Promise<import("../types").IWebResponseCompatible<{
83
+ created_at: string;
84
+ expiration: string | null;
85
+ id: number;
86
+ issuer: string;
87
+ part_id: number | null;
88
+ tracking_number: string | null;
89
+ type: string;
90
+ updated_at: string | null;
91
+ } | null>>;
92
+ export declare function server_delete_certificate_by_part(certificate_id: number, part_id: number): Promise<import("../types").IWebResponseCompatible<{
93
+ created_at: string;
94
+ expiration: string | null;
95
+ id: number;
96
+ issuer: string;
97
+ part_id: number | null;
98
+ tracking_number: string | null;
99
+ type: string;
100
+ updated_at: string | null;
101
+ } | null>>;
@@ -0,0 +1,42 @@
1
+ import { newServerClient } from "../supabase/server";
2
+ import { create_certificate_by_device, create_certificate_by_part, delete_certificate_by_device, delete_certificate_by_part, get_certificate_by_device, get_certificate_by_part, get_certificates_by_device, get_certificates_by_part, update_certificate_by_device, update_certificate_by_part, } from "./certificates";
3
+ export async function server_get_certificates_by_device(device_id) {
4
+ const client = await newServerClient();
5
+ return get_certificates_by_device(client, device_id);
6
+ }
7
+ export async function server_get_certificate_by_device(certificate_id, device_id) {
8
+ const client = await newServerClient();
9
+ return get_certificate_by_device(client, certificate_id, device_id);
10
+ }
11
+ export async function server_create_certificate_by_device(device_id, row) {
12
+ const client = await newServerClient();
13
+ return create_certificate_by_device(client, device_id, row);
14
+ }
15
+ export async function server_update_certificate_by_device(certificate_id, device_id, patch) {
16
+ const client = await newServerClient();
17
+ return update_certificate_by_device(client, certificate_id, device_id, patch);
18
+ }
19
+ export async function server_delete_certificate_by_device(certificate_id, device_id) {
20
+ const client = await newServerClient();
21
+ return delete_certificate_by_device(client, certificate_id, device_id);
22
+ }
23
+ export async function server_get_certificates_by_part(part_id) {
24
+ const client = await newServerClient();
25
+ return get_certificates_by_part(client, part_id);
26
+ }
27
+ export async function server_get_certificate_by_part(certificate_id, part_id) {
28
+ const client = await newServerClient();
29
+ return get_certificate_by_part(client, certificate_id, part_id);
30
+ }
31
+ export async function server_create_certificate_by_part(part_id, row) {
32
+ const client = await newServerClient();
33
+ return create_certificate_by_part(client, part_id, row);
34
+ }
35
+ export async function server_update_certificate_by_part(certificate_id, part_id, patch) {
36
+ const client = await newServerClient();
37
+ return update_certificate_by_part(client, certificate_id, part_id, patch);
38
+ }
39
+ export async function server_delete_certificate_by_part(certificate_id, part_id) {
40
+ const client = await newServerClient();
41
+ return delete_certificate_by_part(client, certificate_id, part_id);
42
+ }
@@ -1,6 +1,5 @@
1
1
  import { IWebResponseCompatible } from "../types/requests";
2
- import { TablesInsert } from "../types/supabase";
3
- export type ChatMessageInsert = TablesInsert<"chat">;
2
+ export type { ChatMessageInsert } from "./chat.queries";
4
3
  export declare function server_insert_chat_message(message: string, herd_id: number, sender?: string): Promise<IWebResponseCompatible<{
5
4
  id: number;
6
5
  }>>;
@@ -1,43 +1,8 @@
1
- "use server";
2
1
  import { newServerClient } from "../supabase/server";
3
- import { IWebResponse, EnumWebResponse } from "../types/requests";
2
+ import { get_chat_messages_query, insert_chat_message_query, } from "./chat.queries";
4
3
  export async function server_insert_chat_message(message, herd_id, sender) {
5
- const supabase = await newServerClient();
6
- const chatMessage = {
7
- message,
8
- herd_id,
9
- sender: sender || null,
10
- };
11
- const { data, error } = await supabase
12
- .from("chat")
13
- .insert(chatMessage)
14
- .select("id")
15
- .single();
16
- if (error) {
17
- console.warn("Error inserting chat message:", error.message);
18
- return {
19
- status: EnumWebResponse.ERROR,
20
- msg: `Failed to insert chat message: ${error.message}`,
21
- data: null,
22
- };
23
- }
24
- return IWebResponse.success({ id: data.id }).to_compatible();
4
+ return insert_chat_message_query(await newServerClient(), message, herd_id, sender);
25
5
  }
26
6
  export async function server_get_chat_messages(limit = 50, offset = 0, herd_id) {
27
- const supabase = await newServerClient();
28
- const { data, error } = await supabase
29
- .from("chat")
30
- .select("id, message, sender, created_at")
31
- .order("created_at", { ascending: false })
32
- .range(offset, offset + limit - 1)
33
- .eq("herd_id", herd_id);
34
- if (error) {
35
- console.warn("Error fetching chat messages:", error.message);
36
- return {
37
- status: EnumWebResponse.ERROR,
38
- msg: `Failed to fetch chat messages: ${error.message}`,
39
- data: [],
40
- };
41
- }
42
- return IWebResponse.success(data || []).to_compatible();
7
+ return get_chat_messages_query(await newServerClient(), limit, offset, herd_id);
43
8
  }
@@ -0,0 +1,13 @@
1
+ import { SupabaseClient } from "@supabase/supabase-js";
2
+ import { IWebResponseCompatible } from "../types/requests";
3
+ import { Database, TablesInsert } from "../types/supabase";
4
+ export type ChatMessageInsert = TablesInsert<"chat">;
5
+ export declare function insert_chat_message_query(client: SupabaseClient<Database>, message: string, herd_id: number, sender?: string): Promise<IWebResponseCompatible<{
6
+ id: number;
7
+ }>>;
8
+ export declare function get_chat_messages_query(client: SupabaseClient<Database>, limit: number | undefined, offset: number | undefined, herd_id: number): Promise<IWebResponseCompatible<Array<{
9
+ id: number;
10
+ message: string;
11
+ sender: string | null;
12
+ created_at: string;
13
+ }>>>;
@@ -0,0 +1,39 @@
1
+ import { EnumWebResponse, IWebResponse, } from "../types/requests";
2
+ export async function insert_chat_message_query(client, message, herd_id, sender) {
3
+ const chatMessage = {
4
+ message,
5
+ herd_id,
6
+ sender: sender || null,
7
+ };
8
+ const { data, error } = await client
9
+ .from("chat")
10
+ .insert(chatMessage)
11
+ .select("id")
12
+ .single();
13
+ if (error) {
14
+ console.warn("Error inserting chat message:", error.message);
15
+ return {
16
+ status: EnumWebResponse.ERROR,
17
+ msg: `Failed to insert chat message: ${error.message}`,
18
+ data: null,
19
+ };
20
+ }
21
+ return IWebResponse.success({ id: data.id }).to_compatible();
22
+ }
23
+ export async function get_chat_messages_query(client, limit = 50, offset = 0, herd_id) {
24
+ const { data, error } = await client
25
+ .from("chat")
26
+ .select("id, message, sender, created_at")
27
+ .order("created_at", { ascending: false })
28
+ .range(offset, offset + limit - 1)
29
+ .eq("herd_id", herd_id);
30
+ if (error) {
31
+ console.warn("Error fetching chat messages:", error.message);
32
+ return {
33
+ status: EnumWebResponse.ERROR,
34
+ msg: `Failed to fetch chat messages: ${error.message}`,
35
+ data: [],
36
+ };
37
+ }
38
+ return IWebResponse.success(data || []).to_compatible();
39
+ }
@@ -1,4 +1,3 @@
1
- "use server";
2
1
  import { newServerClient } from "../supabase/server";
3
2
  import { IWebResponse } from "../types/requests";
4
3
  /** Register or rotate a verification key (service_role or platform superadmin). */
@@ -1,3 +1,4 @@
1
1
  import { IClientAbilitiesTokenMint } from "../types/client_abilities_token";
2
2
  import { IWebResponseCompatible } from "../types/requests";
3
3
  export declare function server_mint_client_abilities_token(): Promise<IWebResponseCompatible<IClientAbilitiesTokenMint>>;
4
+ export declare function server_get_client_abilities_jwt_public_keys(): Promise<IWebResponseCompatible<import("../types").IClientAbilitiesJwtPublicKeyEntry[]>>;
@@ -1,7 +1,10 @@
1
- "use server";
2
1
  import { newServerClient } from "../supabase/server";
3
- import { mint_client_abilities_token } from "./client_abilities_token";
2
+ import { get_client_abilities_jwt_public_keys, mint_client_abilities_token, } from "./client_abilities_token";
4
3
  export async function server_mint_client_abilities_token() {
5
4
  const client = await newServerClient();
6
5
  return mint_client_abilities_token(client);
7
6
  }
7
+ export async function server_get_client_abilities_jwt_public_keys() {
8
+ const client = await newServerClient();
9
+ return get_client_abilities_jwt_public_keys(client);
10
+ }
@@ -1,5 +1,6 @@
1
1
  import { IWebResponseCompatible } from "../types/requests";
2
2
  import { IConnectivityWithCoordinates, IConnectivity, ConnectivityInsert, ConnectivityUpdate } from "../types/db";
3
+ import { type HerdConnectivityTimeRangeResponse } from "./connectivity.queries";
3
4
  export declare function server_get_connectivity_by_session_id(sessionId: number): Promise<IWebResponseCompatible<IConnectivityWithCoordinates[]>>;
4
5
  export declare function server_get_connectivity_by_device_id(deviceId: number, timestamp: string): Promise<IWebResponseCompatible<IConnectivityWithCoordinates[]>>;
5
6
  export declare function server_insert_connectivity(connectivity: ConnectivityInsert | ConnectivityInsert[]): Promise<IWebResponseCompatible<IConnectivity[]>>;
@@ -8,11 +9,6 @@ export declare function server_update_connectivity(connectivity: (ConnectivityUp
8
9
  }) | (ConnectivityUpdate & {
9
10
  id: number;
10
11
  })[]): Promise<IWebResponseCompatible<IConnectivity[]>>;
11
- /** Pagination info returned with herd time range connectivity. */
12
- export type HerdConnectivityTimeRangeResponse = IWebResponseCompatible<IConnectivityWithCoordinates[]> & {
13
- hasMore: boolean;
14
- nextOffset: number;
15
- };
16
12
  /** Connectivity records for a herd within a time range. Returns most recent rows with hasMore and nextOffset for pagination. */
17
13
  export declare function server_get_connectivity_for_herd_time_range(herdId: number, startTimestamp: string, endTimestamp: string, maxCount?: number, offset?: number): Promise<HerdConnectivityTimeRangeResponse>;
18
14
  /** Connectivity records for an artifact (uses session when set, else device + time window). */
@@ -1,155 +1,22 @@
1
- "use server";
2
1
  import { newServerClient } from "../supabase/server";
3
- import { EnumWebResponse, IWebResponse, } from "../types/requests";
4
- // Get connectivity by session id using RPC function with coordinates
2
+ import { get_connectivity_by_device_id_query, get_connectivity_by_session_id_query, get_connectivity_for_artifact_query, get_connectivity_for_herd_time_range_query, insert_connectivity_query, update_connectivity_query, } from "./connectivity.queries";
5
3
  export async function server_get_connectivity_by_session_id(sessionId) {
6
- const supabase = await newServerClient();
7
- const { data, error } = await supabase.rpc("get_connectivity_with_coordinates", { session_id_caller: sessionId });
8
- if (error) {
9
- console.warn("Error fetching connectivity by session id:", error.message);
10
- return {
11
- status: EnumWebResponse.ERROR,
12
- msg: error.message,
13
- data: [],
14
- };
15
- }
16
- // Sort by timestamp_start in ascending order
17
- const sortedConnectivity = (data || []).sort((a, b) => {
18
- if (!a.timestamp_start || !b.timestamp_start)
19
- return 0;
20
- return (new Date(a.timestamp_start).getTime() -
21
- new Date(b.timestamp_start).getTime());
22
- });
23
- return IWebResponse.success(sortedConnectivity).to_compatible();
4
+ return get_connectivity_by_session_id_query(await newServerClient(), sessionId);
24
5
  }
25
- // Get all connectivity items after a specific timestamp, filtered by device ID
26
- // Timestamp should be formatted as YYYY-MM-DDTHH:mm:ss.SSSZ
27
6
  export async function server_get_connectivity_by_device_id(deviceId, timestamp) {
28
- const supabase = await newServerClient();
29
- const { data, error } = await supabase.rpc("get_connectivity_with_coordinates_by_device_and_timestamp", { device_id_caller: deviceId, timestamp_filter: timestamp });
30
- if (error) {
31
- console.warn("Error fetching connectivity by session id:", error.message);
32
- return {
33
- status: EnumWebResponse.ERROR,
34
- msg: error.message,
35
- data: [],
36
- };
37
- }
38
- // Sort by timestamp_start in ascending order
39
- const sortedConnectivity = (data || []).sort((a, b) => {
40
- if (!a.timestamp_start || !b.timestamp_start)
41
- return 0;
42
- return (new Date(a.timestamp_start).getTime() -
43
- new Date(b.timestamp_start).getTime());
44
- });
45
- return IWebResponse.success(sortedConnectivity).to_compatible();
7
+ return get_connectivity_by_device_id_query(await newServerClient(), deviceId, timestamp);
46
8
  }
47
- // Insert new connectivity records (accepts array for batch operations)
48
9
  export async function server_insert_connectivity(connectivity) {
49
- const client = await newServerClient();
50
- const connectivityArray = Array.isArray(connectivity)
51
- ? connectivity
52
- : [connectivity];
53
- const { data, error } = await client
54
- .from("connectivity")
55
- .insert(connectivityArray)
56
- .select("*");
57
- if (error) {
58
- console.warn("Error inserting connectivity:", error.message);
59
- return {
60
- status: EnumWebResponse.ERROR,
61
- msg: error.message,
62
- data: [],
63
- };
64
- }
65
- return IWebResponse.success(data || []).to_compatible();
10
+ return insert_connectivity_query(await newServerClient(), connectivity);
66
11
  }
67
- // Update existing connectivity records (accepts array for batch operations)
68
- // Each connectivity record in the array must include an 'id' field
69
12
  export async function server_update_connectivity(connectivity) {
70
- const client = await newServerClient();
71
- const connectivityArray = Array.isArray(connectivity)
72
- ? connectivity
73
- : [connectivity];
74
- const updatedConnectivity = [];
75
- for (const record of connectivityArray) {
76
- const { id, ...updateData } = record;
77
- delete updateData.inserted_at;
78
- const { data, error } = await client
79
- .from("connectivity")
80
- .update(updateData)
81
- .eq("id", id)
82
- .select("*")
83
- .single();
84
- if (error) {
85
- console.warn("Error updating connectivity:", error.message);
86
- return {
87
- status: EnumWebResponse.ERROR,
88
- msg: error.message,
89
- data: [],
90
- };
91
- }
92
- if (data) {
93
- updatedConnectivity.push(data);
94
- }
95
- }
96
- return IWebResponse.success(updatedConnectivity).to_compatible();
13
+ return update_connectivity_query(await newServerClient(), connectivity);
97
14
  }
98
15
  /** Connectivity records for a herd within a time range. Returns most recent rows with hasMore and nextOffset for pagination. */
99
16
  export async function server_get_connectivity_for_herd_time_range(herdId, startTimestamp, endTimestamp, maxCount = 1000, offset = 0) {
100
- const supabase = await newServerClient();
101
- const { data, error } = await supabase.rpc("get_connectivity_for_herd_time_range", {
102
- herd_id_caller: herdId,
103
- start_timestamp_caller: startTimestamp,
104
- end_timestamp_caller: endTimestamp,
105
- max_elements_caller: maxCount + 1,
106
- offset_caller: offset,
107
- });
108
- if (error) {
109
- console.warn("Error fetching connectivity for herd time range:", error.message);
110
- return {
111
- status: EnumWebResponse.ERROR,
112
- msg: error.message,
113
- data: [],
114
- hasMore: false,
115
- nextOffset: offset,
116
- };
117
- }
118
- const sorted = (data || []).sort((a, b) => {
119
- if (!a.timestamp_start || !b.timestamp_start)
120
- return 0;
121
- return (new Date(a.timestamp_start).getTime() -
122
- new Date(b.timestamp_start).getTime());
123
- });
124
- const hasMore = sorted.length > maxCount;
125
- const items = hasMore ? sorted.slice(0, maxCount) : sorted;
126
- const nextOffset = offset + items.length;
127
- return {
128
- ...IWebResponse.success(items).to_compatible(),
129
- hasMore,
130
- nextOffset,
131
- };
17
+ return get_connectivity_for_herd_time_range_query(await newServerClient(), herdId, startTimestamp, endTimestamp, maxCount, offset);
132
18
  }
133
19
  /** Connectivity records for an artifact (uses session when set, else device + time window). */
134
20
  export async function server_get_connectivity_for_artifact(artifactId, maxElements = 1000) {
135
- const supabase = await newServerClient();
136
- const { data, error } = await supabase.rpc("get_connectivity_for_artifact", {
137
- artifact_id_caller: artifactId,
138
- max_elements_caller: maxElements,
139
- });
140
- if (error) {
141
- console.warn("Error fetching connectivity for artifact:", error.message);
142
- return {
143
- status: EnumWebResponse.ERROR,
144
- msg: error.message,
145
- data: [],
146
- };
147
- }
148
- const sortedConnectivity = (data || []).sort((a, b) => {
149
- if (!a.timestamp_start || !b.timestamp_start)
150
- return 0;
151
- return (new Date(a.timestamp_start).getTime() -
152
- new Date(b.timestamp_start).getTime());
153
- });
154
- return IWebResponse.success(sortedConnectivity).to_compatible();
21
+ return get_connectivity_for_artifact_query(await newServerClient(), artifactId, maxElements);
155
22
  }
@@ -0,0 +1,18 @@
1
+ import { SupabaseClient } from "@supabase/supabase-js";
2
+ import { ConnectivityInsert, ConnectivityUpdate, IConnectivity, IConnectivityWithCoordinates } from "../types/db";
3
+ import { IWebResponseCompatible } from "../types/requests";
4
+ import { Database } from "../types/supabase";
5
+ export type HerdConnectivityTimeRangeResponse = IWebResponseCompatible<IConnectivityWithCoordinates[]> & {
6
+ hasMore: boolean;
7
+ nextOffset: number;
8
+ };
9
+ export declare function get_connectivity_by_session_id_query(client: SupabaseClient<Database>, sessionId: number): Promise<IWebResponseCompatible<IConnectivityWithCoordinates[]>>;
10
+ export declare function get_connectivity_by_device_id_query(client: SupabaseClient<Database>, deviceId: number, timestamp: string): Promise<IWebResponseCompatible<IConnectivityWithCoordinates[]>>;
11
+ export declare function insert_connectivity_query(client: SupabaseClient<Database>, connectivity: ConnectivityInsert | ConnectivityInsert[]): Promise<IWebResponseCompatible<IConnectivity[]>>;
12
+ export declare function update_connectivity_query(client: SupabaseClient<Database>, connectivity: (ConnectivityUpdate & {
13
+ id: number;
14
+ }) | (ConnectivityUpdate & {
15
+ id: number;
16
+ })[]): Promise<IWebResponseCompatible<IConnectivity[]>>;
17
+ export declare function get_connectivity_for_herd_time_range_query(client: SupabaseClient<Database>, herdId: number, startTimestamp: string, endTimestamp: string, maxCount?: number, offset?: number): Promise<HerdConnectivityTimeRangeResponse>;
18
+ export declare function get_connectivity_for_artifact_query(client: SupabaseClient<Database>, artifactId: number, maxElements?: number): Promise<IWebResponseCompatible<IConnectivityWithCoordinates[]>>;