@etohq/user 1.5.1-alpha.3 → 1.5.1-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,12 @@
1
1
  import { Context, DAL, InferEntityType, InternalModuleDeclaration, ModulesSdkTypes, ProjectConfigOptions, UserTypes } from "@etohq/framework/types";
2
+ import { ModulesSdkUtils } from "@etohq/framework/utils";
2
3
  import { Invite, User } from "../models";
3
4
  type InjectedDependencies = {
4
5
  baseRepository: DAL.RepositoryService;
5
6
  userService: ModulesSdkTypes.IEtoInternalService<any>;
6
7
  inviteService: ModulesSdkTypes.IEtoInternalService<any>;
7
8
  };
8
- declare const UserModuleService_base: import("@etohq/framework/utils").EtoServiceReturnType<{
9
+ declare const UserModuleService_base: ModulesSdkUtils.EtoServiceReturnType<{
9
10
  User: {
10
11
  dto: UserTypes.UserDTO;
11
12
  };
@@ -14,9 +15,10 @@ declare const UserModuleService_base: import("@etohq/framework/utils").EtoServic
14
15
  };
15
16
  }>;
16
17
  export default class UserModuleService extends UserModuleService_base implements UserTypes.IUserModuleService {
18
+ protected readonly moduleDeclaration: InternalModuleDeclaration;
17
19
  protected baseRepository_: DAL.RepositoryService;
18
- protected readonly userService_: ModulesSdkTypes.IEtoInternalService<InferEntityType<typeof User>>;
19
- protected readonly inviteService_: ModulesSdkTypes.IEtoInternalService<InferEntityType<typeof Invite>>;
20
+ protected userService_: ModulesSdkTypes.IEtoInternalService<InferEntityType<typeof User>>;
21
+ protected inviteService_: ModulesSdkTypes.IEtoInternalService<InferEntityType<typeof Invite>>;
20
22
  protected readonly config: {
21
23
  jwtSecret: string;
22
24
  jwtPublicKey?: string;
@@ -25,10 +27,18 @@ export default class UserModuleService extends UserModuleService_base implements
25
27
  expiresIn: number;
26
28
  };
27
29
  };
28
- constructor({ userService, inviteService, baseRepository }: InjectedDependencies, moduleDeclaration: InternalModuleDeclaration);
30
+ constructor({ baseRepository, userService, inviteService }: InjectedDependencies, moduleDeclaration: InternalModuleDeclaration);
31
+ /**
32
+ * Get user attributes for ABAC permission checks
33
+ */
34
+ getUserAttributes(userId: string, sharedContext?: Context): Promise<Record<string, any>>;
35
+ /**
36
+ * Get multiple user attributes (batch operation)
37
+ */
38
+ getUserAttributesBatch(userIds: string[], sharedContext?: Context): Promise<Record<string, Record<string, any>>>;
29
39
  validateInviteToken(token: string, sharedContext?: Context): Promise<UserTypes.InviteDTO>;
30
40
  refreshInviteTokens(inviteIds: string[], sharedContext?: Context): Promise<UserTypes.InviteDTO[]>;
31
- refreshInviteTokens_(inviteIds: string[], sharedContext?: Context): Promise<{
41
+ protected refreshInviteTokens_(inviteIds: string[], sharedContext?: Context): Promise<{
32
42
  id: string;
33
43
  email: string;
34
44
  accepted: boolean;
@@ -45,10 +55,10 @@ export default class UserModuleService extends UserModuleService_base implements
45
55
  updateUsers(data: UserTypes.UpdateUserDTO, sharedContext?: Context): Promise<UserTypes.UserDTO>;
46
56
  createInvites(data: UserTypes.CreateInviteDTO[], sharedContext?: Context): Promise<UserTypes.InviteDTO[]>;
47
57
  createInvites(data: UserTypes.CreateInviteDTO, sharedContext?: Context): Promise<UserTypes.InviteDTO>;
48
- private createInvites_;
58
+ protected createInvites_(data: UserTypes.CreateInviteDTO[], sharedContext?: Context): Promise<InferEntityType<typeof Invite>[]>;
49
59
  updateInvites(data: UserTypes.UpdateInviteDTO[], sharedContext?: Context): Promise<UserTypes.InviteDTO[]>;
50
60
  updateInvites(data: UserTypes.UpdateInviteDTO, sharedContext?: Context): Promise<UserTypes.InviteDTO>;
51
- private generateToken;
61
+ protected generateToken(data: any): string;
52
62
  }
53
63
  export {};
54
64
  //# sourceMappingURL=user-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"user-module.d.ts","sourceRoot":"","sources":["../../src/services/user-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-module.d.ts","sourceRoot":"","sources":["../../src/services/user-module.ts"],"names":[],"mappings":"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"}
@@ -21,10 +21,11 @@ const node_crypto_1 = __importDefault(require("node:crypto"));
21
21
  const _models_1 = require("../models");
22
22
  const utils_2 = require("../utils/utils");
23
23
  const DEFAULT_VALID_INVITE_DURATION_SECONDS = 60 * 60 * 24;
24
- class UserModuleService extends (0, utils_1.EtoService)({ User: _models_1.User, Invite: _models_1.Invite }) {
25
- constructor({ userService, inviteService, baseRepository }, moduleDeclaration) {
24
+ class UserModuleService extends utils_1.ModulesSdkUtils.EtoService({ User: _models_1.User, Invite: _models_1.Invite }) {
25
+ constructor({ baseRepository, userService, inviteService }, moduleDeclaration) {
26
26
  // @ts-ignore
27
27
  super(...arguments);
28
+ this.moduleDeclaration = moduleDeclaration;
28
29
  this.baseRepository_ = baseRepository;
29
30
  this.userService_ = userService;
30
31
  this.inviteService_ = inviteService;
@@ -43,6 +44,42 @@ class UserModuleService extends (0, utils_1.EtoService)({ User: _models_1.User,
43
44
  throw new utils_1.EtoError(utils_1.EtoError.Types.INVALID_DATA, "No jwt_secret was provided in the UserModule's options. Please add one.");
44
45
  }
45
46
  }
47
+ // ----------------- User Attribute Methods
48
+ /**
49
+ * Get user attributes for ABAC permission checks
50
+ */
51
+ async getUserAttributes(userId, sharedContext) {
52
+ const user = await this.userService_.retrieve(userId, {}, sharedContext);
53
+ return {
54
+ ownerId: user.id,
55
+ email: user.email,
56
+ firstName: user.first_name,
57
+ lastName: user.last_name,
58
+ isActive: true,
59
+ createdAt: user.created_at,
60
+ metadata: user.metadata || {},
61
+ };
62
+ }
63
+ /**
64
+ * Get multiple user attributes (batch operation)
65
+ */
66
+ async getUserAttributesBatch(userIds, sharedContext) {
67
+ const users = await this.userService_.list({ id: userIds }, {}, sharedContext);
68
+ const attributesMap = {};
69
+ users.forEach(user => {
70
+ attributesMap[user.id] = {
71
+ ownerId: user.id,
72
+ email: user.email,
73
+ firstName: user.first_name,
74
+ lastName: user.last_name,
75
+ isActive: true,
76
+ createdAt: user.created_at,
77
+ metadata: user.metadata || {},
78
+ };
79
+ });
80
+ return attributesMap;
81
+ }
82
+ // =========== Invite Token Methods
46
83
  async validateInviteToken(token, sharedContext = {}) {
47
84
  const options = {
48
85
  ...(this.config.jwt_verify_options ?? this.config.jwtOptions),
@@ -98,9 +135,7 @@ class UserModuleService extends (0, utils_1.EtoService)({ User: _models_1.User,
98
135
  async createUsers(data, sharedContext = {}) {
99
136
  const input = Array.isArray(data) ? data : [data];
100
137
  const users = await this.userService_.create(input, sharedContext);
101
- const serializedUsers = await this.baseRepository_.serialize(users, {
102
- populate: true,
103
- });
138
+ const serializedUsers = await this.baseRepository_.serialize(users, { populate: true });
104
139
  (0, utils_1.moduleEventBuilderFactory)({
105
140
  eventName: utils_1.UserEvents.USER_CREATED,
106
141
  source: utils_1.Modules.USER,
@@ -116,9 +151,7 @@ class UserModuleService extends (0, utils_1.EtoService)({ User: _models_1.User,
116
151
  async updateUsers(data, sharedContext = {}) {
117
152
  const input = Array.isArray(data) ? data : [data];
118
153
  const updatedUsers = await this.userService_.update(input, sharedContext);
119
- const serializedUsers = await this.baseRepository_.serialize(updatedUsers, {
120
- populate: true,
121
- });
154
+ const serializedUsers = await this.baseRepository_.serialize(updatedUsers, { populate: true });
122
155
  (0, utils_1.moduleEventBuilderFactory)({
123
156
  eventName: utils_1.UserEvents.USER_UPDATED,
124
157
  source: utils_1.Modules.USER,
@@ -134,9 +167,7 @@ class UserModuleService extends (0, utils_1.EtoService)({ User: _models_1.User,
134
167
  async createInvites(data, sharedContext = {}) {
135
168
  const input = Array.isArray(data) ? data : [data];
136
169
  const invites = await this.createInvites_(input, sharedContext);
137
- const serializedInvites = await this.baseRepository_.serialize(invites, {
138
- populate: true,
139
- });
170
+ const serializedInvites = await this.baseRepository_.serialize(invites, { populate: true });
140
171
  (0, utils_1.moduleEventBuilderFactory)({
141
172
  eventName: utils_1.UserEvents.INVITE_CREATED,
142
173
  source: utils_1.Modules.USER,
@@ -158,9 +189,7 @@ class UserModuleService extends (0, utils_1.EtoService)({ User: _models_1.User,
158
189
  return Array.isArray(data) ? serializedInvites : serializedInvites[0];
159
190
  }
160
191
  async createInvites_(data, sharedContext = {}) {
161
- const alreadyExistingUsers = await this.listUsers({
162
- email: data.map((d) => d.email),
163
- });
192
+ const alreadyExistingUsers = await this.userService_.list({ email: data.map((d) => d.email) }, {}, sharedContext);
164
193
  if (alreadyExistingUsers.length) {
165
194
  throw new utils_1.EtoError(utils_1.EtoError.Types.INVALID_DATA, `User account for following email(s) already exist: ${alreadyExistingUsers
166
195
  .map((u) => u.email)
@@ -182,9 +211,7 @@ class UserModuleService extends (0, utils_1.EtoService)({ User: _models_1.User,
182
211
  async updateInvites(data, sharedContext = {}) {
183
212
  const input = Array.isArray(data) ? data : [data];
184
213
  const updatedInvites = await this.inviteService_.update(input, sharedContext);
185
- const serializedInvites = await this.baseRepository_.serialize(updatedInvites, {
186
- populate: true,
187
- });
214
+ const serializedInvites = await this.baseRepository_.serialize(updatedInvites, { populate: true });
188
215
  (0, utils_1.moduleEventBuilderFactory)({
189
216
  eventName: utils_1.UserEvents.INVITE_UPDATED,
190
217
  source: utils_1.Modules.USER,
@@ -196,16 +223,16 @@ class UserModuleService extends (0, utils_1.EtoService)({ User: _models_1.User,
196
223
  });
197
224
  return Array.isArray(data) ? serializedInvites : serializedInvites[0];
198
225
  }
226
+ // =========== Helpers
199
227
  generateToken(data) {
200
228
  const jwtId = this.config.jwtOptions.jwtid ?? node_crypto_1.default.randomUUID();
201
- const token = (0, utils_1.generateJwtToken)(data, {
229
+ return (0, utils_1.generateJwtToken)(data, {
202
230
  secret: this.config.jwtSecret,
203
231
  jwtOptions: {
204
232
  ...this.config.jwtOptions,
205
233
  jwtid: jwtId,
206
234
  },
207
235
  });
208
- return token;
209
236
  }
210
237
  }
211
238
  exports.default = UserModuleService;
@@ -1 +1 @@
1
- {"version":3,"file":"user-module.js","sourceRoot":"","sources":["../../src/services/user-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-module.js","sourceRoot":"","sources":["../../src/services/user-module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=user-validation-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-validation-service.d.ts","sourceRoot":"","sources":["../../src/services/user-validation-service.ts"],"names":[],"mappings":""}
@@ -0,0 +1,457 @@
1
+ "use strict";
2
+ // import { ModulesSdkUtils, buildQuery } from "@etohq/framework/utils";
3
+ // import { ETO, Context, FindConfig } from "@etohq/framework/types";
4
+ // import { InjectManager, EtoContext, EtoError } from "@etohq/framework/utils";
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // // Import email blocking validation utility
7
+ // import {
8
+ // checkIfBookerEmailIsBlocked,
9
+ // validateBookerEmailNotBlocked,
10
+ // type EmailBlockingService,
11
+ // type UserRecord,
12
+ // type EmailBlockingQuery,
13
+ // type EmailBlockingResult
14
+ // } from "@etohq/jo-utils/validate-email-blocking";
15
+ // type InjectedDependencies = ETO.Application.Services;
16
+ // /**
17
+ // * UserValidationService - Core User Module Service
18
+ // * Handles user-domain validations including email blocking
19
+ // * Part of core platform modules, used across the platform
20
+ // */
21
+ // export default class UserValidationService extends ModulesSdkUtils.EtoInternalService<
22
+ // InjectedDependencies,
23
+ // any // User entity type would be defined in core
24
+ // > implements EmailBlockingService {
25
+ // protected readonly __userRepository__: any;
26
+ // protected readonly __organizationRepository__: any;
27
+ // constructor(container: InjectedDependencies) {
28
+ // // @ts-ignore - Standard ETO pattern
29
+ // super(...arguments);
30
+ // this.__userRepository__ = container.userRepository;
31
+ // this.__organizationRepository__ = container.organizationRepository;
32
+ // }
33
+ // // ===== EMAIL BLOCKING SERVICE IMPLEMENTATION =====
34
+ // @InjectManager("__userRepository__")
35
+ // async findUserByEmail(
36
+ // filters: Record<string, any>,
37
+ // config?: FindConfig<any>,
38
+ // @EtoContext() sharedContext: Context = {}
39
+ // ): Promise<UserRecord | null> {
40
+ // const queryOptions = buildQuery(filters, config);
41
+ // const [user] = await this.__userRepository__.find(queryOptions, sharedContext);
42
+ // if (!user) return null;
43
+ // return {
44
+ // id: user.id,
45
+ // email: user.email,
46
+ // emailVerified: user.email_verified,
47
+ // secondaryEmails: user.secondary_emails?.map((se: any) => ({
48
+ // email: se.email,
49
+ // emailVerified: se.email_verified
50
+ // })) || []
51
+ // };
52
+ // }
53
+ // async getBlacklistedEmails(organizationId?: string): Promise<string[]> {
54
+ // // Global blacklist from environment
55
+ // const globalBlacklist = process.env.BLACKLISTED_GUEST_EMAILS
56
+ // ? process.env.BLACKLISTED_GUEST_EMAILS.split(",").map(email => email.trim())
57
+ // : [];
58
+ // // Organization-specific blacklist
59
+ // if (organizationId) {
60
+ // try {
61
+ // const orgBlacklist = await this.getOrganizationBlacklist(organizationId);
62
+ // return [...globalBlacklist, ...orgBlacklist];
63
+ // } catch (error) {
64
+ // console.warn(`Failed to get organization blacklist for ${organizationId}:`, error);
65
+ // }
66
+ // }
67
+ // return globalBlacklist;
68
+ // }
69
+ // async getResourceTypeBlockedEmails(resourceTypeId: string): Promise<string[]> {
70
+ // // Resource-type specific blocked emails would be handled by the resource module
71
+ // // This is a cross-module concern that should be handled by workflows
72
+ // return [];
73
+ // }
74
+ // // ===== USER-DOMAIN VALIDATION METHODS =====
75
+ // /**
76
+ // * Validate user email is not blocked
77
+ // */
78
+ // async validateUserEmailNotBlocked(
79
+ // query: EmailBlockingQuery
80
+ // ): Promise<EmailBlockingResult> {
81
+ // return await checkIfBookerEmailIsBlocked(query, this);
82
+ // }
83
+ // /**
84
+ // * Validate user email and throw if blocked
85
+ // */
86
+ // async validateUserEmailAllowed(
87
+ // query: EmailBlockingQuery
88
+ // ): Promise<void> {
89
+ // await validateBookerEmailNotBlocked(query, this);
90
+ // }
91
+ // /**
92
+ // * Check if user exists and is verified
93
+ // */
94
+ // @InjectManager("__userRepository__")
95
+ // async checkUserVerificationStatus(
96
+ // email: string,
97
+ // @EtoContext() sharedContext: Context = {}
98
+ // ): Promise<{
99
+ // exists: boolean;
100
+ // isVerified: boolean;
101
+ // userId?: string;
102
+ // }> {
103
+ // const filters = {
104
+ // $or: [
105
+ // { email: email.toLowerCase() },
106
+ // {
107
+ // secondary_emails: {
108
+ // $elemMatch: { email: email.toLowerCase() }
109
+ // }
110
+ // }
111
+ // ]
112
+ // };
113
+ // const config = {
114
+ // select: ['id', 'email', 'email_verified'],
115
+ // relations: ['secondary_emails'],
116
+ // take: 1
117
+ // };
118
+ // const user = await this.findUserByEmail(filters, config, sharedContext);
119
+ // if (!user) {
120
+ // return { exists: false, isVerified: false };
121
+ // }
122
+ // const isVerified = (user.email === email.toLowerCase() && user.emailVerified) ||
123
+ // (user.secondaryEmails?.some(se => se.email === email.toLowerCase() && se.emailVerified)) ||
124
+ // false;
125
+ // return {
126
+ // exists: true,
127
+ // isVerified,
128
+ // userId: user.id
129
+ // };
130
+ // }
131
+ // /**
132
+ // * Get user by email with verification status
133
+ // */
134
+ // @InjectManager("__userRepository__")
135
+ // async getUserByEmailWithVerification(
136
+ // email: string,
137
+ // @EtoContext() sharedContext: Context = {}
138
+ // ): Promise<UserRecord | null> {
139
+ // const filters = {
140
+ // $or: [
141
+ // {
142
+ // email: email.toLowerCase(),
143
+ // email_verified: { $ne: null }
144
+ // },
145
+ // {
146
+ // secondary_emails: {
147
+ // $elemMatch: {
148
+ // email: email.toLowerCase(),
149
+ // email_verified: { $ne: null }
150
+ // }
151
+ // }
152
+ // }
153
+ // ]
154
+ // };
155
+ // const config = {
156
+ // select: ['id', 'email', 'email_verified'],
157
+ // relations: ['secondary_emails'],
158
+ // take: 1
159
+ // };
160
+ // return await this.findUserByEmail(filters, config, sharedContext);
161
+ // }
162
+ // // ===== ORGANIZATION BLACKLIST METHODS =====
163
+ // /**
164
+ // * Load and validate users for booking (Cal.com loadAndValidateUsers pattern)
165
+ // */
166
+ // async loadAndValidateUsers(
167
+ // params: {
168
+ // resourceType: {
169
+ // id: string;
170
+ // user_id?: string;
171
+ // team_id?: string;
172
+ // scheduling_type?: 'COLLECTIVE' | 'ROUND_ROBIN';
173
+ // assign_all_team_members?: boolean;
174
+ // };
175
+ // bookingStartTime: Date;
176
+ // bookingEndTime: Date;
177
+ // bookerEmail: string;
178
+ // organizationId?: string;
179
+ // },
180
+ // @EtoContext() sharedContext: Context = {}
181
+ // ): Promise<{
182
+ // users: Array<{
183
+ // id: string;
184
+ // email: string;
185
+ // name: string;
186
+ // timeZone: string;
187
+ // isFixed: boolean;
188
+ // available: boolean;
189
+ // credentials?: Array<{ type: string; key: string }>;
190
+ // }>;
191
+ // validationResults: {
192
+ // allUsersValid: boolean;
193
+ // blockedUsers: string[];
194
+ // unavailableUsers: string[];
195
+ // validationErrors: string[];
196
+ // };
197
+ // }> {
198
+ // // 1. Load users based on resource type configuration
199
+ // const users = await this.loadUsersForResourceType(params.resourceType, sharedContext);
200
+ // // 2. Validate users are not blocked
201
+ // const blockedUsers = await this.checkIfUsersAreBlocked(
202
+ // users.map(u => u.email),
203
+ // params.bookerEmail,
204
+ // sharedContext
205
+ // );
206
+ // // 3. Check user availability for the booking time
207
+ // const availabilityResults = await this.checkUsersAvailability(
208
+ // users,
209
+ // params.bookingStartTime,
210
+ // params.bookingEndTime,
211
+ // sharedContext
212
+ // );
213
+ // // 4. Enrich users with credentials and metadata
214
+ // const enrichedUsers = await this.enrichUsersWithCredentials(users, sharedContext);
215
+ // // 5. Apply scheduling type logic
216
+ // const finalUsers = this.applySchedulingTypeLogic(
217
+ // enrichedUsers,
218
+ // params.resourceType.scheduling_type,
219
+ // availabilityResults
220
+ // );
221
+ // const validationErrors: string[] = [];
222
+ // if (blockedUsers.length > 0) {
223
+ // validationErrors.push(`Blocked users detected: ${blockedUsers.join(', ')}`);
224
+ // }
225
+ // const unavailableUsers = finalUsers.filter(u => !u.available).map(u => u.email);
226
+ // if (unavailableUsers.length > 0 && params.resourceType.scheduling_type === 'COLLECTIVE') {
227
+ // validationErrors.push(`All users must be available for collective booking: ${unavailableUsers.join(', ')}`);
228
+ // }
229
+ // return {
230
+ // users: finalUsers,
231
+ // validationResults: {
232
+ // allUsersValid: validationErrors.length === 0,
233
+ // blockedUsers,
234
+ // unavailableUsers,
235
+ // validationErrors
236
+ // }
237
+ // };
238
+ // }
239
+ // /**
240
+ // * Load users for resource type (Cal.com pattern)
241
+ // */
242
+ // private async loadUsersForResourceType(
243
+ // resourceType: {
244
+ // id: string;
245
+ // user_id?: string;
246
+ // team_id?: string;
247
+ // assign_all_team_members?: boolean;
248
+ // },
249
+ // @EtoContext() sharedContext: Context = {}
250
+ // ): Promise<Array<{
251
+ // id: string;
252
+ // email: string;
253
+ // name: string;
254
+ // timeZone: string;
255
+ // isFixed: boolean;
256
+ // }>> {
257
+ // const users: Array<{
258
+ // id: string;
259
+ // email: string;
260
+ // name: string;
261
+ // timeZone: string;
262
+ // isFixed: boolean;
263
+ // }> = [];
264
+ // // 1. Load owner user if specified
265
+ // if (resourceType.user_id) {
266
+ // const ownerUser = await this.loadUserById(resourceType.user_id, sharedContext);
267
+ // if (ownerUser) {
268
+ // users.push({
269
+ // ...ownerUser,
270
+ // isFixed: true // Owner is always fixed
271
+ // });
272
+ // }
273
+ // }
274
+ // // 2. Load team users if team resource type
275
+ // if (resourceType.team_id) {
276
+ // const teamUsers = await this.loadTeamUsers(
277
+ // resourceType.team_id,
278
+ // resourceType.assign_all_team_members || false,
279
+ // sharedContext
280
+ // );
281
+ // users.push(...teamUsers.map(user => ({
282
+ // ...user,
283
+ // isFixed: false // Team members are not fixed (can be round-robin)
284
+ // })));
285
+ // }
286
+ // return users;
287
+ // }
288
+ // /**
289
+ // * Load user by ID
290
+ // */
291
+ // private async loadUserById(
292
+ // userId: string,
293
+ // @EtoContext() sharedContext: Context = {}
294
+ // ): Promise<{
295
+ // id: string;
296
+ // email: string;
297
+ // name: string;
298
+ // timeZone: string;
299
+ // } | null> {
300
+ // // This would query the user repository
301
+ // // For now, return mock data
302
+ // return {
303
+ // id: userId,
304
+ // email: 'user@example.com',
305
+ // name: 'User Name',
306
+ // timeZone: 'UTC'
307
+ // };
308
+ // }
309
+ // /**
310
+ // * Load team users
311
+ // */
312
+ // private async loadTeamUsers(
313
+ // teamId: string,
314
+ // assignAllMembers: boolean,
315
+ // @EtoContext() sharedContext: Context = {}
316
+ // ): Promise<Array<{
317
+ // id: string;
318
+ // email: string;
319
+ // name: string;
320
+ // timeZone: string;
321
+ // }>> {
322
+ // // This would query team members
323
+ // // For now, return empty array
324
+ // return [];
325
+ // }
326
+ // /**
327
+ // * Check if users are blocked (Cal.com pattern)
328
+ // */
329
+ // private async checkIfUsersAreBlocked(
330
+ // userEmails: string[],
331
+ // bookerEmail: string,
332
+ // @EtoContext() sharedContext: Context = {}
333
+ // ): Promise<string[]> {
334
+ // // This would check against watchlist/blocked users
335
+ // // For now, return no blocked users
336
+ // return [];
337
+ // }
338
+ // /**
339
+ // * Check users availability for booking time
340
+ // */
341
+ // private async checkUsersAvailability(
342
+ // users: Array<{ id: string; email: string }>,
343
+ // startTime: Date,
344
+ // endTime: Date,
345
+ // @EtoContext() sharedContext: Context = {}
346
+ // ): Promise<Record<string, boolean>> {
347
+ // const availability: Record<string, boolean> = {};
348
+ // // Check each user's availability
349
+ // for (const user of users) {
350
+ // // This would integrate with AvailabilityService
351
+ // // For now, assume all users are available
352
+ // availability[user.id] = true;
353
+ // }
354
+ // return availability;
355
+ // }
356
+ // /**
357
+ // * Enrich users with credentials
358
+ // */
359
+ // private async enrichUsersWithCredentials(
360
+ // users: Array<{
361
+ // id: string;
362
+ // email: string;
363
+ // name: string;
364
+ // timeZone: string;
365
+ // isFixed: boolean;
366
+ // }>,
367
+ // @EtoContext() sharedContext: Context = {}
368
+ // ): Promise<Array<{
369
+ // id: string;
370
+ // email: string;
371
+ // name: string;
372
+ // timeZone: string;
373
+ // isFixed: boolean;
374
+ // credentials: Array<{ type: string; key: string }>;
375
+ // }>> {
376
+ // // This would load user credentials (calendar, video, etc.)
377
+ // return users.map(user => ({
378
+ // ...user,
379
+ // credentials: [] // For now, empty credentials
380
+ // }));
381
+ // }
382
+ // /**
383
+ // * Apply scheduling type logic (Cal.com pattern)
384
+ // */
385
+ // private applySchedulingTypeLogic(
386
+ // users: Array<{
387
+ // id: string;
388
+ // email: string;
389
+ // name: string;
390
+ // timeZone: string;
391
+ // isFixed: boolean;
392
+ // credentials: Array<{ type: string; key: string }>;
393
+ // }>,
394
+ // schedulingType?: 'COLLECTIVE' | 'ROUND_ROBIN',
395
+ // availabilityResults?: Record<string, boolean>
396
+ // ): Array<{
397
+ // id: string;
398
+ // email: string;
399
+ // name: string;
400
+ // timeZone: string;
401
+ // isFixed: boolean;
402
+ // available: boolean;
403
+ // credentials: Array<{ type: string; key: string }>;
404
+ // }> {
405
+ // return users.map(user => ({
406
+ // ...user,
407
+ // available: availabilityResults?.[user.id] ?? true
408
+ // }));
409
+ // }
410
+ // /**
411
+ // * Validate user permissions for resource type
412
+ // */
413
+ // async validateUserCanBookResourceType(
414
+ // params: {
415
+ // userId?: string;
416
+ // userEmail: string;
417
+ // resourceTypeId: string;
418
+ // organizationId?: string;
419
+ // },
420
+ // @EtoContext() sharedContext: Context = {}
421
+ // ): Promise<{
422
+ // canBook: boolean;
423
+ // reason?: string;
424
+ // permissions: {
425
+ // canView: boolean;
426
+ // canBook: boolean;
427
+ // canManage: boolean;
428
+ // };
429
+ // }> {
430
+ // // This would check user permissions against resource type
431
+ // // For now, allow all bookings
432
+ // return {
433
+ // canBook: true,
434
+ // permissions: {
435
+ // canView: true,
436
+ // canBook: true,
437
+ // canManage: false
438
+ // }
439
+ // };
440
+ // }
441
+ // /**
442
+ // * Get module capabilities
443
+ // */
444
+ // getModuleCapabilities() {
445
+ // return {
446
+ // module: 'user-validation',
447
+ // capabilities: [
448
+ // 'email_blocking_validation',
449
+ // 'user_verification_checking',
450
+ // 'organization_blacklist_management',
451
+ // 'global_blacklist_support',
452
+ // 'secondary_email_support'
453
+ // ]
454
+ // };
455
+ // }
456
+ // }
457
+ //# sourceMappingURL=user-validation-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-validation-service.js","sourceRoot":"","sources":["../../src/services/user-validation-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=user-validation.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-validation.service.d.ts","sourceRoot":"","sources":["../../src/services/user-validation.service.ts"],"names":[],"mappings":""}
@@ -0,0 +1,207 @@
1
+ "use strict";
2
+ // import { ModulesSdkUtils, buildQuery } from "@etohq/framework/utils";
3
+ // import { ETO, Context, FindConfig, InferEntityType } from "@etohq/framework/types";
4
+ // import { InjectManager, InjectTransactionManager, EtoContext, EtoError } from "@etohq/framework/utils";
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ // // Import email blocking validation utility
7
+ // import {
8
+ // checkIfBookerEmailIsBlocked,
9
+ // validateBookerEmailNotBlocked,
10
+ // type EmailBlockingService,
11
+ // type UserRecord,
12
+ // type EmailBlockingQuery,
13
+ // type EmailBlockingResult
14
+ // } from "@etohq/jo-utils/validate-email-blocking";
15
+ // type InjectedDependencies = ETO.Application.Services;
16
+ // /**
17
+ // * UserValidationService - CORE USER MODULE
18
+ // * Handles user-domain validations including email blocking
19
+ // * Part of core platform modules, used across the platform
20
+ // */
21
+ // export default class UserValidationService extends ModulesSdkUtils.EtoInternalService<
22
+ // InjectedDependencies,
23
+ // any // User entity type would be defined in core
24
+ // > implements EmailBlockingService {
25
+ // protected readonly __userRepository__: any;
26
+ // protected readonly __organizationRepository__: any;
27
+ // constructor(container: InjectedDependencies) {
28
+ // // @ts-ignore - Standard ETO pattern
29
+ // super(...arguments);
30
+ // this.__userRepository__ = container.userRepository;
31
+ // this.__organizationRepository__ = container.organizationRepository;
32
+ // }
33
+ // // ===== EMAIL BLOCKING SERVICE IMPLEMENTATION =====
34
+ // @InjectManager("__userRepository__")
35
+ // async findUserByEmail(
36
+ // filters: Record<string, any>,
37
+ // config?: FindConfig<any>,
38
+ // @EtoContext() sharedContext: Context = {}
39
+ // ): Promise<UserRecord | null> {
40
+ // const queryOptions = buildQuery(filters, config);
41
+ // const [user] = await this.__userRepository__.find(queryOptions, sharedContext);
42
+ // if (!user) return null;
43
+ // return {
44
+ // id: user.id,
45
+ // email: user.email,
46
+ // emailVerified: user.email_verified,
47
+ // secondaryEmails: user.secondary_emails?.map((se: any) => ({
48
+ // email: se.email,
49
+ // emailVerified: se.email_verified
50
+ // })) || []
51
+ // };
52
+ // }
53
+ // async getBlacklistedEmails(organizationId?: string): Promise<string[]> {
54
+ // // Global blacklist from environment
55
+ // const globalBlacklist = process.env.BLACKLISTED_GUEST_EMAILS
56
+ // ? process.env.BLACKLISTED_GUEST_EMAILS.split(",").map(email => email.trim())
57
+ // : [];
58
+ // // Organization-specific blacklist
59
+ // if (organizationId) {
60
+ // try {
61
+ // // TODO: Implement organization blacklist lookup
62
+ // // const orgBlacklist = await this.getOrganizationBlacklist(organizationId);
63
+ // // return [...globalBlacklist, ...orgBlacklist];
64
+ // } catch (error) {
65
+ // console.warn(`Failed to get organization blacklist for ${organizationId}:`, error);
66
+ // }
67
+ // }
68
+ // return globalBlacklist;
69
+ // }
70
+ // async getResourceTypeBlockedEmails(resourceTypeId: string): Promise<string[]> {
71
+ // // Resource-type specific blocked emails would be handled by the resource module
72
+ // // This is a cross-module concern that should be handled by workflows
73
+ // return [];
74
+ // }
75
+ // // ===== USER-DOMAIN VALIDATION METHODS =====
76
+ // /**
77
+ // * Validate user email is not blocked
78
+ // */
79
+ // async validateUserEmailNotBlocked(
80
+ // query: EmailBlockingQuery
81
+ // ): Promise<EmailBlockingResult> {
82
+ // return await checkIfBookerEmailIsBlocked(query, this);
83
+ // }
84
+ // /**
85
+ // * Validate user email and throw if blocked
86
+ // */
87
+ // async validateUserEmailAllowed(
88
+ // query: EmailBlockingQuery
89
+ // ): Promise<void> {
90
+ // await validateBookerEmailNotBlocked(query, this);
91
+ // }
92
+ // /**
93
+ // * Check if user exists and is verified
94
+ // */
95
+ // @InjectManager("__userRepository__")
96
+ // async checkUserVerificationStatus(
97
+ // email: string,
98
+ // @EtoContext() sharedContext: Context = {}
99
+ // ): Promise<{
100
+ // exists: boolean;
101
+ // isVerified: boolean;
102
+ // userId?: string;
103
+ // }> {
104
+ // const filters = {
105
+ // $or: [
106
+ // { email: email.toLowerCase() },
107
+ // {
108
+ // secondary_emails: {
109
+ // $elemMatch: { email: email.toLowerCase() }
110
+ // }
111
+ // }
112
+ // ]
113
+ // };
114
+ // const config = {
115
+ // select: ['id', 'email', 'email_verified'],
116
+ // relations: ['secondary_emails'],
117
+ // take: 1
118
+ // };
119
+ // const user = await this.findUserByEmail(filters, config, sharedContext);
120
+ // if (!user) {
121
+ // return { exists: false, isVerified: false };
122
+ // }
123
+ // const isVerified = (user.email === email.toLowerCase() && user.emailVerified) ||
124
+ // (user.secondaryEmails?.some(se => se.email === email.toLowerCase() && se.emailVerified)) ||
125
+ // false;
126
+ // return {
127
+ // exists: true,
128
+ // isVerified,
129
+ // userId: user.id
130
+ // };
131
+ // }
132
+ // /**
133
+ // * Get user by email with verification status
134
+ // */
135
+ // @InjectManager("__userRepository__")
136
+ // async getUserByEmailWithVerification(
137
+ // email: string,
138
+ // @EtoContext() sharedContext: Context = {}
139
+ // ): Promise<UserRecord | null> {
140
+ // const filters = {
141
+ // $or: [
142
+ // {
143
+ // email: email.toLowerCase(),
144
+ // email_verified: { $ne: null }
145
+ // },
146
+ // {
147
+ // secondary_emails: {
148
+ // $elemMatch: {
149
+ // email: email.toLowerCase(),
150
+ // email_verified: { $ne: null }
151
+ // }
152
+ // }
153
+ // }
154
+ // ]
155
+ // };
156
+ // const config = {
157
+ // select: ['id', 'email', 'email_verified'],
158
+ // relations: ['secondary_emails'],
159
+ // take: 1
160
+ // };
161
+ // return await this.findUserByEmail(filters, config, sharedContext);
162
+ // }
163
+ // // ===== ORGANIZATION BLACKLIST METHODS =====
164
+ // /**
165
+ // * Get organization-specific email blacklist
166
+ // */
167
+ // @InjectManager("__organizationRepository__")
168
+ // async getOrganizationBlacklist(
169
+ // organizationId: string,
170
+ // @EtoContext() sharedContext: Context = {}
171
+ // ): Promise<string[]> {
172
+ // // TODO: Implement organization blacklist lookup
173
+ // // This would query organization settings for blocked emails
174
+ // return [];
175
+ // }
176
+ // /**
177
+ // * Add email to organization blacklist
178
+ // */
179
+ // @InjectManager("__organizationRepository__")
180
+ // async addToOrganizationBlacklist(
181
+ // organizationId: string,
182
+ // email: string,
183
+ // @EtoContext() sharedContext: Context = {}
184
+ // ): Promise<void> {
185
+ // // TODO: Implement organization blacklist management
186
+ // throw new EtoError(
187
+ // EtoError.Types.NOT_IMPLEMENTED,
188
+ // 'Organization blacklist management not yet implemented'
189
+ // );
190
+ // }
191
+ // /**
192
+ // * Remove email from organization blacklist
193
+ // */
194
+ // @InjectManager("__organizationRepository__")
195
+ // async removeFromOrganizationBlacklist(
196
+ // organizationId: string,
197
+ // email: string,
198
+ // @EtoContext() sharedContext: Context = {}
199
+ // ): Promise<void> {
200
+ // // TODO: Implement organization blacklist management
201
+ // throw new EtoError(
202
+ // EtoError.Types.NOT_IMPLEMENTED,
203
+ // 'Organization blacklist management not yet implemented'
204
+ // );
205
+ // }
206
+ // }
207
+ //# sourceMappingURL=user-validation.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-validation.service.js","sourceRoot":"","sources":["../../src/services/user-validation.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/migrations/migration20240214033943.ts","../src/migrations/migration20240703095850.ts","../src/migrations/migration20241202103352.ts","../src/models/index.ts","../src/models/invite.ts","../src/models/role.ts","../src/models/user-term-of-service.ts","../src/models/user.ts","../src/services/index.ts","../src/services/user-module.ts","../src/types/index.ts","../src/types/services/index.ts","../src/types/services/invite.ts","../src/utils/utils.ts"],"version":"5.8.3"}
1
+ {"root":["../src/index.ts","../src/migrations/migration20240214033943.ts","../src/migrations/migration20240703095850.ts","../src/migrations/migration20241202103352.ts","../src/models/index.ts","../src/models/invite.ts","../src/models/role.ts","../src/models/user-term-of-service.ts","../src/models/user.ts","../src/services/index.ts","../src/services/user-module.ts","../src/services/user-validation-service.ts","../src/services/user-validation.service.ts","../src/types/index.ts","../src/types/services/index.ts","../src/types/services/invite.ts","../src/utils/utils.ts"],"version":"5.8.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@etohq/user",
3
- "version": "1.5.1-alpha.3",
3
+ "version": "1.5.1-alpha.5",
4
4
  "description": "Eto Users module",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -36,8 +36,8 @@
36
36
  "rimraf": "5.0.2",
37
37
  "tsc-alias": "1.8.6",
38
38
  "typescript": "5.8.3",
39
- "@etohq/framework": "1.5.1-alpha.3",
40
- "@etohq/test-utils": "1.5.1-alpha.3"
39
+ "@etohq/framework": "1.5.1-alpha.5",
40
+ "@etohq/test-utils": "1.5.1-alpha.5"
41
41
  },
42
42
  "dependencies": {
43
43
  "jsonwebtoken": "9.0.2"
@@ -47,7 +47,7 @@
47
47
  "@mikro-orm/migrations": "6.4.3",
48
48
  "@mikro-orm/postgresql": "6.4.3",
49
49
  "awilix": "8.0.1",
50
- "@etohq/framework": "1.5.1-alpha.3"
50
+ "@etohq/framework": "1.5.1-alpha.5"
51
51
  },
52
52
  "scripts": {
53
53
  "watch": "tsc --build --watch",