@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.
- package/README.md +47 -0
- package/dist/api_keys/actions.d.ts +0 -1
- package/dist/api_keys/actions.js +0 -14
- package/dist/client/index.d.ts +75 -0
- package/dist/client/index.js +82 -0
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.js +1 -0
- package/dist/helpers/analysis_usage/jobs_server.d.ts +25 -0
- package/dist/helpers/analysis_usage/jobs_server.js +10 -0
- package/dist/helpers/analysis_usage/tasks_server.d.ts +63 -0
- package/dist/helpers/analysis_usage/tasks_server.js +14 -0
- package/dist/helpers/artifacts.d.ts +0 -1
- package/dist/helpers/artifacts.js +10 -147
- package/dist/helpers/artifacts.queries.d.ts +26 -0
- package/dist/helpers/{artifacts.internal.js → artifacts.queries.js} +24 -41
- package/dist/helpers/auth.d.ts +1 -1
- package/dist/helpers/auth.js +2 -3
- package/dist/helpers/auth_server.d.ts +2 -0
- package/dist/helpers/auth_server.js +10 -0
- package/dist/helpers/certificates_server.d.ts +101 -0
- package/dist/helpers/certificates_server.js +42 -0
- package/dist/helpers/chat.d.ts +1 -2
- package/dist/helpers/chat.js +3 -38
- package/dist/helpers/chat.queries.d.ts +13 -0
- package/dist/helpers/chat.queries.js +39 -0
- package/dist/helpers/client_abilities_jwt_keys.js +0 -1
- package/dist/helpers/client_abilities_token_server.d.ts +1 -0
- package/dist/helpers/client_abilities_token_server.js +5 -2
- package/dist/helpers/connectivity.d.ts +1 -5
- package/dist/helpers/connectivity.js +7 -140
- package/dist/helpers/connectivity.queries.d.ts +18 -0
- package/dist/helpers/connectivity.queries.js +121 -0
- package/dist/helpers/contacts_server.d.ts +63 -0
- package/dist/helpers/contacts_server.js +18 -0
- package/dist/helpers/deviceTransfer.js +2 -11
- package/dist/helpers/deviceTransfer.queries.d.ts +4 -0
- package/dist/helpers/deviceTransfer.queries.js +11 -0
- package/dist/helpers/devices.js +4 -61
- package/dist/helpers/devices.queries.d.ts +4 -1
- package/dist/helpers/devices.queries.js +52 -0
- package/dist/helpers/document_templates.js +6 -52
- package/dist/helpers/document_templates.queries.d.ts +9 -0
- package/dist/helpers/document_templates.queries.js +56 -0
- package/dist/helpers/documents_server.d.ts +226 -0
- package/dist/helpers/documents_server.js +38 -0
- package/dist/helpers/email.d.ts +0 -6
- package/dist/helpers/email.js +1 -19
- package/dist/helpers/embeddings.d.ts +0 -5
- package/dist/helpers/embeddings.js +2 -19
- package/dist/helpers/embeddings.queries.d.ts +7 -0
- package/dist/helpers/{embeddings.internal.js → embeddings.queries.js} +2 -2
- package/dist/helpers/eventUtils.d.ts +3 -12
- package/dist/helpers/eventUtils.js +0 -10
- package/dist/helpers/events.d.ts +0 -1
- package/dist/helpers/events.js +7 -107
- package/dist/helpers/events.queries.d.ts +17 -0
- package/dist/helpers/{events.internal.js → events.queries.js} +24 -15
- package/dist/helpers/health_metrics.js +3 -38
- package/dist/helpers/health_metrics.queries.d.ts +12 -0
- package/dist/helpers/health_metrics.queries.js +39 -0
- package/dist/helpers/heartbeats.js +4 -83
- package/dist/helpers/heartbeats.queries.d.ts +11 -0
- package/dist/helpers/heartbeats.queries.js +76 -0
- package/dist/helpers/herd_allowed_domains.js +2 -12
- package/dist/helpers/{herd_allowed_domains_internal.d.ts → herd_allowed_domains.queries.d.ts} +1 -1
- package/dist/helpers/{herd_allowed_domains_internal.js → herd_allowed_domains.queries.js} +2 -2
- package/dist/helpers/herd_credentials_server.d.ts +76 -0
- package/dist/helpers/herd_credentials_server.js +22 -0
- package/dist/helpers/herd_modules.queries.js +10 -7
- package/dist/helpers/herd_roles.js +13 -148
- package/dist/helpers/herd_roles.queries.d.ts +18 -0
- package/dist/helpers/{herd_roles_internal.js → herd_roles.queries.js} +28 -28
- package/dist/helpers/herds.js +5 -47
- package/dist/helpers/herds.queries.d.ts +8 -1
- package/dist/helpers/herds.queries.js +48 -0
- package/dist/helpers/invitations.js +7 -58
- package/dist/helpers/invitations.queries.d.ts +10 -0
- package/dist/helpers/{invitations_internal.js → invitations.queries.js} +12 -12
- package/dist/helpers/issuers.js +6 -52
- package/dist/helpers/issuers.queries.d.ts +9 -0
- package/dist/helpers/issuers.queries.js +53 -0
- package/dist/helpers/layers.js +2 -20
- package/dist/helpers/layers.queries.d.ts +2 -1
- package/dist/helpers/layers.queries.js +9 -13
- package/dist/helpers/lifecycle_server.d.ts +175 -0
- package/dist/helpers/lifecycle_server.js +38 -0
- package/dist/helpers/localizations.js +5 -42
- package/dist/helpers/localizations.queries.d.ts +8 -0
- package/dist/helpers/localizations.queries.js +45 -0
- package/dist/helpers/maintenance_requests_server.d.ts +124 -0
- package/dist/helpers/maintenance_requests_server.js +34 -0
- package/dist/helpers/manufacturers.js +5 -43
- package/dist/helpers/manufacturers.queries.d.ts +10 -0
- package/dist/helpers/manufacturers.queries.js +46 -0
- package/dist/helpers/media_urls.d.ts +13 -0
- package/dist/helpers/media_urls.js +21 -0
- package/dist/helpers/models.js +8 -80
- package/dist/helpers/models.queries.d.ts +13 -0
- package/dist/helpers/models.queries.js +79 -0
- package/dist/helpers/observations_server.d.ts +51 -0
- package/dist/helpers/observations_server.js +22 -0
- package/dist/helpers/operating_contexts.js +39 -154
- package/dist/helpers/operating_contexts.queries.d.ts +48 -0
- package/dist/helpers/operating_contexts.queries.js +223 -0
- package/dist/helpers/operators.js +4 -57
- package/dist/helpers/operators.queries.d.ts +7 -0
- package/dist/helpers/operators.queries.js +55 -0
- package/dist/helpers/parts.d.ts +0 -87
- package/dist/helpers/parts.js +4 -90
- package/dist/helpers/parts_server.d.ts +260 -0
- package/dist/helpers/parts_server.js +71 -0
- package/dist/helpers/pins_server.d.ts +118 -0
- package/dist/helpers/pins_server.js +38 -0
- package/dist/helpers/plans.js +4 -56
- package/dist/helpers/plans.queries.d.ts +4 -1
- package/dist/helpers/plans.queries.js +39 -12
- package/dist/helpers/points_for_user_server.d.ts +9 -0
- package/dist/helpers/points_for_user_server.js +14 -0
- package/dist/helpers/product_compatibilities.js +6 -78
- package/dist/helpers/product_compatibilities.queries.d.ts +9 -0
- package/dist/helpers/product_compatibilities.queries.js +83 -0
- package/dist/helpers/product_numbers.js +6 -55
- package/dist/helpers/product_numbers.queries.d.ts +9 -0
- package/dist/helpers/product_numbers.queries.js +58 -0
- package/dist/helpers/products.js +6 -54
- package/dist/helpers/products.queries.d.ts +11 -0
- package/dist/helpers/products.queries.js +58 -0
- package/dist/helpers/providers.js +5 -71
- package/dist/helpers/providers.queries.d.ts +5 -1
- package/dist/helpers/providers.queries.js +52 -11
- package/dist/helpers/pubsub_token_server.d.ts +1 -0
- package/dist/helpers/pubsub_token_server.js +5 -2
- package/dist/helpers/segmentations_sam3.js +5 -78
- package/dist/helpers/segmentations_sam3.queries.d.ts +16 -0
- package/dist/helpers/segmentations_sam3.queries.js +81 -0
- package/dist/helpers/sensor_poses_server.d.ts +98 -0
- package/dist/helpers/sensor_poses_server.js +26 -0
- package/dist/helpers/session_incidents_server.d.ts +106 -0
- package/dist/helpers/session_incidents_server.js +22 -0
- package/dist/helpers/session_summaries.d.ts +2 -0
- package/dist/helpers/session_summaries.js +7 -23
- package/dist/helpers/session_summaries.queries.d.ts +6 -3
- package/dist/helpers/session_summaries.queries.js +27 -0
- package/dist/helpers/sessions.js +8 -122
- package/dist/helpers/sessions.queries.d.ts +14 -2
- package/dist/helpers/sessions.queries.js +88 -1
- package/dist/helpers/storage.js +0 -1
- package/dist/helpers/supabase_auth.d.ts +6 -0
- package/dist/helpers/supabase_auth.js +37 -0
- package/dist/helpers/tags.d.ts +0 -1
- package/dist/helpers/tags.js +13 -559
- package/dist/helpers/tags.queries.d.ts +33 -0
- package/dist/helpers/tags.queries.js +454 -0
- package/dist/helpers/user_credentials_server.d.ts +76 -0
- package/dist/helpers/user_credentials_server.js +22 -0
- package/dist/helpers/users.d.ts +2 -2
- package/dist/helpers/users.js +8 -107
- package/dist/helpers/users.queries.d.ts +9 -1
- package/dist/helpers/users.queries.js +107 -0
- package/dist/helpers/versions_software.d.ts +3 -1
- package/dist/helpers/versions_software.js +24 -0
- package/dist/helpers/versions_software_server.d.ts +83 -4
- package/dist/helpers/versions_software_server.js +23 -50
- package/dist/helpers/zones.d.ts +1 -16
- package/dist/helpers/zones.js +4 -104
- package/dist/helpers/zones.queries.d.ts +6 -0
- package/dist/helpers/zones.queries.js +78 -0
- package/dist/hooks/useAuthorizedRealtimeTopics.js +8 -2
- package/dist/hooks/useInfiniteQuery.js +18 -14
- package/dist/hooks/useScoutRealtimeBroadcast.js +8 -6
- package/dist/hooks/useScoutRealtimeDocuments.js +3 -2
- package/dist/hooks/useScoutRefresh.d.ts +9 -25
- package/dist/hooks/useScoutRefresh.js +33 -213
- package/dist/providers/ScoutRefreshProvider.d.ts +1 -1
- package/dist/providers/ScoutRefreshProvider.js +56 -13
- package/dist/server/index.d.ts +77 -0
- package/dist/server/index.js +79 -0
- package/dist/server/middleware.d.ts +2 -0
- package/dist/server/middleware.js +2 -0
- package/dist/server/supabase.d.ts +2 -0
- package/dist/server/supabase.js +2 -0
- package/dist/store/api.d.ts +40 -40
- package/dist/store/api.js +38 -109
- package/dist/store/configureStore.d.ts +0 -55
- package/dist/store/configureStore.js +1 -8
- package/dist/store/hooks.js +1 -0
- package/dist/supabase/client.d.ts +3 -0
- package/dist/supabase/client.js +10 -0
- package/dist/supabase/middleware.d.ts +1 -0
- package/dist/supabase/middleware.js +6 -20
- package/dist/supabase/server.d.ts +7 -2
- package/dist/supabase/server.js +13 -1
- package/dist/types/db.d.ts +2 -2
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.js +5 -0
- package/package.json +53 -4
- package/dist/api_keys/index.d.ts +0 -1
- package/dist/api_keys/index.js +0 -1
- package/dist/helpers/artifacts.internal.d.ts +0 -22
- package/dist/helpers/client_abilities_jwt_keys_internal.d.ts +0 -9
- package/dist/helpers/client_abilities_jwt_keys_internal.js +0 -20
- package/dist/helpers/connectivity.internal.d.ts +0 -10
- package/dist/helpers/connectivity.internal.js +0 -47
- package/dist/helpers/credentials.d.ts +0 -9
- package/dist/helpers/credentials.js +0 -92
- package/dist/helpers/embeddings.internal.d.ts +0 -5
- package/dist/helpers/events.internal.d.ts +0 -13
- package/dist/helpers/herd_roles_internal.d.ts +0 -18
- package/dist/helpers/index.d.ts +0 -56
- package/dist/helpers/index.js +0 -56
- package/dist/helpers/invitations_internal.d.ts +0 -10
- package/dist/helpers/versions_software_internal.d.ts +0 -6
- package/dist/helpers/versions_software_internal.js +0 -53
- package/dist/hooks/useDeviceDisplayName.d.ts +0 -8
- package/dist/hooks/useDeviceDisplayName.js +0 -49
- package/dist/index.d.ts +0 -108
- package/dist/index.js +0 -114
- package/dist/supabase/index.d.ts +0 -2
- package/dist/supabase/index.js +0 -2
|
@@ -1,26 +1,6 @@
|
|
|
1
1
|
import { IWebResponse } from "../types/requests";
|
|
2
|
-
import {
|
|
3
|
-
|
|
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
|
-
|
|
37
|
-
|
|
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
|
|
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(
|
|
33
|
+
const artifactsWithUrls = await addArtifactMediaUrls(client, data);
|
|
60
34
|
return IWebResponse.success(artifactsWithUrls).to_compatible();
|
|
61
35
|
}
|
|
62
|
-
export async function
|
|
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(
|
|
48
|
+
const artifactsWithUrls = await addArtifactMediaUrls(client, data);
|
|
75
49
|
return IWebResponse.success(artifactsWithUrls).to_compatible();
|
|
76
50
|
}
|
|
77
|
-
export async function
|
|
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(
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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();
|
package/dist/helpers/auth.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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>>;
|
package/dist/helpers/auth.js
CHANGED
|
@@ -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
|
-
/**
|
|
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.
|
|
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,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
|
+
}
|
package/dist/helpers/chat.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { IWebResponseCompatible } from "../types/requests";
|
|
2
|
-
|
|
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
|
}>>;
|
package/dist/helpers/chat.js
CHANGED
|
@@ -1,43 +1,8 @@
|
|
|
1
|
-
"use server";
|
|
2
1
|
import { newServerClient } from "../supabase/server";
|
|
3
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
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,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 {
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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[]>>;
|