@elqnt/auth 1.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/dist/index.d.mts +189 -0
- package/dist/index.d.ts +189 -0
- package/dist/index.js +414 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +361 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +45 -0
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { FC, ReactNode } from 'react';
|
|
3
|
+
import { UserStatusTS } from '@elqnt/types';
|
|
4
|
+
|
|
5
|
+
type WidgetType = string;
|
|
6
|
+
declare const WidgetTypeCalendar: WidgetType;
|
|
7
|
+
declare const WidgetTypeActivities: WidgetType;
|
|
8
|
+
declare const WidgetTypeEmail: WidgetType;
|
|
9
|
+
declare const WidgetTypeTasks: WidgetType;
|
|
10
|
+
declare const WidgetTypeNotes: WidgetType;
|
|
11
|
+
declare const WidgetTypeFiles: WidgetType;
|
|
12
|
+
declare const WidgetTypeContacts: WidgetType;
|
|
13
|
+
declare const WidgetTypeAccounts: WidgetType;
|
|
14
|
+
declare const WidgetTypeLeads: WidgetType;
|
|
15
|
+
declare const WidgetTypeOpportunities: WidgetType;
|
|
16
|
+
declare const WidgetTypeChart: WidgetType;
|
|
17
|
+
declare const WidgetTypeOrders: WidgetType;
|
|
18
|
+
interface Widget {
|
|
19
|
+
id?: string;
|
|
20
|
+
userId: string;
|
|
21
|
+
title: string;
|
|
22
|
+
subTitle?: string;
|
|
23
|
+
type: WidgetType;
|
|
24
|
+
chartSettings?: ChartSettings;
|
|
25
|
+
slotIndex: number;
|
|
26
|
+
}
|
|
27
|
+
type ChartType = string;
|
|
28
|
+
declare const ChartTypeBar: ChartType;
|
|
29
|
+
declare const ChartTypeLine: ChartType;
|
|
30
|
+
declare const ChartTypePie: ChartType;
|
|
31
|
+
declare const ChartTypeDoughnut: ChartType;
|
|
32
|
+
declare const ChartTypeMetic: ChartType;
|
|
33
|
+
type AggregateType = string;
|
|
34
|
+
declare const AggregateTypeSum: AggregateType;
|
|
35
|
+
declare const AggregateTypeCount: AggregateType;
|
|
36
|
+
declare const AggregateTypeAverage: AggregateType;
|
|
37
|
+
declare const AggregateTypeMin: AggregateType;
|
|
38
|
+
declare const AggregateTypeMax: AggregateType;
|
|
39
|
+
declare const AggregateTypeDistinct: AggregateType;
|
|
40
|
+
interface MetricResult {
|
|
41
|
+
aggregateType: AggregateType;
|
|
42
|
+
value: any;
|
|
43
|
+
compareAggregateType: AggregateType;
|
|
44
|
+
compareValue: any;
|
|
45
|
+
}
|
|
46
|
+
interface DateValue {
|
|
47
|
+
date: string;
|
|
48
|
+
value: number;
|
|
49
|
+
}
|
|
50
|
+
interface ChartSettings {
|
|
51
|
+
chartType: ChartType;
|
|
52
|
+
aggregateType: AggregateType;
|
|
53
|
+
tableName: string;
|
|
54
|
+
groupByFieldName: string;
|
|
55
|
+
valueFieldName: string;
|
|
56
|
+
filterFieldName: string;
|
|
57
|
+
filterFieldValue: string;
|
|
58
|
+
enableCompare: boolean;
|
|
59
|
+
compareTitle: string;
|
|
60
|
+
compareAggregateType: AggregateType;
|
|
61
|
+
compareTableName: string;
|
|
62
|
+
compareValueFieldName: string;
|
|
63
|
+
compareFilterFieldName: string;
|
|
64
|
+
compareFilterFieldValue: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
interface ResponseMetadata {
|
|
68
|
+
success: boolean;
|
|
69
|
+
timestamp: string;
|
|
70
|
+
message?: string;
|
|
71
|
+
error?: string;
|
|
72
|
+
}
|
|
73
|
+
interface UserOrgAccess {
|
|
74
|
+
orgId: string;
|
|
75
|
+
orgTitle: string;
|
|
76
|
+
roles: string[];
|
|
77
|
+
isSingleAccount: boolean;
|
|
78
|
+
entityRecordFilter?: any;
|
|
79
|
+
}
|
|
80
|
+
interface UserSettings {
|
|
81
|
+
theme?: string;
|
|
82
|
+
language?: string;
|
|
83
|
+
timezone?: string;
|
|
84
|
+
occupation?: string;
|
|
85
|
+
company?: string;
|
|
86
|
+
}
|
|
87
|
+
interface NotificationPreferences {
|
|
88
|
+
pushEnabled: boolean;
|
|
89
|
+
newChatAssignment: boolean;
|
|
90
|
+
newMessages: boolean;
|
|
91
|
+
escalations: boolean;
|
|
92
|
+
urgentOnly: boolean;
|
|
93
|
+
soundEnabled: boolean;
|
|
94
|
+
doNotDisturb: boolean;
|
|
95
|
+
dndStart?: string;
|
|
96
|
+
dndEnd?: string;
|
|
97
|
+
}
|
|
98
|
+
interface User {
|
|
99
|
+
id?: string;
|
|
100
|
+
email: string;
|
|
101
|
+
firstName: string;
|
|
102
|
+
lastName: string;
|
|
103
|
+
authProviderName: string;
|
|
104
|
+
orgAccess: UserOrgAccess[];
|
|
105
|
+
settings?: UserSettings;
|
|
106
|
+
notificationPreferences?: NotificationPreferences;
|
|
107
|
+
createdAt?: number;
|
|
108
|
+
updatedAt?: number;
|
|
109
|
+
createdBy?: string;
|
|
110
|
+
updatedBy?: string;
|
|
111
|
+
isTeamAdmin?: boolean;
|
|
112
|
+
teamId?: string;
|
|
113
|
+
teamName?: string;
|
|
114
|
+
isSysAdmin?: boolean;
|
|
115
|
+
}
|
|
116
|
+
interface UserResponse {
|
|
117
|
+
user: User;
|
|
118
|
+
metadata: ResponseMetadata;
|
|
119
|
+
}
|
|
120
|
+
interface UpdateUserSettingsRequest {
|
|
121
|
+
id: string;
|
|
122
|
+
settings?: UserSettings;
|
|
123
|
+
notificationPreferences?: NotificationPreferences;
|
|
124
|
+
}
|
|
125
|
+
interface UserSettingsResponse {
|
|
126
|
+
settings?: UserSettings;
|
|
127
|
+
notificationPreferences?: NotificationPreferences;
|
|
128
|
+
metadata: ResponseMetadata;
|
|
129
|
+
}
|
|
130
|
+
interface Team {
|
|
131
|
+
id?: string;
|
|
132
|
+
name: string;
|
|
133
|
+
isSubscribed: boolean;
|
|
134
|
+
subscribedAt: number;
|
|
135
|
+
plan: string;
|
|
136
|
+
ownerName: string;
|
|
137
|
+
ownerEmail: string;
|
|
138
|
+
subscriptionPlatform: SubscriptionPlatform;
|
|
139
|
+
subscriptionId: string;
|
|
140
|
+
onboardingDone: boolean;
|
|
141
|
+
onboardingData: string;
|
|
142
|
+
}
|
|
143
|
+
type SubscriptionPlatform = string;
|
|
144
|
+
declare const SubscriptionPlatformStripe: SubscriptionPlatform;
|
|
145
|
+
declare const SubscriptionPlatformCustom: SubscriptionPlatform;
|
|
146
|
+
interface OrgInfo {
|
|
147
|
+
id?: string;
|
|
148
|
+
title: string;
|
|
149
|
+
logoUrl: string;
|
|
150
|
+
mainDomain?: string;
|
|
151
|
+
apps: any[];
|
|
152
|
+
}
|
|
153
|
+
interface OrgInfoResponse {
|
|
154
|
+
orgInfo: OrgInfo;
|
|
155
|
+
metadata: ResponseMetadata;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
interface UseUserType {
|
|
159
|
+
user?: User;
|
|
160
|
+
error?: Error;
|
|
161
|
+
isLoading: boolean;
|
|
162
|
+
refresh: () => void;
|
|
163
|
+
selectedOrgId?: string;
|
|
164
|
+
setSelectedOrgId?: (orgId: string) => void;
|
|
165
|
+
userOrgs: UserOrgAccess[];
|
|
166
|
+
selectedOrg?: OrgInfo;
|
|
167
|
+
isAdmin: boolean;
|
|
168
|
+
isSuperAdmin: boolean;
|
|
169
|
+
createUser: (user: User) => Promise<UserResponse>;
|
|
170
|
+
userInGroup: (group: string) => boolean;
|
|
171
|
+
getUserTeam: () => Promise<Team | undefined>;
|
|
172
|
+
updateTeamOnboardingData: (data: string) => Promise<Error | boolean>;
|
|
173
|
+
teams: Team[];
|
|
174
|
+
selectedTeamId?: string;
|
|
175
|
+
setSelectedTeamId?: (id: string) => void;
|
|
176
|
+
onlineStatus: UserStatusTS;
|
|
177
|
+
setOnlineStatus: (status: UserStatusTS) => void;
|
|
178
|
+
}
|
|
179
|
+
declare const useUser: (email: string | undefined | null, autoLoad?: boolean) => UseUserType;
|
|
180
|
+
|
|
181
|
+
declare let UserContext: react.Context<UseUserType>;
|
|
182
|
+
type UserProviderProps = {
|
|
183
|
+
children: ReactNode;
|
|
184
|
+
email: string | undefined | null;
|
|
185
|
+
};
|
|
186
|
+
declare const UserProvider: FC<UserProviderProps>;
|
|
187
|
+
declare const useUserContext: () => UseUserType;
|
|
188
|
+
|
|
189
|
+
export { type AggregateType, AggregateTypeAverage, AggregateTypeCount, AggregateTypeDistinct, AggregateTypeMax, AggregateTypeMin, AggregateTypeSum, type ChartSettings, type ChartType, ChartTypeBar, ChartTypeDoughnut, ChartTypeLine, ChartTypeMetic, ChartTypePie, type DateValue, type MetricResult, type NotificationPreferences, type OrgInfo, type OrgInfoResponse, type ResponseMetadata, type SubscriptionPlatform, SubscriptionPlatformCustom, SubscriptionPlatformStripe, type Team, type UpdateUserSettingsRequest, type UseUserType, type User, UserContext, type UserOrgAccess, UserProvider, type UserResponse, type UserSettings, type UserSettingsResponse, type Widget, type WidgetType, WidgetTypeAccounts, WidgetTypeActivities, WidgetTypeCalendar, WidgetTypeChart, WidgetTypeContacts, WidgetTypeEmail, WidgetTypeFiles, WidgetTypeLeads, WidgetTypeNotes, WidgetTypeOpportunities, WidgetTypeOrders, WidgetTypeTasks, useUser, useUserContext };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
import * as react from 'react';
|
|
2
|
+
import { FC, ReactNode } from 'react';
|
|
3
|
+
import { UserStatusTS } from '@elqnt/types';
|
|
4
|
+
|
|
5
|
+
type WidgetType = string;
|
|
6
|
+
declare const WidgetTypeCalendar: WidgetType;
|
|
7
|
+
declare const WidgetTypeActivities: WidgetType;
|
|
8
|
+
declare const WidgetTypeEmail: WidgetType;
|
|
9
|
+
declare const WidgetTypeTasks: WidgetType;
|
|
10
|
+
declare const WidgetTypeNotes: WidgetType;
|
|
11
|
+
declare const WidgetTypeFiles: WidgetType;
|
|
12
|
+
declare const WidgetTypeContacts: WidgetType;
|
|
13
|
+
declare const WidgetTypeAccounts: WidgetType;
|
|
14
|
+
declare const WidgetTypeLeads: WidgetType;
|
|
15
|
+
declare const WidgetTypeOpportunities: WidgetType;
|
|
16
|
+
declare const WidgetTypeChart: WidgetType;
|
|
17
|
+
declare const WidgetTypeOrders: WidgetType;
|
|
18
|
+
interface Widget {
|
|
19
|
+
id?: string;
|
|
20
|
+
userId: string;
|
|
21
|
+
title: string;
|
|
22
|
+
subTitle?: string;
|
|
23
|
+
type: WidgetType;
|
|
24
|
+
chartSettings?: ChartSettings;
|
|
25
|
+
slotIndex: number;
|
|
26
|
+
}
|
|
27
|
+
type ChartType = string;
|
|
28
|
+
declare const ChartTypeBar: ChartType;
|
|
29
|
+
declare const ChartTypeLine: ChartType;
|
|
30
|
+
declare const ChartTypePie: ChartType;
|
|
31
|
+
declare const ChartTypeDoughnut: ChartType;
|
|
32
|
+
declare const ChartTypeMetic: ChartType;
|
|
33
|
+
type AggregateType = string;
|
|
34
|
+
declare const AggregateTypeSum: AggregateType;
|
|
35
|
+
declare const AggregateTypeCount: AggregateType;
|
|
36
|
+
declare const AggregateTypeAverage: AggregateType;
|
|
37
|
+
declare const AggregateTypeMin: AggregateType;
|
|
38
|
+
declare const AggregateTypeMax: AggregateType;
|
|
39
|
+
declare const AggregateTypeDistinct: AggregateType;
|
|
40
|
+
interface MetricResult {
|
|
41
|
+
aggregateType: AggregateType;
|
|
42
|
+
value: any;
|
|
43
|
+
compareAggregateType: AggregateType;
|
|
44
|
+
compareValue: any;
|
|
45
|
+
}
|
|
46
|
+
interface DateValue {
|
|
47
|
+
date: string;
|
|
48
|
+
value: number;
|
|
49
|
+
}
|
|
50
|
+
interface ChartSettings {
|
|
51
|
+
chartType: ChartType;
|
|
52
|
+
aggregateType: AggregateType;
|
|
53
|
+
tableName: string;
|
|
54
|
+
groupByFieldName: string;
|
|
55
|
+
valueFieldName: string;
|
|
56
|
+
filterFieldName: string;
|
|
57
|
+
filterFieldValue: string;
|
|
58
|
+
enableCompare: boolean;
|
|
59
|
+
compareTitle: string;
|
|
60
|
+
compareAggregateType: AggregateType;
|
|
61
|
+
compareTableName: string;
|
|
62
|
+
compareValueFieldName: string;
|
|
63
|
+
compareFilterFieldName: string;
|
|
64
|
+
compareFilterFieldValue: string;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
interface ResponseMetadata {
|
|
68
|
+
success: boolean;
|
|
69
|
+
timestamp: string;
|
|
70
|
+
message?: string;
|
|
71
|
+
error?: string;
|
|
72
|
+
}
|
|
73
|
+
interface UserOrgAccess {
|
|
74
|
+
orgId: string;
|
|
75
|
+
orgTitle: string;
|
|
76
|
+
roles: string[];
|
|
77
|
+
isSingleAccount: boolean;
|
|
78
|
+
entityRecordFilter?: any;
|
|
79
|
+
}
|
|
80
|
+
interface UserSettings {
|
|
81
|
+
theme?: string;
|
|
82
|
+
language?: string;
|
|
83
|
+
timezone?: string;
|
|
84
|
+
occupation?: string;
|
|
85
|
+
company?: string;
|
|
86
|
+
}
|
|
87
|
+
interface NotificationPreferences {
|
|
88
|
+
pushEnabled: boolean;
|
|
89
|
+
newChatAssignment: boolean;
|
|
90
|
+
newMessages: boolean;
|
|
91
|
+
escalations: boolean;
|
|
92
|
+
urgentOnly: boolean;
|
|
93
|
+
soundEnabled: boolean;
|
|
94
|
+
doNotDisturb: boolean;
|
|
95
|
+
dndStart?: string;
|
|
96
|
+
dndEnd?: string;
|
|
97
|
+
}
|
|
98
|
+
interface User {
|
|
99
|
+
id?: string;
|
|
100
|
+
email: string;
|
|
101
|
+
firstName: string;
|
|
102
|
+
lastName: string;
|
|
103
|
+
authProviderName: string;
|
|
104
|
+
orgAccess: UserOrgAccess[];
|
|
105
|
+
settings?: UserSettings;
|
|
106
|
+
notificationPreferences?: NotificationPreferences;
|
|
107
|
+
createdAt?: number;
|
|
108
|
+
updatedAt?: number;
|
|
109
|
+
createdBy?: string;
|
|
110
|
+
updatedBy?: string;
|
|
111
|
+
isTeamAdmin?: boolean;
|
|
112
|
+
teamId?: string;
|
|
113
|
+
teamName?: string;
|
|
114
|
+
isSysAdmin?: boolean;
|
|
115
|
+
}
|
|
116
|
+
interface UserResponse {
|
|
117
|
+
user: User;
|
|
118
|
+
metadata: ResponseMetadata;
|
|
119
|
+
}
|
|
120
|
+
interface UpdateUserSettingsRequest {
|
|
121
|
+
id: string;
|
|
122
|
+
settings?: UserSettings;
|
|
123
|
+
notificationPreferences?: NotificationPreferences;
|
|
124
|
+
}
|
|
125
|
+
interface UserSettingsResponse {
|
|
126
|
+
settings?: UserSettings;
|
|
127
|
+
notificationPreferences?: NotificationPreferences;
|
|
128
|
+
metadata: ResponseMetadata;
|
|
129
|
+
}
|
|
130
|
+
interface Team {
|
|
131
|
+
id?: string;
|
|
132
|
+
name: string;
|
|
133
|
+
isSubscribed: boolean;
|
|
134
|
+
subscribedAt: number;
|
|
135
|
+
plan: string;
|
|
136
|
+
ownerName: string;
|
|
137
|
+
ownerEmail: string;
|
|
138
|
+
subscriptionPlatform: SubscriptionPlatform;
|
|
139
|
+
subscriptionId: string;
|
|
140
|
+
onboardingDone: boolean;
|
|
141
|
+
onboardingData: string;
|
|
142
|
+
}
|
|
143
|
+
type SubscriptionPlatform = string;
|
|
144
|
+
declare const SubscriptionPlatformStripe: SubscriptionPlatform;
|
|
145
|
+
declare const SubscriptionPlatformCustom: SubscriptionPlatform;
|
|
146
|
+
interface OrgInfo {
|
|
147
|
+
id?: string;
|
|
148
|
+
title: string;
|
|
149
|
+
logoUrl: string;
|
|
150
|
+
mainDomain?: string;
|
|
151
|
+
apps: any[];
|
|
152
|
+
}
|
|
153
|
+
interface OrgInfoResponse {
|
|
154
|
+
orgInfo: OrgInfo;
|
|
155
|
+
metadata: ResponseMetadata;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
interface UseUserType {
|
|
159
|
+
user?: User;
|
|
160
|
+
error?: Error;
|
|
161
|
+
isLoading: boolean;
|
|
162
|
+
refresh: () => void;
|
|
163
|
+
selectedOrgId?: string;
|
|
164
|
+
setSelectedOrgId?: (orgId: string) => void;
|
|
165
|
+
userOrgs: UserOrgAccess[];
|
|
166
|
+
selectedOrg?: OrgInfo;
|
|
167
|
+
isAdmin: boolean;
|
|
168
|
+
isSuperAdmin: boolean;
|
|
169
|
+
createUser: (user: User) => Promise<UserResponse>;
|
|
170
|
+
userInGroup: (group: string) => boolean;
|
|
171
|
+
getUserTeam: () => Promise<Team | undefined>;
|
|
172
|
+
updateTeamOnboardingData: (data: string) => Promise<Error | boolean>;
|
|
173
|
+
teams: Team[];
|
|
174
|
+
selectedTeamId?: string;
|
|
175
|
+
setSelectedTeamId?: (id: string) => void;
|
|
176
|
+
onlineStatus: UserStatusTS;
|
|
177
|
+
setOnlineStatus: (status: UserStatusTS) => void;
|
|
178
|
+
}
|
|
179
|
+
declare const useUser: (email: string | undefined | null, autoLoad?: boolean) => UseUserType;
|
|
180
|
+
|
|
181
|
+
declare let UserContext: react.Context<UseUserType>;
|
|
182
|
+
type UserProviderProps = {
|
|
183
|
+
children: ReactNode;
|
|
184
|
+
email: string | undefined | null;
|
|
185
|
+
};
|
|
186
|
+
declare const UserProvider: FC<UserProviderProps>;
|
|
187
|
+
declare const useUserContext: () => UseUserType;
|
|
188
|
+
|
|
189
|
+
export { type AggregateType, AggregateTypeAverage, AggregateTypeCount, AggregateTypeDistinct, AggregateTypeMax, AggregateTypeMin, AggregateTypeSum, type ChartSettings, type ChartType, ChartTypeBar, ChartTypeDoughnut, ChartTypeLine, ChartTypeMetic, ChartTypePie, type DateValue, type MetricResult, type NotificationPreferences, type OrgInfo, type OrgInfoResponse, type ResponseMetadata, type SubscriptionPlatform, SubscriptionPlatformCustom, SubscriptionPlatformStripe, type Team, type UpdateUserSettingsRequest, type UseUserType, type User, UserContext, type UserOrgAccess, UserProvider, type UserResponse, type UserSettings, type UserSettingsResponse, type Widget, type WidgetType, WidgetTypeAccounts, WidgetTypeActivities, WidgetTypeCalendar, WidgetTypeChart, WidgetTypeContacts, WidgetTypeEmail, WidgetTypeFiles, WidgetTypeLeads, WidgetTypeNotes, WidgetTypeOpportunities, WidgetTypeOrders, WidgetTypeTasks, useUser, useUserContext };
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// index.tsx
|
|
21
|
+
var index_exports = {};
|
|
22
|
+
__export(index_exports, {
|
|
23
|
+
AggregateTypeAverage: () => AggregateTypeAverage,
|
|
24
|
+
AggregateTypeCount: () => AggregateTypeCount,
|
|
25
|
+
AggregateTypeDistinct: () => AggregateTypeDistinct,
|
|
26
|
+
AggregateTypeMax: () => AggregateTypeMax,
|
|
27
|
+
AggregateTypeMin: () => AggregateTypeMin,
|
|
28
|
+
AggregateTypeSum: () => AggregateTypeSum,
|
|
29
|
+
ChartTypeBar: () => ChartTypeBar,
|
|
30
|
+
ChartTypeDoughnut: () => ChartTypeDoughnut,
|
|
31
|
+
ChartTypeLine: () => ChartTypeLine,
|
|
32
|
+
ChartTypeMetic: () => ChartTypeMetic,
|
|
33
|
+
ChartTypePie: () => ChartTypePie,
|
|
34
|
+
SubscriptionPlatformCustom: () => SubscriptionPlatformCustom,
|
|
35
|
+
SubscriptionPlatformStripe: () => SubscriptionPlatformStripe,
|
|
36
|
+
UserContext: () => UserContext,
|
|
37
|
+
UserProvider: () => UserProvider,
|
|
38
|
+
WidgetTypeAccounts: () => WidgetTypeAccounts,
|
|
39
|
+
WidgetTypeActivities: () => WidgetTypeActivities,
|
|
40
|
+
WidgetTypeCalendar: () => WidgetTypeCalendar,
|
|
41
|
+
WidgetTypeChart: () => WidgetTypeChart,
|
|
42
|
+
WidgetTypeContacts: () => WidgetTypeContacts,
|
|
43
|
+
WidgetTypeEmail: () => WidgetTypeEmail,
|
|
44
|
+
WidgetTypeFiles: () => WidgetTypeFiles,
|
|
45
|
+
WidgetTypeLeads: () => WidgetTypeLeads,
|
|
46
|
+
WidgetTypeNotes: () => WidgetTypeNotes,
|
|
47
|
+
WidgetTypeOpportunities: () => WidgetTypeOpportunities,
|
|
48
|
+
WidgetTypeOrders: () => WidgetTypeOrders,
|
|
49
|
+
WidgetTypeTasks: () => WidgetTypeTasks,
|
|
50
|
+
useUser: () => useUser,
|
|
51
|
+
useUserContext: () => useUserContext
|
|
52
|
+
});
|
|
53
|
+
module.exports = __toCommonJS(index_exports);
|
|
54
|
+
|
|
55
|
+
// context/user-context.tsx
|
|
56
|
+
var import_react2 = require("react");
|
|
57
|
+
|
|
58
|
+
// hooks/use-user.ts
|
|
59
|
+
var import_nats = require("@elqnt/nats");
|
|
60
|
+
var import_product = require("@elqnt/product");
|
|
61
|
+
var import_react = require("react");
|
|
62
|
+
var import_types = require("@elqnt/types");
|
|
63
|
+
var useUser = (email, autoLoad = true) => {
|
|
64
|
+
const { natsConnected, request } = (0, import_nats.useNatsContext)();
|
|
65
|
+
const [user, setUser] = (0, import_react.useState)(void 0);
|
|
66
|
+
const [isLoading, setIsLoading] = (0, import_react.useState)(false);
|
|
67
|
+
const [error, setError] = (0, import_react.useState)(void 0);
|
|
68
|
+
const [onlineStatus, setOnlineStatusLocal] = (0, import_react.useState)("online");
|
|
69
|
+
const hasSetInitialStatus = (0, import_react.useRef)(false);
|
|
70
|
+
const { product } = (0, import_product.useProductContext)();
|
|
71
|
+
const [userOrgs, setUserOrgs] = (0, import_react.useState)([]);
|
|
72
|
+
const [teams, setTeams] = (0, import_react.useState)([]);
|
|
73
|
+
const [selectedTeamId, setSelectedTeamId] = (0, import_react.useState)(
|
|
74
|
+
void 0
|
|
75
|
+
);
|
|
76
|
+
const [selectedOrgId, setSelectedOrgId] = (0, import_react.useState)(
|
|
77
|
+
void 0
|
|
78
|
+
);
|
|
79
|
+
(0, import_react.useEffect)(() => {
|
|
80
|
+
const storedOrgId = localStorage.getItem("orgId");
|
|
81
|
+
if (storedOrgId) {
|
|
82
|
+
setSelectedOrgId(storedOrgId);
|
|
83
|
+
}
|
|
84
|
+
}, []);
|
|
85
|
+
const [selectedOrg, setSelectedOrg] = (0, import_react.useState)(
|
|
86
|
+
void 0
|
|
87
|
+
);
|
|
88
|
+
const [isAdmin, setIsAdmin] = (0, import_react.useState)(false);
|
|
89
|
+
const [isSuperAdmin, setIsSuperAdmin] = (0, import_react.useState)(false);
|
|
90
|
+
const [userGroups, setUserGroups] = (0, import_react.useState)([]);
|
|
91
|
+
const getUserGroups = (0, import_react.useCallback)(async () => {
|
|
92
|
+
if (!user || !selectedOrgId) return;
|
|
93
|
+
const data = await request(
|
|
94
|
+
"user.groups.get",
|
|
95
|
+
{
|
|
96
|
+
userId: user.id
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
orgId: selectedOrgId
|
|
100
|
+
}
|
|
101
|
+
);
|
|
102
|
+
if (!data || data?.groups.length === 0) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
setUserGroups(data.map((g) => g.toLowerCase().replaceAll(" ", "_")));
|
|
106
|
+
}, [user, selectedOrgId]);
|
|
107
|
+
async function updateTeamOnboardingData(data) {
|
|
108
|
+
if (!natsConnected) {
|
|
109
|
+
console.error("nats not connected");
|
|
110
|
+
return new Error("nats not connected");
|
|
111
|
+
}
|
|
112
|
+
if (!user) {
|
|
113
|
+
console.error("user not defined");
|
|
114
|
+
return new Error("user not defined");
|
|
115
|
+
}
|
|
116
|
+
if (!user.teamId) {
|
|
117
|
+
console.error("teamId not defined");
|
|
118
|
+
return new Error("teamId not defined");
|
|
119
|
+
}
|
|
120
|
+
const res = await request(
|
|
121
|
+
"admin.teams.updateOnboardingData",
|
|
122
|
+
{
|
|
123
|
+
data,
|
|
124
|
+
teamId: user.teamId
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
orgId: selectedOrgId,
|
|
128
|
+
product
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
if (res instanceof Error) {
|
|
132
|
+
setError(res);
|
|
133
|
+
setIsLoading(false);
|
|
134
|
+
return res;
|
|
135
|
+
}
|
|
136
|
+
return res.success;
|
|
137
|
+
}
|
|
138
|
+
(0, import_react.useEffect)(() => {
|
|
139
|
+
if (!user || !selectedOrgId) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
getUserGroups();
|
|
143
|
+
}, [user, selectedOrgId, getUserGroups]);
|
|
144
|
+
function userInGroup(group) {
|
|
145
|
+
return userGroups.includes(group.toLowerCase().replaceAll(" ", "_"));
|
|
146
|
+
}
|
|
147
|
+
(0, import_react.useEffect)(() => {
|
|
148
|
+
if (!user) {
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (user.orgAccess && user?.orgAccess.length > 0) {
|
|
152
|
+
if (selectedOrgId === void 0) {
|
|
153
|
+
const orgAccess = user.orgAccess[0];
|
|
154
|
+
setSelectedOrgId(orgAccess.orgId);
|
|
155
|
+
setUserOrgs(user.orgAccess);
|
|
156
|
+
updateAdminFlags();
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}, [user, selectedOrgId]);
|
|
160
|
+
const updateAdminFlags = (0, import_react.useCallback)(() => {
|
|
161
|
+
const orgAccess = userOrgs.find((org) => org.orgId === selectedOrgId);
|
|
162
|
+
const isAdmin2 = orgAccess?.roles.includes("admin") ?? false;
|
|
163
|
+
setIsAdmin(isAdmin2);
|
|
164
|
+
if (!isAdmin2) {
|
|
165
|
+
setSelectedTeamId(user?.teamId);
|
|
166
|
+
}
|
|
167
|
+
const isSuperAdmin2 = orgAccess?.roles.includes("super-admin") ?? false;
|
|
168
|
+
setIsSuperAdmin(isSuperAdmin2);
|
|
169
|
+
}, [userOrgs, selectedOrgId, user?.teamId]);
|
|
170
|
+
const create = async (data) => {
|
|
171
|
+
setIsLoading(true);
|
|
172
|
+
const res = await request("admin.users.create", data, {
|
|
173
|
+
product
|
|
174
|
+
});
|
|
175
|
+
setIsLoading(false);
|
|
176
|
+
if (res instanceof Error) {
|
|
177
|
+
setError(res);
|
|
178
|
+
return res;
|
|
179
|
+
}
|
|
180
|
+
return res;
|
|
181
|
+
};
|
|
182
|
+
const getUser = (0, import_react.useCallback)(async () => {
|
|
183
|
+
if (!natsConnected || !email || !product) {
|
|
184
|
+
console.log("will not get user", natsConnected, email, product);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
console.log("will get user", email, product);
|
|
188
|
+
setIsLoading(true);
|
|
189
|
+
const data = await request(
|
|
190
|
+
"admin.users.getOneByEmail",
|
|
191
|
+
{
|
|
192
|
+
email
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
product
|
|
196
|
+
}
|
|
197
|
+
);
|
|
198
|
+
if (data.metadata.success) {
|
|
199
|
+
setUser(data.user);
|
|
200
|
+
} else {
|
|
201
|
+
console.log("User not found in DB, attempting domain validation");
|
|
202
|
+
const emailDomain = email.split("@")[1];
|
|
203
|
+
if (emailDomain) {
|
|
204
|
+
try {
|
|
205
|
+
const orgResponse = await request(
|
|
206
|
+
"admin.orgs.getByDomain",
|
|
207
|
+
{ domain: emailDomain },
|
|
208
|
+
{ product }
|
|
209
|
+
);
|
|
210
|
+
if (orgResponse.metadata?.success && orgResponse.org) {
|
|
211
|
+
console.log("Found org by domain, creating virtual user", orgResponse.org);
|
|
212
|
+
const virtualUser = {
|
|
213
|
+
email,
|
|
214
|
+
firstName: email.split("@")[0],
|
|
215
|
+
// Use email prefix as first name
|
|
216
|
+
lastName: "",
|
|
217
|
+
authProviderName: "azure",
|
|
218
|
+
orgAccess: [
|
|
219
|
+
{
|
|
220
|
+
orgId: orgResponse.org.id,
|
|
221
|
+
orgTitle: orgResponse.org.title,
|
|
222
|
+
roles: ["user"],
|
|
223
|
+
// Default role for AD users
|
|
224
|
+
isSingleAccount: true
|
|
225
|
+
}
|
|
226
|
+
],
|
|
227
|
+
isSysAdmin: false
|
|
228
|
+
};
|
|
229
|
+
setUser(virtualUser);
|
|
230
|
+
setIsLoading(false);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
} catch (domainError) {
|
|
234
|
+
console.log("Domain validation failed", domainError);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
setError(new Error("User not found"));
|
|
238
|
+
}
|
|
239
|
+
setIsLoading(false);
|
|
240
|
+
}, [natsConnected, email, product]);
|
|
241
|
+
const getSelectedOrg = (0, import_react.useCallback)(async () => {
|
|
242
|
+
if (!selectedOrgId || !natsConnected) return;
|
|
243
|
+
const res = await request(
|
|
244
|
+
"admin.orgs.getInfo",
|
|
245
|
+
{
|
|
246
|
+
id: selectedOrgId
|
|
247
|
+
},
|
|
248
|
+
{
|
|
249
|
+
product
|
|
250
|
+
}
|
|
251
|
+
);
|
|
252
|
+
setSelectedOrg(res.orgInfo);
|
|
253
|
+
}, [selectedOrgId, product, natsConnected]);
|
|
254
|
+
(0, import_react.useEffect)(() => {
|
|
255
|
+
if (!selectedOrgId || !natsConnected) {
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
getSelectedOrg();
|
|
259
|
+
updateAdminFlags();
|
|
260
|
+
}, [selectedOrgId, natsConnected]);
|
|
261
|
+
(0, import_react.useEffect)(() => {
|
|
262
|
+
if (natsConnected && autoLoad && email) {
|
|
263
|
+
getUser();
|
|
264
|
+
}
|
|
265
|
+
}, [natsConnected, autoLoad, email]);
|
|
266
|
+
const setOnlineStatus = (0, import_react.useCallback)(
|
|
267
|
+
async (status) => {
|
|
268
|
+
setOnlineStatusLocal(status);
|
|
269
|
+
if (!natsConnected) {
|
|
270
|
+
console.log("NATS not connected, cannot update user status");
|
|
271
|
+
return;
|
|
272
|
+
}
|
|
273
|
+
if (!user) {
|
|
274
|
+
console.log("User not available, cannot update user status");
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
if (!selectedOrgId) {
|
|
278
|
+
console.log("Org ID not selected, cannot update user status");
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
try {
|
|
282
|
+
const response = await request(import_types.UpdateUserStatusSubject, {
|
|
283
|
+
orgId: selectedOrgId,
|
|
284
|
+
userId: user.id || user.email,
|
|
285
|
+
status
|
|
286
|
+
});
|
|
287
|
+
if (!response.metadata.success) {
|
|
288
|
+
console.error("Failed to update user status:", response.metadata.error);
|
|
289
|
+
} else {
|
|
290
|
+
console.log("User status updated successfully:", status);
|
|
291
|
+
}
|
|
292
|
+
} catch (error2) {
|
|
293
|
+
console.error("Error updating user status:", error2);
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
297
|
+
[natsConnected, user, selectedOrgId]
|
|
298
|
+
);
|
|
299
|
+
return {
|
|
300
|
+
user,
|
|
301
|
+
error,
|
|
302
|
+
isLoading,
|
|
303
|
+
refresh: getUser,
|
|
304
|
+
selectedOrg,
|
|
305
|
+
selectedOrgId,
|
|
306
|
+
setSelectedOrgId,
|
|
307
|
+
userOrgs,
|
|
308
|
+
isAdmin,
|
|
309
|
+
isSuperAdmin,
|
|
310
|
+
createUser: create,
|
|
311
|
+
userInGroup,
|
|
312
|
+
getUserTeam: () => Promise.resolve({}),
|
|
313
|
+
updateTeamOnboardingData,
|
|
314
|
+
teams,
|
|
315
|
+
selectedTeamId,
|
|
316
|
+
setSelectedTeamId,
|
|
317
|
+
onlineStatus,
|
|
318
|
+
setOnlineStatus
|
|
319
|
+
};
|
|
320
|
+
};
|
|
321
|
+
|
|
322
|
+
// context/user-context.tsx
|
|
323
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
324
|
+
var UserContext = (0, import_react2.createContext)({
|
|
325
|
+
user: void 0,
|
|
326
|
+
isLoading: true,
|
|
327
|
+
refresh: () => {
|
|
328
|
+
},
|
|
329
|
+
selectedOrgId: void 0,
|
|
330
|
+
setSelectedOrgId: () => {
|
|
331
|
+
},
|
|
332
|
+
userOrgs: [],
|
|
333
|
+
selectedOrg: void 0,
|
|
334
|
+
isAdmin: false,
|
|
335
|
+
isSuperAdmin: false,
|
|
336
|
+
createUser: () => Promise.resolve({}),
|
|
337
|
+
userInGroup: () => false,
|
|
338
|
+
getUserTeam: () => Promise.resolve({}),
|
|
339
|
+
updateTeamOnboardingData: () => Promise.resolve(true),
|
|
340
|
+
teams: [],
|
|
341
|
+
selectedTeamId: void 0,
|
|
342
|
+
setSelectedTeamId: () => {
|
|
343
|
+
},
|
|
344
|
+
onlineStatus: "offline",
|
|
345
|
+
setOnlineStatus: () => {
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
var UserProvider = ({ children, email }) => {
|
|
349
|
+
const user = useUser(email);
|
|
350
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UserContext.Provider, { value: user, children });
|
|
351
|
+
};
|
|
352
|
+
var useUserContext = () => (0, import_react2.useContext)(UserContext);
|
|
353
|
+
|
|
354
|
+
// models/user-models.ts
|
|
355
|
+
var WidgetTypeCalendar = "calendar";
|
|
356
|
+
var WidgetTypeActivities = "activities";
|
|
357
|
+
var WidgetTypeEmail = "email";
|
|
358
|
+
var WidgetTypeTasks = "tasks";
|
|
359
|
+
var WidgetTypeNotes = "notes";
|
|
360
|
+
var WidgetTypeFiles = "files";
|
|
361
|
+
var WidgetTypeContacts = "contacts";
|
|
362
|
+
var WidgetTypeAccounts = "accounts";
|
|
363
|
+
var WidgetTypeLeads = "leads";
|
|
364
|
+
var WidgetTypeOpportunities = "opportunities";
|
|
365
|
+
var WidgetTypeChart = "chart";
|
|
366
|
+
var WidgetTypeOrders = "orders";
|
|
367
|
+
var ChartTypeBar = "Bar chart";
|
|
368
|
+
var ChartTypeLine = "Line chart";
|
|
369
|
+
var ChartTypePie = "Pie chart";
|
|
370
|
+
var ChartTypeDoughnut = "Doughnut chart";
|
|
371
|
+
var ChartTypeMetic = "Metric";
|
|
372
|
+
var AggregateTypeSum = "Sum";
|
|
373
|
+
var AggregateTypeCount = "Count";
|
|
374
|
+
var AggregateTypeAverage = "Average";
|
|
375
|
+
var AggregateTypeMin = "Min";
|
|
376
|
+
var AggregateTypeMax = "Max";
|
|
377
|
+
var AggregateTypeDistinct = "Distinct";
|
|
378
|
+
|
|
379
|
+
// models/admin-types.ts
|
|
380
|
+
var SubscriptionPlatformStripe = "stripe";
|
|
381
|
+
var SubscriptionPlatformCustom = "custom";
|
|
382
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
383
|
+
0 && (module.exports = {
|
|
384
|
+
AggregateTypeAverage,
|
|
385
|
+
AggregateTypeCount,
|
|
386
|
+
AggregateTypeDistinct,
|
|
387
|
+
AggregateTypeMax,
|
|
388
|
+
AggregateTypeMin,
|
|
389
|
+
AggregateTypeSum,
|
|
390
|
+
ChartTypeBar,
|
|
391
|
+
ChartTypeDoughnut,
|
|
392
|
+
ChartTypeLine,
|
|
393
|
+
ChartTypeMetic,
|
|
394
|
+
ChartTypePie,
|
|
395
|
+
SubscriptionPlatformCustom,
|
|
396
|
+
SubscriptionPlatformStripe,
|
|
397
|
+
UserContext,
|
|
398
|
+
UserProvider,
|
|
399
|
+
WidgetTypeAccounts,
|
|
400
|
+
WidgetTypeActivities,
|
|
401
|
+
WidgetTypeCalendar,
|
|
402
|
+
WidgetTypeChart,
|
|
403
|
+
WidgetTypeContacts,
|
|
404
|
+
WidgetTypeEmail,
|
|
405
|
+
WidgetTypeFiles,
|
|
406
|
+
WidgetTypeLeads,
|
|
407
|
+
WidgetTypeNotes,
|
|
408
|
+
WidgetTypeOpportunities,
|
|
409
|
+
WidgetTypeOrders,
|
|
410
|
+
WidgetTypeTasks,
|
|
411
|
+
useUser,
|
|
412
|
+
useUserContext
|
|
413
|
+
});
|
|
414
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../index.tsx","../context/user-context.tsx","../hooks/use-user.ts","../models/user-models.ts","../models/admin-types.ts"],"sourcesContent":["export * from \"./context\";\nexport * from \"./hooks\";\nexport * from \"./models\";\n// export * from \"./store\";\n\n// export * from \"./utils\";\n// export * from \"./client-types\";\n","\"use client\";\n\nimport { createContext, FC, ReactNode, useContext } from \"react\";\n\nimport { Team, UserResponse } from \"../models\";\nimport { useUser, UseUserType } from \"../hooks\";\n\nexport let UserContext = createContext<UseUserType>({\n user: undefined,\n isLoading: true,\n refresh: () => {},\n selectedOrgId: undefined,\n setSelectedOrgId: () => {},\n userOrgs: [],\n selectedOrg: undefined,\n isAdmin: false,\n isSuperAdmin: false,\n createUser: () => Promise.resolve({} as UserResponse),\n userInGroup: () => false,\n getUserTeam: () => Promise.resolve({} as Team),\n updateTeamOnboardingData: () => Promise.resolve(true),\n teams: [],\n selectedTeamId: undefined,\n setSelectedTeamId: () => {},\n onlineStatus: \"offline\",\n setOnlineStatus: () => {},\n});\n\ntype UserProviderProps = {\n children: ReactNode;\n email: string | undefined | null;\n};\n\nexport const UserProvider: FC<UserProviderProps> = ({ children, email }) => {\n const user = useUser(email);\n\n return <UserContext.Provider value={user}>{children}</UserContext.Provider>;\n};\n\nexport const useUserContext = () => useContext(UserContext);\n","\"use client\";\n\nimport { useNatsContext } from \"@elqnt/nats\";\nimport { useProductContext } from \"@elqnt/product\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n UpdateUserStatusRequest,\n UpdateUserStatusResponse,\n UpdateUserStatusSubject,\n UserStatusTS,\n} from \"@elqnt/types\";\nimport {\n OrgInfo,\n OrgInfoResponse,\n Team,\n User,\n UserOrgAccess,\n UserResponse,\n} from \"../models\";\n\n// Import OrgResponse from admin models for domain validation\ninterface OrgResponse {\n org: {\n id: string;\n title: string;\n mainDomain: string;\n [key: string]: any;\n };\n metadata: {\n success: boolean;\n error?: string;\n message?: string;\n };\n}\n\nexport interface UseUserType {\n user?: User;\n error?: Error;\n isLoading: boolean;\n refresh: () => void;\n selectedOrgId?: string;\n setSelectedOrgId?: (orgId: string) => void;\n userOrgs: UserOrgAccess[];\n selectedOrg?: OrgInfo;\n isAdmin: boolean;\n isSuperAdmin: boolean;\n createUser: (user: User) => Promise<UserResponse>;\n userInGroup: (group: string) => boolean;\n getUserTeam: () => Promise<Team | undefined>;\n updateTeamOnboardingData: (data: string) => Promise<Error | boolean>;\n teams: Team[];\n selectedTeamId?: string;\n setSelectedTeamId?: (id: string) => void;\n onlineStatus: UserStatusTS;\n setOnlineStatus: (status: UserStatusTS) => void;\n}\n\nexport const useUser = (\n email: string | undefined | null,\n autoLoad = true\n): UseUserType => {\n const { natsConnected, request } = useNatsContext();\n\n const [user, setUser] = useState<User | undefined>(undefined);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>(undefined);\n const [onlineStatus, setOnlineStatusLocal] = useState<UserStatusTS>(\"online\");\n const hasSetInitialStatus = useRef(false);\n\n const { product } = useProductContext();\n\n const [userOrgs, setUserOrgs] = useState<UserOrgAccess[]>([]);\n const [teams, setTeams] = useState<Team[]>([]);\n const [selectedTeamId, setSelectedTeamId] = useState<string | undefined>(\n undefined\n );\n\n const [selectedOrgId, setSelectedOrgId] = useState<string | undefined>(\n undefined\n );\n\n // Load orgId from localStorage on client side only\n useEffect(() => {\n const storedOrgId = localStorage.getItem(\"orgId\");\n if (storedOrgId) {\n setSelectedOrgId(storedOrgId);\n }\n }, []);\n\n const [selectedOrg, setSelectedOrg] = useState<OrgInfo | undefined>(\n undefined\n );\n\n const [isAdmin, setIsAdmin] = useState<boolean>(false);\n\n const [isSuperAdmin, setIsSuperAdmin] = useState<boolean>(false);\n\n // const [team, setTeam] = useState<Team | undefined>(undefined);\n\n const [userGroups, setUserGroups] = useState<string[]>([]);\n\n const getUserGroups = useCallback(async () => {\n if (!user || !selectedOrgId) return;\n const data = await request<object, { groups: string[] }>(\n \"user.groups.get\",\n {\n userId: user.id,\n },\n {\n orgId: selectedOrgId,\n }\n );\n\n if (!data || data?.groups.length === 0) {\n return;\n }\n\n // console.log(\"user groups\", data);\n\n //@ts-ignore\n setUserGroups(data.map((g) => g.toLowerCase().replaceAll(\" \", \"_\")));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [user, selectedOrgId]);\n\n async function updateTeamOnboardingData(\n data: string\n ): Promise<Error | boolean> {\n if (!natsConnected) {\n console.error(\"nats not connected\");\n return new Error(\"nats not connected\");\n }\n\n if (!user) {\n console.error(\"user not defined\");\n return new Error(\"user not defined\");\n }\n\n if (!user.teamId) {\n console.error(\"teamId not defined\");\n return new Error(\"teamId not defined\");\n }\n\n const res = await request<any, any>(\n \"admin.teams.updateOnboardingData\",\n {\n data,\n teamId: user.teamId,\n },\n {\n orgId: selectedOrgId,\n product,\n }\n );\n\n if (res instanceof Error) {\n setError(res);\n setIsLoading(false);\n return res;\n }\n\n return res.success;\n }\n\n useEffect(() => {\n if (!user || !selectedOrgId) {\n return;\n }\n getUserGroups();\n }, [user, selectedOrgId, getUserGroups]);\n\n function userInGroup(group: string) {\n return userGroups.includes(group.toLowerCase().replaceAll(\" \", \"_\"));\n }\n\n useEffect(() => {\n if (!user) {\n return;\n }\n\n if (user.orgAccess && user?.orgAccess.length > 0) {\n if (selectedOrgId === undefined) {\n const orgAccess = user.orgAccess[0];\n\n //@ts-ignore\n setSelectedOrgId(orgAccess.orgId);\n setUserOrgs(user.orgAccess);\n updateAdminFlags();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [user, selectedOrgId]);\n\n const updateAdminFlags = useCallback(() => {\n const orgAccess = userOrgs.find((org) => org.orgId === selectedOrgId);\n const isAdmin = orgAccess?.roles.includes(\"admin\") ?? false;\n setIsAdmin(isAdmin);\n\n if (!isAdmin) {\n setSelectedTeamId(user?.teamId);\n }\n\n const isSuperAdmin = orgAccess?.roles.includes(\"super-admin\") ?? false;\n setIsSuperAdmin(isSuperAdmin);\n }, [userOrgs, selectedOrgId, user?.teamId]);\n\n const create = async (data: User) => {\n setIsLoading(true);\n const res = await request<User, UserResponse>(\"admin.users.create\", data, {\n product,\n });\n setIsLoading(false);\n\n if (res instanceof Error) {\n setError(res);\n return res;\n }\n\n return res;\n };\n\n const getUser = useCallback(async () => {\n if (!natsConnected || !email || !product) {\n console.log(\"will not get user\", natsConnected, email, product);\n return;\n }\n\n console.log(\"will get user\", email, product);\n\n setIsLoading(true);\n const data = await request<object, UserResponse>(\n \"admin.users.getOneByEmail\",\n {\n email,\n },\n {\n product,\n }\n );\n\n if (data.metadata.success) {\n setUser(data.user);\n } else {\n // User not found in DB - try domain validation for AD users\n console.log(\"User not found in DB, attempting domain validation\");\n\n // Extract domain from email\n const emailDomain = email.split(\"@\")[1];\n\n if (emailDomain) {\n try {\n const orgResponse = await request<{ domain: string }, OrgResponse>(\n \"admin.orgs.getByDomain\",\n { domain: emailDomain },\n { product }\n );\n\n if (orgResponse.metadata?.success && orgResponse.org) {\n console.log(\"Found org by domain, creating virtual user\", orgResponse.org);\n\n // Create virtual user with org access\n const virtualUser: User = {\n email,\n firstName: email.split(\"@\")[0], // Use email prefix as first name\n lastName: \"\",\n authProviderName: \"azure\",\n orgAccess: [\n {\n orgId: orgResponse.org.id,\n orgTitle: orgResponse.org.title,\n roles: [\"user\"], // Default role for AD users\n isSingleAccount: true,\n },\n ],\n isSysAdmin: false,\n };\n\n setUser(virtualUser);\n setIsLoading(false);\n return;\n }\n } catch (domainError) {\n console.log(\"Domain validation failed\", domainError);\n }\n }\n\n // If domain validation fails, set original error\n setError(new Error(\"User not found\"));\n }\n\n setIsLoading(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [natsConnected, email, product]);\n\n const getSelectedOrg = useCallback(async () => {\n if (!selectedOrgId || !natsConnected) return;\n\n const res = await request<object, OrgInfoResponse>(\n \"admin.orgs.getInfo\",\n {\n id: selectedOrgId,\n },\n {\n product,\n }\n );\n\n setSelectedOrg(res.orgInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedOrgId, product, natsConnected]);\n\n useEffect(() => {\n if (!selectedOrgId || !natsConnected) {\n return;\n }\n\n getSelectedOrg();\n updateAdminFlags();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedOrgId, natsConnected]);\n\n useEffect(() => {\n if (natsConnected && autoLoad && email) {\n getUser();\n }\n }, [natsConnected, autoLoad, email]);\n\n // Automatically set online status when user loads (removed due to infinite loop issues)\n // Users can manually set their status via the dropdown menu\n\n // Persist user status to backend\n const setOnlineStatus = useCallback(\n async (status: UserStatusTS) => {\n // Update local state immediately for responsiveness\n setOnlineStatusLocal(status);\n\n // Early returns\n if (!natsConnected) {\n console.log(\"NATS not connected, cannot update user status\");\n return;\n }\n\n if (!user) {\n console.log(\"User not available, cannot update user status\");\n return;\n }\n\n if (!selectedOrgId) {\n console.log(\"Org ID not selected, cannot update user status\");\n return;\n }\n\n // Persist to backend\n try {\n const response = await request<\n UpdateUserStatusRequest,\n UpdateUserStatusResponse\n >(UpdateUserStatusSubject, {\n orgId: selectedOrgId,\n userId: user.id || user.email,\n status: status,\n });\n\n if (!response.metadata.success) {\n console.error(\"Failed to update user status:\", response.metadata.error);\n // Optionally revert local state on failure\n // setOnlineStatusLocal(previousStatus);\n } else {\n console.log(\"User status updated successfully:\", status);\n }\n } catch (error) {\n console.error(\"Error updating user status:\", error);\n // Optionally revert local state on error\n // setOnlineStatusLocal(previousStatus);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [natsConnected, user, selectedOrgId]\n );\n\n return {\n user,\n error,\n isLoading,\n refresh: getUser,\n selectedOrg,\n selectedOrgId,\n setSelectedOrgId,\n userOrgs,\n isAdmin,\n isSuperAdmin,\n createUser: create,\n userInGroup,\n getUserTeam: () => Promise.resolve({} as Team),\n updateTeamOnboardingData,\n teams,\n selectedTeamId,\n setSelectedTeamId,\n onlineStatus,\n setOnlineStatus,\n };\n};\n","// Code generated by tygo. DO NOT EDIT.\n\n//////////\n// source: user.go\n\nexport type WidgetType = string;\nexport const WidgetTypeCalendar: WidgetType = \"calendar\";\nexport const WidgetTypeActivities: WidgetType = \"activities\";\nexport const WidgetTypeEmail: WidgetType = \"email\";\nexport const WidgetTypeTasks: WidgetType = \"tasks\";\nexport const WidgetTypeNotes: WidgetType = \"notes\";\nexport const WidgetTypeFiles: WidgetType = \"files\";\nexport const WidgetTypeContacts: WidgetType = \"contacts\";\nexport const WidgetTypeAccounts: WidgetType = \"accounts\";\nexport const WidgetTypeLeads: WidgetType = \"leads\";\nexport const WidgetTypeOpportunities: WidgetType = \"opportunities\";\nexport const WidgetTypeChart: WidgetType = \"chart\";\nexport const WidgetTypeOrders: WidgetType = \"orders\";\nexport interface Widget {\n id?: string /* ObjectID */;\n userId: string;\n title: string;\n subTitle?: string;\n type: WidgetType;\n chartSettings?: ChartSettings;\n slotIndex: number /* int */;\n}\nexport type ChartType = string;\nexport const ChartTypeBar: ChartType = \"Bar chart\";\nexport const ChartTypeLine: ChartType = \"Line chart\";\nexport const ChartTypePie: ChartType = \"Pie chart\";\nexport const ChartTypeDoughnut: ChartType = \"Doughnut chart\";\nexport const ChartTypeMetic: ChartType = \"Metric\";\nexport type AggregateType = string;\nexport const AggregateTypeSum: AggregateType = \"Sum\";\nexport const AggregateTypeCount: AggregateType = \"Count\";\nexport const AggregateTypeAverage: AggregateType = \"Average\";\nexport const AggregateTypeMin: AggregateType = \"Min\";\nexport const AggregateTypeMax: AggregateType = \"Max\";\nexport const AggregateTypeDistinct: AggregateType = \"Distinct\";\nexport interface MetricResult {\n aggregateType: AggregateType;\n value: any;\n compareAggregateType: AggregateType;\n compareValue: any;\n}\nexport interface DateValue {\n date: string;\n value: number /* float64 */;\n}\nexport interface ChartSettings {\n chartType: ChartType;\n aggregateType: AggregateType;\n tableName: string;\n groupByFieldName: string;\n valueFieldName: string;\n filterFieldName: string;\n filterFieldValue: string;\n enableCompare: boolean;\n compareTitle: string;\n compareAggregateType: AggregateType;\n compareTableName: string;\n compareValueFieldName: string;\n compareFilterFieldName: string;\n compareFilterFieldValue: string;\n}\n","// Types from admin package needed by auth\nexport interface ResponseMetadata {\n success: boolean;\n timestamp: string /* RFC3339 */;\n message?: string;\n error?: string;\n}\n\nexport interface UserOrgAccess {\n orgId: string /* ObjectID */;\n orgTitle: string;\n roles: string[];\n isSingleAccount: boolean;\n entityRecordFilter?: any /* entities.EntityRecordLookup */;\n}\n\n// UserSettings represents user preferences (elastic JSON structure)\nexport interface UserSettings {\n theme?: string; // \"system\" | \"light\" | \"dark\"\n language?: string; // \"auto\" | \"en\" | \"ar\" | etc.\n timezone?: string; // \"auto\" | \"America/New_York\" | etc.\n occupation?: string; // User's occupation/role\n company?: string; // User's company/organization\n}\n\n// NotificationPreferences represents user notification settings\nexport interface NotificationPreferences {\n pushEnabled: boolean;\n newChatAssignment: boolean;\n newMessages: boolean;\n escalations: boolean;\n urgentOnly: boolean;\n soundEnabled: boolean;\n doNotDisturb: boolean;\n dndStart?: string; // \"22:00\" format\n dndEnd?: string; // \"08:00\" format\n}\n\nexport interface User {\n id?: string /* ObjectID */;\n email: string;\n firstName: string;\n lastName: string;\n authProviderName: string;\n orgAccess: UserOrgAccess[];\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n createdBy?: string;\n updatedBy?: string;\n isTeamAdmin?: boolean;\n teamId?: string;\n teamName?: string;\n isSysAdmin?: boolean;\n}\n\nexport interface UserResponse {\n user: User;\n metadata: ResponseMetadata;\n}\n\n// Request/Response for settings operations\nexport interface UpdateUserSettingsRequest {\n id: string;\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n}\n\nexport interface UserSettingsResponse {\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n metadata: ResponseMetadata;\n}\n\nexport interface Team {\n id?: string /* ObjectID */;\n name: string;\n isSubscribed: boolean;\n subscribedAt: number /* int64 */;\n plan: string;\n ownerName: string;\n ownerEmail: string;\n subscriptionPlatform: SubscriptionPlatform;\n subscriptionId: string;\n onboardingDone: boolean;\n onboardingData: string;\n}\n\nexport type SubscriptionPlatform = string;\nexport const SubscriptionPlatformStripe: SubscriptionPlatform = \"stripe\";\nexport const SubscriptionPlatformCustom: SubscriptionPlatform = \"custom\";\n\nexport interface OrgInfo {\n id?: string;\n title: string;\n logoUrl: string;\n mainDomain?: string;\n apps: any[];\n}\n\nexport interface OrgInfoResponse {\n orgInfo: OrgInfo;\n metadata: ResponseMetadata;\n}"],"mappings":"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","names":["import_react","isAdmin","isSuperAdmin","error"]}
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
// context/user-context.tsx
|
|
2
|
+
import { createContext, useContext } from "react";
|
|
3
|
+
|
|
4
|
+
// hooks/use-user.ts
|
|
5
|
+
import { useNatsContext } from "@elqnt/nats";
|
|
6
|
+
import { useProductContext } from "@elqnt/product";
|
|
7
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
8
|
+
import {
|
|
9
|
+
UpdateUserStatusSubject
|
|
10
|
+
} from "@elqnt/types";
|
|
11
|
+
var useUser = (email, autoLoad = true) => {
|
|
12
|
+
const { natsConnected, request } = useNatsContext();
|
|
13
|
+
const [user, setUser] = useState(void 0);
|
|
14
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
15
|
+
const [error, setError] = useState(void 0);
|
|
16
|
+
const [onlineStatus, setOnlineStatusLocal] = useState("online");
|
|
17
|
+
const hasSetInitialStatus = useRef(false);
|
|
18
|
+
const { product } = useProductContext();
|
|
19
|
+
const [userOrgs, setUserOrgs] = useState([]);
|
|
20
|
+
const [teams, setTeams] = useState([]);
|
|
21
|
+
const [selectedTeamId, setSelectedTeamId] = useState(
|
|
22
|
+
void 0
|
|
23
|
+
);
|
|
24
|
+
const [selectedOrgId, setSelectedOrgId] = useState(
|
|
25
|
+
void 0
|
|
26
|
+
);
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
const storedOrgId = localStorage.getItem("orgId");
|
|
29
|
+
if (storedOrgId) {
|
|
30
|
+
setSelectedOrgId(storedOrgId);
|
|
31
|
+
}
|
|
32
|
+
}, []);
|
|
33
|
+
const [selectedOrg, setSelectedOrg] = useState(
|
|
34
|
+
void 0
|
|
35
|
+
);
|
|
36
|
+
const [isAdmin, setIsAdmin] = useState(false);
|
|
37
|
+
const [isSuperAdmin, setIsSuperAdmin] = useState(false);
|
|
38
|
+
const [userGroups, setUserGroups] = useState([]);
|
|
39
|
+
const getUserGroups = useCallback(async () => {
|
|
40
|
+
if (!user || !selectedOrgId) return;
|
|
41
|
+
const data = await request(
|
|
42
|
+
"user.groups.get",
|
|
43
|
+
{
|
|
44
|
+
userId: user.id
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
orgId: selectedOrgId
|
|
48
|
+
}
|
|
49
|
+
);
|
|
50
|
+
if (!data || data?.groups.length === 0) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
setUserGroups(data.map((g) => g.toLowerCase().replaceAll(" ", "_")));
|
|
54
|
+
}, [user, selectedOrgId]);
|
|
55
|
+
async function updateTeamOnboardingData(data) {
|
|
56
|
+
if (!natsConnected) {
|
|
57
|
+
console.error("nats not connected");
|
|
58
|
+
return new Error("nats not connected");
|
|
59
|
+
}
|
|
60
|
+
if (!user) {
|
|
61
|
+
console.error("user not defined");
|
|
62
|
+
return new Error("user not defined");
|
|
63
|
+
}
|
|
64
|
+
if (!user.teamId) {
|
|
65
|
+
console.error("teamId not defined");
|
|
66
|
+
return new Error("teamId not defined");
|
|
67
|
+
}
|
|
68
|
+
const res = await request(
|
|
69
|
+
"admin.teams.updateOnboardingData",
|
|
70
|
+
{
|
|
71
|
+
data,
|
|
72
|
+
teamId: user.teamId
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
orgId: selectedOrgId,
|
|
76
|
+
product
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
if (res instanceof Error) {
|
|
80
|
+
setError(res);
|
|
81
|
+
setIsLoading(false);
|
|
82
|
+
return res;
|
|
83
|
+
}
|
|
84
|
+
return res.success;
|
|
85
|
+
}
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
if (!user || !selectedOrgId) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
getUserGroups();
|
|
91
|
+
}, [user, selectedOrgId, getUserGroups]);
|
|
92
|
+
function userInGroup(group) {
|
|
93
|
+
return userGroups.includes(group.toLowerCase().replaceAll(" ", "_"));
|
|
94
|
+
}
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
if (!user) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (user.orgAccess && user?.orgAccess.length > 0) {
|
|
100
|
+
if (selectedOrgId === void 0) {
|
|
101
|
+
const orgAccess = user.orgAccess[0];
|
|
102
|
+
setSelectedOrgId(orgAccess.orgId);
|
|
103
|
+
setUserOrgs(user.orgAccess);
|
|
104
|
+
updateAdminFlags();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}, [user, selectedOrgId]);
|
|
108
|
+
const updateAdminFlags = useCallback(() => {
|
|
109
|
+
const orgAccess = userOrgs.find((org) => org.orgId === selectedOrgId);
|
|
110
|
+
const isAdmin2 = orgAccess?.roles.includes("admin") ?? false;
|
|
111
|
+
setIsAdmin(isAdmin2);
|
|
112
|
+
if (!isAdmin2) {
|
|
113
|
+
setSelectedTeamId(user?.teamId);
|
|
114
|
+
}
|
|
115
|
+
const isSuperAdmin2 = orgAccess?.roles.includes("super-admin") ?? false;
|
|
116
|
+
setIsSuperAdmin(isSuperAdmin2);
|
|
117
|
+
}, [userOrgs, selectedOrgId, user?.teamId]);
|
|
118
|
+
const create = async (data) => {
|
|
119
|
+
setIsLoading(true);
|
|
120
|
+
const res = await request("admin.users.create", data, {
|
|
121
|
+
product
|
|
122
|
+
});
|
|
123
|
+
setIsLoading(false);
|
|
124
|
+
if (res instanceof Error) {
|
|
125
|
+
setError(res);
|
|
126
|
+
return res;
|
|
127
|
+
}
|
|
128
|
+
return res;
|
|
129
|
+
};
|
|
130
|
+
const getUser = useCallback(async () => {
|
|
131
|
+
if (!natsConnected || !email || !product) {
|
|
132
|
+
console.log("will not get user", natsConnected, email, product);
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
console.log("will get user", email, product);
|
|
136
|
+
setIsLoading(true);
|
|
137
|
+
const data = await request(
|
|
138
|
+
"admin.users.getOneByEmail",
|
|
139
|
+
{
|
|
140
|
+
email
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
product
|
|
144
|
+
}
|
|
145
|
+
);
|
|
146
|
+
if (data.metadata.success) {
|
|
147
|
+
setUser(data.user);
|
|
148
|
+
} else {
|
|
149
|
+
console.log("User not found in DB, attempting domain validation");
|
|
150
|
+
const emailDomain = email.split("@")[1];
|
|
151
|
+
if (emailDomain) {
|
|
152
|
+
try {
|
|
153
|
+
const orgResponse = await request(
|
|
154
|
+
"admin.orgs.getByDomain",
|
|
155
|
+
{ domain: emailDomain },
|
|
156
|
+
{ product }
|
|
157
|
+
);
|
|
158
|
+
if (orgResponse.metadata?.success && orgResponse.org) {
|
|
159
|
+
console.log("Found org by domain, creating virtual user", orgResponse.org);
|
|
160
|
+
const virtualUser = {
|
|
161
|
+
email,
|
|
162
|
+
firstName: email.split("@")[0],
|
|
163
|
+
// Use email prefix as first name
|
|
164
|
+
lastName: "",
|
|
165
|
+
authProviderName: "azure",
|
|
166
|
+
orgAccess: [
|
|
167
|
+
{
|
|
168
|
+
orgId: orgResponse.org.id,
|
|
169
|
+
orgTitle: orgResponse.org.title,
|
|
170
|
+
roles: ["user"],
|
|
171
|
+
// Default role for AD users
|
|
172
|
+
isSingleAccount: true
|
|
173
|
+
}
|
|
174
|
+
],
|
|
175
|
+
isSysAdmin: false
|
|
176
|
+
};
|
|
177
|
+
setUser(virtualUser);
|
|
178
|
+
setIsLoading(false);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
} catch (domainError) {
|
|
182
|
+
console.log("Domain validation failed", domainError);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
setError(new Error("User not found"));
|
|
186
|
+
}
|
|
187
|
+
setIsLoading(false);
|
|
188
|
+
}, [natsConnected, email, product]);
|
|
189
|
+
const getSelectedOrg = useCallback(async () => {
|
|
190
|
+
if (!selectedOrgId || !natsConnected) return;
|
|
191
|
+
const res = await request(
|
|
192
|
+
"admin.orgs.getInfo",
|
|
193
|
+
{
|
|
194
|
+
id: selectedOrgId
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
product
|
|
198
|
+
}
|
|
199
|
+
);
|
|
200
|
+
setSelectedOrg(res.orgInfo);
|
|
201
|
+
}, [selectedOrgId, product, natsConnected]);
|
|
202
|
+
useEffect(() => {
|
|
203
|
+
if (!selectedOrgId || !natsConnected) {
|
|
204
|
+
return;
|
|
205
|
+
}
|
|
206
|
+
getSelectedOrg();
|
|
207
|
+
updateAdminFlags();
|
|
208
|
+
}, [selectedOrgId, natsConnected]);
|
|
209
|
+
useEffect(() => {
|
|
210
|
+
if (natsConnected && autoLoad && email) {
|
|
211
|
+
getUser();
|
|
212
|
+
}
|
|
213
|
+
}, [natsConnected, autoLoad, email]);
|
|
214
|
+
const setOnlineStatus = useCallback(
|
|
215
|
+
async (status) => {
|
|
216
|
+
setOnlineStatusLocal(status);
|
|
217
|
+
if (!natsConnected) {
|
|
218
|
+
console.log("NATS not connected, cannot update user status");
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (!user) {
|
|
222
|
+
console.log("User not available, cannot update user status");
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
if (!selectedOrgId) {
|
|
226
|
+
console.log("Org ID not selected, cannot update user status");
|
|
227
|
+
return;
|
|
228
|
+
}
|
|
229
|
+
try {
|
|
230
|
+
const response = await request(UpdateUserStatusSubject, {
|
|
231
|
+
orgId: selectedOrgId,
|
|
232
|
+
userId: user.id || user.email,
|
|
233
|
+
status
|
|
234
|
+
});
|
|
235
|
+
if (!response.metadata.success) {
|
|
236
|
+
console.error("Failed to update user status:", response.metadata.error);
|
|
237
|
+
} else {
|
|
238
|
+
console.log("User status updated successfully:", status);
|
|
239
|
+
}
|
|
240
|
+
} catch (error2) {
|
|
241
|
+
console.error("Error updating user status:", error2);
|
|
242
|
+
}
|
|
243
|
+
},
|
|
244
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
245
|
+
[natsConnected, user, selectedOrgId]
|
|
246
|
+
);
|
|
247
|
+
return {
|
|
248
|
+
user,
|
|
249
|
+
error,
|
|
250
|
+
isLoading,
|
|
251
|
+
refresh: getUser,
|
|
252
|
+
selectedOrg,
|
|
253
|
+
selectedOrgId,
|
|
254
|
+
setSelectedOrgId,
|
|
255
|
+
userOrgs,
|
|
256
|
+
isAdmin,
|
|
257
|
+
isSuperAdmin,
|
|
258
|
+
createUser: create,
|
|
259
|
+
userInGroup,
|
|
260
|
+
getUserTeam: () => Promise.resolve({}),
|
|
261
|
+
updateTeamOnboardingData,
|
|
262
|
+
teams,
|
|
263
|
+
selectedTeamId,
|
|
264
|
+
setSelectedTeamId,
|
|
265
|
+
onlineStatus,
|
|
266
|
+
setOnlineStatus
|
|
267
|
+
};
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
// context/user-context.tsx
|
|
271
|
+
import { jsx } from "react/jsx-runtime";
|
|
272
|
+
var UserContext = createContext({
|
|
273
|
+
user: void 0,
|
|
274
|
+
isLoading: true,
|
|
275
|
+
refresh: () => {
|
|
276
|
+
},
|
|
277
|
+
selectedOrgId: void 0,
|
|
278
|
+
setSelectedOrgId: () => {
|
|
279
|
+
},
|
|
280
|
+
userOrgs: [],
|
|
281
|
+
selectedOrg: void 0,
|
|
282
|
+
isAdmin: false,
|
|
283
|
+
isSuperAdmin: false,
|
|
284
|
+
createUser: () => Promise.resolve({}),
|
|
285
|
+
userInGroup: () => false,
|
|
286
|
+
getUserTeam: () => Promise.resolve({}),
|
|
287
|
+
updateTeamOnboardingData: () => Promise.resolve(true),
|
|
288
|
+
teams: [],
|
|
289
|
+
selectedTeamId: void 0,
|
|
290
|
+
setSelectedTeamId: () => {
|
|
291
|
+
},
|
|
292
|
+
onlineStatus: "offline",
|
|
293
|
+
setOnlineStatus: () => {
|
|
294
|
+
}
|
|
295
|
+
});
|
|
296
|
+
var UserProvider = ({ children, email }) => {
|
|
297
|
+
const user = useUser(email);
|
|
298
|
+
return /* @__PURE__ */ jsx(UserContext.Provider, { value: user, children });
|
|
299
|
+
};
|
|
300
|
+
var useUserContext = () => useContext(UserContext);
|
|
301
|
+
|
|
302
|
+
// models/user-models.ts
|
|
303
|
+
var WidgetTypeCalendar = "calendar";
|
|
304
|
+
var WidgetTypeActivities = "activities";
|
|
305
|
+
var WidgetTypeEmail = "email";
|
|
306
|
+
var WidgetTypeTasks = "tasks";
|
|
307
|
+
var WidgetTypeNotes = "notes";
|
|
308
|
+
var WidgetTypeFiles = "files";
|
|
309
|
+
var WidgetTypeContacts = "contacts";
|
|
310
|
+
var WidgetTypeAccounts = "accounts";
|
|
311
|
+
var WidgetTypeLeads = "leads";
|
|
312
|
+
var WidgetTypeOpportunities = "opportunities";
|
|
313
|
+
var WidgetTypeChart = "chart";
|
|
314
|
+
var WidgetTypeOrders = "orders";
|
|
315
|
+
var ChartTypeBar = "Bar chart";
|
|
316
|
+
var ChartTypeLine = "Line chart";
|
|
317
|
+
var ChartTypePie = "Pie chart";
|
|
318
|
+
var ChartTypeDoughnut = "Doughnut chart";
|
|
319
|
+
var ChartTypeMetic = "Metric";
|
|
320
|
+
var AggregateTypeSum = "Sum";
|
|
321
|
+
var AggregateTypeCount = "Count";
|
|
322
|
+
var AggregateTypeAverage = "Average";
|
|
323
|
+
var AggregateTypeMin = "Min";
|
|
324
|
+
var AggregateTypeMax = "Max";
|
|
325
|
+
var AggregateTypeDistinct = "Distinct";
|
|
326
|
+
|
|
327
|
+
// models/admin-types.ts
|
|
328
|
+
var SubscriptionPlatformStripe = "stripe";
|
|
329
|
+
var SubscriptionPlatformCustom = "custom";
|
|
330
|
+
export {
|
|
331
|
+
AggregateTypeAverage,
|
|
332
|
+
AggregateTypeCount,
|
|
333
|
+
AggregateTypeDistinct,
|
|
334
|
+
AggregateTypeMax,
|
|
335
|
+
AggregateTypeMin,
|
|
336
|
+
AggregateTypeSum,
|
|
337
|
+
ChartTypeBar,
|
|
338
|
+
ChartTypeDoughnut,
|
|
339
|
+
ChartTypeLine,
|
|
340
|
+
ChartTypeMetic,
|
|
341
|
+
ChartTypePie,
|
|
342
|
+
SubscriptionPlatformCustom,
|
|
343
|
+
SubscriptionPlatformStripe,
|
|
344
|
+
UserContext,
|
|
345
|
+
UserProvider,
|
|
346
|
+
WidgetTypeAccounts,
|
|
347
|
+
WidgetTypeActivities,
|
|
348
|
+
WidgetTypeCalendar,
|
|
349
|
+
WidgetTypeChart,
|
|
350
|
+
WidgetTypeContacts,
|
|
351
|
+
WidgetTypeEmail,
|
|
352
|
+
WidgetTypeFiles,
|
|
353
|
+
WidgetTypeLeads,
|
|
354
|
+
WidgetTypeNotes,
|
|
355
|
+
WidgetTypeOpportunities,
|
|
356
|
+
WidgetTypeOrders,
|
|
357
|
+
WidgetTypeTasks,
|
|
358
|
+
useUser,
|
|
359
|
+
useUserContext
|
|
360
|
+
};
|
|
361
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../context/user-context.tsx","../hooks/use-user.ts","../models/user-models.ts","../models/admin-types.ts"],"sourcesContent":["\"use client\";\n\nimport { createContext, FC, ReactNode, useContext } from \"react\";\n\nimport { Team, UserResponse } from \"../models\";\nimport { useUser, UseUserType } from \"../hooks\";\n\nexport let UserContext = createContext<UseUserType>({\n user: undefined,\n isLoading: true,\n refresh: () => {},\n selectedOrgId: undefined,\n setSelectedOrgId: () => {},\n userOrgs: [],\n selectedOrg: undefined,\n isAdmin: false,\n isSuperAdmin: false,\n createUser: () => Promise.resolve({} as UserResponse),\n userInGroup: () => false,\n getUserTeam: () => Promise.resolve({} as Team),\n updateTeamOnboardingData: () => Promise.resolve(true),\n teams: [],\n selectedTeamId: undefined,\n setSelectedTeamId: () => {},\n onlineStatus: \"offline\",\n setOnlineStatus: () => {},\n});\n\ntype UserProviderProps = {\n children: ReactNode;\n email: string | undefined | null;\n};\n\nexport const UserProvider: FC<UserProviderProps> = ({ children, email }) => {\n const user = useUser(email);\n\n return <UserContext.Provider value={user}>{children}</UserContext.Provider>;\n};\n\nexport const useUserContext = () => useContext(UserContext);\n","\"use client\";\n\nimport { useNatsContext } from \"@elqnt/nats\";\nimport { useProductContext } from \"@elqnt/product\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n UpdateUserStatusRequest,\n UpdateUserStatusResponse,\n UpdateUserStatusSubject,\n UserStatusTS,\n} from \"@elqnt/types\";\nimport {\n OrgInfo,\n OrgInfoResponse,\n Team,\n User,\n UserOrgAccess,\n UserResponse,\n} from \"../models\";\n\n// Import OrgResponse from admin models for domain validation\ninterface OrgResponse {\n org: {\n id: string;\n title: string;\n mainDomain: string;\n [key: string]: any;\n };\n metadata: {\n success: boolean;\n error?: string;\n message?: string;\n };\n}\n\nexport interface UseUserType {\n user?: User;\n error?: Error;\n isLoading: boolean;\n refresh: () => void;\n selectedOrgId?: string;\n setSelectedOrgId?: (orgId: string) => void;\n userOrgs: UserOrgAccess[];\n selectedOrg?: OrgInfo;\n isAdmin: boolean;\n isSuperAdmin: boolean;\n createUser: (user: User) => Promise<UserResponse>;\n userInGroup: (group: string) => boolean;\n getUserTeam: () => Promise<Team | undefined>;\n updateTeamOnboardingData: (data: string) => Promise<Error | boolean>;\n teams: Team[];\n selectedTeamId?: string;\n setSelectedTeamId?: (id: string) => void;\n onlineStatus: UserStatusTS;\n setOnlineStatus: (status: UserStatusTS) => void;\n}\n\nexport const useUser = (\n email: string | undefined | null,\n autoLoad = true\n): UseUserType => {\n const { natsConnected, request } = useNatsContext();\n\n const [user, setUser] = useState<User | undefined>(undefined);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | undefined>(undefined);\n const [onlineStatus, setOnlineStatusLocal] = useState<UserStatusTS>(\"online\");\n const hasSetInitialStatus = useRef(false);\n\n const { product } = useProductContext();\n\n const [userOrgs, setUserOrgs] = useState<UserOrgAccess[]>([]);\n const [teams, setTeams] = useState<Team[]>([]);\n const [selectedTeamId, setSelectedTeamId] = useState<string | undefined>(\n undefined\n );\n\n const [selectedOrgId, setSelectedOrgId] = useState<string | undefined>(\n undefined\n );\n\n // Load orgId from localStorage on client side only\n useEffect(() => {\n const storedOrgId = localStorage.getItem(\"orgId\");\n if (storedOrgId) {\n setSelectedOrgId(storedOrgId);\n }\n }, []);\n\n const [selectedOrg, setSelectedOrg] = useState<OrgInfo | undefined>(\n undefined\n );\n\n const [isAdmin, setIsAdmin] = useState<boolean>(false);\n\n const [isSuperAdmin, setIsSuperAdmin] = useState<boolean>(false);\n\n // const [team, setTeam] = useState<Team | undefined>(undefined);\n\n const [userGroups, setUserGroups] = useState<string[]>([]);\n\n const getUserGroups = useCallback(async () => {\n if (!user || !selectedOrgId) return;\n const data = await request<object, { groups: string[] }>(\n \"user.groups.get\",\n {\n userId: user.id,\n },\n {\n orgId: selectedOrgId,\n }\n );\n\n if (!data || data?.groups.length === 0) {\n return;\n }\n\n // console.log(\"user groups\", data);\n\n //@ts-ignore\n setUserGroups(data.map((g) => g.toLowerCase().replaceAll(\" \", \"_\")));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [user, selectedOrgId]);\n\n async function updateTeamOnboardingData(\n data: string\n ): Promise<Error | boolean> {\n if (!natsConnected) {\n console.error(\"nats not connected\");\n return new Error(\"nats not connected\");\n }\n\n if (!user) {\n console.error(\"user not defined\");\n return new Error(\"user not defined\");\n }\n\n if (!user.teamId) {\n console.error(\"teamId not defined\");\n return new Error(\"teamId not defined\");\n }\n\n const res = await request<any, any>(\n \"admin.teams.updateOnboardingData\",\n {\n data,\n teamId: user.teamId,\n },\n {\n orgId: selectedOrgId,\n product,\n }\n );\n\n if (res instanceof Error) {\n setError(res);\n setIsLoading(false);\n return res;\n }\n\n return res.success;\n }\n\n useEffect(() => {\n if (!user || !selectedOrgId) {\n return;\n }\n getUserGroups();\n }, [user, selectedOrgId, getUserGroups]);\n\n function userInGroup(group: string) {\n return userGroups.includes(group.toLowerCase().replaceAll(\" \", \"_\"));\n }\n\n useEffect(() => {\n if (!user) {\n return;\n }\n\n if (user.orgAccess && user?.orgAccess.length > 0) {\n if (selectedOrgId === undefined) {\n const orgAccess = user.orgAccess[0];\n\n //@ts-ignore\n setSelectedOrgId(orgAccess.orgId);\n setUserOrgs(user.orgAccess);\n updateAdminFlags();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [user, selectedOrgId]);\n\n const updateAdminFlags = useCallback(() => {\n const orgAccess = userOrgs.find((org) => org.orgId === selectedOrgId);\n const isAdmin = orgAccess?.roles.includes(\"admin\") ?? false;\n setIsAdmin(isAdmin);\n\n if (!isAdmin) {\n setSelectedTeamId(user?.teamId);\n }\n\n const isSuperAdmin = orgAccess?.roles.includes(\"super-admin\") ?? false;\n setIsSuperAdmin(isSuperAdmin);\n }, [userOrgs, selectedOrgId, user?.teamId]);\n\n const create = async (data: User) => {\n setIsLoading(true);\n const res = await request<User, UserResponse>(\"admin.users.create\", data, {\n product,\n });\n setIsLoading(false);\n\n if (res instanceof Error) {\n setError(res);\n return res;\n }\n\n return res;\n };\n\n const getUser = useCallback(async () => {\n if (!natsConnected || !email || !product) {\n console.log(\"will not get user\", natsConnected, email, product);\n return;\n }\n\n console.log(\"will get user\", email, product);\n\n setIsLoading(true);\n const data = await request<object, UserResponse>(\n \"admin.users.getOneByEmail\",\n {\n email,\n },\n {\n product,\n }\n );\n\n if (data.metadata.success) {\n setUser(data.user);\n } else {\n // User not found in DB - try domain validation for AD users\n console.log(\"User not found in DB, attempting domain validation\");\n\n // Extract domain from email\n const emailDomain = email.split(\"@\")[1];\n\n if (emailDomain) {\n try {\n const orgResponse = await request<{ domain: string }, OrgResponse>(\n \"admin.orgs.getByDomain\",\n { domain: emailDomain },\n { product }\n );\n\n if (orgResponse.metadata?.success && orgResponse.org) {\n console.log(\"Found org by domain, creating virtual user\", orgResponse.org);\n\n // Create virtual user with org access\n const virtualUser: User = {\n email,\n firstName: email.split(\"@\")[0], // Use email prefix as first name\n lastName: \"\",\n authProviderName: \"azure\",\n orgAccess: [\n {\n orgId: orgResponse.org.id,\n orgTitle: orgResponse.org.title,\n roles: [\"user\"], // Default role for AD users\n isSingleAccount: true,\n },\n ],\n isSysAdmin: false,\n };\n\n setUser(virtualUser);\n setIsLoading(false);\n return;\n }\n } catch (domainError) {\n console.log(\"Domain validation failed\", domainError);\n }\n }\n\n // If domain validation fails, set original error\n setError(new Error(\"User not found\"));\n }\n\n setIsLoading(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [natsConnected, email, product]);\n\n const getSelectedOrg = useCallback(async () => {\n if (!selectedOrgId || !natsConnected) return;\n\n const res = await request<object, OrgInfoResponse>(\n \"admin.orgs.getInfo\",\n {\n id: selectedOrgId,\n },\n {\n product,\n }\n );\n\n setSelectedOrg(res.orgInfo);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedOrgId, product, natsConnected]);\n\n useEffect(() => {\n if (!selectedOrgId || !natsConnected) {\n return;\n }\n\n getSelectedOrg();\n updateAdminFlags();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedOrgId, natsConnected]);\n\n useEffect(() => {\n if (natsConnected && autoLoad && email) {\n getUser();\n }\n }, [natsConnected, autoLoad, email]);\n\n // Automatically set online status when user loads (removed due to infinite loop issues)\n // Users can manually set their status via the dropdown menu\n\n // Persist user status to backend\n const setOnlineStatus = useCallback(\n async (status: UserStatusTS) => {\n // Update local state immediately for responsiveness\n setOnlineStatusLocal(status);\n\n // Early returns\n if (!natsConnected) {\n console.log(\"NATS not connected, cannot update user status\");\n return;\n }\n\n if (!user) {\n console.log(\"User not available, cannot update user status\");\n return;\n }\n\n if (!selectedOrgId) {\n console.log(\"Org ID not selected, cannot update user status\");\n return;\n }\n\n // Persist to backend\n try {\n const response = await request<\n UpdateUserStatusRequest,\n UpdateUserStatusResponse\n >(UpdateUserStatusSubject, {\n orgId: selectedOrgId,\n userId: user.id || user.email,\n status: status,\n });\n\n if (!response.metadata.success) {\n console.error(\"Failed to update user status:\", response.metadata.error);\n // Optionally revert local state on failure\n // setOnlineStatusLocal(previousStatus);\n } else {\n console.log(\"User status updated successfully:\", status);\n }\n } catch (error) {\n console.error(\"Error updating user status:\", error);\n // Optionally revert local state on error\n // setOnlineStatusLocal(previousStatus);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [natsConnected, user, selectedOrgId]\n );\n\n return {\n user,\n error,\n isLoading,\n refresh: getUser,\n selectedOrg,\n selectedOrgId,\n setSelectedOrgId,\n userOrgs,\n isAdmin,\n isSuperAdmin,\n createUser: create,\n userInGroup,\n getUserTeam: () => Promise.resolve({} as Team),\n updateTeamOnboardingData,\n teams,\n selectedTeamId,\n setSelectedTeamId,\n onlineStatus,\n setOnlineStatus,\n };\n};\n","// Code generated by tygo. DO NOT EDIT.\n\n//////////\n// source: user.go\n\nexport type WidgetType = string;\nexport const WidgetTypeCalendar: WidgetType = \"calendar\";\nexport const WidgetTypeActivities: WidgetType = \"activities\";\nexport const WidgetTypeEmail: WidgetType = \"email\";\nexport const WidgetTypeTasks: WidgetType = \"tasks\";\nexport const WidgetTypeNotes: WidgetType = \"notes\";\nexport const WidgetTypeFiles: WidgetType = \"files\";\nexport const WidgetTypeContacts: WidgetType = \"contacts\";\nexport const WidgetTypeAccounts: WidgetType = \"accounts\";\nexport const WidgetTypeLeads: WidgetType = \"leads\";\nexport const WidgetTypeOpportunities: WidgetType = \"opportunities\";\nexport const WidgetTypeChart: WidgetType = \"chart\";\nexport const WidgetTypeOrders: WidgetType = \"orders\";\nexport interface Widget {\n id?: string /* ObjectID */;\n userId: string;\n title: string;\n subTitle?: string;\n type: WidgetType;\n chartSettings?: ChartSettings;\n slotIndex: number /* int */;\n}\nexport type ChartType = string;\nexport const ChartTypeBar: ChartType = \"Bar chart\";\nexport const ChartTypeLine: ChartType = \"Line chart\";\nexport const ChartTypePie: ChartType = \"Pie chart\";\nexport const ChartTypeDoughnut: ChartType = \"Doughnut chart\";\nexport const ChartTypeMetic: ChartType = \"Metric\";\nexport type AggregateType = string;\nexport const AggregateTypeSum: AggregateType = \"Sum\";\nexport const AggregateTypeCount: AggregateType = \"Count\";\nexport const AggregateTypeAverage: AggregateType = \"Average\";\nexport const AggregateTypeMin: AggregateType = \"Min\";\nexport const AggregateTypeMax: AggregateType = \"Max\";\nexport const AggregateTypeDistinct: AggregateType = \"Distinct\";\nexport interface MetricResult {\n aggregateType: AggregateType;\n value: any;\n compareAggregateType: AggregateType;\n compareValue: any;\n}\nexport interface DateValue {\n date: string;\n value: number /* float64 */;\n}\nexport interface ChartSettings {\n chartType: ChartType;\n aggregateType: AggregateType;\n tableName: string;\n groupByFieldName: string;\n valueFieldName: string;\n filterFieldName: string;\n filterFieldValue: string;\n enableCompare: boolean;\n compareTitle: string;\n compareAggregateType: AggregateType;\n compareTableName: string;\n compareValueFieldName: string;\n compareFilterFieldName: string;\n compareFilterFieldValue: string;\n}\n","// Types from admin package needed by auth\nexport interface ResponseMetadata {\n success: boolean;\n timestamp: string /* RFC3339 */;\n message?: string;\n error?: string;\n}\n\nexport interface UserOrgAccess {\n orgId: string /* ObjectID */;\n orgTitle: string;\n roles: string[];\n isSingleAccount: boolean;\n entityRecordFilter?: any /* entities.EntityRecordLookup */;\n}\n\n// UserSettings represents user preferences (elastic JSON structure)\nexport interface UserSettings {\n theme?: string; // \"system\" | \"light\" | \"dark\"\n language?: string; // \"auto\" | \"en\" | \"ar\" | etc.\n timezone?: string; // \"auto\" | \"America/New_York\" | etc.\n occupation?: string; // User's occupation/role\n company?: string; // User's company/organization\n}\n\n// NotificationPreferences represents user notification settings\nexport interface NotificationPreferences {\n pushEnabled: boolean;\n newChatAssignment: boolean;\n newMessages: boolean;\n escalations: boolean;\n urgentOnly: boolean;\n soundEnabled: boolean;\n doNotDisturb: boolean;\n dndStart?: string; // \"22:00\" format\n dndEnd?: string; // \"08:00\" format\n}\n\nexport interface User {\n id?: string /* ObjectID */;\n email: string;\n firstName: string;\n lastName: string;\n authProviderName: string;\n orgAccess: UserOrgAccess[];\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n createdAt?: number /* int64 */;\n updatedAt?: number /* int64 */;\n createdBy?: string;\n updatedBy?: string;\n isTeamAdmin?: boolean;\n teamId?: string;\n teamName?: string;\n isSysAdmin?: boolean;\n}\n\nexport interface UserResponse {\n user: User;\n metadata: ResponseMetadata;\n}\n\n// Request/Response for settings operations\nexport interface UpdateUserSettingsRequest {\n id: string;\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n}\n\nexport interface UserSettingsResponse {\n settings?: UserSettings;\n notificationPreferences?: NotificationPreferences;\n metadata: ResponseMetadata;\n}\n\nexport interface Team {\n id?: string /* ObjectID */;\n name: string;\n isSubscribed: boolean;\n subscribedAt: number /* int64 */;\n plan: string;\n ownerName: string;\n ownerEmail: string;\n subscriptionPlatform: SubscriptionPlatform;\n subscriptionId: string;\n onboardingDone: boolean;\n onboardingData: string;\n}\n\nexport type SubscriptionPlatform = string;\nexport const SubscriptionPlatformStripe: SubscriptionPlatform = \"stripe\";\nexport const SubscriptionPlatformCustom: SubscriptionPlatform = \"custom\";\n\nexport interface OrgInfo {\n id?: string;\n title: string;\n logoUrl: string;\n mainDomain?: string;\n apps: any[];\n}\n\nexport interface OrgInfoResponse {\n orgInfo: OrgInfo;\n metadata: ResponseMetadata;\n}"],"mappings":"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","names":["isAdmin","isSuperAdmin","error"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@elqnt/auth",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Authentication and user context for Eloquent platform",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"module": "./dist/index.mjs",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.mjs",
|
|
11
|
+
"require": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": ["dist"],
|
|
16
|
+
"scripts": {
|
|
17
|
+
"build": "tsup",
|
|
18
|
+
"dev": "tsup --watch",
|
|
19
|
+
"clean": "rm -rf dist",
|
|
20
|
+
"typecheck": "tsc --noEmit"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "git+https://github.com/Blazi-Commerce/eloquent-packages.git",
|
|
25
|
+
"directory": "packages/auth"
|
|
26
|
+
},
|
|
27
|
+
"dependencies": {
|
|
28
|
+
"@elqnt/nats": "^1.0.0",
|
|
29
|
+
"@elqnt/product": "^1.0.0",
|
|
30
|
+
"@elqnt/types": "^1.0.0"
|
|
31
|
+
},
|
|
32
|
+
"peerDependencies": {
|
|
33
|
+
"@reduxjs/toolkit": "^2.0.0",
|
|
34
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
35
|
+
"react-redux": "^9.0.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@reduxjs/toolkit": "^2.3.0",
|
|
39
|
+
"@types/react": "^19.0.0",
|
|
40
|
+
"react": "^19.0.0",
|
|
41
|
+
"react-redux": "^9.1.2",
|
|
42
|
+
"tsup": "^8.0.0",
|
|
43
|
+
"typescript": "^5.0.0"
|
|
44
|
+
}
|
|
45
|
+
}
|