@adventurelabs/scout-core 1.4.55 → 1.4.57

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.
@@ -10,6 +10,7 @@ export declare function server_update_event(events: (EventUpdate & {
10
10
  }) | (EventUpdate & {
11
11
  id: number;
12
12
  })[], client?: SupabaseClient): Promise<IWebResponseCompatible<IEvent[]>>;
13
+ export declare function server_delete_event(id: number | number[], client?: SupabaseClient): Promise<IWebResponseCompatible<boolean>>;
13
14
  /** Semantic search over events using Vertex multimodal embedding (embedding_vertex_mm_01). */
14
15
  export declare function server_match_events_by_vertex_embedding(query_embedding: number[], match_threshold: number, match_count: number, options?: {
15
16
  herd_id?: number | null;
@@ -94,6 +94,15 @@ export async function server_update_event(events, client) {
94
94
  }
95
95
  return IWebResponse.success(updatedEvents).to_compatible();
96
96
  }
97
+ export async function server_delete_event(id, client) {
98
+ const supabase = client || (await newServerClient());
99
+ const ids = Array.isArray(id) ? id : [id];
100
+ const { error } = await supabase.from("events").delete().in("id", ids);
101
+ if (error) {
102
+ return IWebResponse.error(error.message).to_compatible();
103
+ }
104
+ return IWebResponse.success(true).to_compatible();
105
+ }
97
106
  /** Semantic search over events using Vertex multimodal embedding (embedding_vertex_mm_01). */
98
107
  export async function server_match_events_by_vertex_embedding(query_embedding, match_threshold, match_count, options) {
99
108
  const supabase = options?.client ?? (await newServerClient());
@@ -1,6 +1,6 @@
1
1
  import { ISessionSummary } from "../types/db";
2
2
  import { IWebResponseCompatible } from "../types/requests";
3
3
  import { SupabaseClient } from "@supabase/supabase-js";
4
- export declare function server_get_session_summaries_by_herd(herd_id: number, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number): Promise<IWebResponseCompatible<ISessionSummary>>;
5
- export declare function server_get_session_summaries_by_device(device_id: number, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number): Promise<IWebResponseCompatible<ISessionSummary>>;
6
- export declare function server_get_session_summaries_with_filters(herd_id?: number, device_id?: number, start_date?: string, end_date?: string, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number): Promise<IWebResponseCompatible<ISessionSummary>>;
4
+ export declare function server_get_session_summaries_by_herd(herd_id: number, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number, product_numbers_caller?: string[]): Promise<IWebResponseCompatible<ISessionSummary>>;
5
+ export declare function server_get_session_summaries_by_device(device_id: number, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number, product_numbers_caller?: string[]): Promise<IWebResponseCompatible<ISessionSummary>>;
6
+ export declare function server_get_session_summaries_with_filters(herd_id?: number, device_id?: number, start_date?: string, end_date?: string, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number, product_numbers_caller?: string[]): Promise<IWebResponseCompatible<ISessionSummary>>;
@@ -1,7 +1,7 @@
1
1
  "use server";
2
2
  import { newServerClient } from "../supabase/server";
3
3
  import { IWebResponse, } from "../types/requests";
4
- export async function server_get_session_summaries_by_herd(herd_id, client, min_duration_minutes_caller, min_distance_meters_caller) {
4
+ export async function server_get_session_summaries_by_herd(herd_id, client, min_duration_minutes_caller, min_distance_meters_caller, product_numbers_caller) {
5
5
  const supabase = client || (await newServerClient());
6
6
  const { data, error } = await supabase.rpc("get_session_summaries", {
7
7
  start_date_caller: undefined,
@@ -10,6 +10,7 @@ export async function server_get_session_summaries_by_herd(herd_id, client, min_
10
10
  herd_id_caller: herd_id,
11
11
  min_duration_minutes_caller,
12
12
  min_distance_meters_caller,
13
+ product_numbers_caller,
13
14
  });
14
15
  if (error) {
15
16
  return IWebResponse.error(error.message).to_compatible();
@@ -19,7 +20,7 @@ export async function server_get_session_summaries_by_herd(herd_id, client, min_
19
20
  }
20
21
  return IWebResponse.success(data).to_compatible();
21
22
  }
22
- export async function server_get_session_summaries_by_device(device_id, client, min_duration_minutes_caller, min_distance_meters_caller) {
23
+ export async function server_get_session_summaries_by_device(device_id, client, min_duration_minutes_caller, min_distance_meters_caller, product_numbers_caller) {
23
24
  const supabase = client || (await newServerClient());
24
25
  const { data, error } = await supabase.rpc("get_session_summaries", {
25
26
  start_date_caller: undefined,
@@ -28,6 +29,7 @@ export async function server_get_session_summaries_by_device(device_id, client,
28
29
  herd_id_caller: undefined,
29
30
  min_duration_minutes_caller,
30
31
  min_distance_meters_caller,
32
+ product_numbers_caller,
31
33
  });
32
34
  if (error) {
33
35
  return IWebResponse.error(error.message).to_compatible();
@@ -37,7 +39,7 @@ export async function server_get_session_summaries_by_device(device_id, client,
37
39
  }
38
40
  return IWebResponse.success(data).to_compatible();
39
41
  }
40
- export async function server_get_session_summaries_with_filters(herd_id, device_id, start_date, end_date, client, min_duration_minutes_caller, min_distance_meters_caller) {
42
+ export async function server_get_session_summaries_with_filters(herd_id, device_id, start_date, end_date, client, min_duration_minutes_caller, min_distance_meters_caller, product_numbers_caller) {
41
43
  const supabase = client || (await newServerClient());
42
44
  const { data, error } = await supabase.rpc("get_session_summaries", {
43
45
  start_date_caller: start_date || undefined,
@@ -46,6 +48,7 @@ export async function server_get_session_summaries_with_filters(herd_id, device_
46
48
  herd_id_caller: herd_id || undefined,
47
49
  min_duration_minutes_caller,
48
50
  min_distance_meters_caller,
51
+ product_numbers_caller,
49
52
  });
50
53
  if (error) {
51
54
  return IWebResponse.error(error.message).to_compatible();
@@ -2,8 +2,8 @@ import { ISessionWithCoordinates, ISessionUsageOverTime, IEventAndTagsPrettyLoca
2
2
  import { IWebResponseCompatible } from "../types/requests";
3
3
  import { SupabaseClient } from "@supabase/supabase-js";
4
4
  export declare function server_get_session_by_id(sessionId: number, client?: SupabaseClient): Promise<IWebResponseCompatible<ISessionWithCoordinates | null>>;
5
- export declare function server_get_session_usage_over_time_by_herd(herd_id: number, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number): Promise<IWebResponseCompatible<ISessionUsageOverTime>>;
6
- export declare function server_get_session_usage_over_time_by_device(device_id: number, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number): Promise<IWebResponseCompatible<ISessionUsageOverTime>>;
5
+ export declare function server_get_session_usage_over_time_by_herd(herd_id: number, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number, product_numbers_caller?: string[]): Promise<IWebResponseCompatible<ISessionUsageOverTime>>;
6
+ export declare function server_get_session_usage_over_time_by_device(device_id: number, client?: SupabaseClient, min_duration_minutes_caller?: number, min_distance_meters_caller?: number, product_numbers_caller?: string[]): Promise<IWebResponseCompatible<ISessionUsageOverTime>>;
7
7
  export declare function server_get_events_and_tags_by_session_id(sessionId: number, limit?: number, offset?: number): Promise<IWebResponseCompatible<IEventAndTagsPrettyLocation[]>>;
8
8
  export declare function server_insert_session(sessions: SessionInsert | SessionInsert[], client?: SupabaseClient): Promise<IWebResponseCompatible<ISession[]>>;
9
9
  export declare function server_update_session(sessions: (SessionUpdate & {
@@ -21,7 +21,7 @@ export async function server_get_session_by_id(sessionId, client) {
21
21
  return IWebResponse.success(session).to_compatible();
22
22
  }
23
23
  // Get session usage over time by herd
24
- export async function server_get_session_usage_over_time_by_herd(herd_id, client, min_duration_minutes_caller, min_distance_meters_caller) {
24
+ export async function server_get_session_usage_over_time_by_herd(herd_id, client, min_duration_minutes_caller, min_distance_meters_caller, product_numbers_caller) {
25
25
  const supabase = client || (await newServerClient());
26
26
  const { data, error } = await supabase.rpc("get_session_usage_over_time", {
27
27
  start_date_caller: undefined,
@@ -30,6 +30,7 @@ export async function server_get_session_usage_over_time_by_herd(herd_id, client
30
30
  herd_id_caller: herd_id,
31
31
  min_duration_minutes_caller,
32
32
  min_distance_meters_caller,
33
+ product_numbers_caller,
33
34
  });
34
35
  if (error) {
35
36
  return IWebResponse.error(error.message).to_compatible();
@@ -40,7 +41,7 @@ export async function server_get_session_usage_over_time_by_herd(herd_id, client
40
41
  return IWebResponse.success(data).to_compatible();
41
42
  }
42
43
  // Get session usage over time by device
43
- export async function server_get_session_usage_over_time_by_device(device_id, client, min_duration_minutes_caller, min_distance_meters_caller) {
44
+ export async function server_get_session_usage_over_time_by_device(device_id, client, min_duration_minutes_caller, min_distance_meters_caller, product_numbers_caller) {
44
45
  const supabase = client || (await newServerClient());
45
46
  const { data, error } = await supabase.rpc("get_session_usage_over_time", {
46
47
  start_date_caller: undefined,
@@ -49,6 +50,7 @@ export async function server_get_session_usage_over_time_by_device(device_id, cl
49
50
  herd_id_caller: undefined,
50
51
  min_duration_minutes_caller,
51
52
  min_distance_meters_caller,
53
+ product_numbers_caller,
52
54
  });
53
55
  if (error) {
54
56
  return IWebResponse.error(error.message).to_compatible();
@@ -0,0 +1,11 @@
1
+ import { SupabaseClient } from "@supabase/supabase-js";
2
+ import { Database } from "../types/supabase";
3
+ /**
4
+ * Creates one browser Supabase client (reads NEXT_PUBLIC_* env each call).
5
+ * Prefer {@link useScoutBrowserClient} in components so creation runs once via lazy state init.
6
+ */
7
+ export declare function createScoutBrowserClient(): SupabaseClient<Database>;
8
+ /**
9
+ * One browser Supabase client per component instance, created on first render (lazy state initializer).
10
+ */
11
+ export declare function useScoutBrowserClient(): SupabaseClient<Database>;
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { useState } from "react";
3
+ import { createBrowserClient } from "@supabase/ssr";
4
+ /**
5
+ * Creates one browser Supabase client (reads NEXT_PUBLIC_* env each call).
6
+ * Prefer {@link useScoutBrowserClient} in components so creation runs once via lazy state init.
7
+ */
8
+ export function createScoutBrowserClient() {
9
+ return createBrowserClient(process.env.NEXT_PUBLIC_SUPABASE_URL || "", process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY || "");
10
+ }
11
+ /**
12
+ * One browser Supabase client per component instance, created on first render (lazy state initializer).
13
+ */
14
+ export function useScoutBrowserClient() {
15
+ const [client] = useState(createScoutBrowserClient);
16
+ return client;
17
+ }
@@ -2463,6 +2463,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2463
2463
  herd_id_caller?: number;
2464
2464
  min_distance_meters_caller?: number;
2465
2465
  min_duration_minutes_caller?: number;
2466
+ product_numbers_caller?: string[];
2466
2467
  start_date_caller?: string;
2467
2468
  };
2468
2469
  Returns: import("../types/supabase").Json;
@@ -2474,6 +2475,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2474
2475
  herd_id_caller?: number;
2475
2476
  min_distance_meters_caller?: number;
2476
2477
  min_duration_minutes_caller?: number;
2478
+ product_numbers_caller?: string[];
2477
2479
  start_date_caller?: string;
2478
2480
  };
2479
2481
  Returns: import("../types/supabase").Json;
@@ -2486,6 +2488,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2486
2488
  limit_caller?: number;
2487
2489
  min_flight_distance_meters?: number;
2488
2490
  min_flight_time_minutes?: number;
2491
+ product_numbers_caller?: string[];
2489
2492
  range_end?: string;
2490
2493
  range_start?: string;
2491
2494
  };
@@ -2505,6 +2508,7 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2505
2508
  limit_caller?: number;
2506
2509
  min_flight_distance_meters?: number;
2507
2510
  min_flight_time_minutes?: number;
2511
+ product_numbers_caller?: string[];
2508
2512
  range_end?: string;
2509
2513
  range_start?: string;
2510
2514
  };
@@ -15,6 +15,11 @@ export interface InfiniteQueryArgs {
15
15
  minFlightTimeMinutes?: number | null;
16
16
  /** Sessions RPC only: minimum distance_total in meters. */
17
17
  minFlightDistanceMeters?: number | null;
18
+ /**
19
+ * Sessions infinite RPCs only: filter to devices with a matching non-deleted part.
20
+ * Omitted/null = no filter; empty array = no sessions.
21
+ */
22
+ productNumbers?: string[] | null;
18
23
  }
19
24
  export interface SessionsInfiniteResponse {
20
25
  sessions: ISessionWithCoordinates[];
package/dist/store/api.js CHANGED
@@ -16,7 +16,7 @@ export const scoutApi = createApi({
16
16
  // =====================================================
17
17
  getSessionsInfiniteByHerd: builder.query({
18
18
  serializeQueryArgs,
19
- async queryFn({ herdId, limit = 20, cursor, rangeStart, rangeEnd, minFlightTimeMinutes, minFlightDistanceMeters, supabase, }) {
19
+ async queryFn({ herdId, limit = 20, cursor, rangeStart, rangeEnd, minFlightTimeMinutes, minFlightDistanceMeters, productNumbers, supabase, }) {
20
20
  try {
21
21
  if (!herdId) {
22
22
  return {
@@ -32,6 +32,7 @@ export const scoutApi = createApi({
32
32
  range_end: rangeEnd ?? null,
33
33
  min_flight_time_minutes: minFlightTimeMinutes ?? null,
34
34
  min_flight_distance_meters: minFlightDistanceMeters ?? null,
35
+ product_numbers_caller: productNumbers ?? undefined,
35
36
  });
36
37
  if (error) {
37
38
  return {
@@ -72,7 +73,7 @@ export const scoutApi = createApi({
72
73
  }),
73
74
  getSessionsInfiniteByDevice: builder.query({
74
75
  serializeQueryArgs,
75
- async queryFn({ deviceId, limit = 20, cursor, rangeStart, rangeEnd, minFlightTimeMinutes, minFlightDistanceMeters, supabase, }) {
76
+ async queryFn({ deviceId, limit = 20, cursor, rangeStart, rangeEnd, minFlightTimeMinutes, minFlightDistanceMeters, productNumbers, supabase, }) {
76
77
  try {
77
78
  if (!deviceId) {
78
79
  return {
@@ -88,6 +89,7 @@ export const scoutApi = createApi({
88
89
  range_end: rangeEnd ?? null,
89
90
  min_flight_time_minutes: minFlightTimeMinutes ?? null,
90
91
  min_flight_distance_meters: minFlightDistanceMeters ?? null,
92
+ product_numbers_caller: productNumbers ?? undefined,
91
93
  });
92
94
  if (error) {
93
95
  return {
@@ -64,6 +64,7 @@ export interface ISessionSummary {
64
64
  herd_id: number | null;
65
65
  min_duration_minutes: number | null;
66
66
  min_distance_meters: number | null;
67
+ product_numbers: string[] | null;
67
68
  };
68
69
  }
69
70
  export type ISessionUsageOverTime = Database["public"]["Functions"]["get_session_usage_over_time"]["Returns"];
@@ -2548,6 +2548,7 @@ export type Database = {
2548
2548
  herd_id_caller?: number;
2549
2549
  min_distance_meters_caller?: number;
2550
2550
  min_duration_minutes_caller?: number;
2551
+ product_numbers_caller?: string[];
2551
2552
  start_date_caller?: string;
2552
2553
  };
2553
2554
  Returns: Json;
@@ -2559,6 +2560,7 @@ export type Database = {
2559
2560
  herd_id_caller?: number;
2560
2561
  min_distance_meters_caller?: number;
2561
2562
  min_duration_minutes_caller?: number;
2563
+ product_numbers_caller?: string[];
2562
2564
  start_date_caller?: string;
2563
2565
  };
2564
2566
  Returns: Json;
@@ -2571,6 +2573,7 @@ export type Database = {
2571
2573
  limit_caller?: number;
2572
2574
  min_flight_distance_meters?: number;
2573
2575
  min_flight_time_minutes?: number;
2576
+ product_numbers_caller?: string[];
2574
2577
  range_end?: string;
2575
2578
  range_start?: string;
2576
2579
  };
@@ -2590,6 +2593,7 @@ export type Database = {
2590
2593
  limit_caller?: number;
2591
2594
  min_flight_distance_meters?: number;
2592
2595
  min_flight_time_minutes?: number;
2596
+ product_numbers_caller?: string[];
2593
2597
  range_end?: string;
2594
2598
  range_start?: string;
2595
2599
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adventurelabs/scout-core",
3
- "version": "1.4.55",
3
+ "version": "1.4.57",
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",