@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.
- package/dist/helpers/auth.d.ts +3 -0
- package/dist/helpers/auth.js +12 -0
- package/dist/helpers/invitations.d.ts +4 -2
- package/dist/helpers/invitations.js +24 -0
- package/dist/helpers/users.d.ts +1 -0
- package/dist/helpers/users.js +10 -0
- package/dist/index.d.ts +1 -1
- package/dist/providers/ScoutRefreshProvider.d.ts +86 -12
- package/dist/types/db.d.ts +1 -0
- package/dist/types/supabase.d.ts +86 -12
- package/package.json +1 -1
package/dist/helpers/auth.d.ts
CHANGED
|
@@ -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>>;
|
package/dist/helpers/auth.js
CHANGED
|
@@ -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<
|
|
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
|
+
}
|
package/dist/helpers/users.d.ts
CHANGED
|
@@ -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>>;
|
package/dist/helpers/users.js
CHANGED
|
@@ -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: "
|
|
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;
|
package/dist/types/db.d.ts
CHANGED
|
@@ -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"];
|
package/dist/types/supabase.d.ts
CHANGED
|
@@ -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: "
|
|
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;
|