@unchainedshop/core-users 3.0.0-alpha7 → 3.0.0-rc2

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.
Files changed (64) hide show
  1. package/lib/db/UsersCollection.d.ts +54 -2
  2. package/lib/db/UsersCollection.d.ts.map +1 -1
  3. package/lib/db/UsersCollection.js.map +1 -1
  4. package/lib/db/WebAuthnCredentialsCreationRequestsCollection.d.ts +6 -1
  5. package/lib/db/WebAuthnCredentialsCreationRequestsCollection.d.ts.map +1 -1
  6. package/lib/db/WebAuthnCredentialsCreationRequestsCollection.js.map +1 -1
  7. package/lib/module/configureUsersModule.d.ts +22 -70
  8. package/lib/module/configureUsersModule.d.ts.map +1 -1
  9. package/lib/module/configureUsersModule.js +59 -54
  10. package/lib/module/configureUsersModule.js.map +1 -1
  11. package/lib/module/configureUsersModule_BACKUP_57123.d.ts +73 -0
  12. package/lib/module/configureUsersModule_BACKUP_57123.d.ts.map +1 -0
  13. package/lib/module/configureUsersModule_BACKUP_57123.js +567 -0
  14. package/lib/module/configureUsersModule_BACKUP_57123.js.map +1 -0
  15. package/lib/module/configureUsersModule_BASE_57123.d.ts +131 -0
  16. package/lib/module/configureUsersModule_BASE_57123.d.ts.map +1 -0
  17. package/lib/module/configureUsersModule_BASE_57123.js +563 -0
  18. package/lib/module/configureUsersModule_BASE_57123.js.map +1 -0
  19. package/lib/module/configureUsersModule_LOCAL_57123.d.ts +131 -0
  20. package/lib/module/configureUsersModule_LOCAL_57123.d.ts.map +1 -0
  21. package/lib/module/configureUsersModule_LOCAL_57123.js +564 -0
  22. package/lib/module/configureUsersModule_LOCAL_57123.js.map +1 -0
  23. package/lib/module/configureUsersModule_REMOTE_57123.d.ts +74 -0
  24. package/lib/module/configureUsersModule_REMOTE_57123.d.ts.map +1 -0
  25. package/lib/module/configureUsersModule_REMOTE_57123.js +567 -0
  26. package/lib/module/configureUsersModule_REMOTE_57123.js.map +1 -0
  27. package/lib/module/configureUsersWebAuthnModule.d.ts.map +1 -1
  28. package/lib/module/configureUsersWebAuthnModule.js.map +1 -1
  29. package/lib/types.d.ts +5 -2
  30. package/lib/types.d.ts.map +1 -1
  31. package/lib/users-index.d.ts +3 -2
  32. package/lib/users-index.d.ts.map +1 -1
  33. package/lib/users-index.js +3 -2
  34. package/lib/users-index.js.map +1 -1
  35. package/lib/users-settings.d.ts +1 -1
  36. package/lib/users-settings.d.ts.map +1 -1
  37. package/lib/users-settings.js.map +1 -1
  38. package/package.json +14 -17
  39. package/src/db/UsersCollection.ts +59 -2
  40. package/src/db/WebAuthnCredentialsCreationRequestsCollection.ts +7 -1
  41. package/src/module/configureUsersModule.ts +100 -75
  42. package/src/module/configureUsersWebAuthnModule.ts +0 -1
  43. package/src/module/removeConfidentialServiceHashes.test.ts +1 -1
  44. package/src/users-index.ts +3 -2
  45. package/src/users-settings.ts +1 -2
  46. package/tests/mock/user-mock.ts +2 -3
  47. package/tsconfig.json +5 -7
  48. package/lib/services/migrateUserDataService.d.ts +0 -4
  49. package/lib/services/migrateUserDataService.d.ts.map +0 -1
  50. package/lib/services/migrateUserDataService.js +0 -18
  51. package/lib/services/migrateUserDataService.js.map +0 -1
  52. package/lib/services/updateUserAvatarAfterUploadService.d.ts +0 -15
  53. package/lib/services/updateUserAvatarAfterUploadService.d.ts.map +0 -1
  54. package/lib/services/updateUserAvatarAfterUploadService.js +0 -24
  55. package/lib/services/updateUserAvatarAfterUploadService.js.map +0 -1
  56. package/lib/services/userServices.d.ts +0 -8
  57. package/lib/services/userServices.d.ts.map +0 -1
  58. package/lib/services/userServices.js +0 -7
  59. package/lib/services/userServices.js.map +0 -1
  60. package/src/module/sha256.ts +0 -5
  61. package/src/services/migrateUserDataService.ts +0 -37
  62. package/src/services/updateUserAvatarAfterUploadService.ts +0 -42
  63. package/src/services/userServices.ts +0 -15
  64. package/src/types.ts +0 -101
@@ -0,0 +1,564 @@
1
+ import bcrypt from '@node-rs/bcrypt';
2
+ import { emit, registerEvents } from '@unchainedshop/events';
3
+ import { generateDbFilterById, buildSortOptions, generateDbObjectId, } from '@unchainedshop/mongodb';
4
+ import { systemLocale, SortDirection, sha256 } from '@unchainedshop/utils';
5
+ import { UsersCollection } from '../db/UsersCollection.js';
6
+ import addMigrations from './addMigrations.js';
7
+ import { userSettings } from '../users-settings.js';
8
+ import { configureUsersWebAuthnModule } from './configureUsersWebAuthnModule.js';
9
+ import * as pbkdf2 from './pbkdf2.js';
10
+ const USER_EVENTS = [
11
+ 'USER_ACCOUNT_ACTION',
12
+ 'USER_CREATE',
13
+ 'USER_ADD_ROLES',
14
+ 'USER_UPDATE',
15
+ 'USER_UPDATE_PROFILE',
16
+ 'USER_UPDATE_ROLE',
17
+ 'USER_UPDATE_TAGS',
18
+ 'USER_UPDATE_AVATAR',
19
+ 'USER_UPDATE_GUEST',
20
+ 'USER_UPDATE_USERNAME',
21
+ 'USER_UPDATE_PASSWORD',
22
+ 'USER_UPDATE_HEARTBEAT',
23
+ 'USER_UPDATE_BILLING_ADDRESS',
24
+ 'USER_UPDATE_LAST_CONTACT',
25
+ 'USER_REMOVE',
26
+ ];
27
+ export const removeConfidentialServiceHashes = (rawUser) => {
28
+ const user = rawUser;
29
+ delete user?.services;
30
+ return user;
31
+ };
32
+ export const buildFindSelector = ({ includeGuests, queryString, ...rest }) => {
33
+ const selector = { ...rest, deleted: null };
34
+ if (!includeGuests)
35
+ selector.guest = { $in: [false, null] };
36
+ if (queryString) {
37
+ selector.$text = { $search: queryString };
38
+ }
39
+ return selector;
40
+ };
41
+ export const configureUsersModule = async ({ db, options, migrationRepository, }) => {
42
+ userSettings.configureSettings(options || {}, db);
43
+ registerEvents(USER_EVENTS);
44
+ const Users = await UsersCollection(db);
45
+ // Migration
46
+ addMigrations(migrationRepository);
47
+ const webAuthn = await configureUsersWebAuthnModule({ db, options });
48
+ return {
49
+ // Queries
50
+ webAuthn,
51
+ async count(query) {
52
+ const userCount = await Users.countDocuments(buildFindSelector(query));
53
+ return userCount;
54
+ },
55
+ async findUserById(userId) {
56
+ if (!userId)
57
+ return null;
58
+ return Users.findOne(generateDbFilterById(userId), {});
59
+ },
60
+ async findUserByUsername(username) {
61
+ if (!username)
62
+ return null;
63
+ return Users.findOne({ username }, {});
64
+ },
65
+ async findUserByEmail(email) {
66
+ if (!email)
67
+ return null;
68
+ return Users.findOne({ 'emails.address': { $regex: email, $options: 'i' } }, {});
69
+ },
70
+ async findUnverifiedEmailToken(plainToken) {
71
+ if (!plainToken)
72
+ return null;
73
+ const token = await sha256(plainToken);
74
+ const user = await Users.findOne({
75
+ 'services.email.verificationTokens': {
76
+ $elemMatch: {
77
+ token,
78
+ when: { $gt: new Date(new Date().getTime() - 1000 * 60 * 60) },
79
+ },
80
+ },
81
+ }, {});
82
+ if (!user)
83
+ return null;
84
+ const verificationToken = user.services.email.verificationTokens.find((v) => v.token === token);
85
+ return {
86
+ userId: user._id,
87
+ ...verificationToken,
88
+ };
89
+ },
90
+ async verifyEmail(userId, address) {
91
+ await Users.updateOne({ _id: userId }, {
92
+ $set: {
93
+ 'emails.$[email].verified': true,
94
+ },
95
+ $pull: {
96
+ 'services.email.verificationTokens': {
97
+ address,
98
+ },
99
+ },
100
+ }, {
101
+ arrayFilters: [{ 'email.address': address }],
102
+ });
103
+ await emit('USER_ACCOUNT_ACTION', {
104
+ action: 'email-verified',
105
+ address,
106
+ userId,
107
+ });
108
+ },
109
+ async findUserByResetToken(plainToken) {
110
+ const token = await sha256(plainToken);
111
+ const user = await Users.findOne({
112
+ 'services.password.reset': {
113
+ $elemMatch: {
114
+ token,
115
+ when: { $gt: new Date(new Date().getTime() - 1000 * 60 * 60) },
116
+ },
117
+ },
118
+ }, {});
119
+ return user;
120
+ },
121
+ async findUserByToken(plainToken) {
122
+ const token = await sha256(plainToken);
123
+ if (token) {
124
+ return Users.findOne({
125
+ 'services.token.secret': token,
126
+ });
127
+ }
128
+ return null;
129
+ },
130
+ async findUser(query, findOptions) {
131
+ const selector = buildFindSelector(query);
132
+ return Users.findOne(selector, findOptions);
133
+ },
134
+ async findUsers({ limit, offset, ...query }) {
135
+ const defaultSort = [{ key: 'created', value: SortDirection.ASC }];
136
+ const selector = buildFindSelector(query);
137
+ if (query.queryString) {
138
+ return Users.find(selector, {
139
+ skip: offset,
140
+ limit,
141
+ projection: { score: { $meta: 'textScore' } },
142
+ sort: { score: { $meta: 'textScore' } },
143
+ }).toArray();
144
+ }
145
+ return Users.find(selector, {
146
+ skip: offset,
147
+ limit,
148
+ sort: buildSortOptions(query.sort || defaultSort),
149
+ }).toArray();
150
+ },
151
+ async userExists({ userId }) {
152
+ const selector = generateDbFilterById(userId);
153
+ selector.deleted = null; // skip deleted users when checked for existance!
154
+ const userCount = await Users.countDocuments(selector, { limit: 1 });
155
+ return userCount === 1;
156
+ },
157
+ // Transformations
158
+ primaryEmail(user) {
159
+ return (user.emails || []).sort((left, right) => Number(right.verified) - Number(left.verified))?.[0];
160
+ },
161
+ userLocale(user) {
162
+ if (!user?.lastLogin?.locale)
163
+ return systemLocale;
164
+ return new Intl.Locale(user.lastLogin.locale);
165
+ },
166
+ // Mutations
167
+ async createUser({ password, email, username, initialPassword, roles, webAuthnPublicKeyCredentials, ...userData }, { skipMessaging, skipPasswordEnrollment, } = {}) {
168
+ const normalizedUserData = await userSettings.validateNewUser(userData);
169
+ const webAuthnService = webAuthnPublicKeyCredentials &&
170
+ (await this.webAuthn.verifyCredentialCreation(username, webAuthnPublicKeyCredentials));
171
+ const services = {};
172
+ if (email) {
173
+ if (!(await userSettings.validateEmail(email))) {
174
+ throw new Error(`E-Mail address ${email} is invalid`, { cause: 'EMAIL_INVALID' });
175
+ }
176
+ }
177
+ if (password) {
178
+ if (!(await userSettings.validatePassword(password))) {
179
+ throw new Error(`Provided password is invalid`, { cause: 'PASSWORD_INVALID' });
180
+ }
181
+ services.password = await this.hashPassword(password);
182
+ }
183
+ if (webAuthnService) {
184
+ services.webAuthn = [webAuthnService];
185
+ }
186
+ const doc = {
187
+ ...normalizedUserData,
188
+ _id: normalizedUserData._id || generateDbObjectId(),
189
+ roles: roles || [],
190
+ initialPassword: Boolean(initialPassword),
191
+ services,
192
+ emails: email ? [{ address: email, verified: false }] : [],
193
+ created: new Date(),
194
+ };
195
+ if (username) {
196
+ if (!(await userSettings.validateUsername(username))) {
197
+ throw new Error(`Username ${username} is invalid`, { cause: 'USERNAME_INVALID' });
198
+ }
199
+ doc.username = username;
200
+ }
201
+ const { insertedId: userId } = await Users.insertOne(doc);
202
+ try {
203
+ const autoMessagingEnabled = skipMessaging
204
+ ? false
205
+ : userSettings.autoMessagingAfterUserCreation && !!email && !!userId;
206
+ if (autoMessagingEnabled) {
207
+ if (password === undefined) {
208
+ if (!skipPasswordEnrollment && !webAuthnService) {
209
+ await this.sendResetPasswordEmail(userId, email, true);
210
+ }
211
+ }
212
+ else {
213
+ await this.sendVerificationEmail(userId, email);
214
+ }
215
+ }
216
+ }
217
+ catch {
218
+ /* */
219
+ }
220
+ const user = await Users.findOne({ _id: userId }, {});
221
+ await emit('USER_CREATE', {
222
+ user: removeConfidentialServiceHashes(user),
223
+ });
224
+ return userId;
225
+ },
226
+ async hashPassword(password) {
227
+ const salt = pbkdf2.generateSalt();
228
+ const hashedPassword = await pbkdf2.getDerivedKey(salt, password);
229
+ return { pbkdf2: `${salt}:${hashedPassword}` };
230
+ },
231
+ async verifyPassword({ bcrypt: bcryptHash, pbkdf2: pbkdf2SaltAndHash }, plainPassword) {
232
+ if (bcryptHash) {
233
+ const password = await sha256(plainPassword);
234
+ return bcrypt.compare(password, bcryptHash);
235
+ }
236
+ if (pbkdf2SaltAndHash) {
237
+ const [pbkdf2Salt, pbkdf2Hash] = pbkdf2SaltAndHash.split(':');
238
+ return pbkdf2.compare(plainPassword, pbkdf2Hash, pbkdf2Salt);
239
+ }
240
+ return false;
241
+ },
242
+ async addEmail(userId, address) {
243
+ if (!(await userSettings.validateEmail(address))) {
244
+ throw new Error(`E-Mail address ${address} is invalid`, { cause: 'EMAIL_INVALID' });
245
+ }
246
+ await this.updateUser({ _id: userId, 'emails.address': { $not: { $regex: address, $options: 'i' } } }, {
247
+ $push: {
248
+ emails: {
249
+ address: address.trim(),
250
+ verified: false,
251
+ },
252
+ },
253
+ });
254
+ },
255
+ async removeEmail(userId, address) {
256
+ await this.updateUser({ _id: userId, 'emails.address': { $regex: address, $options: 'i' } }, {
257
+ $pull: {
258
+ emails: { address: { $regex: address, $options: 'i' } },
259
+ },
260
+ });
261
+ },
262
+ async sendResetPasswordEmail(userId, email, isEnrollment) {
263
+ const plainToken = crypto.randomUUID();
264
+ const resetToken = {
265
+ token: await sha256(plainToken),
266
+ address: email,
267
+ when: new Date(),
268
+ };
269
+ await Users.updateOne({ _id: userId }, {
270
+ $push: {
271
+ 'services.password.reset': resetToken,
272
+ },
273
+ });
274
+ await emit('USER_ACCOUNT_ACTION', {
275
+ action: isEnrollment ? 'enroll-account' : 'reset-password',
276
+ userId,
277
+ ...resetToken,
278
+ token: plainToken,
279
+ });
280
+ },
281
+ async sendVerificationEmail(userId, email) {
282
+ const plainToken = crypto.randomUUID();
283
+ const verificationToken = {
284
+ token: await sha256(plainToken),
285
+ address: email,
286
+ when: new Date(),
287
+ };
288
+ await Users.updateOne({ _id: userId }, {
289
+ $push: {
290
+ 'services.email.verificationTokens': verificationToken,
291
+ },
292
+ });
293
+ await emit('USER_ACCOUNT_ACTION', {
294
+ action: 'verify-email',
295
+ userId,
296
+ ...verificationToken,
297
+ token: plainToken,
298
+ });
299
+ },
300
+ addRoles: async (userId, roles) => {
301
+ const selector = generateDbFilterById(userId);
302
+ const updateResult = await Users.updateOne(selector, {
303
+ $addToSet: { roles: { $each: roles } },
304
+ });
305
+ const user = await Users.findOne(selector, {});
306
+ await emit('USER_ADD_ROLES', {
307
+ user: removeConfidentialServiceHashes(user),
308
+ });
309
+ return updateResult.modifiedCount;
310
+ },
311
+ async setUsername(userId, username) {
312
+ if (!(await userSettings.validateUsername(username))) {
313
+ throw new Error(`Username ${username} is invalid`, { cause: 'USERNAME_INVALID' });
314
+ }
315
+ await Users.updateOne({ _id: userId }, {
316
+ $set: {
317
+ username: username.trim(),
318
+ },
319
+ });
320
+ const user = await Users.findOne({ _id: userId }, {});
321
+ await emit('USER_UPDATE_USERNAME', {
322
+ user: removeConfidentialServiceHashes(user),
323
+ });
324
+ },
325
+ async setPassword(userId, plainPassword) {
326
+ if (!(await userSettings.validatePassword(plainPassword))) {
327
+ throw new Error(`Password ***** is invalid`, { cause: 'PASSWORD_INVALID' });
328
+ }
329
+ const password = plainPassword || crypto.randomUUID().split('-').pop();
330
+ await Users.updateOne({ _id: userId }, {
331
+ $set: {
332
+ initialPassword: false,
333
+ 'services.password': await this.hashPassword(password || crypto.randomUUID().split('-').pop()),
334
+ },
335
+ });
336
+ const user = await Users.findOne({ _id: userId }, {});
337
+ await emit('USER_UPDATE_PASSWORD', {
338
+ user: removeConfidentialServiceHashes(user),
339
+ });
340
+ },
341
+ updateAvatar: async (_id, fileId) => {
342
+ const userFilter = generateDbFilterById(_id);
343
+ const modifier = {
344
+ $set: {
345
+ avatarId: fileId,
346
+ updated: new Date(),
347
+ },
348
+ };
349
+ const user = await Users.findOneAndUpdate(userFilter, modifier, {
350
+ returnDocument: 'after',
351
+ });
352
+ await emit('USER_UPDATE_AVATAR', {
353
+ user: removeConfidentialServiceHashes(user),
354
+ });
355
+ return user;
356
+ },
357
+ updateGuest: async (user, guest) => {
358
+ const modifier = { $set: { guest } };
359
+ await Users.updateOne(generateDbFilterById(user._id), modifier);
360
+ await emit('USER_UPDATE_GUEST', {
361
+ user: removeConfidentialServiceHashes({
362
+ ...user,
363
+ guest,
364
+ }),
365
+ });
366
+ },
367
+ updateHeartbeat: async (userId, lastLogin) => {
368
+ const modifier = {
369
+ $set: {
370
+ lastLogin: {
371
+ timestamp: new Date(),
372
+ ...lastLogin,
373
+ },
374
+ },
375
+ };
376
+ const user = await Users.findOneAndUpdate(generateDbFilterById(userId), modifier, {
377
+ returnDocument: 'after',
378
+ });
379
+ await emit('USER_UPDATE_HEARTBEAT', {
380
+ user: removeConfidentialServiceHashes(user),
381
+ });
382
+ return user;
383
+ },
384
+ delete: async (userId) => {
385
+ const userFilter = generateDbFilterById(userId);
386
+ const existingUser = await Users.findOne(userFilter, {
387
+ projection: { emails: true, username: true },
388
+ });
389
+ if (!existingUser)
390
+ return null;
391
+ const uuid = crypto.randomUUID();
392
+ const obfuscatedEmails = existingUser.emails?.flatMap(({ address, verified }) => {
393
+ if (!verified)
394
+ return [];
395
+ return [
396
+ {
397
+ address: `${address}@${uuid}.unchained.local`,
398
+ verified: true,
399
+ },
400
+ ];
401
+ });
402
+ const obfuscatedUsername = existingUser.username ? `${existingUser.username}-${uuid}` : null;
403
+ Users.updateOne(userFilter, {
404
+ $set: {
405
+ emails: obfuscatedEmails,
406
+ username: obfuscatedUsername,
407
+ services: {},
408
+ },
409
+ });
410
+ const user = await Users.findOneAndDelete(userFilter);
411
+ await emit('USER_REMOVE', {
412
+ user: removeConfidentialServiceHashes(user),
413
+ });
414
+ return user;
415
+ },
416
+ updateProfile: async (userId, updatedData) => {
417
+ const userFilter = generateDbFilterById(userId);
418
+ const { meta, profile } = updatedData;
419
+ if (!meta && !profile) {
420
+ return Users.findOne(userFilter, {});
421
+ }
422
+ const modifier = { $set: {} };
423
+ if (profile) {
424
+ modifier.$set = Object.keys(profile).reduce((acc, profileKey) => {
425
+ return {
426
+ ...acc,
427
+ [`profile.${profileKey}`]: profile[profileKey],
428
+ };
429
+ }, {});
430
+ }
431
+ if (meta) {
432
+ // eslint-disable-next-line
433
+ // @ts-ignore
434
+ modifier.$set.meta = meta;
435
+ }
436
+ const user = await Users.findOneAndUpdate(userFilter, modifier, {
437
+ returnDocument: 'after',
438
+ });
439
+ await emit('USER_UPDATE_PROFILE', {
440
+ user: removeConfidentialServiceHashes(user),
441
+ });
442
+ return user;
443
+ },
444
+ updateLastBillingAddress: async (_id, lastBillingAddress) => {
445
+ const userFilter = generateDbFilterById(_id);
446
+ const user = await Users.findOne(userFilter, {});
447
+ if (!lastBillingAddress)
448
+ return user;
449
+ const modifier = {
450
+ $set: {
451
+ lastBillingAddress,
452
+ updated: new Date(),
453
+ },
454
+ };
455
+ const profile = user.profile || {};
456
+ const isGuest = !!user.guest;
457
+ if (!profile.displayName || isGuest) {
458
+ modifier.$set['profile.displayName'] = [
459
+ lastBillingAddress.firstName,
460
+ lastBillingAddress.lastName,
461
+ ]
462
+ .filter(Boolean)
463
+ .join(' ');
464
+ }
465
+ const updatedUser = await Users.findOneAndUpdate(generateDbFilterById(_id), modifier, {
466
+ returnDocument: 'after',
467
+ });
468
+ if (updatedUser) {
469
+ await emit('USER_UPDATE_BILLING_ADDRESS', {
470
+ user: removeConfidentialServiceHashes(updatedUser),
471
+ });
472
+ }
473
+ return updatedUser;
474
+ },
475
+ updateLastContact: async (_id, lastContact) => {
476
+ const userFilter = generateDbFilterById(_id);
477
+ const user = await Users.findOne(userFilter, {});
478
+ const profile = user.profile || {};
479
+ const isGuest = !!user.guest;
480
+ const modifier = {
481
+ $set: {
482
+ updated: new Date(),
483
+ lastContact,
484
+ },
485
+ };
486
+ if ((!profile.phoneMobile || isGuest) && lastContact.telNumber) {
487
+ // Backport the contact phone number to the user profile
488
+ modifier.$set['profile.phoneMobile'] = lastContact.telNumber;
489
+ }
490
+ const updatedUser = await Users.findOneAndUpdate(userFilter, modifier, {
491
+ returnDocument: 'after',
492
+ });
493
+ await emit('USER_UPDATE_LAST_CONTACT', {
494
+ user: removeConfidentialServiceHashes(user),
495
+ });
496
+ return updatedUser;
497
+ },
498
+ updateRoles: async (_id, roles) => {
499
+ const modifier = {
500
+ $set: {
501
+ updated: new Date(),
502
+ roles,
503
+ },
504
+ };
505
+ const user = await Users.findOneAndUpdate(generateDbFilterById(_id), modifier, {
506
+ returnDocument: 'after',
507
+ });
508
+ await emit('USER_UPDATE_ROLE', {
509
+ user: removeConfidentialServiceHashes(user),
510
+ });
511
+ return user;
512
+ },
513
+ updateTags: async (_id, tags) => {
514
+ const modifier = {
515
+ $set: {
516
+ updated: new Date(),
517
+ tags,
518
+ },
519
+ };
520
+ const user = await Users.findOneAndUpdate(generateDbFilterById(_id), modifier, {
521
+ returnDocument: 'after',
522
+ });
523
+ await emit('USER_UPDATE_TAGS', {
524
+ user: removeConfidentialServiceHashes(user),
525
+ });
526
+ return user;
527
+ },
528
+ updateUser: async (selector, modifier, updateOptions) => {
529
+ const user = await Users.findOneAndUpdate(selector, modifier, {
530
+ ...updateOptions,
531
+ returnDocument: 'after',
532
+ });
533
+ await emit('USER_UPDATE', {
534
+ user: removeConfidentialServiceHashes(user),
535
+ });
536
+ return user;
537
+ },
538
+ addPushSubscription: async (userId, subscription, subscriptionOptions) => {
539
+ const updateResult = await Users.updateOne({ _id: userId, 'pushSubscriptions.keys.p256dh': { $ne: subscription?.keys?.p256dh } }, {
540
+ $push: {
541
+ pushSubscriptions: {
542
+ userAgent: subscriptionOptions?.userAgent,
543
+ ...subscription,
544
+ },
545
+ },
546
+ }, {});
547
+ if (updateResult.modifiedCount === 1 && subscriptionOptions?.unsubscribeFromOtherUsers) {
548
+ await Users.updateMany({ _id: { $ne: userId }, 'pushSubscriptions.keys.p256dh': subscription?.keys?.p256dh }, {
549
+ $pull: {
550
+ pushSubscriptions: { 'keys.p256dh': subscription?.keys?.p256dh },
551
+ },
552
+ });
553
+ }
554
+ },
555
+ removePushSubscription: async (userId, p256dh) => {
556
+ await Users.updateOne({ _id: userId }, {
557
+ $pull: {
558
+ pushSubscriptions: { 'keys.p256dh': p256dh },
559
+ },
560
+ }, {});
561
+ },
562
+ };
563
+ };
564
+ //# sourceMappingURL=configureUsersModule_LOCAL_57123.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureUsersModule_LOCAL_57123.js","sourceRoot":"","sources":["../../src/module/configureUsersModule_LOCAL_57123.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { ModuleInput, Address, Contact } from '@unchainedshop/mongodb';
2
+ import { User, UserQuery, Email, UserLastLogin, UserProfile, UserData } from '../types.js';
3
+ import { mongodb } from '@unchainedshop/mongodb';
4
+ import { SortOption } from '@unchainedshop/utils';
5
+ import { UserSettingsOptions } from '../users-settings.js';
6
+ import { UsersWebAuthnModule } from './configureUsersWebAuthnModule.js';
7
+ import { UnchainedCore } from '@unchainedshop/core';
8
+ export type UsersModule = {
9
+ webAuthn: UsersWebAuthnModule;
10
+ count: (query: UserQuery) => Promise<number>;
11
+ findUserById: (userId: string) => Promise<User>;
12
+ findUserByToken: (hashedToken?: string) => Promise<User>;
13
+ findUserByResetToken: (token: string) => Promise<User>;
14
+ findUnverifiedEmailToken: (token: string) => Promise<{
15
+ userId: string;
16
+ address: string;
17
+ when: Date;
18
+ }>;
19
+ findUserByEmail(email: string): Promise<User>;
20
+ findUserByUsername(username: string): Promise<User>;
21
+ findUser: (selector: UserQuery & {
22
+ sort?: Array<SortOption>;
23
+ }, options?: mongodb.FindOptions) => Promise<User>;
24
+ findUsers: (query: UserQuery & {
25
+ sort?: Array<SortOption>;
26
+ limit?: number;
27
+ offset?: number;
28
+ }) => Promise<Array<User>>;
29
+ userExists: (query: {
30
+ userId: string;
31
+ }) => Promise<boolean>;
32
+ primaryEmail: (user: User) => Email;
33
+ userLocale: (user: User) => Intl.Locale;
34
+ createUser: (userData: UserData, options: {
35
+ skipMessaging?: boolean;
36
+ skipPasswordEnrollment?: boolean;
37
+ }) => Promise<string>;
38
+ addEmail: (userId: string, email: string) => Promise<void>;
39
+ removeEmail: (userId: string, email: string) => Promise<void>;
40
+ sendVerificationEmail: (userId: string, email: string) => Promise<void>;
41
+ sendResetPasswordEmail: (userId: string, email: string, isEnrollment?: boolean) => Promise<void>;
42
+ verifyEmail: (userId: string, email: string) => Promise<void>;
43
+ setUsername: (userId: string, newUsername: string) => Promise<void>;
44
+ setPassword: (userId: string, newPassword?: string) => Promise<void>;
45
+ verifyPassword: (hashObject: Record<string, string>, password: string) => Promise<boolean>;
46
+ addRoles: (userId: string, roles: Array<string>) => Promise<number>;
47
+ updateAvatar: (_id: string, fileId: string) => Promise<User>;
48
+ updateGuest: (user: User, guest: boolean) => Promise<void>;
49
+ updateHeartbeat: (userId: string, doc: UserLastLogin) => Promise<User>;
50
+ updateLastBillingAddress: (_id: string, lastAddress: Address) => Promise<User>;
51
+ updateLastContact: (_id: string, lastContact: Contact) => Promise<User>;
52
+ updateProfile: (_id: string, { profile, meta }: {
53
+ profile?: UserProfile;
54
+ meta?: any;
55
+ }) => Promise<User>;
56
+ delete: (params: {
57
+ userId: string;
58
+ }, context: UnchainedCore) => Promise<User>;
59
+ updateRoles: (_id: string, roles: Array<string>) => Promise<User>;
60
+ updateTags: (_id: string, tags: Array<string>) => Promise<User>;
61
+ updateUser: (selector: mongodb.Filter<User>, modifier: mongodb.UpdateFilter<User>, options: mongodb.FindOneAndUpdateOptions) => Promise<User>;
62
+ addPushSubscription: (userId: string, subscription: any, options?: {
63
+ userAgent: string;
64
+ unsubscribeFromOtherUsers: boolean;
65
+ }) => Promise<void>;
66
+ removePushSubscription: (userId: string, p256dh: string) => Promise<void>;
67
+ hashPassword(password: string): Promise<{
68
+ pbkdf2: string;
69
+ }>;
70
+ };
71
+ export declare const removeConfidentialServiceHashes: (rawUser: User) => User;
72
+ export declare const buildFindSelector: ({ includeGuests, queryString, ...rest }: UserQuery) => mongodb.Filter<User>;
73
+ export declare const configureUsersModule: ({ db, options, migrationRepository, }: ModuleInput<UserSettingsOptions>) => Promise<UsersModule>;
74
+ //# sourceMappingURL=configureUsersModule_REMOTE_57123.d.ts.map