@adventurelabs/scout-core 1.4.71 → 1.4.73

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.
@@ -1,4 +1,7 @@
1
1
  import { SupabaseClient } from "@supabase/supabase-js";
2
2
  import { Database } from "../types/supabase";
3
+ import { IWebResponseCompatible } from "../types/requests";
4
+ /** Deprecated */
3
5
  export declare function isEmailValidForLogin(email: string, approved_domains?: string[]): boolean;
4
6
  export declare function isCurrentUserPlatformSuperadmin(client: SupabaseClient<Database>): Promise<boolean>;
7
+ export declare function is_scout_email_valid(client: SupabaseClient<Database>, email: string): Promise<IWebResponseCompatible<boolean>>;
@@ -1,8 +1,11 @@
1
1
  import { validateEmail } from "./email";
2
+ import { IWebResponse } from "../types/requests";
2
3
  const APPROVED_DOMAINS = ["adventurelabs.earth", "conservaition.ai"];
4
+ /** Deprecated */
3
5
  export function isEmailValidForLogin(email, approved_domains = APPROVED_DOMAINS) {
4
6
  return (validateEmail(email) && isEmailFromApprovedDomain(email, approved_domains));
5
7
  }
8
+ /** Deprecated */
6
9
  function isEmailFromApprovedDomain(email, approved_domains = APPROVED_DOMAINS) {
7
10
  return approved_domains.filter((domain) => email.endsWith(domain)).length > 0;
8
11
  }
@@ -14,3 +17,12 @@ export async function isCurrentUserPlatformSuperadmin(client) {
14
17
  }
15
18
  return data === true;
16
19
  }
20
+ export async function is_scout_email_valid(client, email) {
21
+ const { data, error } = await client.rpc("is_scout_email_valid", {
22
+ p_email: email,
23
+ });
24
+ if (error) {
25
+ return IWebResponse.error(error.message).to_compatible();
26
+ }
27
+ return IWebResponse.success(data ?? false).to_compatible();
28
+ }
@@ -1,8 +1,10 @@
1
1
  import { Database } from "../types/supabase";
2
- import { IHerdInvitation, Role } from "../types/db";
2
+ import { IHerdInvitation, IHerdInvitationWithHerdSlug, Role } from "../types/db";
3
3
  import { IWebResponseCompatible } from "../types/requests";
4
4
  import { SupabaseClient } from "@supabase/supabase-js";
5
5
  export declare function server_create_herd_invitation(herd_id: number, email: string, role: Role, expires_at?: string | null): Promise<IWebResponseCompatible<IHerdInvitation | null>>;
6
6
  export declare function accept_herd_invitations_for_current_user(invitation_ids: number[], supabaseClient?: SupabaseClient<Database>): Promise<IWebResponseCompatible<IHerdInvitation[]>>;
7
- export declare function server_get_herd_invitations_for_current_user(): Promise<IWebResponseCompatible<IHerdInvitation[]>>;
7
+ export declare function server_get_herd_invitations_for_current_user(): Promise<IWebResponseCompatible<IHerdInvitationWithHerdSlug[]>>;
8
8
  export declare function server_get_herd_invitations_by_herd(herd_id: number, supabaseClient?: SupabaseClient<Database>): Promise<IWebResponseCompatible<IHerdInvitation[]>>;
9
+ export declare function reject_herd_invitations_for_current_user(invitation_ids: number[], supabaseClient?: SupabaseClient<Database>): Promise<IWebResponseCompatible<IHerdInvitation[]>>;
10
+ export declare function server_revoke_herd_invitations(invitation_ids: number[], supabaseClient?: SupabaseClient<Database>): Promise<IWebResponseCompatible<IHerdInvitation[]>>;
@@ -45,3 +45,27 @@ export async function server_get_herd_invitations_by_herd(herd_id, supabaseClien
45
45
  }
46
46
  return IWebResponse.success(data ?? []).to_compatible();
47
47
  }
48
+ export async function reject_herd_invitations_for_current_user(invitation_ids, supabaseClient) {
49
+ if (invitation_ids.length === 0) {
50
+ return IWebResponse.error("At least one invitation id is required").to_compatible();
51
+ }
52
+ const supabase = supabaseClient ?? (await newServerClient());
53
+ const { data, error } = await supabase.rpc("reject_herd_invitations_for_current_user", { p_invitation_ids: invitation_ids });
54
+ if (error) {
55
+ return IWebResponse.error(error.message).to_compatible();
56
+ }
57
+ return IWebResponse.success(data ?? []).to_compatible();
58
+ }
59
+ export async function server_revoke_herd_invitations(invitation_ids, supabaseClient) {
60
+ if (invitation_ids.length === 0) {
61
+ return IWebResponse.error("At least one invitation id is required").to_compatible();
62
+ }
63
+ const supabase = supabaseClient ?? (await newServerClient());
64
+ const { data, error } = await supabase.rpc("revoke_herd_invitations", {
65
+ p_invitation_ids: invitation_ids,
66
+ });
67
+ if (error) {
68
+ return IWebResponse.error(error.message).to_compatible();
69
+ }
70
+ return IWebResponse.success(data ?? []).to_compatible();
71
+ }
@@ -8,3 +8,4 @@ export declare function server_get_users_with_herd_access(herd_id: number, supab
8
8
  export declare function server_upsert_user_with_role(herd_id: number, username: string, role: Role): Promise<IWebResponseCompatible<IUserAndRole | null>>;
9
9
  export type UserProfileUpdate = Database["public"]["Tables"]["users"]["Update"];
10
10
  export declare function update_user_profile(client: SupabaseClient<Database>, user_id: string, patch: UserProfileUpdate): Promise<IWebResponseCompatible<IUserProfileRow | null>>;
11
+ export declare function leave_herd_for_current_user(herd_id: number, supabaseClient?: SupabaseClient<Database>): Promise<IWebResponseCompatible<IUserRolePerHerd | null>>;
@@ -89,3 +89,13 @@ export async function update_user_profile(client, user_id, patch) {
89
89
  }
90
90
  return IWebResponse.success(data).to_compatible();
91
91
  }
92
+ export async function leave_herd_for_current_user(herd_id, supabaseClient) {
93
+ const supabase = supabaseClient ?? (await newServerClient());
94
+ const { data, error } = await supabase.rpc("leave_herd_for_current_user", {
95
+ p_herd_id: herd_id,
96
+ });
97
+ if (error) {
98
+ return IWebResponse.error(error.message).to_compatible();
99
+ }
100
+ return IWebResponse.success(data).to_compatible();
101
+ }
package/dist/index.d.ts CHANGED
@@ -76,5 +76,5 @@ export * from "./supabase/middleware";
76
76
  export * from "./supabase/server";
77
77
  export * from "./api_keys/actions";
78
78
  export type { HerdModule, IHerdModule } from "./types/herd_module";
79
- export type { IDevice, IEvent, IUser, IHerd, IHerdPrettyLocation, IEventWithTags, IZoneWithActions, ICredential, CredentialInsert, CredentialUpdate, ICertificate, CertificateInsert, CertificateUpdate, IUserAndRole, IUserProfileRow, IHerdInvitation, IHerdAllowedDomain, IUserRolePerHerd, HerdInvitationStatus, IApiKeyScout, ILayer, IHeartbeat, IProvider, IConnectivity, ISession, ISessionWithCoordinates, IConnectivityWithCoordinates, IObservation, ObservationInsert, ObservationUpdate, IAnalysisJob, IAnalysisTask, AnalysisWorkStatus, } from "./types/db";
79
+ export type { IDevice, IEvent, IUser, IHerd, IHerdPrettyLocation, IEventWithTags, IZoneWithActions, ICredential, CredentialInsert, CredentialUpdate, ICertificate, CertificateInsert, CertificateUpdate, IUserAndRole, IUserProfileRow, IHerdInvitation, IHerdInvitationWithHerdSlug, IHerdAllowedDomain, IUserRolePerHerd, HerdInvitationStatus, IApiKeyScout, ILayer, IHeartbeat, IProvider, IConnectivity, ISession, ISessionWithCoordinates, IConnectivityWithCoordinates, IObservation, ObservationInsert, ObservationUpdate, IAnalysisJob, IAnalysisTask, AnalysisWorkStatus, } from "./types/db";
80
80
  export { EnumSessionsVisibility } from "./types/events";
@@ -2665,20 +2665,10 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
2665
2665
  };
2666
2666
  get_herd_invitations_for_current_user: {
2667
2667
  Args: never;
2668
- Returns: {
2669
- accepted_at: string | null;
2670
- created_at: string;
2671
- email: string;
2672
- expires_at: string | null;
2673
- herd_id: number;
2674
- id: number;
2675
- invited_by: string;
2676
- role: Database["public"]["Enums"]["role"];
2677
- status: Database["public"]["Enums"]["herd_invitation_status"];
2678
- }[];
2668
+ Returns: Database["public"]["CompositeTypes"]["herd_invitation_with_herd_slug"][];
2679
2669
  SetofOptions: {
2680
2670
  from: "*";
2681
- to: "herd_invitations";
2671
+ to: "herd_invitation_with_herd_slug";
2682
2672
  isOneToOne: false;
2683
2673
  isSetofReturn: true;
2684
2674
  };
@@ -3006,6 +2996,34 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
3006
2996
  Args: never;
3007
2997
  Returns: boolean;
3008
2998
  };
2999
+ is_scout_email_valid: {
3000
+ Args: {
3001
+ p_email: string;
3002
+ };
3003
+ Returns: boolean;
3004
+ };
3005
+ leave_herd_for_current_user: {
3006
+ Args: {
3007
+ p_herd_id: number;
3008
+ };
3009
+ Returns: {
3010
+ herd_id: number;
3011
+ id: number;
3012
+ inserted_at: string;
3013
+ lifecycle: Database["public"]["Enums"]["entity_lifecycle"];
3014
+ lifecycle_changed_at: string;
3015
+ lifecycle_changed_by: string | null;
3016
+ lifecycle_reason: string | null;
3017
+ role: Database["public"]["Enums"]["role"];
3018
+ user_id: string;
3019
+ };
3020
+ SetofOptions: {
3021
+ from: "*";
3022
+ to: "users_roles_per_herd";
3023
+ isOneToOne: true;
3024
+ isSetofReturn: false;
3025
+ };
3026
+ };
3009
3027
  load_api_keys: {
3010
3028
  Args: {
3011
3029
  id_of_device: number;
@@ -3107,10 +3125,54 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
3107
3125
  status: string;
3108
3126
  }[];
3109
3127
  };
3128
+ reject_herd_invitations_for_current_user: {
3129
+ Args: {
3130
+ p_invitation_ids: number[];
3131
+ };
3132
+ Returns: {
3133
+ accepted_at: string | null;
3134
+ created_at: string;
3135
+ email: string;
3136
+ expires_at: string | null;
3137
+ herd_id: number;
3138
+ id: number;
3139
+ invited_by: string;
3140
+ role: Database["public"]["Enums"]["role"];
3141
+ status: Database["public"]["Enums"]["herd_invitation_status"];
3142
+ }[];
3143
+ SetofOptions: {
3144
+ from: "*";
3145
+ to: "herd_invitations";
3146
+ isOneToOne: false;
3147
+ isSetofReturn: true;
3148
+ };
3149
+ };
3110
3150
  remove_rls_broadcast_triggers: {
3111
3151
  Args: never;
3112
3152
  Returns: undefined;
3113
3153
  };
3154
+ revoke_herd_invitations: {
3155
+ Args: {
3156
+ p_invitation_ids: number[];
3157
+ };
3158
+ Returns: {
3159
+ accepted_at: string | null;
3160
+ created_at: string;
3161
+ email: string;
3162
+ expires_at: string | null;
3163
+ herd_id: number;
3164
+ id: number;
3165
+ invited_by: string;
3166
+ role: Database["public"]["Enums"]["role"];
3167
+ status: Database["public"]["Enums"]["herd_invitation_status"];
3168
+ }[];
3169
+ SetofOptions: {
3170
+ from: "*";
3171
+ to: "herd_invitations";
3172
+ isOneToOne: false;
3173
+ isSetofReturn: true;
3174
+ };
3175
+ };
3114
3176
  revoke_pubsub_jwt_public_key: {
3115
3177
  Args: {
3116
3178
  p_kid: string;
@@ -3319,6 +3381,18 @@ export declare function useSupabase(): SupabaseClient<Database, "public", "publi
3319
3381
  event_data: Database["public"]["CompositeTypes"]["event_and_tags_pretty_location"] | null;
3320
3382
  artifact_data: Database["public"]["Tables"]["artifacts"]["Row"] | null;
3321
3383
  };
3384
+ herd_invitation_with_herd_slug: {
3385
+ id: number | null;
3386
+ email: string | null;
3387
+ herd_id: number | null;
3388
+ role: Database["public"]["Enums"]["role"] | null;
3389
+ invited_by: string | null;
3390
+ status: Database["public"]["Enums"]["herd_invitation_status"] | null;
3391
+ created_at: string | null;
3392
+ accepted_at: string | null;
3393
+ expires_at: string | null;
3394
+ herd_slug: string | null;
3395
+ };
3322
3396
  herds_pretty_location: {
3323
3397
  id: number | null;
3324
3398
  inserted_at: string | null;
@@ -28,6 +28,7 @@ export type IAction = Database["public"]["Tables"]["actions"]["Row"];
28
28
  export type IZone = Database["public"]["Tables"]["zones"]["Row"];
29
29
  export type IUserRolePerHerd = Database["public"]["Tables"]["users_roles_per_herd"]["Row"];
30
30
  export type IHerdInvitation = Database["public"]["Tables"]["herd_invitations"]["Row"];
31
+ export type IHerdInvitationWithHerdSlug = Database["public"]["CompositeTypes"]["herd_invitation_with_herd_slug"];
31
32
  export type IHerdAllowedDomain = Database["public"]["Tables"]["herd_allowed_domains"]["Row"];
32
33
  export type HerdInvitationStatus = Database["public"]["Enums"]["herd_invitation_status"];
33
34
  export type IHerd = Database["public"]["Tables"]["herds"]["Row"];
@@ -2762,20 +2762,10 @@ export type Database = {
2762
2762
  };
2763
2763
  get_herd_invitations_for_current_user: {
2764
2764
  Args: never;
2765
- Returns: {
2766
- accepted_at: string | null;
2767
- created_at: string;
2768
- email: string;
2769
- expires_at: string | null;
2770
- herd_id: number;
2771
- id: number;
2772
- invited_by: string;
2773
- role: Database["public"]["Enums"]["role"];
2774
- status: Database["public"]["Enums"]["herd_invitation_status"];
2775
- }[];
2765
+ Returns: Database["public"]["CompositeTypes"]["herd_invitation_with_herd_slug"][];
2776
2766
  SetofOptions: {
2777
2767
  from: "*";
2778
- to: "herd_invitations";
2768
+ to: "herd_invitation_with_herd_slug";
2779
2769
  isOneToOne: false;
2780
2770
  isSetofReturn: true;
2781
2771
  };
@@ -3103,6 +3093,34 @@ export type Database = {
3103
3093
  Args: never;
3104
3094
  Returns: boolean;
3105
3095
  };
3096
+ is_scout_email_valid: {
3097
+ Args: {
3098
+ p_email: string;
3099
+ };
3100
+ Returns: boolean;
3101
+ };
3102
+ leave_herd_for_current_user: {
3103
+ Args: {
3104
+ p_herd_id: number;
3105
+ };
3106
+ Returns: {
3107
+ herd_id: number;
3108
+ id: number;
3109
+ inserted_at: string;
3110
+ lifecycle: Database["public"]["Enums"]["entity_lifecycle"];
3111
+ lifecycle_changed_at: string;
3112
+ lifecycle_changed_by: string | null;
3113
+ lifecycle_reason: string | null;
3114
+ role: Database["public"]["Enums"]["role"];
3115
+ user_id: string;
3116
+ };
3117
+ SetofOptions: {
3118
+ from: "*";
3119
+ to: "users_roles_per_herd";
3120
+ isOneToOne: true;
3121
+ isSetofReturn: false;
3122
+ };
3123
+ };
3106
3124
  load_api_keys: {
3107
3125
  Args: {
3108
3126
  id_of_device: number;
@@ -3204,10 +3222,54 @@ export type Database = {
3204
3222
  status: string;
3205
3223
  }[];
3206
3224
  };
3225
+ reject_herd_invitations_for_current_user: {
3226
+ Args: {
3227
+ p_invitation_ids: number[];
3228
+ };
3229
+ Returns: {
3230
+ accepted_at: string | null;
3231
+ created_at: string;
3232
+ email: string;
3233
+ expires_at: string | null;
3234
+ herd_id: number;
3235
+ id: number;
3236
+ invited_by: string;
3237
+ role: Database["public"]["Enums"]["role"];
3238
+ status: Database["public"]["Enums"]["herd_invitation_status"];
3239
+ }[];
3240
+ SetofOptions: {
3241
+ from: "*";
3242
+ to: "herd_invitations";
3243
+ isOneToOne: false;
3244
+ isSetofReturn: true;
3245
+ };
3246
+ };
3207
3247
  remove_rls_broadcast_triggers: {
3208
3248
  Args: never;
3209
3249
  Returns: undefined;
3210
3250
  };
3251
+ revoke_herd_invitations: {
3252
+ Args: {
3253
+ p_invitation_ids: number[];
3254
+ };
3255
+ Returns: {
3256
+ accepted_at: string | null;
3257
+ created_at: string;
3258
+ email: string;
3259
+ expires_at: string | null;
3260
+ herd_id: number;
3261
+ id: number;
3262
+ invited_by: string;
3263
+ role: Database["public"]["Enums"]["role"];
3264
+ status: Database["public"]["Enums"]["herd_invitation_status"];
3265
+ }[];
3266
+ SetofOptions: {
3267
+ from: "*";
3268
+ to: "herd_invitations";
3269
+ isOneToOne: false;
3270
+ isSetofReturn: true;
3271
+ };
3272
+ };
3211
3273
  revoke_pubsub_jwt_public_key: {
3212
3274
  Args: {
3213
3275
  p_kid: string;
@@ -3416,6 +3478,18 @@ export type Database = {
3416
3478
  event_data: Database["public"]["CompositeTypes"]["event_and_tags_pretty_location"] | null;
3417
3479
  artifact_data: Database["public"]["Tables"]["artifacts"]["Row"] | null;
3418
3480
  };
3481
+ herd_invitation_with_herd_slug: {
3482
+ id: number | null;
3483
+ email: string | null;
3484
+ herd_id: number | null;
3485
+ role: Database["public"]["Enums"]["role"] | null;
3486
+ invited_by: string | null;
3487
+ status: Database["public"]["Enums"]["herd_invitation_status"] | null;
3488
+ created_at: string | null;
3489
+ accepted_at: string | null;
3490
+ expires_at: string | null;
3491
+ herd_slug: string | null;
3492
+ };
3419
3493
  herds_pretty_location: {
3420
3494
  id: number | null;
3421
3495
  inserted_at: string | null;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adventurelabs/scout-core",
3
- "version": "1.4.71",
3
+ "version": "1.4.73",
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",