@aristid/leav-types 1.6.0 → 1.7.0-fe7c7deb

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 (58) hide show
  1. package/apps/core/config/default.d.ts +8 -0
  2. package/apps/core/src/__tests__/e2e/api/_fixtures/fakeplugin/_types/_types.d.ts +3 -0
  3. package/apps/core/src/__tests__/e2e/api/_fixtures/fakeplugin/domain/fakeDomain.d.ts +8 -0
  4. package/apps/core/src/__tests__/e2e/api/_fixtures/fakeplugin/domain/index.d.ts +1 -0
  5. package/apps/core/src/__tests__/e2e/api/_fixtures/fakeplugin/index.d.ts +9 -1
  6. package/apps/core/src/__tests__/e2e/api/e2eUtils.d.ts +5 -2
  7. package/apps/core/src/__tests__/e2e/api/mailpitUtils.d.ts +9 -2
  8. package/apps/core/src/__tests__/e2e/api/notificationUtils.d.ts +5 -0
  9. package/apps/core/src/__tests__/e2e/api/task/taskSubscription.test.d.ts +1 -0
  10. package/apps/core/src/__tests__/e2e/api/task/tasksAdminPermissions.test.d.ts +1 -0
  11. package/apps/core/src/__tests__/e2e/api/taskUtils.d.ts +4 -0
  12. package/apps/core/src/__tests__/e2e/api/trees/treeNodeChildrenQuery.test.d.ts +1 -0
  13. package/apps/core/src/__tests__/integration/infra/integrationTestRepoUtils.d.ts +2 -0
  14. package/apps/core/src/__tests__/integration/infra/permissionRepo.test.d.ts +1 -0
  15. package/apps/core/src/__tests__/mocks/attribute.d.ts +1 -0
  16. package/apps/core/src/_constants/notifications.d.ts +1 -0
  17. package/apps/core/src/_types/actionsList.d.ts +4 -0
  18. package/apps/core/src/_types/application.d.ts +1 -0
  19. package/apps/core/src/_types/attribute.d.ts +5 -1
  20. package/apps/core/src/_types/config.d.ts +4 -1
  21. package/apps/core/src/_types/errors.d.ts +1 -0
  22. package/apps/core/src/_types/extensionPoints.d.ts +2 -0
  23. package/apps/core/src/_types/notification.d.ts +5 -0
  24. package/apps/core/src/_types/permissions.d.ts +27 -4
  25. package/apps/core/src/_types/tasksManager.d.ts +2 -3
  26. package/apps/core/src/app/application/applicationApp.d.ts +3 -1
  27. package/apps/core/src/app/core/attributeApp/attributeApp.d.ts +2 -0
  28. package/apps/core/src/app/core/libraryApp/libraryApp.d.ts +3 -1
  29. package/apps/core/src/app/core/permissionApp/_types.d.ts +2 -1
  30. package/apps/core/src/app/core/pluginsApp.d.ts +3 -1
  31. package/apps/core/src/app/core/tasksManagerApp.d.ts +5 -1
  32. package/apps/core/src/app/core/treeApp/treeApp.d.ts +3 -1
  33. package/apps/core/src/domain/application/appStudioDomain.d.ts +17 -0
  34. package/apps/core/src/domain/application/appStudioDomain.spec.d.ts +1 -0
  35. package/apps/core/src/domain/application/index.d.ts +1 -0
  36. package/apps/core/src/domain/attribute/helpers/attributeALHelper.d.ts +2 -1
  37. package/apps/core/src/domain/export/exportProfileDomain.d.ts +18 -8
  38. package/apps/core/src/domain/form/helpers/getElementValues.d.ts +0 -2
  39. package/apps/core/src/domain/permission/_types.d.ts +4 -1
  40. package/apps/core/src/domain/permission/attributeDependentValuesPermissionDomain.d.ts +46 -0
  41. package/apps/core/src/domain/permission/helpers/permissionByUserGroups.d.ts +2 -1
  42. package/apps/core/src/domain/permission/index.d.ts +1 -0
  43. package/apps/core/src/domain/permission/permissionDomain.d.ts +4 -2
  44. package/apps/core/src/domain/plugins/pluginsDomain.d.ts +5 -2
  45. package/apps/core/src/domain/tasksManager/tasksManagerDomain.d.ts +5 -1
  46. package/apps/core/src/domain/value/_types.d.ts +1 -0
  47. package/apps/core/src/domain/value/helpers/canSaveRecordValue.d.ts +3 -1
  48. package/apps/core/src/domain/value/helpers/postDeleteValue.d.ts +28 -0
  49. package/apps/core/src/domain/value/helpers/postSaveValue.d.ts +28 -0
  50. package/apps/core/src/domain/value/valueDomain.d.ts +5 -1
  51. package/apps/core/src/infra/db/helpers/libraryUtils.d.ts +2 -0
  52. package/apps/core/src/infra/mailer/mailerService.d.ts +2 -1
  53. package/apps/core/src/infra/permission/permissionRepo.d.ts +3 -2
  54. package/libs/logger/src/LoggerCallStack.d.ts +2 -1
  55. package/libs/logger/src/locationInfoFormatter.d.ts +1 -1
  56. package/libs/utils/src/types/forms.d.ts +5 -1
  57. package/package.json +6 -6
  58. /package/apps/core/src/__tests__/e2e/api/{trees/treeNodeChildren.test.d.ts → permissions/dependentValuesTreeAttributePermissions.test.d.ts} +0 -0
@@ -124,10 +124,18 @@ export declare namespace permissions {
124
124
  export namespace adminGroup {
125
125
  let _default_3: boolean;
126
126
  export { _default_3 as default };
127
+ export namespace library {
128
+ let access_record_by_default: boolean;
129
+ }
130
+ export namespace record {
131
+ let access_record_by_default_1: boolean;
132
+ export { access_record_by_default_1 as access_record_by_default };
133
+ }
127
134
  }
128
135
  let enableCache_1: boolean;
129
136
  export { enableCache_1 as enableCache };
130
137
  export let enableAccessRecordByDefaultBackendFilter: boolean;
138
+ export let enableAttributeDependentValuesPermissions: boolean;
131
139
  }
132
140
  export declare namespace amqp {
133
141
  namespace connOpt {
@@ -0,0 +1,3 @@
1
+ export declare enum FakePluginTaskType {
2
+ FAKE_TYPE = "FAKE_TYPE"
3
+ }
@@ -0,0 +1,8 @@
1
+ export interface IFakeDomain {
2
+ execWorker({ fromTask }: {
3
+ fromTask: string;
4
+ }): void;
5
+ startPlugin(): void;
6
+ getPluginStarted(): boolean;
7
+ }
8
+ export default function (): IFakeDomain;
@@ -0,0 +1 @@
1
+ export { default } from './fakeDomain';
@@ -1,7 +1,15 @@
1
1
  import { type i18n } from 'i18next';
2
2
  import { type IPluginInitModule } from '_types/plugin';
3
+ import { type IValueRepo } from '../../../../../infra/value/valueRepo';
4
+ import { type IAttributeDomain } from '../../../../../domain/attribute/attributeDomain';
5
+ import { type ITasksManagerDomain } from 'domain/tasksManager/tasksManagerDomain';
6
+ import { type IFakeDomain } from './domain/fakeDomain';
3
7
  interface IDeps {
4
8
  translator: i18n;
9
+ 'core.infra.value': IValueRepo;
10
+ 'core.domain.attribute': IAttributeDomain;
11
+ 'core.domain.tasksManager': ITasksManagerDomain;
12
+ 'fakeplugin.domain': IFakeDomain;
5
13
  }
6
- export default function ({ translator }: IDeps): IPluginInitModule;
14
+ export default function ({ translator, 'core.infra.value': valueRepo, 'core.domain.attribute': attributeDomain, 'core.domain.tasksManager': tasksManagerDomain, 'fakeplugin.domain': fakeDomain, }: IDeps): IPluginInitModule;
7
15
  export {};
@@ -5,12 +5,13 @@ import FormData from 'form-data';
5
5
  import { type ActionsListConfig } from '_types/actionsList';
6
6
  import { type ITreeElement } from '_types/tree';
7
7
  import { AttributeFormats, type AttributeTypes, type IAttributeVersionsConf, type IEmbeddedAttribute } from '../../../_types/attribute';
8
+ import { type ITreePermissionsDependentValuesConf } from '_types/permissions';
8
9
  export interface IGlobalThis {
9
10
  guestUser: IE2EUserParams;
10
11
  nonAdminUser: IE2EUserParams;
11
12
  nonAdminGroupId: string;
12
13
  }
13
- interface IE2EUser {
14
+ export interface IE2EUser {
14
15
  userId: string;
15
16
  getAuthToken: () => Promise<string>;
16
17
  }
@@ -51,6 +52,7 @@ export declare function gqlSaveAttribute(params: {
51
52
  unique?: boolean;
52
53
  actionsList?: ActionsListConfig;
53
54
  required?: boolean;
55
+ permissions_conf_dependent_values?: ITreePermissionsDependentValuesConf;
54
56
  }): Promise<any>;
55
57
  export declare function gqlSaveTree(id: string, label: string, libraries: string[]): Promise<any>;
56
58
  export declare function gqlCreateRecord(library: string): Promise<string>;
@@ -63,6 +65,7 @@ export declare function gqlCreateRecord(library: string): Promise<string>;
63
65
  * @return Node ID
64
66
  */
65
67
  export declare function gqlAddElemToTree(treeId: string, element: ITreeElement, parent?: string | null, order?: number): Promise<string>;
68
+ export declare function gqlGetValue(libraryId: string, recordId: string, attributeId: string): Promise<any>;
66
69
  export declare function gqlSaveValue(attributeId: string, libraryId: string, recordId: string, value: string | number): Promise<void>;
67
70
  export declare function gqlSaveVersionProfile(profileId: string, label: string, trees: string[]): Promise<void>;
68
71
  /**
@@ -75,7 +78,7 @@ export declare function makeWebSocketGraphQlCall(options?: {
75
78
  export declare function waitGraphqlWebSocketMessage<T>(client: GraphqlWsClient, query: string, variables: Record<string, any>, acceptMessage: (msg: T) => boolean, { timeoutMs }: {
76
79
  timeoutMs: any;
77
80
  }): Promise<T>;
78
- export declare function waitWebSocketMessage<T>(webSocket: WebSocket, acceptMessage: (msg: T) => boolean, { timeoutMs }: {
81
+ export declare function waitWebSocketMessage<T>(webSocket: WebSocket, acceptMessage: (msg: T) => Promise<boolean>, { timeoutMs }: {
79
82
  timeoutMs: any;
80
83
  }): Promise<T>;
81
84
  export {};
@@ -1,3 +1,6 @@
1
+ interface IMailpitMsgHeaders {
2
+ [key: string]: string[];
3
+ }
1
4
  interface IMailpitMsgLight {
2
5
  From: {
3
6
  Name: string;
@@ -13,7 +16,10 @@ interface IMailpitMsgLight {
13
16
  Address: string;
14
17
  }>;
15
18
  }
16
- interface IMailpitMsgFull extends IMailpitMsgLight {
19
+ interface IMailpitMsgLightWithHeaders extends IMailpitMsgLight {
20
+ Headers: IMailpitMsgHeaders;
21
+ }
22
+ export interface IMailpitMsgFull extends IMailpitMsgLight {
17
23
  HTML: string;
18
24
  Text: string;
19
25
  }
@@ -22,7 +28,8 @@ interface IMailpitSearchResult {
22
28
  total: number;
23
29
  unread: number;
24
30
  }
25
- export declare function waitMailpitMessage(acceptMessage: (msg: IMailpitMsgLight) => boolean): Promise<IMailpitMsgFull>;
31
+ export declare function waitMailpitMessage(acceptMessage: (msg: IMailpitMsgLightWithHeaders) => boolean): Promise<IMailpitMsgFull>;
32
+ export declare function getMailpitMessageHeaders(messageId: string): Promise<IMailpitMsgHeaders>;
26
33
  export declare function getMailpitMessage(messageId: string): Promise<IMailpitMsgFull>;
27
34
  export declare function deleteMailpitMessagesBySearch(search: string): Promise<void>;
28
35
  export declare function searchMailpitMessages(search: string): Promise<IMailpitSearchResult>;
@@ -0,0 +1,5 @@
1
+ import { type IPubSubNotificationData } from '_types/eventsManager';
2
+ import { type Client as GraphqlWsClient } from 'graphql-ws';
3
+ import { type IMailpitMsgFull } from './mailpitUtils';
4
+ export declare const waitWebSocketNotification: (graphqlClient: GraphqlWsClient, taskId: string) => Promise<Pick<IPubSubNotificationData, "notification">>;
5
+ export declare const waitEmailNotification: (taskId: string) => Promise<IMailpitMsgFull>;
@@ -0,0 +1,4 @@
1
+ import { type ITask, TaskStatus } from '../../../_types/tasksManager';
2
+ export declare function getTask(taskId: string): Promise<ITask>;
3
+ export declare function waitForTaskCompletion(id: string, timeout?: number, interval?: number): Promise<ITask>;
4
+ export declare function waitForTaskCompletedWithStatus(taskId: string, expectedStatus: TaskStatus.DONE | TaskStatus.FAILED): Promise<ITask>;
@@ -1,7 +1,9 @@
1
1
  import { type ILibraryRepo } from 'infra/library/libraryRepo';
2
+ import { type IPermissionRepo } from 'infra/permission/permissionRepo';
2
3
  import { type IRecordRepo } from 'infra/record/recordRepo';
3
4
  import { type ITreeRepo } from 'infra/tree/treeRepo';
4
5
  export declare const getLibraryRepo: () => ILibraryRepo;
5
6
  export declare const getRecordRepo: () => IRecordRepo;
6
7
  export declare const getTreeRepo: () => ITreeRepo;
8
+ export declare const getPermissionRepo: () => IPermissionRepo;
7
9
  export * from '../integrationTestUtils';
@@ -33,6 +33,7 @@ export declare const mockAttrTree: {
33
33
  settings?: import("../../_types/shared").IKeyValue<any>;
34
34
  multi_link_display_option?: MultiDisplayOption;
35
35
  multi_tree_display_option?: MultiDisplayOption;
36
+ permissions_conf_dependent_values?: import("../../_types/permissions").ITreePermissionsDependentValuesConf;
36
37
  label?: import("../../_types/systemTranslation").ISystemTranslation | string;
37
38
  };
38
39
  export declare const mockAttrTreeVersionable: IAttribute;
@@ -0,0 +1 @@
1
+ export declare const NOTIFICATION_EMAIL_TASK_ID_HEADER = "X-Task-Id";
@@ -5,7 +5,9 @@ import { type IValue } from './value';
5
5
  import { type Errors } from './errors';
6
6
  export declare enum ActionsListEvents {
7
7
  SAVE_VALUE = "saveValue",
8
+ POST_SAVE_VALUE = "postSaveValue",
8
9
  DELETE_VALUE = "deleteValue",
10
+ POST_DELETE_VALUE = "postDeleteValue",
9
11
  GET_VALUE = "getValue"
10
12
  }
11
13
  export declare enum ActionsListIOTypes {
@@ -19,6 +21,7 @@ export type ActionsListConfig = {
19
21
  [Event in ActionsListEvents]?: IActionsListSavedAction[];
20
22
  };
21
23
  export interface IActionsListContext extends IQueryInfos {
24
+ actionEvent: ActionsListEvents;
22
25
  attribute?: IAttribute;
23
26
  library?: string;
24
27
  recordId?: string;
@@ -71,6 +74,7 @@ export interface IActionsListSavedAction {
71
74
  error_message?: ISystemTranslation;
72
75
  }
73
76
  export interface IRunActionsListCtx extends IQueryInfos {
77
+ actionEvent: ActionsListEvents;
74
78
  attribute?: IAttribute;
75
79
  recordId?: string;
76
80
  library?: string;
@@ -15,6 +15,7 @@ export interface IApplication extends ICoreEntity {
15
15
  module: string;
16
16
  endpoint: string;
17
17
  settings?: IKeyValue<any>;
18
+ appStudioSettings?: IKeyValue<any>;
18
19
  }
19
20
  /**
20
21
  * Accepted fields to filter attributes list
@@ -1,5 +1,5 @@
1
1
  import { type ActionsListEvents, type ActionsListIOTypes, type ActionsListConfig } from './actionsList';
2
- import { type ITreePermissionsConf } from './permissions';
2
+ import { type ITreePermissionsDependentValuesConf, type ITreePermissionsConf } from './permissions';
3
3
  import { type IQueryInfos } from './queryInfos';
4
4
  import { type IRecord } from './record';
5
5
  import { type IGetCoreEntitiesParams, type IKeyValue } from './shared';
@@ -28,6 +28,10 @@ export interface IAttribute extends ICoreEntity {
28
28
  settings?: IKeyValue<any>;
29
29
  multi_link_display_option?: MultiDisplayOption;
30
30
  multi_tree_display_option?: MultiDisplayOption;
31
+ /**
32
+ * only for tree attribute
33
+ */
34
+ permissions_conf_dependent_values?: ITreePermissionsDependentValuesConf;
31
35
  }
32
36
  export declare enum ValueVersionMode {
33
37
  SIMPLE = "simple",
@@ -1,6 +1,6 @@
1
1
  import { type Options } from 'amqplib';
2
2
  import { type IKeyValue } from './shared';
3
- import { type PermissionsActions, type AdminPermissionsActions, type ApplicationPermissionsActions, type AttributePermissionsActions, type LibraryPermissionsActions, type PermissionTypes, type RecordAttributePermissionsActions, type RecordPermissionsActions, type TreeNodePermissionsActions, type TreePermissionsActions } from './permissions';
3
+ import { type PermissionsActions, type AdminPermissionsActions, type ApplicationPermissionsActions, type AttributePermissionsActions, type LibraryPermissionsActions, type PermissionTypes, type RecordAttributePermissionsActions, type RecordPermissionsActions, type TreeNodePermissionsActions, type TreePermissionsActions, type AttributeDependentValuesPermissionsActions } from './permissions';
4
4
  export interface IConfig {
5
5
  coreMode: CoreMode;
6
6
  server: IServer;
@@ -44,6 +44,7 @@ export declare enum CoreMode {
44
44
  TASKS_MANAGER_MASTER = "tasksManager:master",
45
45
  TASKS_MANAGER_WORKER = "tasksManager:worker",
46
46
  LOGS_COLLECTOR = "logsCollector",
47
+ E2E_PLAYWRIGHT = "e2ePlaywright",
47
48
  CLI = "cli"
48
49
  }
49
50
  export interface IServer {
@@ -158,6 +159,7 @@ interface IPermissionsByTypesAndActions {
158
159
  [PermissionTypes.ADMIN]?: IPermissionsByActions<AdminPermissionsActions>;
159
160
  [PermissionTypes.APPLICATION]?: IPermissionsByActions<ApplicationPermissionsActions>;
160
161
  [PermissionTypes.ATTRIBUTE]?: IPermissionsByActions<AttributePermissionsActions>;
162
+ [PermissionTypes.ATTRIBUTE_DEPENDENT_VALUES]?: IPermissionsByActions<AttributeDependentValuesPermissionsActions>;
161
163
  [PermissionTypes.LIBRARY]?: IPermissionsByActions<LibraryPermissionsActions>;
162
164
  [PermissionTypes.RECORD]?: IPermissionsByActions<RecordPermissionsActions>;
163
165
  [PermissionTypes.RECORD_ATTRIBUTE]?: IPermissionsByActions<RecordAttributePermissionsActions>;
@@ -170,6 +172,7 @@ export interface IPermissions {
170
172
  adminGroup: IPermissionsByTypesAndActions;
171
173
  enableCache: boolean;
172
174
  enableAccessRecordByDefaultBackendFilter: boolean;
175
+ enableAttributeDependentValuesPermissions: boolean;
173
176
  }
174
177
  export interface IAmqp {
175
178
  connOpt: Options.Connect;
@@ -8,6 +8,7 @@ export declare enum Errors {
8
8
  ATTRIBUTE_USED_BY_LIBRARY = "ATTRIBUTE_USED_BY_LIBRARY",
9
9
  ATTRIBUTE_USED_IN_METADATA = "ATTRIBUTE_USED_IN_METADATA",
10
10
  CANNOT_SAVE_METADATA = "CANNOT_SAVE_METADATA",
11
+ CANNOT_SAVE_PERMISSIONS_DEPENDENT_VALUES = "CANNOT_SAVE_PERMISSIONS_DEPENDENT_VALUES",
11
12
  DUPLICATE_DIRECTORY_NAMES = "DUPLICATE_DIRECTORY_NAMES",
12
13
  DUPLICATE_FILENAMES = "DUPLICATE_FILENAMES",
13
14
  ELEMENT_ALREADY_PRESENT = "ELEMENT_ALREADY_PRESENT",
@@ -18,6 +18,8 @@ export interface IExtensionPointsFunctions extends IExtensionPoints {
18
18
  registerPermissionActions: (type: PermissionTypes, actions: string[], applyOn?: string[]) => void;
19
19
  registerEventActions: (actions: string[], prefix: string) => void;
20
20
  registerActions: (actions: IActionsListFunction[]) => void;
21
+ registerTaskTypes: (types: string[]) => void;
22
+ registerStart: (fct: () => Promise<void>) => void;
21
23
  /**
22
24
  * Method to register some Express routes inside LEAV Core.
23
25
  *
@@ -22,6 +22,11 @@ export interface INotificationContent {
22
22
  url: string;
23
23
  label: string;
24
24
  }>;
25
+ /**
26
+ * Optional task ID associated with the notification
27
+ * For email, will be added as a custom header (X-Task-Id)
28
+ */
29
+ taskId?: string;
25
30
  }
26
31
  export interface ICreateNotification {
27
32
  emitterUserId: string;
@@ -5,6 +5,7 @@ export declare enum PermissionTypes {
5
5
  ADMIN = "admin",
6
6
  LIBRARY = "library",
7
7
  ATTRIBUTE = "attribute",
8
+ ATTRIBUTE_DEPENDENT_VALUES = "attribute_dependent_values",
8
9
  TREE = "tree",
9
10
  TREE_NODE = "tree_node",
10
11
  TREE_LIBRARY = "tree_library",
@@ -14,6 +15,7 @@ export declare enum LibraryPermissionsActions {
14
15
  ACCESS_LIBRARY = "access_library",
15
16
  ADMIN_LIBRARY = "admin_library",
16
17
  ACCESS_RECORD = "access_record",
18
+ ACCESS_RECORD_BY_DEFAULT = "access_record_by_default",
17
19
  CREATE_RECORD = "create_record",
18
20
  EDIT_RECORD = "edit_record",
19
21
  DELETE_RECORD = "delete_record"
@@ -33,14 +35,18 @@ export declare enum AttributePermissionsActions {
33
35
  ACCESS_ATTRIBUTE = "access_attribute",
34
36
  EDIT_VALUE = "edit_value"
35
37
  }
38
+ export declare enum AttributeDependentValuesPermissionsActions {
39
+ SET_VALUE = "set_value"
40
+ }
36
41
  export declare enum TreePermissionsActions {
37
42
  ACCESS_TREE = "access_tree",
38
- EDIT_CHILDREN = "edit_children"
43
+ EDIT_CHILDREN = "edit_children",
44
+ DETACH = "detach"
39
45
  }
40
46
  export declare enum TreeNodePermissionsActions {
41
47
  ACCESS_TREE = "access_tree",
42
- DETACH = "detach",
43
- EDIT_CHILDREN = "edit_children"
48
+ EDIT_CHILDREN = "edit_children",
49
+ DETACH = "detach"
44
50
  }
45
51
  export declare enum ApplicationPermissionsActions {
46
52
  ADMIN_APPLICATION = "admin_application",
@@ -78,10 +84,11 @@ export declare enum AdminPermissionsActions {
78
84
  EDIT_API_KEY = "admin_edit_api_key",
79
85
  DELETE_API_KEY = "admin_delete_api_key",
80
86
  EDIT_GLOBAL_SETTINGS = "admin_edit_global_settings",
87
+ LIST_PLUGINS = "admin_list_plugins",
81
88
  ACCESS_LOGS = "admin_access_logs",
82
89
  IMPORT_CONFIG_CLEAR_DATABASE = "admin_import_config_clear_database"
83
90
  }
84
- export type PermissionsActions = LibraryPermissionsActions | RecordPermissionsActions | RecordAttributePermissionsActions | AdminPermissionsActions | AttributePermissionsActions | TreePermissionsActions | TreeNodePermissionsActions | ApplicationPermissionsActions;
91
+ export type PermissionsActions = LibraryPermissionsActions | RecordPermissionsActions | RecordAttributePermissionsActions | AdminPermissionsActions | AttributePermissionsActions | AttributeDependentValuesPermissionsActions | TreePermissionsActions | TreeNodePermissionsActions | ApplicationPermissionsActions;
85
92
  export interface ILabeledPermissionsAction {
86
93
  label: ISystemTranslation;
87
94
  name: PermissionsActions | string;
@@ -103,6 +110,13 @@ export interface ITreePermissionsConf {
103
110
  */
104
111
  relation: PermissionsRelations;
105
112
  }
113
+ export interface ITreePermissionsDependentValuesConf {
114
+ /**
115
+ * IDs of attributes used for permissions
116
+ */
117
+ dependenciesTreeAttributes: string[];
118
+ allowByDefault: boolean;
119
+ }
106
120
  export interface IPermissionsTreeTarget {
107
121
  /**
108
122
  * Tree ID
@@ -113,6 +127,9 @@ export interface IPermissionsTreeTarget {
113
127
  */
114
128
  nodeId: string | null;
115
129
  }
130
+ export interface IPermissionsDependenciesTreeTarget extends IPermissionsTreeTarget {
131
+ attributeId: string;
132
+ }
116
133
  export interface IPermission {
117
134
  /**
118
135
  * Permission type
@@ -135,6 +152,12 @@ export interface IPermission {
135
152
  };
136
153
  /**
137
154
  * What element on permissions tree is concerned by this permission
155
+ * In case of type PermissionTypes.ATTRIBUTE_DEPENDENT_VALUES, this is the value tree target
138
156
  */
139
157
  permissionTreeTarget?: IPermissionsTreeTarget;
158
+ /**
159
+ * For dependent values tree attribute permissions, the list of attributes on which this permission depends
160
+ * Only for PermissionTypes.ATTRIBUTE_DEPENDENT_VALUES
161
+ */
162
+ dependenciesTreeTargets?: IPermissionsDependenciesTreeTarget[];
140
163
  }
@@ -30,8 +30,7 @@ export interface ITaskOrder {
30
30
  payload: Payload;
31
31
  }
32
32
  export interface ITaskFunc {
33
- moduleName: string;
34
- subModuleName?: string;
33
+ path: string;
35
34
  name: string;
36
35
  args: {
37
36
  [key: string]: any;
@@ -67,7 +66,7 @@ export declare enum TaskType {
67
66
  SAVE_VALUE_BULK = "SAVE_VALUE_BULK"
68
67
  }
69
68
  export interface ITaskRole {
70
- type: TaskType;
69
+ type: TaskType | string;
71
70
  detail?: string;
72
71
  }
73
72
  export interface ITask {
@@ -6,6 +6,7 @@ import { type IPermissionDomain } from 'domain/permission/permissionDomain';
6
6
  import { type IRecordDomain } from 'domain/record/recordDomain';
7
7
  import { type IUtils } from 'utils/utils';
8
8
  import { type ILogger } from '@leav/logger';
9
+ import { type IAppStudioDomain } from '../../domain/application/appStudioDomain';
9
10
  import { type IApplicationDomain } from '../../domain/application/applicationDomain';
10
11
  import { type ValidateRequestTokenFunc } from '../helpers/validateRequestToken';
11
12
  import { type IAuthApp } from '../auth/authApp';
@@ -20,6 +21,7 @@ export interface IApplicationAppDeps {
20
21
  'core.app.helpers.validateRequestToken': ValidateRequestTokenFunc;
21
22
  'core.app.core.subscriptionsHelper': ICoreSubscriptionsHelpersApp;
22
23
  'core.domain.application': IApplicationDomain;
24
+ 'core.domain.application.appStudio': IAppStudioDomain;
23
25
  'core.domain.permission': IPermissionDomain;
24
26
  'core.domain.record': IRecordDomain;
25
27
  'core.domain.eventsManager': IEventsManagerDomain;
@@ -28,4 +30,4 @@ export interface IApplicationAppDeps {
28
30
  'core.utils': IUtils;
29
31
  config: IConfig;
30
32
  }
31
- export default function ({ 'core.app.graphql': graphqlApp, 'core.app.auth': authApp, 'core.app.helpers.initQueryContext': initQueryContext, 'core.app.helpers.validateRequestToken': validateRequestToken, 'core.app.core.subscriptionsHelper': subscriptionsHelper, 'core.domain.application': applicationDomain, 'core.domain.permission': permissionDomain, 'core.domain.record': recordDomain, 'core.domain.eventsManager': eventsManagerDomain, 'core.domain.globalSettings': globalSettings, 'core.utils.logger': logger, 'core.utils': utils, config, }: IApplicationAppDeps): IApplicationApp;
33
+ export default function ({ 'core.app.graphql': graphqlApp, 'core.app.auth': authApp, 'core.app.helpers.initQueryContext': initQueryContext, 'core.app.helpers.validateRequestToken': validateRequestToken, 'core.app.core.subscriptionsHelper': subscriptionsHelper, 'core.domain.application': applicationDomain, 'core.domain.application.appStudio': appStudioDomain, 'core.domain.permission': permissionDomain, 'core.domain.record': recordDomain, 'core.domain.eventsManager': eventsManagerDomain, 'core.domain.globalSettings': globalSettings, 'core.utils.logger': logger, 'core.utils': utils, config, }: IApplicationAppDeps): IApplicationApp;
@@ -2,6 +2,7 @@ import { type IActionsListDomain } from 'domain/actionsList/actionsListDomain';
2
2
  import { type IAttributeDomain } from 'domain/attribute/attributeDomain';
3
3
  import { type ILibraryDomain } from 'domain/library/libraryDomain';
4
4
  import { type IPermissionDomain } from 'domain/permission/permissionDomain';
5
+ import { type IAttributeDependentValuesPermissionDomain } from 'domain/permission/attributeDependentValuesPermissionDomain';
5
6
  import { type IRecordDomain } from 'domain/record/recordDomain';
6
7
  import { type ITreeDomain } from 'domain/tree/treeDomain';
7
8
  import { type IVersionProfileDomain } from 'domain/versionProfile/versionProfileDomain';
@@ -16,6 +17,7 @@ interface IDeps {
16
17
  'core.domain.tree': ITreeDomain;
17
18
  'core.domain.actionsList': IActionsListDomain;
18
19
  'core.domain.permission': IPermissionDomain;
20
+ 'core.domain.permission.attributeDependentValues': IAttributeDependentValuesPermissionDomain;
19
21
  'core.domain.versionProfile': IVersionProfileDomain;
20
22
  'core.app.graphql': IGraphqlApp;
21
23
  'core.app.core': ICoreApp;
@@ -6,6 +6,7 @@ import { type ITreeDomain } from 'domain/tree/treeDomain';
6
6
  import { type IViewDomain } from 'domain/view/viewDomain';
7
7
  import { type IGraphqlAppModule, type IGraphqlApp } from '../../graphql/graphqlApp';
8
8
  import { type ICoreApp } from '../coreApp';
9
+ import { type IExportProfileDomain } from 'domain/export/exportProfileDomain';
9
10
  export type ICoreLibraryApp = IGraphqlAppModule;
10
11
  interface IDeps {
11
12
  'core.domain.library'?: ILibraryDomain;
@@ -14,8 +15,9 @@ interface IDeps {
14
15
  'core.domain.tree'?: ITreeDomain;
15
16
  'core.domain.view'?: IViewDomain;
16
17
  'core.domain.permission'?: IPermissionDomain;
18
+ 'core.domain.export.exportProfile'?: IExportProfileDomain;
17
19
  'core.app.graphql'?: IGraphqlApp;
18
20
  'core.app.core'?: ICoreApp;
19
21
  }
20
- export default function ({ 'core.domain.library': libraryDomain, 'core.domain.record': recordDomain, 'core.domain.attribute': attributeDomain, 'core.domain.tree': treeDomain, 'core.domain.view': viewDomain, 'core.domain.permission': permissionDomain, 'core.app.graphql': graphqlApp, 'core.app.core': coreApp, }?: IDeps): ICoreLibraryApp;
22
+ export default function ({ 'core.domain.library': libraryDomain, 'core.domain.record': recordDomain, 'core.domain.attribute': attributeDomain, 'core.domain.tree': treeDomain, 'core.domain.view': viewDomain, 'core.domain.permission': permissionDomain, 'core.domain.export.exportProfile': exportProfileDomain, 'core.app.graphql': graphqlApp, 'core.app.core': coreApp, }?: IDeps): ICoreLibraryApp;
21
23
  export {};
@@ -1,8 +1,9 @@
1
- import { type IPermissionsTreeTarget, type PermissionsActions, type PermissionTypes } from '_types/permissions';
1
+ import { type IPermissionsDependenciesTreeTarget, type IPermissionsTreeTarget, type PermissionsActions, type PermissionTypes } from '_types/permissions';
2
2
  export interface IInheritedPermissionsQueryParams {
3
3
  type: PermissionTypes;
4
4
  applyTo: string;
5
5
  actions: PermissionsActions[];
6
6
  userGroupNodeId: string;
7
7
  permissionTreeTarget: IPermissionsTreeTarget;
8
+ dependenciesTreeTargets: IPermissionsDependenciesTreeTarget[];
8
9
  }
@@ -1,7 +1,9 @@
1
1
  import { type IPluginsDomain } from 'domain/plugins/pluginsDomain';
2
2
  import { type IPluginInfos } from '../../_types/plugin';
3
3
  import { type IGraphqlAppModule } from 'app/graphql/graphqlApp';
4
- export interface ICorePluginsApp extends IGraphqlAppModule {
4
+ import { type IAppModule } from '_types/shared';
5
+ export interface ICorePluginsApp extends IGraphqlAppModule, IAppModule {
6
+ startPlugins(): Promise<void>;
5
7
  registerPlugin(path: string, plugin: IPluginInfos): void;
6
8
  }
7
9
  interface IDeps {
@@ -7,9 +7,12 @@ import { type IPaginationParams, type ISortParams } from '_types/list';
7
7
  import { type ITasksManagerDomain } from '../../domain/tasksManager/tasksManagerDomain';
8
8
  import { TaskStatus } from '../../_types/tasksManager';
9
9
  import { type IGraphqlAppModule } from 'app/graphql/graphqlApp';
10
+ import { type IAdminPermissionDomain } from 'domain/permission/adminPermissionDomain';
11
+ import { type IExtensionPoints } from '_types/extensionPoints';
10
12
  export interface ITasksManagerApp extends IGraphqlAppModule {
11
13
  initMaster(): Promise<NodeJS.Timeout>;
12
14
  initWorker(): Promise<void>;
15
+ extensionPoints?: IExtensionPoints;
13
16
  }
14
17
  interface IDeps {
15
18
  'core.domain.tasksManager'?: ITasksManagerDomain;
@@ -18,6 +21,7 @@ interface IDeps {
18
21
  'core.utils'?: IUtils;
19
22
  'core.domain.record'?: IRecordDomain;
20
23
  'core.domain.eventsManager'?: IEventsManagerDomain;
24
+ 'core.domain.permission.admin'?: IAdminPermissionDomain;
21
25
  }
22
26
  export interface IGetTasksArgs {
23
27
  filters?: ICoreEntityFilterOptions & {
@@ -28,5 +32,5 @@ export interface IGetTasksArgs {
28
32
  pagination?: IPaginationParams;
29
33
  sort?: ISortParams;
30
34
  }
31
- export default function ({ 'core.domain.record': recordDomain, 'core.domain.tasksManager': tasksManagerDomain, 'core.domain.eventsManager': eventsManager, }: IDeps): ITasksManagerApp;
35
+ export default function ({ 'core.domain.record': recordDomain, 'core.domain.tasksManager': tasksManagerDomain, 'core.domain.eventsManager': eventsManager, 'core.domain.permission.admin': adminPermissionDomain, }: IDeps): ITasksManagerApp;
32
36
  export {};
@@ -7,6 +7,7 @@ import { type IGraphqlAppModule, type IGraphqlApp } from '../../graphql/graphqlA
7
7
  import { type ICoreApp } from '../coreApp';
8
8
  import { type ICoreSubscriptionsHelpersApp } from '../helpers/subscriptions';
9
9
  import { type IRecordPermissionDomain } from '../../../domain/permission/recordPermissionDomain';
10
+ import { type IAttributeDependentValuesPermissionDomain } from 'domain/permission/attributeDependentValuesPermissionDomain';
10
11
  export type ITreeAttributeApp = IGraphqlAppModule;
11
12
  interface IDeps {
12
13
  'core.domain.tree': ITreeDomain;
@@ -18,6 +19,7 @@ interface IDeps {
18
19
  'core.app.core.subscriptionsHelper': ICoreSubscriptionsHelpersApp;
19
20
  'core.domain.library': ILibraryDomain;
20
21
  'core.domain.permission.record': IRecordPermissionDomain;
22
+ 'core.domain.permission.attributeDependentValues': IAttributeDependentValuesPermissionDomain;
21
23
  }
22
- export default function ({ 'core.domain.tree': treeDomain, 'core.domain.attribute': attributeDomain, 'core.domain.permission': permissionDomain, 'core.domain.eventsManager': eventsManagerDomain, 'core.app.core': coreApp, 'core.app.graphql': graphqlApp, 'core.app.core.subscriptionsHelper': subscriptionsHelper, 'core.domain.library': libraryDomain, 'core.domain.permission.record': recordPermissionDomain, }: IDeps): ITreeAttributeApp;
24
+ export default function ({ 'core.domain.tree': treeDomain, 'core.domain.attribute': attributeDomain, 'core.domain.permission': permissionDomain, 'core.domain.eventsManager': eventsManagerDomain, 'core.app.core': coreApp, 'core.app.graphql': graphqlApp, 'core.app.core.subscriptionsHelper': subscriptionsHelper, 'core.domain.library': libraryDomain, 'core.domain.permission.record': recordPermissionDomain, 'core.domain.permission.attributeDependentValues': attributeDependentValuesPermissionDomain, }: IDeps): ITreeAttributeApp;
23
25
  export {};
@@ -0,0 +1,17 @@
1
+ import { type IPermissionDomain } from 'domain/permission/permissionDomain';
2
+ import { type IQueryInfos } from '_types/queryInfos';
3
+ import { type IApplication } from '../../_types/application';
4
+ export interface IAppStudioDomain {
5
+ /**
6
+ * Extract and filter appStudioSettings from application settings.
7
+ * Filters workspaces based on user permissions (ACCESS_LIBRARY for library type, ACCESS_RECORD for record type)
8
+ */
9
+ getAppStudioSettings(params: {
10
+ application: IApplication;
11
+ ctx: IQueryInfos;
12
+ }): Promise<IApplication['appStudioSettings']>;
13
+ }
14
+ export interface IAppStudioDomainDeps {
15
+ 'core.domain.permission': IPermissionDomain;
16
+ }
17
+ export default function ({ 'core.domain.permission': permissionDomain }: IAppStudioDomainDeps): IAppStudioDomain;
@@ -1 +1,2 @@
1
1
  export { default } from './applicationDomain';
2
+ export { default as appStudio } from './appStudioDomain';
@@ -1,6 +1,7 @@
1
1
  import { type IUtils } from 'utils/utils';
2
2
  import { type ActionsListConfig } from '../../../_types/actionsList';
3
3
  import { type IAttribute, type IOAllowedTypes } from '../../../_types/attribute';
4
- export declare const getAllowedInputTypes: (attribute: IAttribute) => IOAllowedTypes;
4
+ declare const getAllowedInputTypes: (attribute: IAttribute) => IOAllowedTypes;
5
+ export default getAllowedInputTypes;
5
6
  export declare const getAllowedOutputTypes: (attribute: IAttribute) => IOAllowedTypes;
6
7
  export declare const getActionsListToSave: (attrDataToSave: IAttribute, existingAttrData: IAttribute, newAttr: boolean, utils: IUtils) => ActionsListConfig;
@@ -1,23 +1,33 @@
1
1
  import { type ILibraryDomain } from '../library/libraryDomain';
2
2
  import { type IQueryInfos } from '../../_types/queryInfos';
3
+ import { type IAttributeDomain } from 'domain/attribute/attributeDomain';
4
+ import { type IConfig } from '_types/config';
5
+ export interface IExportProfileColumn {
6
+ columnLabel: string;
7
+ attribute: string;
8
+ }
9
+ export interface IExportProfile {
10
+ label: string;
11
+ columns: IExportProfileColumn[];
12
+ error?: {
13
+ message: string;
14
+ };
15
+ }
3
16
  export interface IExportProfileConfig {
4
17
  defaultProfile: string;
5
- profiles: Array<{
6
- label: string;
7
- columns: Array<{
8
- columnLabel: string;
9
- attribute: string;
10
- }>;
11
- }>;
18
+ profiles: IExportProfile[];
12
19
  }
13
20
  export interface IExportColumn {
14
21
  columnLabel: string;
15
22
  attribute: string;
16
23
  }
17
24
  export interface IExportProfileDomain {
25
+ getExportProfileConfig(libraryId: string, ctx: IQueryInfos): Promise<IExportProfileConfig | null>;
18
26
  getColumnsFromProfileConfig(profile: string | undefined, library: string, ctx: IQueryInfos): Promise<IExportColumn[]>;
19
27
  }
20
28
  export interface IExportProfileDomainDeps {
21
29
  'core.domain.library': ILibraryDomain;
30
+ 'core.domain.attribute': IAttributeDomain;
31
+ config: IConfig;
22
32
  }
23
- export default function ({ 'core.domain.library': libraryDomain }: IExportProfileDomainDeps): IExportProfileDomain;
33
+ export default function ({ 'core.domain.library': libraryDomain, 'core.domain.attribute': attributeDomain, config, }: IExportProfileDomainDeps): IExportProfileDomain;
@@ -1,6 +1,5 @@
1
1
  import { type IRecordDomain } from 'domain/record/recordDomain';
2
2
  import { type IUtils } from 'utils/utils';
3
- import { type ILogger } from '@leav/logger';
4
3
  import { type IQueryInfos } from '_types/queryInfos';
5
4
  import { type IValue, type IValueVersion } from '_types/value';
6
5
  import { type IFormElement } from '../../../_types/forms';
@@ -12,7 +11,6 @@ export declare const getElementValues: (params: {
12
11
  deps: {
13
12
  "core.domain.record"?: IRecordDomain;
14
13
  "core.utils"?: IUtils;
15
- "core.utils.logger"?: ILogger;
16
14
  };
17
15
  ctx: IQueryInfos;
18
16
  }) => Promise<{
@@ -1,4 +1,4 @@
1
- import { type AdminPermissionsActions, type ApplicationPermissionsActions, type AttributePermissionsActions, type IPermissionsTreeTarget, type ITreePermissionsConf, type LibraryPermissionsActions, type PermissionsActions, type PermissionTypes, type RecordAttributePermissionsActions, type RecordPermissionsActions, type TreeNodePermissionsActions, type TreePermissionsActions } from '_types/permissions';
1
+ import { type IPermissionsDependenciesTreeTarget, type AdminPermissionsActions, type ApplicationPermissionsActions, type AttributePermissionsActions, type IPermissionsTreeTarget, type ITreePermissionsConf, type LibraryPermissionsActions, type PermissionsActions, type PermissionTypes, type RecordAttributePermissionsActions, type RecordPermissionsActions, type TreeNodePermissionsActions, type TreePermissionsActions } from '_types/permissions';
2
2
  import { type IQueryInfos } from '_types/queryInfos';
3
3
  import { type IGetDefaultPermissionParams } from './helpers/defaultPermission';
4
4
  export declare const PERMISSIONS_CACHE_HEADER = "permissions";
@@ -15,6 +15,7 @@ export interface IGetSimplePermissionsParams {
15
15
  action: PermissionsActions;
16
16
  usersGroupNodeId: string;
17
17
  permissionTreeTarget?: IPermissionsTreeTarget;
18
+ dependenciesTreeTargets?: IPermissionsDependenciesTreeTarget[];
18
19
  ctx: IQueryInfos;
19
20
  }
20
21
  export interface IGetPermissionsByActionsParams {
@@ -23,6 +24,7 @@ export interface IGetPermissionsByActionsParams {
23
24
  actions: PermissionsActions[];
24
25
  usersGroupNodeId: string;
25
26
  permissionTreeTarget?: IPermissionsTreeTarget;
27
+ dependenciesTreeTargets?: IPermissionsDependenciesTreeTarget[];
26
28
  ctx: IQueryInfos;
27
29
  }
28
30
  export type PermByActionsRes = {
@@ -121,6 +123,7 @@ export interface IGetInheritedPermissionsParams {
121
123
  action: PermissionsActions;
122
124
  userGroupId: string;
123
125
  permissionTreeTarget?: IPermissionsTreeTarget;
126
+ dependenciesTreeTargets?: IPermissionsDependenciesTreeTarget[];
124
127
  ctx: IQueryInfos;
125
128
  }
126
129
  export interface IIsAllowedParams {
@@ -0,0 +1,46 @@
1
+ import { type IQueryInfos } from '_types/queryInfos';
2
+ import { type IValueRepo } from 'infra/value/valueRepo';
3
+ import { type AttributeDependentValuesPermissionsActions, type IPermissionsDependenciesTreeTarget, type IPermissionsTreeTarget } from '../../_types/permissions';
4
+ import { type IAttributeDomain } from '../attribute/attributeDomain';
5
+ import { type IPermissionByUserGroupsHelper } from './helpers/permissionByUserGroups';
6
+ import { type IElementAncestorsHelper } from 'domain/tree/helpers/elementAncestors';
7
+ import { type IConfig } from '_types/config';
8
+ export interface IAttributeDependentValuesPermissionDomain {
9
+ getAttributeDependentValuesPermission(params: {
10
+ action: AttributeDependentValuesPermissionsActions;
11
+ attributeId: string;
12
+ recordLibrary: string;
13
+ recordId: string;
14
+ valueNodeId: string;
15
+ ctx: IQueryInfos;
16
+ }): Promise<boolean>;
17
+ getInheritedAttributeDependentValuesPermission(params: {
18
+ action: AttributeDependentValuesPermissionsActions;
19
+ attributeId: string;
20
+ userGroupId: string;
21
+ permissionTreeTarget: IPermissionsTreeTarget;
22
+ dependenciesTreeTargets: IPermissionsDependenciesTreeTarget[];
23
+ ctx: IQueryInfos;
24
+ }): Promise<boolean>;
25
+ filterAllowedDependentValuesOnItself(params: {
26
+ action: AttributeDependentValuesPermissionsActions;
27
+ attributeId: string;
28
+ targetValue: {
29
+ nodeId: string | null;
30
+ };
31
+ allValues: Array<{
32
+ nodeId: string | null;
33
+ }>;
34
+ ctx: IQueryInfos;
35
+ }): Promise<Array<{
36
+ nodeId: string | null;
37
+ }>>;
38
+ }
39
+ export interface IRecordAttributePermissionDomainDeps {
40
+ 'core.domain.permission.helpers.permissionByUserGroups': IPermissionByUserGroupsHelper;
41
+ 'core.domain.attribute': IAttributeDomain;
42
+ 'core.domain.tree.helpers.elementAncestors': IElementAncestorsHelper;
43
+ 'core.infra.value': IValueRepo;
44
+ config: IConfig;
45
+ }
46
+ export default function (deps: IRecordAttributePermissionDomainDeps): IAttributeDependentValuesPermissionDomain;
@@ -2,7 +2,7 @@ import { type IReducePermissionsArrayHelper } from './reducePermissionsArray';
2
2
  import { type ISimplePermissionHelper } from './simplePermission';
3
3
  import { type IDefaultPermissionHelper } from './defaultPermission';
4
4
  import { type TreePath } from '../../../_types/tree';
5
- import { type PermissionsActions, type PermissionTypes } from '../../../_types/permissions';
5
+ import { PermissionTypes, type IPermissionsDependenciesTreeTarget, type PermissionsActions } from '../../../_types/permissions';
6
6
  import { type IQueryInfos } from '../../../_types/queryInfos';
7
7
  import { type ICachesService } from '../../../infra/cache/cacheService';
8
8
  import { type IConfig } from '_types/config';
@@ -23,6 +23,7 @@ interface IGetPermissionByUserGroupsParams {
23
23
  tree: string;
24
24
  path: TreePath;
25
25
  };
26
+ dependenciesTreeTargets?: IPermissionsDependenciesTreeTarget[];
26
27
  getDefaultGlobalPermission?: GetDefaultGlobalPermission;
27
28
  ctx: IQueryInfos;
28
29
  }
@@ -1,6 +1,7 @@
1
1
  export { default as admin } from './adminPermissionDomain';
2
2
  export { default as application } from './applicationPermissionDomain';
3
3
  export { default as attribute } from './attributePermissionDomain';
4
+ export { default as attributeDependentValues } from './attributeDependentValuesPermissionDomain';
4
5
  export { default as library } from './libraryPermissionDomain';
5
6
  export { default } from './permissionDomain';
6
7
  export { default as recordAttribute } from './recordAttributePermissionDomain';
@@ -8,6 +8,7 @@ import { type ILabeledPermissionsAction, type IPermission, PermissionTypes } fro
8
8
  import { type IAdminPermissionDomain } from './adminPermissionDomain';
9
9
  import { type IApplicationPermissionDomain } from './applicationPermissionDomain';
10
10
  import { type IAttributePermissionDomain } from './attributePermissionDomain';
11
+ import { type IAttributeDependentValuesPermissionDomain } from './attributeDependentValuesPermissionDomain';
11
12
  import { type ILibraryPermissionDomain } from './libraryPermissionDomain';
12
13
  import { type IRecordAttributePermissionDomain } from './recordAttributePermissionDomain';
13
14
  import { type IRecordPermissionDomain } from './recordPermissionDomain';
@@ -18,11 +19,11 @@ import { type IGetActionsByTypeParams, type IGetInheritedPermissionsParams, type
18
19
  import { type IDefaultPermissionHelper } from './helpers/defaultPermission';
19
20
  export interface IPermissionDomain {
20
21
  savePermission(permData: IPermission, ctx: IQueryInfos): Promise<IPermission>;
21
- getPermissionsByActions({ type, applyTo, actions, usersGroupNodeId, permissionTreeTarget, ctx, }: IGetPermissionsByActionsParams): Promise<PermByActionsRes>;
22
+ getPermissionsByActions({ type, applyTo, actions, usersGroupNodeId, permissionTreeTarget, dependenciesTreeTargets, ctx, }: IGetPermissionsByActionsParams): Promise<PermByActionsRes>;
22
23
  /**
23
24
  * Retrieve herited permission: ignore permission defined on given element, force retrieval of herited permission
24
25
  */
25
- getInheritedPermissions({ type, applyTo, action, userGroupId, permissionTreeTarget, ctx, }: IGetInheritedPermissionsParams): Promise<boolean>;
26
+ getInheritedPermissions({ type, applyTo, action, userGroupId, permissionTreeTarget, dependenciesTreeTargets, ctx, }: IGetInheritedPermissionsParams): Promise<boolean>;
26
27
  isAllowed({ type, action, applyTo, target, ctx }: IIsAllowedParams): Promise<boolean>;
27
28
  getActionsByType(params: IGetActionsByTypeParams): Promise<ILabeledPermissionsAction[]>;
28
29
  registerActions(type: PermissionTypes, actions: string[], applyOn?: string[]): void;
@@ -33,6 +34,7 @@ export interface IPermissionDomainDeps {
33
34
  'core.domain.permission.library': ILibraryPermissionDomain;
34
35
  'core.domain.permission.record': IRecordPermissionDomain;
35
36
  'core.domain.permission.attribute': IAttributePermissionDomain;
37
+ 'core.domain.permission.attributeDependentValues': IAttributeDependentValuesPermissionDomain;
36
38
  'core.domain.permission.recordAttribute': IRecordAttributePermissionDomain;
37
39
  'core.domain.permission.tree': ITreePermissionDomain;
38
40
  'core.domain.permission.treeNode': ITreeNodePermissionDomain;
@@ -1,11 +1,14 @@
1
1
  import { IPluginsRepo } from 'infra/plugins/pluginsRepo';
2
2
  import { IPluginInfos, IRegisteredPlugin } from '_types/plugin';
3
+ import { IQueryInfos } from '../../_types/queryInfos';
4
+ import { type IAdminPermissionDomain } from 'domain/permission/adminPermissionDomain';
3
5
  interface IDeps {
6
+ 'core.domain.permission.admin': IAdminPermissionDomain;
4
7
  'core.infra.plugins': IPluginsRepo;
5
8
  }
6
9
  export interface IPluginsDomain {
7
10
  registerPlugin(path: string, plugin: IPluginInfos): IRegisteredPlugin;
8
- getRegisteredPlugins(): IRegisteredPlugin[];
11
+ getRegisteredPlugins(ctx: IQueryInfos): Promise<IRegisteredPlugin[]>;
9
12
  }
10
- export default function ({ 'core.infra.plugins': pluginsRepo }: IDeps): IPluginsDomain;
13
+ export default function ({ 'core.domain.permission.admin': adminPermissionDomain, 'core.infra.plugins': pluginsRepo, }: IDeps): IPluginsDomain;
11
14
  export {};
@@ -1,6 +1,7 @@
1
1
  import { type IAmqpService } from '@leav/message-broker';
2
2
  import { type AwilixContainer } from 'awilix';
3
3
  import { type IEventsManagerDomain } from 'domain/eventsManager/eventsManagerDomain';
4
+ import { type IAdminPermissionDomain } from 'domain/permission/adminPermissionDomain';
4
5
  import { type IUtils } from 'utils/utils';
5
6
  import { type ILogger } from '@leav/logger';
6
7
  import type * as Config from '_types/config';
@@ -55,6 +56,8 @@ export interface ITasksManagerDomain {
55
56
  createTask(task: ITaskCreatePayload, ctx: IQueryInfos): Promise<string>;
56
57
  cancelTask(task: ITaskCancelPayload, ctx: IQueryInfos): Promise<void>;
57
58
  deleteTasks(tasks: ITaskDeletePayload[], ctx: IQueryInfos): Promise<void>;
59
+ registerTaskTypes(types: string[]): void;
60
+ getTaskTypes(): string;
58
61
  }
59
62
  export interface ITasksManagerDomainDeps {
60
63
  config: Config.IConfig;
@@ -62,9 +65,10 @@ export interface ITasksManagerDomainDeps {
62
65
  'core.infra.task': ITaskRepo;
63
66
  'core.depsManager': AwilixContainer;
64
67
  'core.domain.eventsManager': IEventsManagerDomain;
68
+ 'core.domain.permission.admin': IAdminPermissionDomain;
65
69
  'core.utils.logger': ILogger;
66
70
  'core.utils': IUtils;
67
71
  'core.utils.getSystemQueryContext': GetSystemQueryContext;
68
72
  }
69
- export default function ({ config, 'core.infra.amqpService': amqpService, 'core.infra.task': taskRepo, 'core.depsManager': depsManager, 'core.domain.eventsManager': eventsManager, 'core.utils.logger': logger, 'core.utils': utils, 'core.utils.getSystemQueryContext': getSystemQueryContext, }: ITasksManagerDomainDeps): ITasksManagerDomain;
73
+ export default function ({ config, 'core.infra.amqpService': amqpService, 'core.infra.task': taskRepo, 'core.depsManager': depsManager, 'core.domain.eventsManager': eventsManager, 'core.domain.permission.admin': adminPermissionDomain, 'core.utils.logger': logger, 'core.utils': utils, 'core.utils.getSystemQueryContext': getSystemQueryContext, }: ITasksManagerDomainDeps): ITasksManagerDomain;
70
74
  export {};
@@ -8,6 +8,7 @@ export interface IDeleteValueParams {
8
8
  recordId: string;
9
9
  attribute: string;
10
10
  value?: IValue;
11
+ skipReadonly?: boolean;
11
12
  ctx: IQueryInfos;
12
13
  }
13
14
  export interface IRunActionListParams {
@@ -1,6 +1,7 @@
1
+ import { type IAttributeDependentValuesPermissionDomain } from 'domain/permission/attributeDependentValuesPermissionDomain';
1
2
  import { type IRecordAttributePermissionDomain } from 'domain/permission/recordAttributePermissionDomain';
2
3
  import { type IRecordPermissionDomain } from 'domain/permission/recordPermissionDomain';
3
- import { type IAttribute } from '_types/attribute';
4
+ import { type IAttribute } from '../../../_types/attribute';
4
5
  import { type IConfig } from '_types/config';
5
6
  import { type IQueryInfos } from '_types/queryInfos';
6
7
  import { type IValue } from '_types/value';
@@ -21,6 +22,7 @@ interface ICanSaveRecordValueParams {
21
22
  deps: {
22
23
  recordPermissionDomain: IRecordPermissionDomain;
23
24
  recordAttributePermissionDomain: IRecordAttributePermissionDomain;
25
+ attributeDependentValuesPermissionDomain: IAttributeDependentValuesPermissionDomain;
24
26
  config: IConfig;
25
27
  };
26
28
  }
@@ -0,0 +1,28 @@
1
+ import { type IActionsListDomain } from 'domain/actionsList/actionsListDomain';
2
+ import { type IAttributeDomain } from 'domain/attribute/attributeDomain';
3
+ import { type IUtils } from 'utils/utils';
4
+ import { type IAttribute } from '_types/attribute';
5
+ import { type IQueryInfos } from '_types/queryInfos';
6
+ import { type IValue } from '_types/value';
7
+ /**
8
+ * Parameters for post-delete value processing.
9
+ */
10
+ interface IPostDeleteValueParams {
11
+ libraryId: string;
12
+ recordId: string;
13
+ attribute: IAttribute;
14
+ value: IValue;
15
+ ctx: IQueryInfos;
16
+ deps: {
17
+ actionsListDomain: IActionsListDomain;
18
+ attributeDomain: IAttributeDomain;
19
+ utils: IUtils;
20
+ };
21
+ }
22
+ /**
23
+ * Executes post-delete action lists on deleted value
24
+ * Action lists can perform side effects
25
+ * Unlike pre-delete value actions, this runs AFTER the value is persisted to the database.
26
+ */
27
+ declare const postDeleteValue: (params: IPostDeleteValueParams) => Promise<void>;
28
+ export default postDeleteValue;
@@ -0,0 +1,28 @@
1
+ import { type IActionsListDomain } from 'domain/actionsList/actionsListDomain';
2
+ import { type IAttributeDomain } from 'domain/attribute/attributeDomain';
3
+ import { type IUtils } from 'utils/utils';
4
+ import { type IAttribute } from '_types/attribute';
5
+ import { type IQueryInfos } from '_types/queryInfos';
6
+ import { type IValue } from '_types/value';
7
+ /**
8
+ * Parameters for post-save value processing.
9
+ */
10
+ interface IPostSaveValueParams {
11
+ libraryId: string;
12
+ recordId: string;
13
+ attribute: IAttribute;
14
+ value: IValue;
15
+ ctx: IQueryInfos;
16
+ deps: {
17
+ actionsListDomain: IActionsListDomain;
18
+ attributeDomain: IAttributeDomain;
19
+ utils: IUtils;
20
+ };
21
+ }
22
+ /**
23
+ * Executes post-save action lists on saved value
24
+ * Action lists can perform side effects
25
+ * Unlike pre-save value actions, this runs AFTER the value is persisted to the database.
26
+ */
27
+ declare const postSaveValue: (params: IPostSaveValueParams) => Promise<void>;
28
+ export default postSaveValue;
@@ -18,6 +18,7 @@ import { type IValueVersion, type ISaveValue, type IValue, type IValuesOptions,
18
18
  import { type IActionsListDomain } from '../actionsList/actionsListDomain';
19
19
  import { type IAttributeDomain } from '../attribute/attributeDomain';
20
20
  import { type IValidateHelper } from '../helpers/validate';
21
+ import { type IAttributeDependentValuesPermissionDomain } from 'domain/permission/attributeDependentValuesPermissionDomain';
21
22
  import { type IRecordAttributePermissionDomain } from '../permission/recordAttributePermissionDomain';
22
23
  import { type IRecordPermissionDomain } from '../permission/recordPermissionDomain';
23
24
  import { type IDeleteValueParams } from './_types';
@@ -64,6 +65,7 @@ export interface IValueDomain {
64
65
  recordId: string;
65
66
  attribute: string;
66
67
  value: ISaveValue;
68
+ skipReadonly?: boolean;
67
69
  ctx: IQueryInfos;
68
70
  }): Promise<IValue[]>;
69
71
  /**
@@ -79,6 +81,7 @@ export interface IValueDomain {
79
81
  ctx: IQueryInfos;
80
82
  keepEmpty?: boolean;
81
83
  skipPermission?: boolean;
84
+ skipReadonly?: boolean;
82
85
  }): Promise<ISaveBatchValueResult>;
83
86
  deleteValue(params: IDeleteValueParams): Promise<IValue[]>;
84
87
  formatValue(params: {
@@ -121,6 +124,7 @@ export interface IValueDomainDeps {
121
124
  config: Config.IConfig;
122
125
  'core.domain.actionsList': IActionsListDomain;
123
126
  'core.domain.attribute': IAttributeDomain;
127
+ 'core.domain.permission.attributeDependentValues': IAttributeDependentValuesPermissionDomain;
124
128
  'core.domain.permission.recordAttribute': IRecordAttributePermissionDomain;
125
129
  'core.domain.permission.record': IRecordPermissionDomain;
126
130
  'core.domain.eventsManager': IEventsManagerDomain;
@@ -142,5 +146,5 @@ export interface IValueDomainDeps {
142
146
  'core.utils.logger': ILogger;
143
147
  'core.domain.tree': ITreeDomain;
144
148
  }
145
- declare const valueDomain: ({ config, "core.domain.actionsList": actionsListDomain, "core.domain.attribute": attributeDomain, "core.domain.permission.recordAttribute": recordAttributePermissionDomain, "core.domain.permission.record": recordPermissionDomain, "core.domain.eventsManager": eventsManager, "core.domain.helpers.validate": validate, "core.domain.helpers.updateRecordLastModif": updateRecordLastModif, "core.domain.tree.helpers.elementAncestors": elementAncestors, "core.domain.tree.helpers.getDefaultElement": getDefaultElementHelper, "core.domain.record.helpers.sendRecordUpdateEvent": sendRecordUpdateEvent, "core.domain.record.helpers.createRecord": createRecordHelper, "core.domain.record.helpers.findRecords": findRecordsHelper, "core.domain.permission.helpers.recordInCreationBypass": recordInCreationBypassHelper, "core.domain.record.helpers.deleteRecord": deleteRecordHelper, "core.domain.attribute.helpers.ifLibraryJoinLinkAttribute": ifLibraryJoinLinkAttribute, "core.domain.versionProfile": versionProfileDomain, "core.infra.record": recordRepo, "core.infra.tree": treeRepo, "core.infra.value": valueRepo, "core.utils": utils, "core.utils.logger": logger, }: IValueDomainDeps) => IValueDomain;
149
+ declare const valueDomain: ({ config, "core.domain.actionsList": actionsListDomain, "core.domain.attribute": attributeDomain, "core.domain.permission.attributeDependentValues": attributeDependentValuesPermissionDomain, "core.domain.permission.recordAttribute": recordAttributePermissionDomain, "core.domain.permission.record": recordPermissionDomain, "core.domain.eventsManager": eventsManager, "core.domain.helpers.validate": validate, "core.domain.helpers.updateRecordLastModif": updateRecordLastModif, "core.domain.tree.helpers.elementAncestors": elementAncestors, "core.domain.tree.helpers.getDefaultElement": getDefaultElementHelper, "core.domain.record.helpers.sendRecordUpdateEvent": sendRecordUpdateEvent, "core.domain.record.helpers.createRecord": createRecordHelper, "core.domain.record.helpers.findRecords": findRecordsHelper, "core.domain.permission.helpers.recordInCreationBypass": recordInCreationBypassHelper, "core.domain.record.helpers.deleteRecord": deleteRecordHelper, "core.domain.attribute.helpers.ifLibraryJoinLinkAttribute": ifLibraryJoinLinkAttribute, "core.domain.versionProfile": versionProfileDomain, "core.infra.record": recordRepo, "core.infra.tree": treeRepo, "core.infra.value": valueRepo, "core.utils": utils, "core.utils.logger": logger, }: IValueDomainDeps) => IValueDomain;
146
150
  export default valueDomain;
@@ -26,7 +26,9 @@ export declare const commonAttributeData: {
26
26
  name: string;
27
27
  is_system: boolean;
28
28
  }[];
29
+ postSaveValue: any[];
29
30
  deleteValue: any[];
31
+ postDeleteValue: any[];
30
32
  };
31
33
  };
32
34
  export declare const createLibraries: (libraries: MigrationLibraryToCreate[], dbService: IDbService, libraryRepo: ILibraryRepo, ctx: IQueryInfos) => Promise<void>;
@@ -4,7 +4,7 @@ import { type IConfig } from '_types/config';
4
4
  import { type IQueryInfos } from '_types/queryInfos';
5
5
  export interface IMailerService {
6
6
  mailer?: nodemailer.Transporter;
7
- sendEmail?: ({ to, subject, text, html, attachments }: ISendMailParams, ctx: IQueryInfos) => Promise<void>;
7
+ sendEmail?: ({ to, subject, text, html, attachments, headers }: ISendMailParams, ctx: IQueryInfos) => Promise<void>;
8
8
  }
9
9
  interface IDeps {
10
10
  config: IConfig;
@@ -21,6 +21,7 @@ interface ISendMailParams {
21
21
  content?: string | Buffer;
22
22
  path?: string;
23
23
  }>;
24
+ headers?: Record<string, string>;
24
25
  }
25
26
  export default function ({ config, 'core.domain.globalSettings': globalSettingsDomain, 'core.infra.mailer': mailer, }: IDeps): IMailerService;
26
27
  export {};
@@ -1,5 +1,5 @@
1
1
  import { type IQueryInfos } from '_types/queryInfos';
2
- import { type IPermission, type IPermissionsTreeTarget, type PermissionsActions, type PermissionTypes } from '../../_types/permissions';
2
+ import { type IPermissionsDependenciesTreeTarget, type IPermission, type IPermissionsTreeTarget, type PermissionsActions, type PermissionTypes } from '../../_types/permissions';
3
3
  import { type IDbService } from '../db/dbService';
4
4
  import { type IDbUtils } from '../db/dbUtils';
5
5
  export interface IPermissionRepo {
@@ -7,11 +7,12 @@ export interface IPermissionRepo {
7
7
  permData: IPermission;
8
8
  ctx: IQueryInfos;
9
9
  }): Promise<IPermission>;
10
- getPermissions({ type, applyTo, usersGroupNodeId, permissionTreeTarget, ctx, }: {
10
+ getPermissions({ type, applyTo, usersGroupNodeId, permissionTreeTarget, dependenciesTreeTargets, ctx, }: {
11
11
  type: PermissionTypes;
12
12
  applyTo: string;
13
13
  usersGroupNodeId: string | null;
14
14
  permissionTreeTarget?: IPermissionsTreeTarget;
15
+ dependenciesTreeTargets?: IPermissionsDependenciesTreeTarget[];
15
16
  ctx: IQueryInfos;
16
17
  }): Promise<IPermission | null>;
17
18
  getAllPermissionsForTree({ type, applyTo, actionKey, treeId, groupsIds, ctx, }: {
@@ -2,9 +2,10 @@ interface ICallerInfo {
2
2
  path: string;
3
3
  line: string;
4
4
  col: string;
5
+ matchStackIndex: number;
5
6
  }
6
7
  export declare class LoggerCallStack {
7
- private callerLineIndexInStack;
8
+ private callerLineSearchFromIndexInStack;
8
9
  getCallStackTrace(): string | null;
9
10
  getLocationInfo(): ICallerInfo | null;
10
11
  private getStackLines;
@@ -1,2 +1,2 @@
1
1
  import winston from 'winston';
2
- export declare const addLocationInfoInLog: winston.Logform.FormatWrap;
2
+ export declare const addLocationInfoInLog: (isLogLevelEnabled: (level: string) => boolean) => winston.Logform.FormatWrap;
@@ -20,6 +20,10 @@ export declare enum TabsDirection {
20
20
  HORIZONTAL = "horizontal",
21
21
  VERTICAL = "vertical"
22
22
  }
23
+ export declare enum DisplayMode {
24
+ EXPLORER = "EXPLORER",
25
+ TAG = "TAG"
26
+ }
23
27
  export interface ICommonFieldsSettings {
24
28
  label?: Record<string, string | null>;
25
29
  attribute?: string;
@@ -55,7 +59,7 @@ export interface IFormLinkFieldSettings extends ICommonFieldsSettings {
55
59
  label: Record<string, string>;
56
60
  }>;
57
61
  displayRecordIdentity: boolean;
58
- tagDisplayMode: boolean;
62
+ displayMode: DisplayMode;
59
63
  editFormId: string;
60
64
  }
61
65
  export declare const FORM_ROOT_CONTAINER_ID = "__root";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aristid/leav-types",
3
- "version": "1.6.0",
3
+ "version": "1.7.0-fe7c7deb",
4
4
  "description": "Shared Leav types",
5
5
  "scripts": {
6
6
  "tscheck": "",
@@ -14,14 +14,14 @@
14
14
  "license": "LGPL3",
15
15
  "repository": "https://github.com/leav-solutions/leav-engine",
16
16
  "dependencies": {
17
- "@leav/utils": "1.6.0",
18
- "@types/amqplib": "0.10.7",
19
- "@types/express": "5.0.0",
17
+ "@leav/utils": "1.7.0",
18
+ "@types/amqplib": "0.10.8",
19
+ "@types/express": "5.0.6",
20
20
  "@types/jest": "29.5.14",
21
21
  "amqplib": "0.10.9",
22
22
  "arangojs": "8.1.0",
23
- "awilix": "12.0.4",
24
- "i18next": "24.2.0",
23
+ "awilix": "12.0.5",
24
+ "i18next": "24.2.3",
25
25
  "jest": "29.7.0"
26
26
  }
27
27
  }