@aristid/leav-types 1.4.1-ca7c8baf → 1.4.1-ce4ec267

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 (41) hide show
  1. package/apps/core/config/default.d.ts +25 -11
  2. package/apps/core/config/development.d.ts +0 -4
  3. package/apps/core/config/test.d.ts +43 -9
  4. package/apps/core/src/__tests__/e2e/api/e2eUtils.d.ts +9 -0
  5. package/apps/core/src/__tests__/e2e/api/export/export.test.d.ts +1 -0
  6. package/apps/core/src/__tests__/e2e/api/mailpitUtils.d.ts +21 -0
  7. package/apps/core/src/_types/config.d.ts +24 -5
  8. package/apps/core/src/_types/errors.d.ts +1 -0
  9. package/apps/core/src/_types/eventsManager.d.ts +9 -1
  10. package/apps/core/src/_types/forms.d.ts +2 -2
  11. package/apps/core/src/_types/notification.d.ts +51 -0
  12. package/apps/core/src/_types/userData.d.ts +10 -0
  13. package/apps/core/src/app/auth/authApp.d.ts +3 -3
  14. package/apps/core/src/app/core/index.d.ts +1 -0
  15. package/apps/core/src/app/core/notificationApp.d.ts +10 -0
  16. package/apps/core/src/domain/export/exportDomain.d.ts +6 -1
  17. package/apps/core/src/domain/export/exportProfileDomain.d.ts +23 -0
  18. package/apps/core/src/domain/export/exportProfileDomain.spec.d.ts +1 -0
  19. package/apps/core/src/domain/export/index.d.ts +1 -0
  20. package/apps/core/src/domain/notification/channels/emailChannel.d.ts +12 -0
  21. package/apps/core/src/domain/notification/channels/webSocketChannel.d.ts +6 -0
  22. package/apps/core/src/domain/notification/index.d.ts +3 -0
  23. package/apps/core/src/domain/notification/notificationDomain.d.ts +12 -0
  24. package/apps/core/src/domain/user/userDomain.d.ts +5 -2
  25. package/apps/core/src/domain/value/valueDomain.d.ts +0 -5
  26. package/apps/core/src/errors/CustomConfigError.d.ts +4 -0
  27. package/apps/core/src/infra/cache/cacheService.d.ts +4 -3
  28. package/apps/core/src/infra/cache/index.d.ts +1 -2
  29. package/apps/core/src/infra/cache/ramService.d.ts +1 -7
  30. package/apps/core/src/infra/cache/redis.d.ts +5 -1
  31. package/apps/core/src/infra/oidc/oidcClientService.d.ts +3 -3
  32. package/apps/core/src/infra/session/index.d.ts +1 -0
  33. package/apps/core/src/infra/session/sessionRepo.d.ts +8 -0
  34. package/libs/logger/src/LoggerCallStack.d.ts +14 -0
  35. package/libs/logger/src/catchErrorFormatter.d.ts +2 -0
  36. package/libs/logger/src/config.d.ts +32 -3
  37. package/libs/logger/src/locationInfoFormatter.d.ts +2 -0
  38. package/libs/message-broker/src/amqpService.d.ts +2 -2
  39. package/libs/message-broker/src/types/amqp.d.ts +1 -1
  40. package/package.json +1 -1
  41. package/libs/logger/src/locationInfoFormatters.d.ts +0 -10
@@ -63,6 +63,13 @@ export declare namespace mailer {
63
63
  export { port_1 as port };
64
64
  let secure_1: boolean;
65
65
  export { secure_1 as secure };
66
+ export let requireTLS: boolean;
67
+ export namespace from {
68
+ let name_1: string;
69
+ export { name_1 as name };
70
+ let email_2: string;
71
+ export { email_2 as email };
72
+ }
66
73
  export namespace auth_1 {
67
74
  export let user: string;
68
75
  let password_1: string;
@@ -90,12 +97,6 @@ export declare namespace lang {
90
97
  let _default: string;
91
98
  export { _default as default };
92
99
  }
93
- export declare namespace logs {
94
- let level: string;
95
- let transport: string;
96
- let destinationFile: string;
97
- let useJsonFormat: boolean;
98
- }
99
100
  export declare namespace permissions {
100
101
  let _default_1: boolean;
101
102
  export { _default_1 as default };
@@ -121,7 +122,8 @@ export declare namespace redis {
121
122
  export { host_2 as host };
122
123
  let port_3: string;
123
124
  export { port_3 as port };
124
- export let database: number;
125
+ export let cacheDatabase: number;
126
+ export let sessionDatabase: number;
125
127
  }
126
128
  export declare namespace filesManager {
127
129
  namespace queues {
@@ -167,8 +169,7 @@ export declare namespace eventsManager {
167
169
  }
168
170
  export { routingKeys_2 as routingKeys };
169
171
  export namespace queues_2 {
170
- let pubsub_events_1: string;
171
- export { pubsub_events_1 as pubsub_events };
172
+ let pubsub_events_prefix: string;
172
173
  }
173
174
  export { queues_2 as queues };
174
175
  }
@@ -200,6 +201,19 @@ export declare namespace preview {
200
201
  let directory_3: string;
201
202
  export { directory_3 as directory };
202
203
  }
204
+ export declare namespace notification {
205
+ let enable_3: boolean;
206
+ export { enable_3 as enable };
207
+ export namespace email_3 {
208
+ let enable_4: boolean;
209
+ export { enable_4 as enable };
210
+ }
211
+ export { email_3 as email };
212
+ export namespace webSocket {
213
+ let enable_5: boolean;
214
+ export { enable_5 as enable };
215
+ }
216
+ }
203
217
  export declare namespace applications {
204
218
  let rootFolder: string;
205
219
  }
@@ -208,8 +222,8 @@ export declare namespace files {
208
222
  let originalsPathPrefix: string;
209
223
  }
210
224
  export declare namespace dbProfiler {
211
- let enable_3: boolean;
212
- export { enable_3 as enable };
225
+ let enable_6: boolean;
226
+ export { enable_6 as enable };
213
227
  }
214
228
  export declare namespace elasticsearch {
215
229
  export let indexPrefix: string;
@@ -1,10 +1,6 @@
1
1
  export namespace server {
2
2
  let allowIntrospection: boolean;
3
3
  }
4
- export namespace logs {
5
- let level: string;
6
- let transport: string;
7
- }
8
4
  export namespace auth {
9
5
  let refreshTokenExpiration: string;
10
6
  namespace cookie {
@@ -6,6 +6,10 @@ export namespace server {
6
6
  let password: string;
7
7
  let email: string;
8
8
  }
9
+ namespace systemUser {
10
+ let email_1: string;
11
+ export { email_1 as email };
12
+ }
9
13
  let allowIntrospection: boolean;
10
14
  }
11
15
  export namespace db {
@@ -22,33 +26,63 @@ export namespace filesManager {
22
26
  }
23
27
  }
24
28
  export namespace eventsManager {
25
- namespace routingKeys {
29
+ export namespace routingKeys {
26
30
  let data_events: string;
31
+ let pubsub_events: string;
32
+ }
33
+ export namespace queues_1 {
34
+ let pubsub_events_prefix: string;
27
35
  }
36
+ export { queues_1 as queues };
28
37
  }
29
38
  export namespace indexationManager {
30
- export namespace queues_1 {
39
+ export namespace queues_2 {
31
40
  let events_1: string;
32
41
  export { events_1 as events };
33
42
  }
34
- export { queues_1 as queues };
43
+ export { queues_2 as queues };
35
44
  }
36
45
  export namespace tasksManager {
37
- export namespace queues_2 {
38
- let orders: string;
46
+ export let checkingInterval: number;
47
+ export namespace queues_3 {
48
+ let execOrders: string;
49
+ let cancelOrders: string;
39
50
  }
40
- export { queues_2 as queues };
51
+ export { queues_3 as queues };
41
52
  export namespace routingKeys_1 {
42
- let orders_1: string;
43
- export { orders_1 as orders };
53
+ let execOrders_1: string;
54
+ export { execOrders_1 as execOrders };
55
+ let cancelOrders_1: string;
56
+ export { cancelOrders_1 as cancelOrders };
44
57
  }
45
58
  export { routingKeys_1 as routingKeys };
46
59
  }
47
60
  export namespace logs {
48
61
  let transport: string;
49
62
  }
63
+ export namespace notification {
64
+ export let enable: boolean;
65
+ export namespace email_2 {
66
+ let enable_1: boolean;
67
+ export { enable_1 as enable };
68
+ }
69
+ export { email_2 as email };
70
+ export namespace webSocket {
71
+ let enable_2: boolean;
72
+ export { enable_2 as enable };
73
+ }
74
+ }
75
+ export namespace mailer {
76
+ namespace from {
77
+ let name_1: string;
78
+ export { name_1 as name };
79
+ let email_3: string;
80
+ export { email_3 as email };
81
+ }
82
+ }
50
83
  export let debug: boolean;
51
84
  export namespace redis {
52
- let database: number;
85
+ let cacheDatabase: number;
86
+ let sessionDatabase: number;
53
87
  }
54
88
  export let pluginsPath: string[];
@@ -1,3 +1,5 @@
1
+ import WebSocket from 'ws';
2
+ import { type Client as GraphqlWsClient } from 'graphql-ws';
1
3
  import type FormData from 'form-data';
2
4
  import { type ActionsListConfig } from '_types/actionsList';
3
5
  import { type ITreeElement } from '_types/tree';
@@ -41,3 +43,10 @@ export declare function gqlSaveVersionProfile(profileId: string, label: string,
41
43
  * Convert object to JSON, escaping quotes to be able to use it in a graphql query
42
44
  **/
43
45
  export declare function toCleanJSON(obj: {}): string;
46
+ export declare function makeWebSocketGraphQlCall(): Promise<GraphqlWsClient>;
47
+ export declare function waitGraphqlWebSocketMessage<T>(client: GraphqlWsClient, query: string, variables: Record<string, any>, acceptMessage: (msg: T) => boolean, { timeoutMs }: {
48
+ timeoutMs: any;
49
+ }): Promise<T>;
50
+ export declare function waitWebSocketMessage<T>(webSocket: WebSocket, acceptMessage: (msg: T) => boolean, { timeoutMs }: {
51
+ timeoutMs: any;
52
+ }): Promise<T>;
@@ -0,0 +1,21 @@
1
+ interface IMailpitMsgLight {
2
+ From: {
3
+ Name: string;
4
+ Address: string;
5
+ };
6
+ ID: string;
7
+ MessageID: string;
8
+ Read: boolean;
9
+ Size: number;
10
+ Subject: string;
11
+ To: Array<{
12
+ Name: string;
13
+ Address: string;
14
+ }>;
15
+ }
16
+ interface IMailpitMsgFull extends IMailpitMsgLight {
17
+ HTML: string;
18
+ Text: string;
19
+ }
20
+ export declare function waitMailpitMessage(acceptMessage: (msg: IMailpitMsgLight) => boolean): Promise<IMailpitMsgFull>;
21
+ export {};
@@ -1,4 +1,3 @@
1
- import { type ILoggerConfig } from '@leav/logger';
2
1
  import { type Options } from 'amqplib';
3
2
  import { type IKeyValue } from './shared';
4
3
  export interface IConfig {
@@ -10,7 +9,6 @@ export interface IConfig {
10
9
  auth: IAuth;
11
10
  mailer: IMailer;
12
11
  lang: ILang;
13
- logs: ILogs;
14
12
  permissions: IPermissions;
15
13
  amqp: IAmqp;
16
14
  redis: IRedis;
@@ -18,6 +16,7 @@ export interface IConfig {
18
16
  indexationManager: IIndexationManager;
19
17
  tasksManager: ITasksManager;
20
18
  eventsManager: IEventsManager;
19
+ notification: INotificationConfig;
21
20
  debug?: boolean;
22
21
  env?: string;
23
22
  defaultUserId: string;
@@ -99,7 +98,18 @@ export interface IAuth {
99
98
  export interface IMailer {
100
99
  host: string;
101
100
  port: number;
101
+ /**
102
+ * If true, use SSL/TLS connection (usually port 465). If false, use STARTTLS (usually port 587)
103
+ */
102
104
  secure: boolean;
105
+ /**
106
+ * If true, require TLS for the connection (STARTTLS). Only used if secure is false
107
+ */
108
+ requireTLS: boolean;
109
+ from: {
110
+ name: string;
111
+ email: string;
112
+ };
103
113
  auth: {
104
114
  user: string;
105
115
  password: string;
@@ -109,7 +119,6 @@ export interface ILang {
109
119
  available: string[];
110
120
  default: string;
111
121
  }
112
- export type ILogs = ILoggerConfig;
113
122
  export interface IPermissions {
114
123
  default: boolean;
115
124
  enableCache: boolean;
@@ -123,7 +132,8 @@ export interface IAmqp {
123
132
  export interface IRedis {
124
133
  host: string;
125
134
  port: number;
126
- database: number;
135
+ cacheDatabase: number;
136
+ sessionDatabase: number;
127
137
  }
128
138
  export interface IFilesManager {
129
139
  queues: {
@@ -148,7 +158,7 @@ export interface IEventsManager {
148
158
  pubsub_events: string;
149
159
  };
150
160
  queues: {
151
- pubsub_events: string;
161
+ pubsub_events_prefix: string;
152
162
  };
153
163
  }
154
164
  export interface IIndexationManager {
@@ -225,6 +235,15 @@ export interface IFilesConfig {
225
235
  export interface IDbProfilerConfig {
226
236
  enable: boolean;
227
237
  }
238
+ export interface INotificationConfig {
239
+ enable: boolean;
240
+ email: {
241
+ enable: boolean;
242
+ };
243
+ webSocket: {
244
+ enable: boolean;
245
+ };
246
+ }
228
247
  export interface IElasticsearchConfig {
229
248
  indexPrefix: string;
230
249
  url: string;
@@ -1,6 +1,7 @@
1
1
  export declare enum ErrorTypes {
2
2
  VALIDATION_ERROR = "VALIDATION_ERROR",
3
3
  PERMISSION_ERROR = "PERMISSION_ERROR",
4
+ CUSTOM_CONFIG_ERROR = "CUSTOM_CONFIG_ERROR",
4
5
  INTERNAL_ERROR = "INTERNAL_ERROR"
5
6
  }
6
7
  export declare enum Errors {
@@ -1,8 +1,16 @@
1
+ import { type INotificationContent } from './notification';
1
2
  export declare enum TriggerNames {
2
3
  APPLICATION_EVENT = "APPLICATION_EVENT",
3
4
  UPLOAD_FILE = "UPLOAD_FILE",
4
5
  INDEXATION = "INDEXATION",
5
6
  TASK = "TASK",
6
7
  TREE_EVENT = "TREE_EVENT",
7
- RECORD_UPDATE = "RECORD_UPDATE"
8
+ RECORD_UPDATE = "RECORD_UPDATE",
9
+ NOTIFICATION = "NOTIFICATION"
10
+ }
11
+ export interface IPubSubNotificationData {
12
+ notification: INotificationContent & {
13
+ date: number;
14
+ };
15
+ recipientUserIds: string[];
8
16
  }
@@ -22,8 +22,8 @@ export interface IRecordForm {
22
22
  sidePanel: IFormSidePanel;
23
23
  }
24
24
  export declare enum FormElementTypes {
25
- field = "field",
26
- layout = "layout"
25
+ FIELD = "field",
26
+ LAYOUT = "layout"
27
27
  }
28
28
  export type IFormStrict = Required<IForm>;
29
29
  export interface IFormElementsDependency {
@@ -0,0 +1,51 @@
1
+ import { type IQueryInfos } from './queryInfos';
2
+ export interface INotification {
3
+ /**
4
+ * Timestamp of the notification creation in milliseconds since epoch
5
+ */
6
+ date: number;
7
+ /**
8
+ * User ID of the notification recipient
9
+ */
10
+ recipientUserId: string;
11
+ content: INotificationContent;
12
+ }
13
+ export interface INotificationContent {
14
+ level: 'info' | 'warning';
15
+ title: string;
16
+ message: string;
17
+ relatedEntities?: Array<{
18
+ url: string;
19
+ label: string;
20
+ }>;
21
+ attachments?: Array<{
22
+ url: string;
23
+ label: string;
24
+ }>;
25
+ }
26
+ export interface ICreateNotification {
27
+ emitterUserId: string;
28
+ /**
29
+ * Recipients of the notification, need at least one userId or groupId
30
+ */
31
+ recipients: {
32
+ userIds: string[];
33
+ /**
34
+ * No implementation yet
35
+ */
36
+ groupIds: string[];
37
+ };
38
+ /**
39
+ * Priority of the notification, may change which channel is used to send it (no yet implemented)
40
+ */
41
+ priority: 'urgent' | 'normal';
42
+ content: INotificationContent;
43
+ }
44
+ export declare enum NotificationChannels {
45
+ EMAIL = "email",
46
+ WEB_SOCKET = "web_socket"
47
+ }
48
+ export interface INotificationChannel {
49
+ type: NotificationChannels;
50
+ sendNotifications(notifications: INotification[], ctx: IQueryInfos): Promise<void>;
51
+ }
@@ -2,3 +2,13 @@ export interface IUserData {
2
2
  global: boolean;
3
3
  data: any;
4
4
  }
5
+ /**
6
+ * Same idea as IRecordIdentity but for users
7
+ */
8
+ export interface IUserIdentity {
9
+ id: string;
10
+ /**
11
+ * @throw if user have no email
12
+ */
13
+ getEmail: () => Promise<string>;
14
+ }
@@ -4,7 +4,6 @@ import { type IUserDomain } from 'domain/user/userDomain';
4
4
  import { type IValueDomain } from 'domain/value/valueDomain';
5
5
  import { type Response } from 'express';
6
6
  import { type IConfig } from '_types/config';
7
- import { type ICachesService } from '../../infra/cache/cacheService';
8
7
  import { type ITokenUserData } from '../../_types/auth';
9
8
  import { type IRequestWithContext } from '../../_types/express';
10
9
  import { type ILogger } from '@leav/logger';
@@ -16,6 +15,7 @@ import { type IRecordRepo } from '../../infra/record/recordRepo';
16
15
  import { type IGraphqlAppModule } from 'app/graphql/graphqlApp';
17
16
  import { type IServerRouteAppModule } from 'interface/server';
18
17
  import { type GetSystemQueryContext } from 'utils/helpers/getSystemQueryContext';
18
+ import { type ISessionRepo } from '../../infra/session/sessionRepo';
19
19
  export interface IAuthApp extends IGraphqlAppModule, IServerRouteAppModule {
20
20
  validateRequestToken(params: {
21
21
  apiKey?: string;
@@ -30,12 +30,12 @@ export interface IAuthAppDeps {
30
30
  'core.infra.record': IRecordRepo;
31
31
  'core.domain.apiKey': IApiKeyDomain;
32
32
  'core.domain.user': IUserDomain;
33
- 'core.infra.cache.cacheService': ICachesService;
34
33
  'core.utils.logger': ILogger;
35
34
  'core.infra.oidc.oidcClientService': IOIDCClientService;
36
35
  'core.app.helpers.initQueryContext': InitQueryContextFunc;
37
36
  'core.app.helpers.convertOIDCIdentifier': IConvertOIDCIdentifier;
38
37
  'core.utils.getSystemQueryContext': GetSystemQueryContext;
39
38
  config: IConfig;
39
+ 'core.infra.session': ISessionRepo;
40
40
  }
41
- export default function ({ 'core.domain.value': valueDomain, 'core.domain.record': recordDomain, 'core.infra.record': recordRepo, 'core.domain.apiKey': apiKeyDomain, 'core.domain.user': userDomain, 'core.utils.logger': logger, 'core.infra.cache.cacheService': cacheService, 'core.infra.oidc.oidcClientService': oidcClientService, 'core.app.helpers.initQueryContext': initQueryContext, 'core.app.helpers.convertOIDCIdentifier': convertOIDCIdentifier, 'core.utils.getSystemQueryContext': getSystemQueryContext, config }: IAuthAppDeps): IAuthApp;
41
+ export default function ({ 'core.domain.value': valueDomain, 'core.domain.record': recordDomain, 'core.infra.record': recordRepo, 'core.domain.apiKey': apiKeyDomain, 'core.domain.user': userDomain, 'core.utils.logger': logger, 'core.infra.oidc.oidcClientService': oidcClientService, 'core.app.helpers.initQueryContext': initQueryContext, 'core.app.helpers.convertOIDCIdentifier': convertOIDCIdentifier, 'core.utils.getSystemQueryContext': getSystemQueryContext, 'core.infra.session': sessionRepo, config }: IAuthAppDeps): IAuthApp;
@@ -17,6 +17,7 @@ export { default as permission } from './permissionApp/permissionApp';
17
17
  export { default as plugins } from './pluginsApp';
18
18
  export { default as record } from './recordApp/recordApp';
19
19
  export { default as tasksManager } from './tasksManagerApp';
20
+ export { default as notification } from './notificationApp';
20
21
  export { default as tree } from './treeApp/treeApp';
21
22
  export { default as userData } from './userDataApp';
22
23
  export { default as value } from './valueApp';
@@ -0,0 +1,10 @@
1
+ import { type IGraphqlAppModule } from 'app/graphql/graphqlApp';
2
+ import { type IEventsManagerDomain } from 'domain/eventsManager/eventsManagerDomain';
3
+ import { type IUtils } from 'utils/utils';
4
+ export type INotificationApp = IGraphqlAppModule;
5
+ interface IDeps {
6
+ 'core.utils'?: IUtils;
7
+ 'core.domain.eventsManager'?: IEventsManagerDomain;
8
+ }
9
+ export default function ({ 'core.domain.eventsManager': eventsManager }: IDeps): INotificationApp;
10
+ export {};
@@ -11,8 +11,11 @@ import { type IQueryInfos } from '../../_types/queryInfos';
11
11
  import { type IRecordFilterLight } from '../../_types/record';
12
12
  import { type ITaskFuncParams } from '../../_types/tasksManager';
13
13
  import { type IValidateHelper } from '../helpers/validate';
14
+ import { type INotificationDomain } from 'domain/notification/notificationDomain';
15
+ import { type IExportProfileDomain } from './exportProfileDomain';
14
16
  export interface IExportParams {
15
17
  library: string;
18
+ profile: string;
16
19
  attributes: string[];
17
20
  filters?: IRecordFilterLight[];
18
21
  ctx: IQueryInfos;
@@ -39,8 +42,10 @@ export interface IExportDomainDeps {
39
42
  'core.domain.helpers.validate': IValidateHelper;
40
43
  'core.domain.helpers.updateTaskProgress': UpdateTaskProgress;
41
44
  'core.domain.eventsManager': IEventsManagerDomain;
45
+ 'core.domain.notification': INotificationDomain;
46
+ 'core.domain.export.exportProfile': IExportProfileDomain;
42
47
  'core.utils': IUtils;
43
48
  translator: i18n;
44
49
  config: Config.IConfig;
45
50
  }
46
- export default function ({ config, 'core.domain.record': recordDomain, 'core.domain.helpers.validate': validateHelper, 'core.domain.attribute': attributeDomain, 'core.domain.library': libraryDomain, 'core.domain.tasksManager': tasksManager, 'core.domain.helpers.updateTaskProgress': updateTaskProgress, 'core.domain.eventsManager': eventsManagerDomain, 'core.utils': utils, translator }: IExportDomainDeps): IExportDomain;
51
+ export default function ({ config, 'core.domain.record': recordDomain, 'core.domain.helpers.validate': validateHelper, 'core.domain.attribute': attributeDomain, 'core.domain.library': libraryDomain, 'core.domain.tasksManager': tasksManager, 'core.domain.helpers.updateTaskProgress': updateTaskProgress, 'core.domain.eventsManager': eventsManagerDomain, 'core.domain.notification': notificationDomain, 'core.domain.export.exportProfile': exportProfileDomain, 'core.utils': utils, translator }: IExportDomainDeps): IExportDomain;
@@ -0,0 +1,23 @@
1
+ import { type ILibraryDomain } from '../library/libraryDomain';
2
+ import { type IQueryInfos } from '../../_types/queryInfos';
3
+ export interface IExportProfileConfig {
4
+ profileSelected: string;
5
+ profiles: Array<{
6
+ label: string;
7
+ columns: Array<{
8
+ columnLabel: string;
9
+ attribute: string;
10
+ }>;
11
+ }>;
12
+ }
13
+ export interface IExportColumn {
14
+ columnLabel: string;
15
+ attribute: string;
16
+ }
17
+ export interface IExportProfileDomain {
18
+ getColumnsFromProfileConfig(profile: string, library: string, ctx: IQueryInfos): Promise<IExportColumn[]>;
19
+ }
20
+ export interface IExportProfileDomainDeps {
21
+ 'core.domain.library': ILibraryDomain;
22
+ }
23
+ export default function ({ 'core.domain.library': libraryDomain }: IExportProfileDomainDeps): IExportProfileDomain;
@@ -1 +1,2 @@
1
1
  export { default } from './exportDomain';
2
+ export { default as exportProfile } from './exportProfileDomain';
@@ -0,0 +1,12 @@
1
+ import { type INotificationChannel } from '../../../_types/notification';
2
+ import { type IMailerService } from 'infra/mailer/mailerService';
3
+ import { type IUserDomain } from 'domain/user/userDomain';
4
+ import { type IGlobalSettingsDomain } from 'domain/globalSettings/globalSettingsDomain';
5
+ import { type IConfig } from '_types/config';
6
+ export interface INotificationByEmailChannelDeps {
7
+ config: IConfig;
8
+ 'core.infra.mailer.mailerService': IMailerService;
9
+ 'core.domain.globalSettings': IGlobalSettingsDomain;
10
+ 'core.domain.user': IUserDomain;
11
+ }
12
+ export default function ({ config, 'core.infra.mailer.mailerService': mailerService, 'core.domain.globalSettings': globalSettingsDomain, 'core.domain.user': userDomain }: INotificationByEmailChannelDeps): INotificationChannel;
@@ -0,0 +1,6 @@
1
+ import { type INotificationChannel } from '../../../_types/notification';
2
+ import { type IEventsManagerDomain } from 'domain/eventsManager/eventsManagerDomain';
3
+ export interface INotificationByWebSocketChannelDeps {
4
+ 'core.domain.eventsManager': IEventsManagerDomain;
5
+ }
6
+ export default function ({ 'core.domain.eventsManager': eventsManagerDomain }: INotificationByWebSocketChannelDeps): INotificationChannel;
@@ -0,0 +1,3 @@
1
+ export { default } from './notificationDomain';
2
+ export { default as emailChannel } from './channels/emailChannel';
3
+ export { default as webSocketChannel } from './channels/webSocketChannel';
@@ -0,0 +1,12 @@
1
+ import { type IConfig } from '_types/config';
2
+ import { type INotificationChannel, type ICreateNotification } from '_types/notification';
3
+ import { type IQueryInfos } from '_types/queryInfos';
4
+ export interface INotificationDomain {
5
+ createNotification(notification: ICreateNotification, ctx: IQueryInfos): Promise<void>;
6
+ }
7
+ export interface INotificationDomainDeps {
8
+ 'core.domain.notification.emailChannel': INotificationChannel;
9
+ 'core.domain.notification.webSocketChannel': INotificationChannel;
10
+ config: IConfig;
11
+ }
12
+ export default function ({ 'core.domain.notification.emailChannel': emailChannel, 'core.domain.notification.webSocketChannel': webSocketChannel, config }: INotificationDomainDeps): INotificationDomain;
@@ -6,7 +6,8 @@ import { type IUserDataRepo } from 'infra/userData/userDataRepo';
6
6
  import { type IUtils } from 'utils/utils';
7
7
  import type * as Config from '_types/config';
8
8
  import { type IQueryInfos } from '_types/queryInfos';
9
- import { type IUserData } from '_types/userData';
9
+ import { type IUserIdentity, type IUserData } from '_types/userData';
10
+ import { type IValueDomain } from 'domain/value/valueDomain';
10
11
  interface ISaveUserDataParams {
11
12
  key: string;
12
13
  value: any;
@@ -15,12 +16,14 @@ interface ISaveUserDataParams {
15
16
  ctx: IQueryInfos;
16
17
  }
17
18
  export interface IUserDomain {
19
+ getUserIdentity(userId: string, ctx: IQueryInfos): Promise<IUserIdentity>;
18
20
  saveUserData(params: ISaveUserDataParams): Promise<IUserData>;
19
21
  getUserData(keys: string[], global: boolean, ctx: IQueryInfos): Promise<IUserData>;
20
22
  sendResetPasswordEmail(email: string, token: string, login: string, browser: string, os: string, lang: 'fr' | 'en', ctx: IQueryInfos): Promise<void>;
21
23
  }
22
24
  export interface IUserDomainDeps {
23
25
  config: Config.IConfig;
26
+ 'core.domain.value': IValueDomain;
24
27
  'core.domain.permissions': IPermissionDomain;
25
28
  'core.infra.userData': IUserDataRepo;
26
29
  'core.domain.permission': IPermissionDomain;
@@ -32,5 +35,5 @@ export interface IUserDomainDeps {
32
35
  export declare enum UserCoreDataKeys {
33
36
  CONSULTED_APPS = "applications_consultation"
34
37
  }
35
- export default function ({ config, 'core.infra.userData': userDataRepo, 'core.domain.permission': permissionDomain, 'core.infra.mailer.mailerService': mailerService, 'core.domain.globalSettings': globalSettingsDomain, 'core.utils': utils, translator }: IUserDomainDeps): IUserDomain;
38
+ export default function ({ config, 'core.domain.value': valueDomain, 'core.infra.userData': userDataRepo, 'core.domain.permission': permissionDomain, 'core.infra.mailer.mailerService': mailerService, 'core.domain.globalSettings': globalSettingsDomain, 'core.utils': utils, translator }: IUserDomainDeps): IUserDomain;
36
39
  export {};
@@ -88,11 +88,6 @@ export interface IValueDomain {
88
88
  ctx: IQueryInfos;
89
89
  }): Promise<IValue>;
90
90
  runActionsList(params: IRunActionListParams): Promise<IValue[]>;
91
- runActionsListAndFormatOnValue({ library, value, ctx }: {
92
- library: string;
93
- value: IValue;
94
- ctx: IQueryInfos;
95
- }): Promise<IValue[]>;
96
91
  }
97
92
  export interface IValueDomainDeps {
98
93
  config: Config.IConfig;
@@ -0,0 +1,4 @@
1
+ import LeavError from './LeavError';
2
+ export default class CustomConfigError<T> extends LeavError<T> {
3
+ constructor(message?: string);
4
+ }
@@ -1,4 +1,5 @@
1
1
  import { type IQueryInfos } from '_types/queryInfos';
2
+ import { type IRedis } from './redis';
2
3
  export interface IMemoizeParams<T> {
3
4
  key: string;
4
5
  func: () => Promise<T>;
@@ -21,13 +22,13 @@ export interface ICacheService {
21
22
  deleteData(keys: string[], path?: string): Promise<void>;
22
23
  deleteAll(path?: string): Promise<void>;
23
24
  }
24
- interface IDeps {
25
- 'core.infra.cache.ramService': ICacheService;
25
+ interface ICacheServiceDeps {
26
+ 'core.infra.redis': IRedis;
26
27
  'core.infra.cache.diskService': ICacheService;
27
28
  }
28
29
  export declare enum ECacheType {
29
30
  DISK = "DISK",
30
31
  RAM = "RAM"
31
32
  }
32
- export default function ({ 'core.infra.cache.ramService': ramService, 'core.infra.cache.diskService': diskService }: IDeps): ICachesService;
33
+ export default function ({ 'core.infra.redis': redis, 'core.infra.cache.diskService': diskService }: ICacheServiceDeps): ICachesService;
33
34
  export {};
@@ -1,4 +1,3 @@
1
1
  export { initRedis } from './redis';
2
- export { default as diskService } from './diskService';
3
- export { default as ramService } from './ramService';
4
2
  export { default as cacheService } from './cacheService';
3
+ export { default as diskService } from './diskService';
@@ -1,9 +1,3 @@
1
1
  import { type ICacheService } from './cacheService';
2
2
  import { type RedisClientType } from './redis';
3
- import { type IConfig } from '../../_types/config';
4
- interface IDeps {
5
- config?: IConfig;
6
- 'core.infra.redis'?: RedisClientType;
7
- }
8
- export default function ({ 'core.infra.redis': redis, config }: IDeps): ICacheService;
9
- export {};
3
+ export default function (redisClient: RedisClientType): ICacheService;
@@ -4,5 +4,9 @@ interface IDeps {
4
4
  config?: IConfig;
5
5
  }
6
6
  export type RedisClientType = ReturnType<typeof redis.createClient>;
7
- export declare function initRedis({ config }: IDeps): Promise<RedisClientType>;
7
+ export interface IRedis {
8
+ cache: RedisClientType;
9
+ session: RedisClientType;
10
+ }
11
+ export declare function initRedis({ config }: IDeps): Promise<IRedis>;
8
12
  export {};
@@ -1,7 +1,7 @@
1
1
  import { type OidcClient } from './oidcClient';
2
2
  import { TokenSet } from 'openid-client';
3
- import { type ICachesService } from '../cache/cacheService';
4
3
  import { type IConfig } from '../../_types/config';
4
+ import { type ISessionRepo } from '../session/sessionRepo';
5
5
  export interface IOIDCClientService {
6
6
  oidcClient?: OidcClient;
7
7
  getTokensFromCodes: (params: {
@@ -30,8 +30,8 @@ export interface IOIDCClientService {
30
30
  }
31
31
  interface IDeps {
32
32
  'core.infra.oidcClient'?: OidcClient;
33
- 'core.infra.cache.cacheService'?: ICachesService;
34
33
  config?: IConfig;
34
+ 'core.infra.session'?: ISessionRepo;
35
35
  }
36
- export default function ({ 'core.infra.oidcClient': oidcClient, 'core.infra.cache.cacheService': cacheService, config }?: IDeps): IOIDCClientService;
36
+ export default function ({ 'core.infra.oidcClient': oidcClient, 'core.infra.session': sessionRepo, config }?: IDeps): IOIDCClientService;
37
37
  export {};
@@ -0,0 +1 @@
1
+ export { default } from './sessionRepo';
@@ -0,0 +1,8 @@
1
+ import { type ICacheService } from '../cache/cacheService';
2
+ import { type IRedis } from '../cache/redis';
3
+ export type ISessionRepo = ICacheService;
4
+ interface ISessionRepoDeps {
5
+ 'core.infra.redis'?: IRedis;
6
+ }
7
+ export default function ({ 'core.infra.redis': redis }: ISessionRepoDeps): ISessionRepo;
8
+ export {};
@@ -0,0 +1,14 @@
1
+ interface ICallerInfo {
2
+ path: string;
3
+ line: string;
4
+ col: string;
5
+ }
6
+ export declare class LoggerCallStack {
7
+ private callerLineIndexInStack;
8
+ getCallStackTrace(): string | null;
9
+ getLocationInfo(): ICallerInfo | null;
10
+ private getStackLines;
11
+ private detectCallLineIndexInStack;
12
+ private callStackTraceLongEnough;
13
+ }
14
+ export {};
@@ -0,0 +1,2 @@
1
+ import winston from 'winston';
2
+ export declare function catchErrorFormatter(onErrorLog?: (message: string, meta: any, getCallStackTrace: () => string) => void): winston.Logform.FormatWrap | null;
@@ -3,7 +3,7 @@ export interface ILoggerConfig {
3
3
  * Log level (error, warn, info, log, verbose, debug, silly)
4
4
  * @default info
5
5
  */
6
- level: string;
6
+ level?: string;
7
7
  /**
8
8
  * If true, disable all logging
9
9
  * Default: true if TS_JEST=1 (tests), false otherwise
@@ -18,7 +18,36 @@ export interface ILoggerConfig {
18
18
  * Default: false (plain text)
19
19
  */
20
20
  useJsonFormat?: boolean;
21
- onErrorLog?: (message: string, meta: any) => void;
21
+ /**
22
+ * If true, add timestamp to each log line, ISO format
23
+ */
24
+ addTimestamp?: boolean;
25
+ /**
26
+ * If true, add file and line number of the code that called the logger function (error, warn, info, debug, etc.)
27
+ */
28
+ addLocationInfo?: boolean;
29
+ /**
30
+ * Add those metadata to all logs
31
+ */
32
+ additionalMeta?: {
33
+ /**
34
+ * any string to identify the application those logs came from
35
+ */
36
+ app?: string;
37
+ /**
38
+ * any string to identify each client those logs came from
39
+ */
40
+ client?: string;
41
+ /**
42
+ * environment, like production, development, test, integration
43
+ */
44
+ env?: string;
45
+ /**
46
+ * application version, maybe semver format
47
+ */
48
+ version?: string;
49
+ };
50
+ onErrorLog?: (message: string, meta: any, getCallStackTrace: () => string) => void;
22
51
  }
23
52
  export declare function envToBool(value: string, defaultValue?: boolean): boolean;
24
- export declare const defaultLoggerConfig: ILoggerConfig;
53
+ export declare const defaultLoggerConfig: ILoggerConfig & Required<Omit<ILoggerConfig, 'onErrorLog'>>;
@@ -0,0 +1,2 @@
1
+ import winston from 'winston';
2
+ export declare const addLocationInfoInLog: winston.Logform.FormatWrap;
@@ -1,5 +1,5 @@
1
1
  import * as amqp from 'amqplib';
2
- import { type IAmqp, type onMessageFunc } from './types/amqp';
2
+ import { type IAmqp, type OnMessageFunc } from './types/amqp';
3
3
  export interface IAmqpService {
4
4
  publisher: {
5
5
  connection: amqp.ChannelModel;
@@ -10,7 +10,7 @@ export interface IAmqpService {
10
10
  channel: amqp.ConfirmChannel;
11
11
  };
12
12
  publish(exchange: string, routingKey: string, msg: string, priority?: number): Promise<void>;
13
- consume(queue: string, routingKey: string, onMessage: onMessageFunc, consumerTag?: string): Promise<amqp.Replies.Consume>;
13
+ consume(queue: string, routingKey: string, onMessage: OnMessageFunc, consumerTag?: string): Promise<amqp.Replies.Consume>;
14
14
  close(): Promise<void>;
15
15
  }
16
16
  interface IDeps {
@@ -12,4 +12,4 @@ export interface IAmqpConn {
12
12
  export interface IMessageBody {
13
13
  [key: string]: any;
14
14
  }
15
- export type onMessageFunc = (msg: amqp.ConsumeMessage) => Promise<void>;
15
+ export type OnMessageFunc = (msg: amqp.ConsumeMessage) => Promise<void>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aristid/leav-types",
3
- "version": "1.4.1-ca7c8baf",
3
+ "version": "1.4.1-ce4ec267",
4
4
  "description": "Shared Leav types",
5
5
  "scripts": {
6
6
  "tscheck": "",
@@ -1,10 +0,0 @@
1
- import winston from 'winston';
2
- interface ICallerInfo {
3
- path: string;
4
- line: string;
5
- col: string;
6
- }
7
- export declare function getLocationInfo(): ICallerInfo | null;
8
- export declare const addLocationInfoInLog: winston.Logform.FormatWrap;
9
- export declare const mergeLocationInfoInLog: winston.Logform.FormatWrap;
10
- export {};