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

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 (63) 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/addMigrations.d.ts.map +1 -1
  8. package/lib/module/addMigrations.js +32 -41
  9. package/lib/module/addMigrations.js.map +1 -1
  10. package/lib/module/configureUsersModule.d.ts +49 -70
  11. package/lib/module/configureUsersModule.d.ts.map +1 -1
  12. package/lib/module/configureUsersModule.js +105 -71
  13. package/lib/module/configureUsersModule.js.map +1 -1
  14. package/lib/module/configureUsersWebAuthnModule.d.ts +21 -8
  15. package/lib/module/configureUsersWebAuthnModule.d.ts.map +1 -1
  16. package/lib/module/configureUsersWebAuthnModule.js +32 -11
  17. package/lib/module/configureUsersWebAuthnModule.js.map +1 -1
  18. package/lib/module/pbkdf2.js +1 -1
  19. package/lib/module/pbkdf2.js.map +1 -1
  20. package/lib/users-index.d.ts +3 -2
  21. package/lib/users-index.d.ts.map +1 -1
  22. package/lib/users-index.js +3 -2
  23. package/lib/users-index.js.map +1 -1
  24. package/lib/users-settings.d.ts +1 -1
  25. package/lib/users-settings.d.ts.map +1 -1
  26. package/lib/users-settings.js.map +1 -1
  27. package/package.json +26 -18
  28. package/src/db/UsersCollection.ts +59 -2
  29. package/src/db/WebAuthnCredentialsCreationRequestsCollection.ts +7 -1
  30. package/src/module/addMigrations.ts +40 -53
  31. package/src/module/configureUsersModule.ts +152 -169
  32. package/src/module/configureUsersWebAuthnModule.ts +47 -44
  33. package/src/module/pbkdf2.ts +1 -1
  34. package/src/module/removeConfidentialServiceHashes.test.ts +1 -1
  35. package/src/users-index.ts +3 -2
  36. package/src/users-settings.ts +1 -2
  37. package/tests/mock/user-mock.ts +2 -3
  38. package/tsconfig.json +5 -7
  39. package/lib/module/sha256.d.ts +0 -2
  40. package/lib/module/sha256.d.ts.map +0 -1
  41. package/lib/module/sha256.js +0 -6
  42. package/lib/module/sha256.js.map +0 -1
  43. package/lib/services/migrateUserDataService.d.ts +0 -4
  44. package/lib/services/migrateUserDataService.d.ts.map +0 -1
  45. package/lib/services/migrateUserDataService.js +0 -18
  46. package/lib/services/migrateUserDataService.js.map +0 -1
  47. package/lib/services/updateUserAvatarAfterUploadService.d.ts +0 -15
  48. package/lib/services/updateUserAvatarAfterUploadService.d.ts.map +0 -1
  49. package/lib/services/updateUserAvatarAfterUploadService.js +0 -24
  50. package/lib/services/updateUserAvatarAfterUploadService.js.map +0 -1
  51. package/lib/services/userServices.d.ts +0 -8
  52. package/lib/services/userServices.d.ts.map +0 -1
  53. package/lib/services/userServices.js +0 -7
  54. package/lib/services/userServices.js.map +0 -1
  55. package/lib/types.d.ts +0 -88
  56. package/lib/types.d.ts.map +0 -1
  57. package/lib/types.js +0 -2
  58. package/lib/types.js.map +0 -1
  59. package/src/module/sha256.ts +0 -5
  60. package/src/services/migrateUserDataService.ts +0 -37
  61. package/src/services/updateUserAvatarAfterUploadService.ts +0 -42
  62. package/src/services/userServices.ts +0 -15
  63. package/src/types.ts +0 -101
@@ -1,6 +1,5 @@
1
- import { User } from './types.js';
2
1
  import { mongodb } from '@unchainedshop/mongodb';
3
-
2
+ import { User } from './db/UsersCollection.js';
4
3
  export interface UserSettingsOptions {
5
4
  mergeUserCartsOnLogin?: boolean;
6
5
  autoMessagingAfterUserCreation?: boolean;
@@ -2,7 +2,7 @@ export default {
2
2
  _id: 'PKve0k9fLCUzn2EUi',
3
3
  guest: false,
4
4
  initialPassword: false,
5
- lastBillingAddress: {},
5
+ lastBillingAddress: null,
6
6
  profile: {
7
7
  address: {
8
8
  firstName: null,
@@ -65,9 +65,8 @@ export default {
65
65
  remotePort: '42978',
66
66
  userAgent:
67
67
  'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
68
- locale: 'de_CH',
68
+ locale: 'de-CH',
69
69
  countryCode: 'CH',
70
70
  },
71
71
  updated: new Date('2022-11-30T11:02:19.624Z'),
72
- updatedBy: 'PKve0k9fLCUzn2EUi',
73
72
  };
package/tsconfig.json CHANGED
@@ -1,11 +1,9 @@
1
1
  {
2
2
  "extends": "../shared/base.tsconfig.json",
3
3
  "compilerOptions": {
4
- "rootDir": "src",
5
- "outDir": "lib",
4
+ "declarationDir": "./lib",
5
+ "rootDir": "./src",
6
+ "outDir": "./lib"
6
7
  },
7
- "exclude": ["**/*.test.ts", "**/*.test.js", "tests"],
8
- "include": [
9
- "./src"
10
- ]
11
- }
8
+ "exclude": ["**/*.test.ts", "**/*.test.js", "tests", "lib"]
9
+ }
@@ -1,2 +0,0 @@
1
- export declare const hash: (message: any) => Promise<string>;
2
- //# sourceMappingURL=sha256.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sha256.d.ts","sourceRoot":"","sources":["../../src/module/sha256.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,IAAI,mCAIhB,CAAC"}
@@ -1,6 +0,0 @@
1
- export const hash = async (message) => {
2
- const bytes = new TextEncoder().encode(message);
3
- const hashBuffer = await crypto.subtle.digest('SHA-256', bytes);
4
- return Buffer.from(hashBuffer).toString('hex');
5
- };
6
- //# sourceMappingURL=sha256.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sha256.js","sourceRoot":"","sources":["../../src/module/sha256.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,IAAI,GAAG,KAAK,EAAE,OAAO,EAAE,EAAE;IACpC,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAChE,OAAO,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- import { UnchainedCore } from '@unchainedshop/core';
2
- export type MigrateUserDataService = (userIdBeforeLogin: any, userId: any, unchainedAPI: UnchainedCore) => Promise<void>;
3
- export declare const migrateUserDataService: MigrateUserDataService;
4
- //# sourceMappingURL=migrateUserDataService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrateUserDataService.d.ts","sourceRoot":"","sources":["../../src/services/migrateUserDataService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,MAAM,sBAAsB,GAAG,CACnC,iBAAiB,KAAA,EACjB,MAAM,KAAA,EACN,YAAY,EAAE,aAAa,KACxB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,eAAO,MAAM,sBAAsB,EAAE,sBA2BpC,CAAC"}
@@ -1,18 +0,0 @@
1
- import { userSettings } from '../users-settings.js';
2
- export const migrateUserDataService = async (userIdBeforeLogin, userId, unchainedAPI) => {
3
- const user = await unchainedAPI.modules.users.findUserById(userId);
4
- const userBeforeLogin = await unchainedAPI.modules.users.findUserById(userIdBeforeLogin);
5
- await unchainedAPI.services.orders.migrateOrderCarts({
6
- fromUserId: userIdBeforeLogin,
7
- toUserId: userId,
8
- shouldMerge: userSettings.mergeUserCartsOnLogin,
9
- countryContext: userBeforeLogin.lastLogin?.countryCode || user.lastLogin?.countryCode,
10
- }, unchainedAPI);
11
- await unchainedAPI.services.bookmarks.migrateBookmarks({
12
- fromUserId: userIdBeforeLogin,
13
- toUserId: userId,
14
- shouldMerge: userSettings.mergeUserCartsOnLogin,
15
- countryContext: userBeforeLogin.lastLogin?.countryCode || user.lastLogin?.countryCode,
16
- }, unchainedAPI);
17
- };
18
- //# sourceMappingURL=migrateUserDataService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"migrateUserDataService.js","sourceRoot":"","sources":["../../src/services/migrateUserDataService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQpD,MAAM,CAAC,MAAM,sBAAsB,GAA2B,KAAK,EACjE,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,EAAE;IACF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnE,MAAM,eAAe,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;IAEzF,MAAM,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAClD;QACE,UAAU,EAAE,iBAAiB;QAC7B,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,YAAY,CAAC,qBAAqB;QAC/C,cAAc,EAAE,eAAe,CAAC,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW;KACtF,EACD,YAAY,CACb,CAAC;IAEF,MAAM,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,gBAAgB,CACpD;QACE,UAAU,EAAE,iBAAiB;QAC7B,QAAQ,EAAE,MAAM;QAChB,WAAW,EAAE,YAAY,CAAC,qBAAqB;QAC/C,cAAc,EAAE,eAAe,CAAC,SAAS,EAAE,WAAW,IAAI,IAAI,CAAC,SAAS,EAAE,WAAW;KACtF,EACD,YAAY,CACb,CAAC;AACJ,CAAC,CAAC"}
@@ -1,15 +0,0 @@
1
- import { File, FileServices, FilesModule } from '@unchainedshop/core-files';
2
- import { UsersModule } from '../users-index.js';
3
- export type UpdateUserAvatarAfterUploadService = (params: {
4
- file: File;
5
- }, context: {
6
- modules: {
7
- files: FilesModule;
8
- users: UsersModule;
9
- };
10
- services: {
11
- files: FileServices;
12
- };
13
- }) => Promise<void>;
14
- export declare const updateUserAvatarAfterUploadService: UpdateUserAvatarAfterUploadService;
15
- //# sourceMappingURL=updateUserAvatarAfterUploadService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateUserAvatarAfterUploadService.d.ts","sourceRoot":"","sources":["../../src/services/updateUserAvatarAfterUploadService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,MAAM,kCAAkC,GAAG,CAC/C,MAAM,EAAE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,EACtB,OAAO,EAAE;IACP,OAAO,EAAE;QAAE,KAAK,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC;IACpD,QAAQ,EAAE;QAAE,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC;CACnC,KACE,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,eAAO,MAAM,kCAAkC,EAAE,kCA6BhD,CAAC"}
@@ -1,24 +0,0 @@
1
- import { log, LogLevel } from '@unchainedshop/logger';
2
- export const updateUserAvatarAfterUploadService = async ({ file }, context) => {
3
- const { modules, services } = context;
4
- const { userId } = file.meta;
5
- const files = await modules.files.findFiles({
6
- _id: { $ne: file._id },
7
- path: file.path,
8
- 'meta.userId': userId,
9
- });
10
- const fileIds = files.map((f) => f._id);
11
- try {
12
- if (fileIds?.length) {
13
- await services.files.removeFiles({
14
- fileIds,
15
- }, context);
16
- }
17
- }
18
- catch (e) {
19
- // cleanup error, not critical
20
- log(`could not clean up all old avatars: ${e.message}`, { level: LogLevel.Warning });
21
- }
22
- await modules.users.updateAvatar(userId, file._id);
23
- };
24
- //# sourceMappingURL=updateUserAvatarAfterUploadService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"updateUserAvatarAfterUploadService.js","sourceRoot":"","sources":["../../src/services/updateUserAvatarAfterUploadService.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAWtD,MAAM,CAAC,MAAM,kCAAkC,GAAuC,KAAK,EACzF,EAAE,IAAI,EAAE,EACR,OAAO,EACP,EAAE;IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACtC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,IAA0B,CAAC;IAEnD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC;QAC1C,GAAG,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;QACtB,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,aAAa,EAAE,MAAM;KACtB,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAExC,IAAI,CAAC;QACH,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,MAAM,QAAQ,CAAC,KAAK,CAAC,WAAW,CAC9B;gBACE,OAAO;aACR,EACD,OAAO,CACR,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,CAAU,EAAE,CAAC;QACpB,8BAA8B;QAC9B,GAAG,CAAC,uCAAwC,CAAW,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IAClG,CAAC;IAED,MAAM,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACrD,CAAC,CAAC"}
@@ -1,8 +0,0 @@
1
- import { UpdateUserAvatarAfterUploadService } from './updateUserAvatarAfterUploadService.js';
2
- import { MigrateUserDataService } from './migrateUserDataService.js';
3
- export interface UserServices {
4
- updateUserAvatarAfterUpload: UpdateUserAvatarAfterUploadService;
5
- migrateUserData: MigrateUserDataService;
6
- }
7
- export declare const userServices: UserServices;
8
- //# sourceMappingURL=userServices.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userServices.d.ts","sourceRoot":"","sources":["../../src/services/userServices.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,kCAAkC,EACnC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAA0B,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAE7F,MAAM,WAAW,YAAY;IAC3B,2BAA2B,EAAE,kCAAkC,CAAC;IAChE,eAAe,EAAE,sBAAsB,CAAC;CACzC;AAED,eAAO,MAAM,YAAY,EAAE,YAG1B,CAAC"}
@@ -1,7 +0,0 @@
1
- import { updateUserAvatarAfterUploadService, } from './updateUserAvatarAfterUploadService.js';
2
- import { migrateUserDataService } from './migrateUserDataService.js';
3
- export const userServices = {
4
- updateUserAvatarAfterUpload: updateUserAvatarAfterUploadService,
5
- migrateUserData: migrateUserDataService,
6
- };
7
- //# sourceMappingURL=userServices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"userServices.js","sourceRoot":"","sources":["../../src/services/userServices.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kCAAkC,GAEnC,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,sBAAsB,EAA0B,MAAM,6BAA6B,CAAC;AAO7F,MAAM,CAAC,MAAM,YAAY,GAAiB;IACxC,2BAA2B,EAAE,kCAAkC;IAC/D,eAAe,EAAE,sBAAsB;CACxC,CAAC"}
package/lib/types.d.ts DELETED
@@ -1,88 +0,0 @@
1
- import type { TimestampFields, Address, Contact, mongodb } from '@unchainedshop/mongodb';
2
- export interface PushSubscription {
3
- _id: string;
4
- userAgent: string;
5
- expirationTime: number;
6
- endpoint: string;
7
- }
8
- export interface UserProfile {
9
- displayName?: string;
10
- birthday?: Date;
11
- phoneMobile?: string;
12
- gender?: string;
13
- address?: Address;
14
- }
15
- export interface UserLastLogin {
16
- timestamp?: Date;
17
- locale?: string;
18
- countryCode?: string;
19
- remoteAddress?: string;
20
- remotePort?: string;
21
- userAgent?: string;
22
- }
23
- export interface Email {
24
- address: string;
25
- verified: boolean;
26
- }
27
- export interface WebAuthnCredentials {
28
- id: string;
29
- publicKey: string;
30
- created: Date;
31
- aaguid: string;
32
- counter: number;
33
- mdsMetadata: any;
34
- }
35
- export interface Web3Address {
36
- address: string;
37
- nonce?: number;
38
- verified: boolean;
39
- }
40
- export interface PushSubscriptionObject {
41
- userAgent: string;
42
- endpoint: string;
43
- expirationTime?: number;
44
- keys: {
45
- auth: string;
46
- p256dh: string;
47
- };
48
- }
49
- export type User = {
50
- _id?: string;
51
- deleted?: Date;
52
- avatarId?: string;
53
- emails: Array<Email>;
54
- guest: boolean;
55
- initialPassword: boolean;
56
- lastBillingAddress?: Address;
57
- lastContact?: Contact;
58
- lastLogin?: UserLastLogin;
59
- profile?: UserProfile;
60
- roles: Array<string>;
61
- services: any;
62
- tags?: Array<string>;
63
- pushSubscriptions: Array<PushSubscriptionObject>;
64
- username?: string;
65
- meta?: any;
66
- } & TimestampFields;
67
- export type UserQuery = mongodb.Filter<User> & {
68
- includeGuests?: boolean;
69
- queryString?: string;
70
- };
71
- export interface WebAuthnCredentialsCreationRequest {
72
- challenge: string;
73
- username: string;
74
- origin: string;
75
- factor: 'first' | 'second' | 'either';
76
- }
77
- export interface UserData {
78
- email?: string;
79
- guest?: boolean;
80
- initialPassword?: boolean;
81
- lastBillingAddress?: User['lastBillingAddress'];
82
- password: string | null;
83
- webAuthnPublicKeyCredentials?: any;
84
- profile?: UserProfile;
85
- roles?: Array<string>;
86
- username?: string;
87
- }
88
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/lib/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
package/lib/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -1,5 +0,0 @@
1
- export const hash = async (message) => {
2
- const bytes = new TextEncoder().encode(message);
3
- const hashBuffer = await crypto.subtle.digest('SHA-256', bytes);
4
- return Buffer.from(hashBuffer).toString('hex');
5
- };
@@ -1,37 +0,0 @@
1
- import { UnchainedCore } from '@unchainedshop/core';
2
- import { userSettings } from '../users-settings.js';
3
-
4
- export type MigrateUserDataService = (
5
- userIdBeforeLogin,
6
- userId,
7
- unchainedAPI: UnchainedCore,
8
- ) => Promise<void>;
9
-
10
- export const migrateUserDataService: MigrateUserDataService = async (
11
- userIdBeforeLogin,
12
- userId,
13
- unchainedAPI,
14
- ) => {
15
- const user = await unchainedAPI.modules.users.findUserById(userId);
16
- const userBeforeLogin = await unchainedAPI.modules.users.findUserById(userIdBeforeLogin);
17
-
18
- await unchainedAPI.services.orders.migrateOrderCarts(
19
- {
20
- fromUserId: userIdBeforeLogin,
21
- toUserId: userId,
22
- shouldMerge: userSettings.mergeUserCartsOnLogin,
23
- countryContext: userBeforeLogin.lastLogin?.countryCode || user.lastLogin?.countryCode,
24
- },
25
- unchainedAPI,
26
- );
27
-
28
- await unchainedAPI.services.bookmarks.migrateBookmarks(
29
- {
30
- fromUserId: userIdBeforeLogin,
31
- toUserId: userId,
32
- shouldMerge: userSettings.mergeUserCartsOnLogin,
33
- countryContext: userBeforeLogin.lastLogin?.countryCode || user.lastLogin?.countryCode,
34
- },
35
- unchainedAPI,
36
- );
37
- };
@@ -1,42 +0,0 @@
1
- import { File, FileServices, FilesModule } from '@unchainedshop/core-files';
2
- import { log, LogLevel } from '@unchainedshop/logger';
3
- import { UsersModule } from '../users-index.js';
4
-
5
- export type UpdateUserAvatarAfterUploadService = (
6
- params: { file: File },
7
- context: {
8
- modules: { files: FilesModule; users: UsersModule };
9
- services: { files: FileServices };
10
- },
11
- ) => Promise<void>;
12
-
13
- export const updateUserAvatarAfterUploadService: UpdateUserAvatarAfterUploadService = async (
14
- { file },
15
- context,
16
- ) => {
17
- const { modules, services } = context;
18
- const { userId } = file.meta as { userId: string };
19
-
20
- const files = await modules.files.findFiles({
21
- _id: { $ne: file._id },
22
- path: file.path,
23
- 'meta.userId': userId,
24
- });
25
- const fileIds = files.map((f) => f._id);
26
-
27
- try {
28
- if (fileIds?.length) {
29
- await services.files.removeFiles(
30
- {
31
- fileIds,
32
- },
33
- context,
34
- );
35
- }
36
- } catch (e: unknown) {
37
- // cleanup error, not critical
38
- log(`could not clean up all old avatars: ${(e as Error).message}`, { level: LogLevel.Warning });
39
- }
40
-
41
- await modules.users.updateAvatar(userId, file._id);
42
- };
@@ -1,15 +0,0 @@
1
- import {
2
- updateUserAvatarAfterUploadService,
3
- UpdateUserAvatarAfterUploadService,
4
- } from './updateUserAvatarAfterUploadService.js';
5
- import { migrateUserDataService, MigrateUserDataService } from './migrateUserDataService.js';
6
-
7
- export interface UserServices {
8
- updateUserAvatarAfterUpload: UpdateUserAvatarAfterUploadService;
9
- migrateUserData: MigrateUserDataService;
10
- }
11
-
12
- export const userServices: UserServices = {
13
- updateUserAvatarAfterUpload: updateUserAvatarAfterUploadService,
14
- migrateUserData: migrateUserDataService,
15
- };
package/src/types.ts DELETED
@@ -1,101 +0,0 @@
1
- import type { TimestampFields, Address, Contact, mongodb } from '@unchainedshop/mongodb';
2
-
3
- export interface PushSubscription {
4
- _id: string;
5
- userAgent: string;
6
- expirationTime: number;
7
- endpoint: string;
8
- }
9
-
10
- export interface UserProfile {
11
- displayName?: string;
12
- birthday?: Date;
13
- phoneMobile?: string;
14
- gender?: string;
15
- address?: Address;
16
- }
17
-
18
- export interface UserLastLogin {
19
- timestamp?: Date;
20
- locale?: string;
21
- countryCode?: string;
22
- remoteAddress?: string;
23
- remotePort?: string;
24
- userAgent?: string;
25
- }
26
-
27
- export interface Email {
28
- address: string;
29
- verified: boolean;
30
- }
31
-
32
- export interface WebAuthnCredentials {
33
- id: string;
34
- publicKey: string;
35
- created: Date;
36
- aaguid: string;
37
- counter: number;
38
- mdsMetadata: any;
39
- }
40
-
41
- export interface Web3Address {
42
- address: string;
43
- nonce?: number;
44
- verified: boolean;
45
- }
46
-
47
- export interface PushSubscriptionObject {
48
- userAgent: string;
49
- endpoint: string;
50
- expirationTime?: number;
51
- keys: {
52
- auth: string;
53
- p256dh: string;
54
- };
55
- }
56
-
57
- export type User = {
58
- _id?: string;
59
- deleted?: Date;
60
- avatarId?: string;
61
- emails: Array<Email>;
62
- guest: boolean;
63
- initialPassword: boolean;
64
- lastBillingAddress?: Address;
65
- lastContact?: Contact;
66
- lastLogin?: UserLastLogin;
67
- profile?: UserProfile;
68
- roles: Array<string>;
69
- services: any;
70
- tags?: Array<string>;
71
- pushSubscriptions: Array<PushSubscriptionObject>;
72
- username?: string;
73
- meta?: any;
74
- } & TimestampFields;
75
-
76
- export type UserQuery = mongodb.Filter<User> & {
77
- includeGuests?: boolean;
78
- queryString?: string;
79
- };
80
-
81
- export interface WebAuthnCredentialsCreationRequest {
82
- challenge: string;
83
- username: string;
84
- origin: string;
85
- factor: 'first' | 'second' | 'either';
86
- }
87
-
88
- /*
89
- * Module
90
- */
91
- export interface UserData {
92
- email?: string;
93
- guest?: boolean;
94
- initialPassword?: boolean;
95
- lastBillingAddress?: User['lastBillingAddress'];
96
- password: string | null;
97
- webAuthnPublicKeyCredentials?: any;
98
- profile?: UserProfile;
99
- roles?: Array<string>;
100
- username?: string;
101
- }