@adventurelabs/scout-core 1.4.46 → 1.4.48

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.
@@ -13,6 +13,7 @@ export * from "./herds";
13
13
  export * from "./location";
14
14
  export * from "./plans";
15
15
  export * from "./sessions";
16
+ export * from "./segmentations_sam3";
16
17
  export * from "./tags";
17
18
  export * from "./time";
18
19
  export * from "./ui";
@@ -13,6 +13,7 @@ export * from "./herds";
13
13
  export * from "./location";
14
14
  export * from "./plans";
15
15
  export * from "./sessions";
16
+ export * from "./segmentations_sam3";
16
17
  export * from "./tags";
17
18
  export * from "./time";
18
19
  export * from "./ui";
@@ -0,0 +1,18 @@
1
+ import { ISegmentationSam3Pretty } from "../types/db";
2
+ import { IWebResponseCompatible } from "../types/requests";
3
+ /** SAM3 masks for an artifact; optional timestamp_observation range and max_elements (omit or null for no limit). */
4
+ export declare function server_get_segmentations_sam3_for_artifact(artifactId: number, options?: {
5
+ start_timestamp?: string | null;
6
+ end_timestamp?: string | null;
7
+ max_elements?: number | null;
8
+ }): Promise<IWebResponseCompatible<ISegmentationSam3Pretty[]>>;
9
+ /** SAM3 masks for an event; optional timestamp_observation range and max_elements (omit or null for no limit). */
10
+ export declare function server_get_segmentations_sam3_for_event(eventId: number, options?: {
11
+ start_timestamp?: string | null;
12
+ end_timestamp?: string | null;
13
+ max_elements?: number | null;
14
+ }): Promise<IWebResponseCompatible<ISegmentationSam3Pretty[]>>;
15
+ /** SAM3 masks for an artifact by inclusive frame_index range; optional min_conf and max_elements (omit or null for no limit on rows). */
16
+ export declare function server_get_segmentations_sam3_for_artifact_by_frame_index(artifactId: number, frameIndexStart: number, frameIndexEnd: number, minConf?: number | null, maxElements?: number | null): Promise<IWebResponseCompatible<ISegmentationSam3Pretty[]>>;
17
+ /** SAM3 masks for an artifact and subject_id; omit maxElements (or null) for no row limit. */
18
+ export declare function server_get_segmentations_sam3_for_artifact_by_subject_id(artifactId: number, subjectId: number, maxElements?: number | null): Promise<IWebResponseCompatible<ISegmentationSam3Pretty[]>>;
@@ -0,0 +1,91 @@
1
+ "use server";
2
+ import { newServerClient } from "../supabase/server";
3
+ import { EnumWebResponse, IWebResponse, } from "../types/requests";
4
+ /** SAM3 masks for an artifact; optional timestamp_observation range and max_elements (omit or null for no limit). */
5
+ export async function server_get_segmentations_sam3_for_artifact(artifactId, options) {
6
+ const supabase = await newServerClient();
7
+ const { data, error } = await supabase.rpc("get_segmentations_sam3_for_artifact", {
8
+ artifact_id_caller: artifactId,
9
+ ...(options?.start_timestamp != null && {
10
+ start_timestamp_caller: options.start_timestamp,
11
+ }),
12
+ ...(options?.end_timestamp != null && {
13
+ end_timestamp_caller: options.end_timestamp,
14
+ }),
15
+ ...(options?.max_elements != null && {
16
+ max_elements_caller: options.max_elements,
17
+ }),
18
+ });
19
+ if (error) {
20
+ console.warn("Error fetching segmentations_sam3 for artifact:", error.message);
21
+ return {
22
+ status: EnumWebResponse.ERROR,
23
+ msg: error.message,
24
+ data: [],
25
+ };
26
+ }
27
+ return IWebResponse.success(data ?? []).to_compatible();
28
+ }
29
+ /** SAM3 masks for an event; optional timestamp_observation range and max_elements (omit or null for no limit). */
30
+ export async function server_get_segmentations_sam3_for_event(eventId, options) {
31
+ const supabase = await newServerClient();
32
+ const { data, error } = await supabase.rpc("get_segmentations_sam3_for_event", {
33
+ event_id_caller: eventId,
34
+ ...(options?.start_timestamp != null && {
35
+ start_timestamp_caller: options.start_timestamp,
36
+ }),
37
+ ...(options?.end_timestamp != null && {
38
+ end_timestamp_caller: options.end_timestamp,
39
+ }),
40
+ ...(options?.max_elements != null && {
41
+ max_elements_caller: options.max_elements,
42
+ }),
43
+ });
44
+ if (error) {
45
+ console.warn("Error fetching segmentations_sam3 for event:", error.message);
46
+ return {
47
+ status: EnumWebResponse.ERROR,
48
+ msg: error.message,
49
+ data: [],
50
+ };
51
+ }
52
+ return IWebResponse.success(data ?? []).to_compatible();
53
+ }
54
+ /** SAM3 masks for an artifact by inclusive frame_index range; optional min_conf and max_elements (omit or null for no limit on rows). */
55
+ export async function server_get_segmentations_sam3_for_artifact_by_frame_index(artifactId, frameIndexStart, frameIndexEnd, minConf = null, maxElements = null) {
56
+ const supabase = await newServerClient();
57
+ const { data, error } = await supabase.rpc("get_segmentations_sam3_for_artifact_by_frame_index", {
58
+ artifact_id_caller: artifactId,
59
+ frame_index_start_caller: frameIndexStart,
60
+ frame_index_end_caller: frameIndexEnd,
61
+ ...(minConf != null && { min_conf_caller: minConf }),
62
+ ...(maxElements != null && { max_elements_caller: maxElements }),
63
+ });
64
+ if (error) {
65
+ console.warn("Error fetching segmentations_sam3 for artifact by frame index:", error.message);
66
+ return {
67
+ status: EnumWebResponse.ERROR,
68
+ msg: error.message,
69
+ data: [],
70
+ };
71
+ }
72
+ return IWebResponse.success(data ?? []).to_compatible();
73
+ }
74
+ /** SAM3 masks for an artifact and subject_id; omit maxElements (or null) for no row limit. */
75
+ export async function server_get_segmentations_sam3_for_artifact_by_subject_id(artifactId, subjectId, maxElements = null) {
76
+ const supabase = await newServerClient();
77
+ const { data, error } = await supabase.rpc("get_segmentations_sam3_for_artifact_by_subject_id", {
78
+ artifact_id_caller: artifactId,
79
+ subject_id_caller: subjectId,
80
+ ...(maxElements != null && { max_elements_caller: maxElements }),
81
+ });
82
+ if (error) {
83
+ console.warn("Error fetching segmentations_sam3 for artifact by subject id:", error.message);
84
+ return {
85
+ status: EnumWebResponse.ERROR,
86
+ msg: error.message,
87
+ data: [],
88
+ };
89
+ }
90
+ return IWebResponse.success(data ?? []).to_compatible();
91
+ }
@@ -1,6 +1,7 @@
1
1
  "use server";
2
2
  import { newServerClient } from "../supabase/server";
3
3
  import { EnumWebResponse, IWebResponse, } from "../types/requests";
4
+ import { generateSignedUrlsBatch } from "./storage";
4
5
  // Get session by ID with coordinates
5
6
  export async function server_get_session_by_id(sessionId, client) {
6
7
  const supabase = client || (await newServerClient());
@@ -69,7 +70,23 @@ export async function server_get_events_and_tags_by_session_id(sessionId, limit
69
70
  data: [],
70
71
  };
71
72
  }
72
- return IWebResponse.success(data || []).to_compatible();
73
+ const eventData = (data || []);
74
+ const filePaths = eventData
75
+ .map((event) => event.file_path)
76
+ .filter((path) => !!path);
77
+ let eventsWithSignedUrls = eventData;
78
+ if (filePaths.length > 0) {
79
+ const signedUrls = await generateSignedUrlsBatch(filePaths, undefined, supabase);
80
+ const urlMap = new Map();
81
+ filePaths.forEach((path, index) => {
82
+ urlMap.set(path, signedUrls[index]);
83
+ });
84
+ eventsWithSignedUrls = eventData.map((event) => ({
85
+ ...event,
86
+ media_url: event.file_path ? urlMap.get(event.file_path) || null : null,
87
+ }));
88
+ }
89
+ return IWebResponse.success(eventsWithSignedUrls).to_compatible();
73
90
  }
74
91
  // Insert new sessions (accepts array for batch operations)
75
92
  export async function server_insert_session(sessions, client) {
@@ -1,4 +1,4 @@
1
- import { IEventAndTagsPrettyLocation, ITag, ITagPrettyLocation } from "../types/db";
1
+ import { IEventAndTagsPrettyLocation, IMinimalSubjectForArtifact, ITag, ITagPrettyLocation } from "../types/db";
2
2
  import { IWebResponseCompatible } from "../types/requests";
3
3
  export declare function test_event_loading(device_id: number): Promise<boolean>;
4
4
  export declare function server_create_tags(tags: ITag[]): Promise<IWebResponseCompatible<ITag[]>>;
@@ -10,9 +10,28 @@ export declare function server_get_events_and_tags_for_devices_batch(device_ids:
10
10
  [device_id: number]: IEventAndTagsPrettyLocation[];
11
11
  }>>;
12
12
  export declare function get_event_and_tags_by_event_id(event_id: number): Promise<IWebResponseCompatible<IEventAndTagsPrettyLocation>>;
13
- /** Tags for an artifact with optional timestamp range and max items. */
13
+ /** Tags for an artifact with optional timestamp range, detector filter, and max_elements (omit or null for no limit). */
14
14
  export declare function server_get_tags_for_artifact(artifactId: number, options?: {
15
15
  start_timestamp?: string | null;
16
16
  end_timestamp?: string | null;
17
- max_elements?: number;
17
+ max_elements?: number | null;
18
+ detection_models?: string[] | null;
19
+ }): Promise<IWebResponseCompatible<ITagPrettyLocation[]>>;
20
+ /** Tags for an artifact filtered by frame_index range and minimum confidence. Omit maxElements (or pass null) for no row limit. */
21
+ export declare function server_get_tags_for_artifact_by_frame_index(artifactId: number, minConf: number, frameIndexStart: number, frameIndexEnd: number, detection_models?: string[] | null, maxElements?: number | null): Promise<IWebResponseCompatible<ITagPrettyLocation[]>>;
22
+ /** Tags for an artifact and subject_id. Omit maxElements (or pass null) for no row limit. */
23
+ export declare function server_get_tags_for_artifact_by_subject_id(artifactId: number, subjectId: number, detection_models?: string[] | null, maxElements?: number | null): Promise<IWebResponseCompatible<ITagPrettyLocation[]>>;
24
+ /** Per-subject aggregates for tags on an artifact (rows with subject_id only). Optional min_avg_conf / min_count / detection_models; max_elements caps subject rows (omit or null for no cap). */
25
+ export declare function server_get_minimal_subjects_for_artifact(artifactId: number, options?: {
26
+ min_avg_conf?: number | null;
27
+ min_count?: number | null;
28
+ detection_models?: string[] | null;
29
+ max_elements?: number | null;
30
+ }): Promise<IWebResponseCompatible<IMinimalSubjectForArtifact[]>>;
31
+ /** Tags for an event with optional timestamp range, detector filter, and max_elements (omit or null for no limit). */
32
+ export declare function server_get_tags_for_event(eventId: number, options?: {
33
+ start_timestamp?: string | null;
34
+ end_timestamp?: string | null;
35
+ max_elements?: number | null;
36
+ detection_models?: string[] | null;
18
37
  }): Promise<IWebResponseCompatible<ITagPrettyLocation[]>>;
@@ -54,6 +54,12 @@ function extractLongitude(location) {
54
54
  }
55
55
  return null;
56
56
  }
57
+ function rpcDetectorModelsParam(detection_models) {
58
+ if (detection_models != null && detection_models.length > 0) {
59
+ return { detector_models_caller: detection_models };
60
+ }
61
+ return {};
62
+ }
57
63
  // Test function to verify individual event loading works
58
64
  export async function test_event_loading(device_id) {
59
65
  try {
@@ -457,18 +463,21 @@ export async function get_event_and_tags_by_event_id(event_id) {
457
463
  }
458
464
  return IWebResponse.success(eventWithSignedUrl).to_compatible();
459
465
  }
460
- /** Tags for an artifact with optional timestamp range and max items. */
466
+ /** Tags for an artifact with optional timestamp range, detector filter, and max_elements (omit or null for no limit). */
461
467
  export async function server_get_tags_for_artifact(artifactId, options) {
462
468
  const supabase = await newServerClient();
463
469
  const { data, error } = await supabase.rpc("get_tags_for_artifact", {
464
470
  artifact_id_caller: artifactId,
465
- max_elements_caller: options?.max_elements ?? 1000,
466
471
  ...(options?.start_timestamp != null && {
467
472
  start_timestamp_caller: options.start_timestamp,
468
473
  }),
469
474
  ...(options?.end_timestamp != null && {
470
475
  end_timestamp_caller: options.end_timestamp,
471
476
  }),
477
+ ...rpcDetectorModelsParam(options?.detection_models),
478
+ ...(options?.max_elements != null && {
479
+ max_elements_caller: options.max_elements,
480
+ }),
472
481
  });
473
482
  if (error) {
474
483
  console.warn("Error fetching tags for artifact:", error.message);
@@ -480,3 +489,95 @@ export async function server_get_tags_for_artifact(artifactId, options) {
480
489
  }
481
490
  return IWebResponse.success(data ?? []).to_compatible();
482
491
  }
492
+ /** Tags for an artifact filtered by frame_index range and minimum confidence. Omit maxElements (or pass null) for no row limit. */
493
+ export async function server_get_tags_for_artifact_by_frame_index(artifactId, minConf, frameIndexStart, frameIndexEnd, detection_models = null, maxElements = null) {
494
+ const supabase = await newServerClient();
495
+ const { data, error } = await supabase.rpc("get_tags_for_artifact_by_frame_index", {
496
+ artifact_id_caller: artifactId,
497
+ min_conf_caller: minConf,
498
+ frame_index_start_caller: frameIndexStart,
499
+ frame_index_end_caller: frameIndexEnd,
500
+ ...rpcDetectorModelsParam(detection_models),
501
+ ...(maxElements != null && { max_elements_caller: maxElements }),
502
+ });
503
+ if (error) {
504
+ console.warn("Error fetching tags for artifact by frame index:", error.message);
505
+ return {
506
+ status: EnumWebResponse.ERROR,
507
+ msg: error.message,
508
+ data: [],
509
+ };
510
+ }
511
+ return IWebResponse.success(data ?? []).to_compatible();
512
+ }
513
+ /** Tags for an artifact and subject_id. Omit maxElements (or pass null) for no row limit. */
514
+ export async function server_get_tags_for_artifact_by_subject_id(artifactId, subjectId, detection_models = null, maxElements = null) {
515
+ const supabase = await newServerClient();
516
+ const { data, error } = await supabase.rpc("get_tags_for_artifact_by_subject_id", {
517
+ artifact_id_caller: artifactId,
518
+ subject_id_caller: subjectId,
519
+ ...rpcDetectorModelsParam(detection_models),
520
+ ...(maxElements != null && { max_elements_caller: maxElements }),
521
+ });
522
+ if (error) {
523
+ console.warn("Error fetching tags for artifact by subject id:", error.message);
524
+ return {
525
+ status: EnumWebResponse.ERROR,
526
+ msg: error.message,
527
+ data: [],
528
+ };
529
+ }
530
+ return IWebResponse.success(data ?? []).to_compatible();
531
+ }
532
+ /** Per-subject aggregates for tags on an artifact (rows with subject_id only). Optional min_avg_conf / min_count / detection_models; max_elements caps subject rows (omit or null for no cap). */
533
+ export async function server_get_minimal_subjects_for_artifact(artifactId, options) {
534
+ const supabase = await newServerClient();
535
+ const { data, error } = await supabase.rpc("get_minimal_subjects_for_artifact", {
536
+ artifact_id_caller: artifactId,
537
+ ...(options?.min_avg_conf != null && {
538
+ min_avg_conf_caller: options.min_avg_conf,
539
+ }),
540
+ ...(options?.min_count != null && {
541
+ min_count_caller: options.min_count,
542
+ }),
543
+ ...rpcDetectorModelsParam(options?.detection_models),
544
+ ...(options?.max_elements != null && {
545
+ max_elements_caller: options.max_elements,
546
+ }),
547
+ });
548
+ if (error) {
549
+ console.warn("Error fetching minimal subjects for artifact:", error.message);
550
+ return {
551
+ status: EnumWebResponse.ERROR,
552
+ msg: error.message,
553
+ data: [],
554
+ };
555
+ }
556
+ return IWebResponse.success(data ?? []).to_compatible();
557
+ }
558
+ /** Tags for an event with optional timestamp range, detector filter, and max_elements (omit or null for no limit). */
559
+ export async function server_get_tags_for_event(eventId, options) {
560
+ const supabase = await newServerClient();
561
+ const { data, error } = await supabase.rpc("get_tags_for_event", {
562
+ event_id_caller: eventId,
563
+ ...(options?.start_timestamp != null && {
564
+ start_timestamp_caller: options.start_timestamp,
565
+ }),
566
+ ...(options?.end_timestamp != null && {
567
+ end_timestamp_caller: options.end_timestamp,
568
+ }),
569
+ ...rpcDetectorModelsParam(options?.detection_models),
570
+ ...(options?.max_elements != null && {
571
+ max_elements_caller: options.max_elements,
572
+ }),
573
+ });
574
+ if (error) {
575
+ console.warn("Error fetching tags for event:", error.message);
576
+ return {
577
+ status: EnumWebResponse.ERROR,
578
+ msg: error.message,
579
+ data: [],
580
+ };
581
+ }
582
+ return IWebResponse.success(data ?? []).to_compatible();
583
+ }
package/dist/index.d.ts CHANGED
@@ -28,6 +28,7 @@ export * from "./helpers/pins";
28
28
  export * from "./helpers/plans";
29
29
  export * from "./helpers/layers";
30
30
  export * from "./helpers/sessions";
31
+ export * from "./helpers/segmentations_sam3";
31
32
  export * from "./helpers/tags";
32
33
  export * from "./helpers/time";
33
34
  export * from "./helpers/ui";
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ export * from "./helpers/pins";
31
31
  export * from "./helpers/plans";
32
32
  export * from "./helpers/layers";
33
33
  export * from "./helpers/sessions";
34
+ export * from "./helpers/segmentations_sam3";
34
35
  export * from "./helpers/tags";
35
36
  export * from "./helpers/time";
36
37
  export * from "./helpers/ui";
@@ -302,6 +302,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
302
302
  associated_station: string | null;
303
303
  bandwidth_hz: number | null;
304
304
  battery_percentage: number | null;
305
+ battery_volts: number | null;
305
306
  device_id: number | null;
306
307
  frequency_hz: number | null;
307
308
  h11_index: string;
@@ -323,6 +324,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
323
324
  associated_station?: string | null;
324
325
  bandwidth_hz?: number | null;
325
326
  battery_percentage?: number | null;
327
+ battery_volts?: number | null;
326
328
  device_id?: number | null;
327
329
  frequency_hz?: number | null;
328
330
  h11_index: string;
@@ -344,6 +346,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
344
346
  associated_station?: string | null;
345
347
  bandwidth_hz?: number | null;
346
348
  battery_percentage?: number | null;
349
+ battery_volts?: number | null;
347
350
  device_id?: number | null;
348
351
  frequency_hz?: number | null;
349
352
  h11_index?: string;
@@ -1073,6 +1076,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
1073
1076
  segmentations_sam3: {
1074
1077
  Row: {
1075
1078
  artifact_id: number | null;
1079
+ conf: number | null;
1076
1080
  created_at: string;
1077
1081
  event_id: number | null;
1078
1082
  frame_index: number;
@@ -1087,11 +1091,13 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
1087
1091
  sensor_roll: number | null;
1088
1092
  sensor_yaw: number | null;
1089
1093
  subject_height: number | null;
1094
+ subject_id: number | null;
1090
1095
  subject_location: unknown;
1091
1096
  timestamp_observation: string | null;
1092
1097
  };
1093
1098
  Insert: {
1094
1099
  artifact_id?: number | null;
1100
+ conf?: number | null;
1095
1101
  created_at?: string;
1096
1102
  event_id?: number | null;
1097
1103
  frame_index?: number;
@@ -1106,11 +1112,13 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
1106
1112
  sensor_roll?: number | null;
1107
1113
  sensor_yaw?: number | null;
1108
1114
  subject_height?: number | null;
1115
+ subject_id?: number | null;
1109
1116
  subject_location?: unknown;
1110
1117
  timestamp_observation?: string | null;
1111
1118
  };
1112
1119
  Update: {
1113
1120
  artifact_id?: number | null;
1121
+ conf?: number | null;
1114
1122
  created_at?: string;
1115
1123
  event_id?: number | null;
1116
1124
  frame_index?: number;
@@ -1125,6 +1133,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
1125
1133
  sensor_roll?: number | null;
1126
1134
  sensor_yaw?: number | null;
1127
1135
  subject_height?: number | null;
1136
+ subject_id?: number | null;
1128
1137
  subject_location?: unknown;
1129
1138
  timestamp_observation?: string | null;
1130
1139
  };
@@ -2334,6 +2343,22 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2334
2343
  isSetofReturn: true;
2335
2344
  };
2336
2345
  };
2346
+ get_minimal_subjects_for_artifact: {
2347
+ Args: {
2348
+ artifact_id_caller: number;
2349
+ detector_models_caller?: string[];
2350
+ max_elements_caller?: number;
2351
+ min_avg_conf_caller?: number;
2352
+ min_count_caller?: number;
2353
+ };
2354
+ Returns: {
2355
+ avg_conf: number;
2356
+ first_tag_frame_index: number;
2357
+ last_tag_frame_index: number;
2358
+ num_tags: number;
2359
+ subject_id: number;
2360
+ }[];
2361
+ };
2337
2362
  get_pins_for_herd: {
2338
2363
  Args: {
2339
2364
  herd_id_caller: number;
@@ -2346,6 +2371,66 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2346
2371
  isSetofReturn: true;
2347
2372
  };
2348
2373
  };
2374
+ get_segmentations_sam3_for_artifact: {
2375
+ Args: {
2376
+ artifact_id_caller: number;
2377
+ end_timestamp_caller?: string;
2378
+ max_elements_caller?: number;
2379
+ start_timestamp_caller?: string;
2380
+ };
2381
+ Returns: Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"][];
2382
+ SetofOptions: {
2383
+ from: "*";
2384
+ to: "segmentations_sam3_pretty";
2385
+ isOneToOne: false;
2386
+ isSetofReturn: true;
2387
+ };
2388
+ };
2389
+ get_segmentations_sam3_for_artifact_by_frame_index: {
2390
+ Args: {
2391
+ artifact_id_caller: number;
2392
+ frame_index_end_caller: number;
2393
+ frame_index_start_caller: number;
2394
+ max_elements_caller?: number;
2395
+ min_conf_caller?: number;
2396
+ };
2397
+ Returns: Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"][];
2398
+ SetofOptions: {
2399
+ from: "*";
2400
+ to: "segmentations_sam3_pretty";
2401
+ isOneToOne: false;
2402
+ isSetofReturn: true;
2403
+ };
2404
+ };
2405
+ get_segmentations_sam3_for_artifact_by_subject_id: {
2406
+ Args: {
2407
+ artifact_id_caller: number;
2408
+ max_elements_caller?: number;
2409
+ subject_id_caller: number;
2410
+ };
2411
+ Returns: Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"][];
2412
+ SetofOptions: {
2413
+ from: "*";
2414
+ to: "segmentations_sam3_pretty";
2415
+ isOneToOne: false;
2416
+ isSetofReturn: true;
2417
+ };
2418
+ };
2419
+ get_segmentations_sam3_for_event: {
2420
+ Args: {
2421
+ end_timestamp_caller?: string;
2422
+ event_id_caller: number;
2423
+ max_elements_caller?: number;
2424
+ start_timestamp_caller?: string;
2425
+ };
2426
+ Returns: Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"][];
2427
+ SetofOptions: {
2428
+ from: "*";
2429
+ to: "segmentations_sam3_pretty";
2430
+ isOneToOne: false;
2431
+ isSetofReturn: true;
2432
+ };
2433
+ };
2349
2434
  get_session_by_id: {
2350
2435
  Args: {
2351
2436
  session_id_caller: number;
@@ -2441,6 +2526,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2441
2526
  get_tags_for_artifact: {
2442
2527
  Args: {
2443
2528
  artifact_id_caller: number;
2529
+ detector_models_caller?: string[];
2444
2530
  end_timestamp_caller?: string;
2445
2531
  max_elements_caller?: number;
2446
2532
  start_timestamp_caller?: string;
@@ -2453,6 +2539,54 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2453
2539
  isSetofReturn: true;
2454
2540
  };
2455
2541
  };
2542
+ get_tags_for_artifact_by_frame_index: {
2543
+ Args: {
2544
+ artifact_id_caller: number;
2545
+ detector_models_caller?: string[];
2546
+ frame_index_end_caller: number;
2547
+ frame_index_start_caller: number;
2548
+ max_elements_caller?: number;
2549
+ min_conf_caller: number;
2550
+ };
2551
+ Returns: Database["public"]["CompositeTypes"]["tags_pretty_location"][];
2552
+ SetofOptions: {
2553
+ from: "*";
2554
+ to: "tags_pretty_location";
2555
+ isOneToOne: false;
2556
+ isSetofReturn: true;
2557
+ };
2558
+ };
2559
+ get_tags_for_artifact_by_subject_id: {
2560
+ Args: {
2561
+ artifact_id_caller: number;
2562
+ detector_models_caller?: string[];
2563
+ max_elements_caller?: number;
2564
+ subject_id_caller: number;
2565
+ };
2566
+ Returns: Database["public"]["CompositeTypes"]["tags_pretty_location"][];
2567
+ SetofOptions: {
2568
+ from: "*";
2569
+ to: "tags_pretty_location";
2570
+ isOneToOne: false;
2571
+ isSetofReturn: true;
2572
+ };
2573
+ };
2574
+ get_tags_for_event: {
2575
+ Args: {
2576
+ detector_models_caller?: string[];
2577
+ end_timestamp_caller?: string;
2578
+ event_id_caller: number;
2579
+ max_elements_caller?: number;
2580
+ start_timestamp_caller?: string;
2581
+ };
2582
+ Returns: Database["public"]["CompositeTypes"]["tags_pretty_location"][];
2583
+ SetofOptions: {
2584
+ from: "*";
2585
+ to: "tags_pretty_location";
2586
+ isOneToOne: false;
2587
+ isSetofReturn: true;
2588
+ };
2589
+ };
2456
2590
  get_total_artifacts_for_herd: {
2457
2591
  Args: {
2458
2592
  herd_id_caller: number;
@@ -2647,6 +2781,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2647
2781
  bandwidth_hz: number | null;
2648
2782
  associated_station: string | null;
2649
2783
  mode: string | null;
2784
+ battery_volts: number | null;
2650
2785
  };
2651
2786
  device_heartbeat_analysis: {
2652
2787
  device_id: number | null;
@@ -2790,6 +2925,31 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2790
2925
  latitude: number | null;
2791
2926
  longitude: number | null;
2792
2927
  };
2928
+ segmentations_sam3_pretty: {
2929
+ id: number | null;
2930
+ created_at: string | null;
2931
+ event_id: number | null;
2932
+ artifact_id: number | null;
2933
+ frame_index: number | null;
2934
+ mask_rle: import("../types/supabase").Json | null;
2935
+ conf: number | null;
2936
+ timestamp_observation: string | null;
2937
+ origin_location: unknown;
2938
+ origin_pitch: number | null;
2939
+ origin_heading: number | null;
2940
+ origin_roll: number | null;
2941
+ sensor_pitch: number | null;
2942
+ sensor_yaw: number | null;
2943
+ sensor_roll: number | null;
2944
+ origin_height: number | null;
2945
+ subject_location: unknown;
2946
+ subject_height: number | null;
2947
+ origin_latitude: number | null;
2948
+ origin_longitude: number | null;
2949
+ subject_latitude: number | null;
2950
+ subject_longitude: number | null;
2951
+ subject_id: number | null;
2952
+ };
2793
2953
  session_with_coordinates: {
2794
2954
  id: number | null;
2795
2955
  device_id: number | null;
@@ -15,6 +15,8 @@ export type IPin = Database["public"]["CompositeTypes"]["pins_pretty_location"];
15
15
  export type IEvent = Database["public"]["Tables"]["events"]["Row"];
16
16
  export type ITag = Database["public"]["Tables"]["tags"]["Row"];
17
17
  export type ITagPrettyLocation = Database["public"]["CompositeTypes"]["tags_pretty_location"];
18
+ export type ISegmentationSam3 = Database["public"]["Tables"]["segmentations_sam3"]["Row"];
19
+ export type ISegmentationSam3Pretty = Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"];
18
20
  export type IPlan = Database["public"]["Tables"]["plans"]["Row"];
19
21
  export type ILayer = Database["public"]["Tables"]["layers"]["Row"];
20
22
  export type IAction = Database["public"]["Tables"]["actions"]["Row"];
@@ -32,6 +34,7 @@ export type IVersionsSoftware = Database["public"]["Tables"]["versions_software"
32
34
  export type IArtifact = Database["public"]["Tables"]["artifacts"]["Row"];
33
35
  export type IHealthMetric = Database["public"]["Tables"]["health_metrics"]["Row"];
34
36
  export type IHealthMetricSummaryRow = Database["public"]["Functions"]["get_health_metrics_summary"]["Returns"][number];
37
+ export type IMinimalSubjectForArtifact = Database["public"]["Functions"]["get_minimal_subjects_for_artifact"]["Returns"][number];
35
38
  export type IAnalysisJob = Database["public"]["Tables"]["analysis_jobs"]["Row"];
36
39
  export type IAnalysisTask = Database["public"]["Tables"]["analysis_tasks"]["Row"];
37
40
  export type IArtifactWithMediaUrl = IArtifact & {
@@ -315,6 +315,7 @@ export type Database = {
315
315
  associated_station: string | null;
316
316
  bandwidth_hz: number | null;
317
317
  battery_percentage: number | null;
318
+ battery_volts: number | null;
318
319
  device_id: number | null;
319
320
  frequency_hz: number | null;
320
321
  h11_index: string;
@@ -336,6 +337,7 @@ export type Database = {
336
337
  associated_station?: string | null;
337
338
  bandwidth_hz?: number | null;
338
339
  battery_percentage?: number | null;
340
+ battery_volts?: number | null;
339
341
  device_id?: number | null;
340
342
  frequency_hz?: number | null;
341
343
  h11_index: string;
@@ -357,6 +359,7 @@ export type Database = {
357
359
  associated_station?: string | null;
358
360
  bandwidth_hz?: number | null;
359
361
  battery_percentage?: number | null;
362
+ battery_volts?: number | null;
360
363
  device_id?: number | null;
361
364
  frequency_hz?: number | null;
362
365
  h11_index?: string;
@@ -1129,6 +1132,7 @@ export type Database = {
1129
1132
  segmentations_sam3: {
1130
1133
  Row: {
1131
1134
  artifact_id: number | null;
1135
+ conf: number | null;
1132
1136
  created_at: string;
1133
1137
  event_id: number | null;
1134
1138
  frame_index: number;
@@ -1143,11 +1147,13 @@ export type Database = {
1143
1147
  sensor_roll: number | null;
1144
1148
  sensor_yaw: number | null;
1145
1149
  subject_height: number | null;
1150
+ subject_id: number | null;
1146
1151
  subject_location: unknown;
1147
1152
  timestamp_observation: string | null;
1148
1153
  };
1149
1154
  Insert: {
1150
1155
  artifact_id?: number | null;
1156
+ conf?: number | null;
1151
1157
  created_at?: string;
1152
1158
  event_id?: number | null;
1153
1159
  frame_index?: number;
@@ -1162,11 +1168,13 @@ export type Database = {
1162
1168
  sensor_roll?: number | null;
1163
1169
  sensor_yaw?: number | null;
1164
1170
  subject_height?: number | null;
1171
+ subject_id?: number | null;
1165
1172
  subject_location?: unknown;
1166
1173
  timestamp_observation?: string | null;
1167
1174
  };
1168
1175
  Update: {
1169
1176
  artifact_id?: number | null;
1177
+ conf?: number | null;
1170
1178
  created_at?: string;
1171
1179
  event_id?: number | null;
1172
1180
  frame_index?: number;
@@ -1181,6 +1189,7 @@ export type Database = {
1181
1189
  sensor_roll?: number | null;
1182
1190
  sensor_yaw?: number | null;
1183
1191
  subject_height?: number | null;
1192
+ subject_id?: number | null;
1184
1193
  subject_location?: unknown;
1185
1194
  timestamp_observation?: string | null;
1186
1195
  };
@@ -2419,6 +2428,22 @@ export type Database = {
2419
2428
  isSetofReturn: true;
2420
2429
  };
2421
2430
  };
2431
+ get_minimal_subjects_for_artifact: {
2432
+ Args: {
2433
+ artifact_id_caller: number;
2434
+ detector_models_caller?: string[];
2435
+ max_elements_caller?: number;
2436
+ min_avg_conf_caller?: number;
2437
+ min_count_caller?: number;
2438
+ };
2439
+ Returns: {
2440
+ avg_conf: number;
2441
+ first_tag_frame_index: number;
2442
+ last_tag_frame_index: number;
2443
+ num_tags: number;
2444
+ subject_id: number;
2445
+ }[];
2446
+ };
2422
2447
  get_pins_for_herd: {
2423
2448
  Args: {
2424
2449
  herd_id_caller: number;
@@ -2431,6 +2456,66 @@ export type Database = {
2431
2456
  isSetofReturn: true;
2432
2457
  };
2433
2458
  };
2459
+ get_segmentations_sam3_for_artifact: {
2460
+ Args: {
2461
+ artifact_id_caller: number;
2462
+ end_timestamp_caller?: string;
2463
+ max_elements_caller?: number;
2464
+ start_timestamp_caller?: string;
2465
+ };
2466
+ Returns: Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"][];
2467
+ SetofOptions: {
2468
+ from: "*";
2469
+ to: "segmentations_sam3_pretty";
2470
+ isOneToOne: false;
2471
+ isSetofReturn: true;
2472
+ };
2473
+ };
2474
+ get_segmentations_sam3_for_artifact_by_frame_index: {
2475
+ Args: {
2476
+ artifact_id_caller: number;
2477
+ frame_index_end_caller: number;
2478
+ frame_index_start_caller: number;
2479
+ max_elements_caller?: number;
2480
+ min_conf_caller?: number;
2481
+ };
2482
+ Returns: Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"][];
2483
+ SetofOptions: {
2484
+ from: "*";
2485
+ to: "segmentations_sam3_pretty";
2486
+ isOneToOne: false;
2487
+ isSetofReturn: true;
2488
+ };
2489
+ };
2490
+ get_segmentations_sam3_for_artifact_by_subject_id: {
2491
+ Args: {
2492
+ artifact_id_caller: number;
2493
+ max_elements_caller?: number;
2494
+ subject_id_caller: number;
2495
+ };
2496
+ Returns: Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"][];
2497
+ SetofOptions: {
2498
+ from: "*";
2499
+ to: "segmentations_sam3_pretty";
2500
+ isOneToOne: false;
2501
+ isSetofReturn: true;
2502
+ };
2503
+ };
2504
+ get_segmentations_sam3_for_event: {
2505
+ Args: {
2506
+ end_timestamp_caller?: string;
2507
+ event_id_caller: number;
2508
+ max_elements_caller?: number;
2509
+ start_timestamp_caller?: string;
2510
+ };
2511
+ Returns: Database["public"]["CompositeTypes"]["segmentations_sam3_pretty"][];
2512
+ SetofOptions: {
2513
+ from: "*";
2514
+ to: "segmentations_sam3_pretty";
2515
+ isOneToOne: false;
2516
+ isSetofReturn: true;
2517
+ };
2518
+ };
2434
2519
  get_session_by_id: {
2435
2520
  Args: {
2436
2521
  session_id_caller: number;
@@ -2526,6 +2611,7 @@ export type Database = {
2526
2611
  get_tags_for_artifact: {
2527
2612
  Args: {
2528
2613
  artifact_id_caller: number;
2614
+ detector_models_caller?: string[];
2529
2615
  end_timestamp_caller?: string;
2530
2616
  max_elements_caller?: number;
2531
2617
  start_timestamp_caller?: string;
@@ -2538,6 +2624,54 @@ export type Database = {
2538
2624
  isSetofReturn: true;
2539
2625
  };
2540
2626
  };
2627
+ get_tags_for_artifact_by_frame_index: {
2628
+ Args: {
2629
+ artifact_id_caller: number;
2630
+ detector_models_caller?: string[];
2631
+ frame_index_end_caller: number;
2632
+ frame_index_start_caller: number;
2633
+ max_elements_caller?: number;
2634
+ min_conf_caller: number;
2635
+ };
2636
+ Returns: Database["public"]["CompositeTypes"]["tags_pretty_location"][];
2637
+ SetofOptions: {
2638
+ from: "*";
2639
+ to: "tags_pretty_location";
2640
+ isOneToOne: false;
2641
+ isSetofReturn: true;
2642
+ };
2643
+ };
2644
+ get_tags_for_artifact_by_subject_id: {
2645
+ Args: {
2646
+ artifact_id_caller: number;
2647
+ detector_models_caller?: string[];
2648
+ max_elements_caller?: number;
2649
+ subject_id_caller: number;
2650
+ };
2651
+ Returns: Database["public"]["CompositeTypes"]["tags_pretty_location"][];
2652
+ SetofOptions: {
2653
+ from: "*";
2654
+ to: "tags_pretty_location";
2655
+ isOneToOne: false;
2656
+ isSetofReturn: true;
2657
+ };
2658
+ };
2659
+ get_tags_for_event: {
2660
+ Args: {
2661
+ detector_models_caller?: string[];
2662
+ end_timestamp_caller?: string;
2663
+ event_id_caller: number;
2664
+ max_elements_caller?: number;
2665
+ start_timestamp_caller?: string;
2666
+ };
2667
+ Returns: Database["public"]["CompositeTypes"]["tags_pretty_location"][];
2668
+ SetofOptions: {
2669
+ from: "*";
2670
+ to: "tags_pretty_location";
2671
+ isOneToOne: false;
2672
+ isSetofReturn: true;
2673
+ };
2674
+ };
2541
2675
  get_total_artifacts_for_herd: {
2542
2676
  Args: {
2543
2677
  herd_id_caller: number;
@@ -2732,6 +2866,7 @@ export type Database = {
2732
2866
  bandwidth_hz: number | null;
2733
2867
  associated_station: string | null;
2734
2868
  mode: string | null;
2869
+ battery_volts: number | null;
2735
2870
  };
2736
2871
  device_heartbeat_analysis: {
2737
2872
  device_id: number | null;
@@ -2875,6 +3010,31 @@ export type Database = {
2875
3010
  latitude: number | null;
2876
3011
  longitude: number | null;
2877
3012
  };
3013
+ segmentations_sam3_pretty: {
3014
+ id: number | null;
3015
+ created_at: string | null;
3016
+ event_id: number | null;
3017
+ artifact_id: number | null;
3018
+ frame_index: number | null;
3019
+ mask_rle: Json | null;
3020
+ conf: number | null;
3021
+ timestamp_observation: string | null;
3022
+ origin_location: unknown;
3023
+ origin_pitch: number | null;
3024
+ origin_heading: number | null;
3025
+ origin_roll: number | null;
3026
+ sensor_pitch: number | null;
3027
+ sensor_yaw: number | null;
3028
+ sensor_roll: number | null;
3029
+ origin_height: number | null;
3030
+ subject_location: unknown;
3031
+ subject_height: number | null;
3032
+ origin_latitude: number | null;
3033
+ origin_longitude: number | null;
3034
+ subject_latitude: number | null;
3035
+ subject_longitude: number | null;
3036
+ subject_id: number | null;
3037
+ };
2878
3038
  session_with_coordinates: {
2879
3039
  id: number | null;
2880
3040
  device_id: number | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adventurelabs/scout-core",
3
- "version": "1.4.46",
3
+ "version": "1.4.48",
4
4
  "description": "Core utilities and helpers for Adventure Labs Scout applications",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",