ldap-rest 2.0.3 → 2.0.4

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 (169) hide show
  1. package/dist/lib/entitySchema/validator.js +1 -1
  2. package/dist/lib/utils.js +1 -1
  3. package/dist/plugins/auth/authzDynamic.js +1 -1
  4. package/dist/plugins/auth/trustedProxy.js +1 -1
  5. package/dist/plugins/ldap/departmentSync.js +1 -1
  6. package/dist/plugins/scim/baseResolver.js +1 -1
  7. package/dist/src/abstract/ldapFlat.d.ts +6 -6
  8. package/dist/src/abstract/plugin.d.ts +11 -11
  9. package/dist/src/abstract/twakePlugin.d.ts +4 -4
  10. package/dist/src/bin/index.d.ts +10 -10
  11. package/dist/src/browser/ldap-browser/LdapBrowser.d.ts +1 -1
  12. package/dist/src/browser/ldap-browser/api/RawApiClient.d.ts +1 -1
  13. package/dist/src/browser/ldap-browser/components/EntryTree.d.ts +2 -2
  14. package/dist/src/browser/ldap-browser/components/EntryView.d.ts +2 -2
  15. package/dist/src/browser/ldap-browser/index.d.ts +4 -5
  16. package/dist/src/browser/ldap-browser/schema.d.ts +1 -1
  17. package/dist/src/browser/ldap-group-editor/LdapGroupEditor.d.ts +2 -2
  18. package/dist/src/browser/ldap-group-editor/api/GroupApiClient.d.ts +1 -1
  19. package/dist/src/browser/ldap-group-editor/components/CreateGroupModal.d.ts +2 -2
  20. package/dist/src/browser/ldap-group-editor/components/GroupPropertyEditor.d.ts +1 -1
  21. package/dist/src/browser/ldap-group-editor/components/MoveGroupModal.d.ts +1 -1
  22. package/dist/src/browser/ldap-group-editor/types.d.ts +1 -1
  23. package/dist/src/browser/ldap-resource-editor/api/ResourceApiClient.d.ts +2 -2
  24. package/dist/src/browser/ldap-resource-editor/index.d.ts +2 -2
  25. package/dist/src/browser/ldap-resource-editor/types.d.ts +1 -1
  26. package/dist/src/browser/ldap-tree-viewer/LdapTreeViewer.d.ts +1 -1
  27. package/dist/src/browser/ldap-tree-viewer/components/TreeNode.d.ts +2 -2
  28. package/dist/src/browser/ldap-tree-viewer/components/TreeRoot.d.ts +2 -2
  29. package/dist/src/browser/ldap-tree-viewer/index.d.ts +2 -3
  30. package/dist/src/browser/ldap-tree-viewer/store/actions.d.ts +2 -2
  31. package/dist/src/browser/ldap-tree-viewer/store/reducers.d.ts +2 -2
  32. package/dist/src/browser/ldap-unit-editor/LdapUnitEditor.d.ts +1 -1
  33. package/dist/src/browser/ldap-unit-editor/api/UnitApiClient.d.ts +1 -1
  34. package/dist/src/browser/ldap-unit-editor/components/MoveUnitModal.d.ts +1 -1
  35. package/dist/src/browser/ldap-unit-editor/components/UnitPropertyEditor.d.ts +1 -1
  36. package/dist/src/browser/ldap-unit-editor/types.d.ts +1 -1
  37. package/dist/src/browser/ldap-user-editor/LdapUserEditor.d.ts +2 -2
  38. package/dist/src/browser/ldap-user-editor/api/UserApiClient.d.ts +2 -2
  39. package/dist/src/browser/ldap-user-editor/components/MoveUserModal.d.ts +1 -1
  40. package/dist/src/browser/ldap-user-editor/components/PointerField.d.ts +2 -2
  41. package/dist/src/browser/ldap-user-editor/components/UserEditor.d.ts +1 -1
  42. package/dist/src/browser/ldap-user-editor/components/UserList.d.ts +1 -1
  43. package/dist/src/browser/ldap-user-editor/components/UserTree.d.ts +1 -1
  44. package/dist/src/browser/ldap-user-editor/index.d.ts +2 -3
  45. package/dist/src/browser/ldap-user-editor/types.d.ts +1 -1
  46. package/dist/src/browser/shared/components/Modal.d.ts +1 -1
  47. package/dist/src/browser/shared/index.d.ts +7 -7
  48. package/dist/src/browser/shared/utils/form.d.ts +1 -1
  49. package/dist/src/browser/shared/utils/schema.d.ts +1 -1
  50. package/dist/src/config/args.d.ts +3 -3
  51. package/dist/src/config/options.d.ts +2 -2
  52. package/dist/src/config/schema.d.ts +1 -1
  53. package/dist/src/hooks.d.ts +5 -5
  54. package/dist/src/lib/auth/base.d.ts +2 -2
  55. package/dist/src/lib/authz/base.d.ts +6 -6
  56. package/dist/src/lib/authz/composition.d.ts +4 -4
  57. package/dist/src/lib/entitySchema/validator.d.ts +23 -2
  58. package/dist/src/lib/expressFormatedResponses.d.ts +1 -1
  59. package/dist/src/lib/health.d.ts +1 -1
  60. package/dist/src/lib/hookBus.d.ts +1 -1
  61. package/dist/src/lib/ldap/schema.d.ts +2 -2
  62. package/dist/src/lib/ldapActions.d.ts +5 -5
  63. package/dist/src/lib/mailDomains.d.ts +1 -1
  64. package/dist/src/lib/parseConfig.d.ts +1 -1
  65. package/dist/src/lib/schemaFile.d.ts +1 -1
  66. package/dist/src/lib/staticFiles.d.ts +1 -1
  67. package/dist/src/lib/storage/store.d.ts +1 -1
  68. package/dist/src/lib/utils.d.ts +3 -3
  69. package/dist/src/logger/winston.d.ts +1 -1
  70. package/dist/src/plugins/auth/auth.options.d.ts +39 -39
  71. package/dist/src/plugins/auth/authzDynamic.d.ts +24 -11
  72. package/dist/src/plugins/auth/authzLinid1.d.ts +7 -7
  73. package/dist/src/plugins/auth/authzPerBranch.d.ts +8 -8
  74. package/dist/src/plugins/auth/authzPerRoute.d.ts +2 -2
  75. package/dist/src/plugins/auth/authzScope.d.ts +1 -1
  76. package/dist/src/plugins/auth/crowdsec.d.ts +4 -4
  77. package/dist/src/plugins/auth/fake.d.ts +3 -3
  78. package/dist/src/plugins/auth/hmac.d.ts +4 -4
  79. package/dist/src/plugins/auth/llng.d.ts +20 -5
  80. package/dist/src/plugins/auth/openidconnect.d.ts +9 -9
  81. package/dist/src/plugins/auth/rateLimit.d.ts +3 -3
  82. package/dist/src/plugins/auth/token.d.ts +3 -3
  83. package/dist/src/plugins/auth/totp.d.ts +5 -5
  84. package/dist/src/plugins/auth/trustedProxy.d.ts +16 -32
  85. package/dist/src/plugins/bcl.d.ts +4 -4
  86. package/dist/src/plugins/bcl.options.d.ts +3 -3
  87. package/dist/src/plugins/configApi.d.ts +1 -1
  88. package/dist/src/plugins/demo/helloworld.d.ts +1 -1
  89. package/dist/src/plugins/ldap/accountLifecycle.d.ts +1 -1
  90. package/dist/src/plugins/ldap/bulkImport.d.ts +5 -5
  91. package/dist/src/plugins/ldap/departmentSync.d.ts +14 -3
  92. package/dist/src/plugins/ldap/enterpriseRules.d.ts +7 -7
  93. package/dist/src/plugins/ldap/externalUsersInGroups.d.ts +6 -6
  94. package/dist/src/plugins/ldap/flatGeneric.d.ts +6 -6
  95. package/dist/src/plugins/ldap/groups.d.ts +8 -8
  96. package/dist/src/plugins/ldap/ldap.options.d.ts +45 -45
  97. package/dist/src/plugins/ldap/onChange.d.ts +4 -4
  98. package/dist/src/plugins/ldap/organization.d.ts +1 -1
  99. package/dist/src/plugins/ldap/organizations.d.ts +12 -12
  100. package/dist/src/plugins/ldap/passwordPolicy.d.ts +11 -11
  101. package/dist/src/plugins/ldap/raw.d.ts +8 -8
  102. package/dist/src/plugins/ldap/trash.d.ts +6 -6
  103. package/dist/src/plugins/metrics.d.ts +3 -3
  104. package/dist/src/plugins/metrics.options.d.ts +3 -3
  105. package/dist/src/plugins/rabbitmq.d.ts +4 -4
  106. package/dist/src/plugins/rabbitmq.options.d.ts +3 -3
  107. package/dist/src/plugins/scim/baseResolver.d.ts +3 -3
  108. package/dist/src/plugins/scim/bulk.d.ts +7 -7
  109. package/dist/src/plugins/scim/discovery.d.ts +4 -4
  110. package/dist/src/plugins/scim/errors.d.ts +3 -3
  111. package/dist/src/plugins/scim/filter.d.ts +1 -1
  112. package/dist/src/plugins/scim/groups.d.ts +8 -8
  113. package/dist/src/plugins/scim/list.d.ts +1 -1
  114. package/dist/src/plugins/scim/mapping.d.ts +2 -2
  115. package/dist/src/plugins/scim/patch.d.ts +2 -2
  116. package/dist/src/plugins/scim/scim.d.ts +30 -30
  117. package/dist/src/plugins/scim/scim.options.d.ts +27 -27
  118. package/dist/src/plugins/scim/users.d.ts +6 -6
  119. package/dist/src/plugins/static.d.ts +6 -6
  120. package/dist/src/plugins/static.options.d.ts +6 -6
  121. package/dist/src/plugins/storage/file.d.ts +2 -2
  122. package/dist/src/plugins/storage/ldap.d.ts +2 -2
  123. package/dist/src/plugins/storage/postgres.d.ts +2 -2
  124. package/dist/src/plugins/storage/valkey.d.ts +2 -2
  125. package/dist/src/plugins/storage.d.ts +13 -13
  126. package/dist/src/plugins/storage.options.d.ts +11 -11
  127. package/dist/src/plugins/twake/appAccounts.options.d.ts +6 -6
  128. package/dist/src/plugins/twake/appAccountsApi.d.ts +7 -7
  129. package/dist/src/plugins/twake/appAccountsConsistency.d.ts +9 -9
  130. package/dist/src/plugins/twake/calendar.d.ts +14 -14
  131. package/dist/src/plugins/twake/calendar.options.d.ts +11 -11
  132. package/dist/src/plugins/twake/calendarResources.d.ts +1 -1
  133. package/dist/src/plugins/twake/cloudery.options.d.ts +18 -18
  134. package/dist/src/plugins/twake/clouderyProvision.d.ts +19 -19
  135. package/dist/src/plugins/twake/cozy.options.d.ts +14 -14
  136. package/dist/src/plugins/twake/cozyProvision.d.ts +15 -15
  137. package/dist/src/plugins/twake/drive.d.ts +9 -9
  138. package/dist/src/plugins/twake/drive.options.d.ts +7 -7
  139. package/dist/src/plugins/twake/groups.d.ts +16 -16
  140. package/dist/src/plugins/twake/instances.d.ts +38 -38
  141. package/dist/src/plugins/twake/james.d.ts +18 -18
  142. package/dist/src/plugins/twake/james.options.d.ts +13 -13
  143. package/dist/src/plugins/twake/lifecycleAttributes.d.ts +2 -2
  144. package/dist/src/plugins/twake/lifecycleEvents.d.ts +13 -13
  145. package/dist/src/plugins/twake/migrationProxy.d.ts +11 -11
  146. package/dist/src/plugins/twake/migrationProxy.options.d.ts +8 -8
  147. package/dist/src/plugins/twake/spaces.d.ts +12 -12
  148. package/dist/src/plugins/twake/tombstone.d.ts +10 -10
  149. package/dist/src/plugins/twake/twakeGroups.options.d.ts +12 -12
  150. package/dist/src/plugins/twake/twakeInstances.options.d.ts +35 -35
  151. package/dist/src/plugins/twake/twakeLifecycle.options.d.ts +12 -12
  152. package/dist/src/plugins/twake/twakeSpaces.options.d.ts +11 -11
  153. package/dist/src/plugins/twake/twakeTombstone.options.d.ts +9 -9
  154. package/dist/src/plugins/weblogs.d.ts +1 -1
  155. package/docs/client-development/schemas/README.md +6 -1
  156. package/docs/development/contracts.md +22 -0
  157. package/docs/presentations/en.md +1 -1
  158. package/docs/presentations/fr.md +1 -1
  159. package/docs/usage/plugins/auth/authz-dynamic.md +3 -1
  160. package/docs/usage/plugins/auth/trusted-proxy.md +11 -1
  161. package/docs/usage/upgrading.md +27 -0
  162. package/package.json +4 -3
  163. package/static/browser/ldap-user-editor.esm.js.map +1 -1
  164. package/static/browser/ldap-user-editor.js.map +1 -1
  165. package/static/browser/ldap-user-editor.min.js.map +1 -1
  166. package/static/browser/shared/utils/schema.js.map +1 -1
  167. package/static/browser/shared.esm.js.map +1 -1
  168. package/static/browser/shared.js.map +1 -1
  169. package/static/browser/shared.min.js.map +1 -1
@@ -1,11 +1,11 @@
1
1
  import type { Express } from 'express';
2
- import TwakePlugin from '../../abstract/twakePlugin';
3
- import type { HealthStatus } from '../../lib/health';
4
- import { type Role } from '../../abstract/plugin';
5
- import type { DM } from '../../bin';
6
- import type { AttributeValue } from '../../lib/ldapActions';
7
- import { Hooks } from '../../hooks';
8
- import type { ChangesToNotify } from '../ldap/onChange';
2
+ import TwakePlugin from '../../abstract/twakePlugin.js';
3
+ import type { HealthStatus } from '../../lib/health.js';
4
+ import { type Role } from '../../abstract/plugin.js';
5
+ import type { DM } from '../../bin/index.js';
6
+ import type { AttributeValue } from '../../lib/ldapActions.js';
7
+ import { Hooks } from '../../hooks.js';
8
+ import type { ChangesToNotify } from '../ldap/onChange.js';
9
9
  type Identity = {
10
10
  id: string;
11
11
  email: string;
@@ -21,17 +21,17 @@ export declare const QuotaParams: import("@sinclair/typebox").TObject<{
21
21
  }>;
22
22
  export default class James extends TwakePlugin {
23
23
  static optionDefinitions: {
24
- james_webadmin_url: import("../../config/options").StringOption;
25
- james_webadmin_token: import("../../config/options").StringOption;
26
- james_signature_template: import("../../config/options").StringOption;
27
- james_concurrency: import("../../config/options").NumberOption;
28
- james_init_delay: import("../../config/options").NumberOption;
29
- james_retry_attempts: import("../../config/options").NumberOption;
30
- james_retry_delay: import("../../config/options").NumberOption;
31
- james_mailing_list_branch: import("../../config/options").ArrayOption;
32
- james_mailbox_type_attribute: import("../../config/options").StringOption;
33
- james_sync_forwards: import("../../config/options").BooleanOption;
34
- james_team_mailbox_any_domain: import("../../config/options").BooleanOption;
24
+ james_webadmin_url: import("../../config/options.js").StringOption;
25
+ james_webadmin_token: import("../../config/options.js").StringOption;
26
+ james_signature_template: import("../../config/options.js").StringOption;
27
+ james_concurrency: import("../../config/options.js").NumberOption;
28
+ james_init_delay: import("../../config/options.js").NumberOption;
29
+ james_retry_attempts: import("../../config/options.js").NumberOption;
30
+ james_retry_delay: import("../../config/options.js").NumberOption;
31
+ james_mailing_list_branch: import("../../config/options.js").ArrayOption;
32
+ james_mailbox_type_attribute: import("../../config/options.js").StringOption;
33
+ james_sync_forwards: import("../../config/options.js").BooleanOption;
34
+ james_team_mailbox_any_domain: import("../../config/options.js").BooleanOption;
35
35
  };
36
36
  name: string;
37
37
  roles: Role[];
@@ -1,20 +1,20 @@
1
1
  /**
2
2
  * James plugin options, see `docs/plugin-development/options.md`.
3
3
  */
4
- import type { Config } from '../../config/args';
5
- import { type OptionsOf } from '../../config/options';
4
+ import type { Config } from '../../config/args.js';
5
+ import { type OptionsOf } from '../../config/options.js';
6
6
  export declare const jamesOptions: {
7
- james_webadmin_url: import("../../config/options").StringOption;
8
- james_webadmin_token: import("../../config/options").StringOption;
9
- james_signature_template: import("../../config/options").StringOption;
10
- james_concurrency: import("../../config/options").NumberOption;
11
- james_init_delay: import("../../config/options").NumberOption;
12
- james_retry_attempts: import("../../config/options").NumberOption;
13
- james_retry_delay: import("../../config/options").NumberOption;
14
- james_mailing_list_branch: import("../../config/options").ArrayOption;
15
- james_mailbox_type_attribute: import("../../config/options").StringOption;
16
- james_sync_forwards: import("../../config/options").BooleanOption;
17
- james_team_mailbox_any_domain: import("../../config/options").BooleanOption;
7
+ james_webadmin_url: import("../../config/options.js").StringOption;
8
+ james_webadmin_token: import("../../config/options.js").StringOption;
9
+ james_signature_template: import("../../config/options.js").StringOption;
10
+ james_concurrency: import("../../config/options.js").NumberOption;
11
+ james_init_delay: import("../../config/options.js").NumberOption;
12
+ james_retry_attempts: import("../../config/options.js").NumberOption;
13
+ james_retry_delay: import("../../config/options.js").NumberOption;
14
+ james_mailing_list_branch: import("../../config/options.js").ArrayOption;
15
+ james_mailbox_type_attribute: import("../../config/options.js").StringOption;
16
+ james_sync_forwards: import("../../config/options.js").BooleanOption;
17
+ james_team_mailbox_any_domain: import("../../config/options.js").BooleanOption;
18
18
  };
19
19
  export type JamesOptions = OptionsOf<typeof jamesOptions>;
20
20
  /** The checked values for a caller that holds a Config instead of the plugin */
@@ -5,8 +5,8 @@
5
5
  * deletion), read from the `--twake-lifecycle-*` options: the ones
6
6
  * `core/twake/lifecycleEvents` reads, and `core/twake/tombstone` writes.
7
7
  */
8
- import type { Config } from '../../bin';
9
- import type { AttributesList, AttributeValue } from '../../lib/ldapActions';
8
+ import type { Config } from '../../bin/index.js';
9
+ import type { AttributesList, AttributeValue } from '../../lib/ldapActions.js';
10
10
  export type DeletedAtFormat = 'iso8601' | 'generalizedTime';
11
11
  export interface LifecycleAttributes {
12
12
  role: string;
@@ -1,6 +1,6 @@
1
- import DmPlugin, { type Role } from '../../abstract/plugin';
2
- import type { DM } from '../../bin';
3
- import type { Hooks } from '../../hooks';
1
+ import DmPlugin, { type Role } from '../../abstract/plugin.js';
2
+ import type { DM } from '../../bin/index.js';
3
+ import type { Hooks } from '../../hooks.js';
4
4
  export declare const LIFECYCLE_EVENTS: readonly ["created", "roleChanged", "disabled", "enabled", "updated", "memberAdded", "memberRemoved", "deleted"];
5
5
  export type LifecycleEvent = (typeof LIFECYCLE_EVENTS)[number];
6
6
  declare const MEMBER_LISTS: readonly ["$members", "$added", "$removed"];
@@ -24,16 +24,16 @@ interface Rule {
24
24
  export declare function parseRules(source: string): Rule[];
25
25
  export default class TwakeLifecycleEvents extends DmPlugin {
26
26
  static optionDefinitions: {
27
- twake_lifecycle_role_attribute: import("../../config/options").StringOption;
28
- twake_lifecycle_lock_attribute: import("../../config/options").StringOption;
29
- twake_lifecycle_lock_value: import("../../config/options").StringOption;
30
- twake_lifecycle_deleted_attribute: import("../../config/options").StringOption;
31
- twake_lifecycle_deleted_value: import("../../config/options").StringOption;
32
- twake_lifecycle_deleted_at_attribute: import("../../config/options").StringOption;
33
- twake_lifecycle_deleted_at_format: import("../../config/options").StringOption;
34
- twake_lifecycle_reason_attribute: import("../../config/options").StringOption;
35
- twake_lifecycle_rules: import("../../config/options").StringOption;
36
- twake_lifecycle_member_attribute: import("../../config/options").StringOption;
27
+ twake_lifecycle_role_attribute: import("../../config/options.js").StringOption;
28
+ twake_lifecycle_lock_attribute: import("../../config/options.js").StringOption;
29
+ twake_lifecycle_lock_value: import("../../config/options.js").StringOption;
30
+ twake_lifecycle_deleted_attribute: import("../../config/options.js").StringOption;
31
+ twake_lifecycle_deleted_value: import("../../config/options.js").StringOption;
32
+ twake_lifecycle_deleted_at_attribute: import("../../config/options.js").StringOption;
33
+ twake_lifecycle_deleted_at_format: import("../../config/options.js").StringOption;
34
+ twake_lifecycle_reason_attribute: import("../../config/options.js").StringOption;
35
+ twake_lifecycle_rules: import("../../config/options.js").StringOption;
36
+ twake_lifecycle_member_attribute: import("../../config/options.js").StringOption;
37
37
  };
38
38
  name: string;
39
39
  roles: Role[];
@@ -1,9 +1,9 @@
1
1
  import type { Express } from 'express';
2
- import TwakePlugin from '../../abstract/twakePlugin';
3
- import { type Role } from '../../abstract/plugin';
4
- import type { DM } from '../../bin';
5
- import type { Hooks } from '../../hooks';
6
- import type { HealthStatus } from '../../lib/health';
2
+ import TwakePlugin from '../../abstract/twakePlugin.js';
3
+ import { type Role } from '../../abstract/plugin.js';
4
+ import type { DM } from '../../bin/index.js';
5
+ import type { Hooks } from '../../hooks.js';
6
+ import type { HealthStatus } from '../../lib/health.js';
7
7
  /**
8
8
  * @openapi
9
9
  * components:
@@ -21,12 +21,12 @@ export declare const MailMigrationParams: import("@sinclair/typebox").TObject<{
21
21
  }>;
22
22
  export default class MigrationProxy extends TwakePlugin {
23
23
  static optionDefinitions: {
24
- migration_proxy_url: import("../../config/options").StringOption;
25
- migration_proxy_token: import("../../config/options").StringOption;
26
- migration_proxy_branch: import("../../config/options").ArrayOption;
27
- migration_proxy_concurrency: import("../../config/options").NumberOption;
28
- migration_proxy_retry_attempts: import("../../config/options").NumberOption;
29
- migration_proxy_retry_delay: import("../../config/options").NumberOption;
24
+ migration_proxy_url: import("../../config/options.js").StringOption;
25
+ migration_proxy_token: import("../../config/options.js").StringOption;
26
+ migration_proxy_branch: import("../../config/options.js").ArrayOption;
27
+ migration_proxy_concurrency: import("../../config/options.js").NumberOption;
28
+ migration_proxy_retry_attempts: import("../../config/options.js").NumberOption;
29
+ migration_proxy_retry_delay: import("../../config/options.js").NumberOption;
30
30
  };
31
31
  name: string;
32
32
  roles: Role[];
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * Twake Mail migration proxy options, see `docs/plugin-development/options.md`.
3
3
  */
4
- import type { Config } from '../../config/args';
5
- import { type OptionsOf } from '../../config/options';
4
+ import type { Config } from '../../config/args.js';
5
+ import { type OptionsOf } from '../../config/options.js';
6
6
  export declare const migrationProxyOptions: {
7
- migration_proxy_url: import("../../config/options").StringOption;
8
- migration_proxy_token: import("../../config/options").StringOption;
9
- migration_proxy_branch: import("../../config/options").ArrayOption;
10
- migration_proxy_concurrency: import("../../config/options").NumberOption;
11
- migration_proxy_retry_attempts: import("../../config/options").NumberOption;
12
- migration_proxy_retry_delay: import("../../config/options").NumberOption;
7
+ migration_proxy_url: import("../../config/options.js").StringOption;
8
+ migration_proxy_token: import("../../config/options.js").StringOption;
9
+ migration_proxy_branch: import("../../config/options.js").ArrayOption;
10
+ migration_proxy_concurrency: import("../../config/options.js").NumberOption;
11
+ migration_proxy_retry_attempts: import("../../config/options.js").NumberOption;
12
+ migration_proxy_retry_delay: import("../../config/options.js").NumberOption;
13
13
  };
14
14
  export type MigrationProxyOptions = OptionsOf<typeof migrationProxyOptions>;
15
15
  /** The checked values for a caller that holds a Config instead of the plugin */
@@ -1,7 +1,7 @@
1
1
  import type { Express } from 'express';
2
- import DmPlugin, { type Role } from '../../abstract/plugin';
3
- import type { DM } from '../../bin';
4
- import type { Hooks } from '../../hooks';
2
+ import DmPlugin, { type Role } from '../../abstract/plugin.js';
3
+ import type { DM } from '../../bin/index.js';
4
+ import type { Hooks } from '../../hooks.js';
5
5
  /** From the weakest to the strongest. */
6
6
  export declare const SPACE_ROLES: readonly ["viewer", "editor", "admin"];
7
7
  export type SpaceRole = (typeof SPACE_ROLES)[number];
@@ -37,15 +37,15 @@ export declare const SpaceGroupParams: import("@sinclair/typebox").TObject<{
37
37
  }>;
38
38
  export default class TwakeSpaces extends DmPlugin {
39
39
  static optionDefinitions: {
40
- twake_space_base: import("../../config/options").StringOption;
41
- twake_space_class: import("../../config/options").ArrayOption;
42
- twake_space_display_name_attribute: import("../../config/options").StringOption;
43
- twake_space_admin_attribute: import("../../config/options").StringOption;
44
- twake_space_editor_attribute: import("../../config/options").StringOption;
45
- twake_space_viewer_attribute: import("../../config/options").StringOption;
46
- twake_space_user_role_attribute: import("../../config/options").StringOption;
47
- twake_space_exchange: import("../../config/options").StringOption;
48
- twake_space_sync_queue: import("../../config/options").StringOption;
40
+ twake_space_base: import("../../config/options.js").StringOption;
41
+ twake_space_class: import("../../config/options.js").ArrayOption;
42
+ twake_space_display_name_attribute: import("../../config/options.js").StringOption;
43
+ twake_space_admin_attribute: import("../../config/options.js").StringOption;
44
+ twake_space_editor_attribute: import("../../config/options.js").StringOption;
45
+ twake_space_viewer_attribute: import("../../config/options.js").StringOption;
46
+ twake_space_user_role_attribute: import("../../config/options.js").StringOption;
47
+ twake_space_exchange: import("../../config/options.js").StringOption;
48
+ twake_space_sync_queue: import("../../config/options.js").StringOption;
49
49
  };
50
50
  name: string;
51
51
  roles: Role[];
@@ -1,7 +1,7 @@
1
1
  import type { Express, Request } from 'express';
2
- import DmPlugin, { type Role } from '../../abstract/plugin';
3
- import type { DM } from '../../bin';
4
- import type { Hooks } from '../../hooks';
2
+ import DmPlugin, { type Role } from '../../abstract/plugin.js';
3
+ import type { DM } from '../../bin/index.js';
4
+ import type { Hooks } from '../../hooks.js';
5
5
  export declare const EraseTombstoneBody: import("@sinclair/typebox").TObject<{
6
6
  dn: import("@sinclair/typebox").TString;
7
7
  force: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TBoolean>;
@@ -11,13 +11,13 @@ export declare const EraseTombstoneResponse: import("@sinclair/typebox").TObject
11
11
  }>;
12
12
  export default class TwakeTombstone extends DmPlugin {
13
13
  static optionDefinitions: {
14
- twake_tombstone_dn: import("../../config/options").ArrayOption;
15
- twake_tombstone_default_reason: import("../../config/options").StringOption;
16
- twake_tombstone_reason_header: import("../../config/options").StringOption;
17
- twake_tombstone_reasons: import("../../config/options").ArrayOption;
18
- twake_tombstone_clear_attributes: import("../../config/options").ArrayOption;
19
- twake_tombstone_erase_min_age: import("../../config/options").NumberOption;
20
- twake_tombstone_group_bases: import("../../config/options").ArrayOption;
14
+ twake_tombstone_dn: import("../../config/options.js").ArrayOption;
15
+ twake_tombstone_default_reason: import("../../config/options.js").StringOption;
16
+ twake_tombstone_reason_header: import("../../config/options.js").StringOption;
17
+ twake_tombstone_reasons: import("../../config/options.js").ArrayOption;
18
+ twake_tombstone_clear_attributes: import("../../config/options.js").ArrayOption;
19
+ twake_tombstone_erase_min_age: import("../../config/options.js").NumberOption;
20
+ twake_tombstone_group_bases: import("../../config/options.js").ArrayOption;
21
21
  };
22
22
  name: string;
23
23
  roles: Role[];
@@ -1,19 +1,19 @@
1
1
  /**
2
2
  * Twake groups options, see `docs/plugin-development/options.md`.
3
3
  */
4
- import type { Config } from '../../config/args';
5
- import { type OptionsOf } from '../../config/options';
4
+ import type { Config } from '../../config/args.js';
5
+ import { type OptionsOf } from '../../config/options.js';
6
6
  export declare const twakeGroupsOptions: {
7
- twake_group_base: import("../../config/options").StringOption;
8
- twake_group_user_base: import("../../config/options").StringOption;
9
- twake_group_organization_dn: import("../../config/options").StringOption;
10
- twake_group_organization_status_attribute: import("../../config/options").StringOption;
11
- twake_group_organization_deleted_value: import("../../config/options").StringOption;
12
- twake_group_display_name_attribute: import("../../config/options").StringOption;
13
- twake_group_color_attribute: import("../../config/options").StringOption;
14
- twake_group_created_at_attribute: import("../../config/options").StringOption;
15
- twake_group_max_page_limit: import("../../config/options").NumberOption;
16
- twake_group_member_fields: import("../../config/options").JsonOption<{}>;
7
+ twake_group_base: import("../../config/options.js").StringOption;
8
+ twake_group_user_base: import("../../config/options.js").StringOption;
9
+ twake_group_organization_dn: import("../../config/options.js").StringOption;
10
+ twake_group_organization_status_attribute: import("../../config/options.js").StringOption;
11
+ twake_group_organization_deleted_value: import("../../config/options.js").StringOption;
12
+ twake_group_display_name_attribute: import("../../config/options.js").StringOption;
13
+ twake_group_color_attribute: import("../../config/options.js").StringOption;
14
+ twake_group_created_at_attribute: import("../../config/options.js").StringOption;
15
+ twake_group_max_page_limit: import("../../config/options.js").NumberOption;
16
+ twake_group_member_fields: import("../../config/options.js").JsonOption<{}>;
17
17
  };
18
18
  export type TwakeGroupsOptions = OptionsOf<typeof twakeGroupsOptions>;
19
19
  /** The checked values for a caller that holds a Config instead of the plugin */
@@ -1,42 +1,42 @@
1
1
  /**
2
2
  * Twake instances options, see `docs/plugin-development/options.md`.
3
3
  */
4
- import type { Config } from '../../config/args';
5
- import { type OptionsOf } from '../../config/options';
4
+ import type { Config } from '../../config/args.js';
5
+ import { type OptionsOf } from '../../config/options.js';
6
6
  export declare const twakeInstancesOptions: {
7
- twake_instance_dn: import("../../config/options").ArrayOption;
8
- twake_instance_skip_attribute: import("../../config/options").StringOption;
9
- twake_instance_skip_value: import("../../config/options").StringOption;
10
- twake_instance_provider: import("../../config/options").StringOption;
11
- twake_instance_id: import("../../config/options").StringOption;
12
- twake_instance_fqdn_attribute: import("../../config/options").StringOption;
13
- twake_instance_sent_attribute: import("../../config/options").StringOption;
14
- twake_instance_locale: import("../../config/options").StringOption;
15
- twake_instance_timeout: import("../../config/options").NumberOption;
16
- twake_instance_cloudery_url: import("../../config/options").StringOption;
17
- twake_instance_cloudery_token: import("../../config/options").StringOption;
18
- twake_instance_cloudery_offer: import("../../config/options").StringOption;
19
- twake_instance_cloudery_domain: import("../../config/options").StringOption;
20
- twake_instance_cloudery_organization_offer: import("../../config/options").StringOption;
21
- twake_instance_cozy_url: import("../../config/options").StringOption;
22
- twake_instance_cozy_user: import("../../config/options").StringOption;
23
- twake_instance_cozy_passphrase: import("../../config/options").StringOption;
24
- twake_instance_cozy_domain: import("../../config/options").StringOption;
25
- twake_instance_cozy_context: import("../../config/options").StringOption;
26
- twake_instance_cozy_apps: import("../../config/options").StringOption;
27
- twake_instance_cozy_org_id: import("../../config/options").StringOption;
28
- twake_instance_cozy_org_domain: import("../../config/options").StringOption;
29
- twake_instance_auth_exchange: import("../../config/options").StringOption;
30
- twake_instance_b2b_exchange: import("../../config/options").StringOption;
31
- twake_instance_user_created_key: import("../../config/options").StringOption;
32
- twake_instance_organization_created_key: import("../../config/options").StringOption;
33
- twake_instance_workplace_created_key: import("../../config/options").StringOption;
34
- twake_instance_queue: import("../../config/options").StringOption;
35
- twake_instance_organization_base: import("../../config/options").StringOption;
36
- twake_instance_organization_id_attribute: import("../../config/options").StringOption;
37
- twake_instance_organization_domain_attribute: import("../../config/options").StringOption;
38
- twake_instance_organization_name_attribute: import("../../config/options").StringOption;
39
- twake_instance_organization_fqdn_attribute: import("../../config/options").StringOption;
7
+ twake_instance_dn: import("../../config/options.js").ArrayOption;
8
+ twake_instance_skip_attribute: import("../../config/options.js").StringOption;
9
+ twake_instance_skip_value: import("../../config/options.js").StringOption;
10
+ twake_instance_provider: import("../../config/options.js").StringOption;
11
+ twake_instance_id: import("../../config/options.js").StringOption;
12
+ twake_instance_fqdn_attribute: import("../../config/options.js").StringOption;
13
+ twake_instance_sent_attribute: import("../../config/options.js").StringOption;
14
+ twake_instance_locale: import("../../config/options.js").StringOption;
15
+ twake_instance_timeout: import("../../config/options.js").NumberOption;
16
+ twake_instance_cloudery_url: import("../../config/options.js").StringOption;
17
+ twake_instance_cloudery_token: import("../../config/options.js").StringOption;
18
+ twake_instance_cloudery_offer: import("../../config/options.js").StringOption;
19
+ twake_instance_cloudery_domain: import("../../config/options.js").StringOption;
20
+ twake_instance_cloudery_organization_offer: import("../../config/options.js").StringOption;
21
+ twake_instance_cozy_url: import("../../config/options.js").StringOption;
22
+ twake_instance_cozy_user: import("../../config/options.js").StringOption;
23
+ twake_instance_cozy_passphrase: import("../../config/options.js").StringOption;
24
+ twake_instance_cozy_domain: import("../../config/options.js").StringOption;
25
+ twake_instance_cozy_context: import("../../config/options.js").StringOption;
26
+ twake_instance_cozy_apps: import("../../config/options.js").StringOption;
27
+ twake_instance_cozy_org_id: import("../../config/options.js").StringOption;
28
+ twake_instance_cozy_org_domain: import("../../config/options.js").StringOption;
29
+ twake_instance_auth_exchange: import("../../config/options.js").StringOption;
30
+ twake_instance_b2b_exchange: import("../../config/options.js").StringOption;
31
+ twake_instance_user_created_key: import("../../config/options.js").StringOption;
32
+ twake_instance_organization_created_key: import("../../config/options.js").StringOption;
33
+ twake_instance_workplace_created_key: import("../../config/options.js").StringOption;
34
+ twake_instance_queue: import("../../config/options.js").StringOption;
35
+ twake_instance_organization_base: import("../../config/options.js").StringOption;
36
+ twake_instance_organization_id_attribute: import("../../config/options.js").StringOption;
37
+ twake_instance_organization_domain_attribute: import("../../config/options.js").StringOption;
38
+ twake_instance_organization_name_attribute: import("../../config/options.js").StringOption;
39
+ twake_instance_organization_fqdn_attribute: import("../../config/options.js").StringOption;
40
40
  };
41
41
  export type TwakeInstancesOptions = OptionsOf<typeof twakeInstancesOptions>;
42
42
  /** The checked values for a caller that holds a Config instead of the plugin */
@@ -2,19 +2,19 @@
2
2
  * Account lifecycle options, shared by the Twake lifecycle plugins. See
3
3
  * `docs/plugin-development/options.md`.
4
4
  */
5
- import type { Config } from '../../config/args';
6
- import { type OptionsOf } from '../../config/options';
5
+ import type { Config } from '../../config/args.js';
6
+ import { type OptionsOf } from '../../config/options.js';
7
7
  export declare const twakeLifecycleOptions: {
8
- twake_lifecycle_role_attribute: import("../../config/options").StringOption;
9
- twake_lifecycle_lock_attribute: import("../../config/options").StringOption;
10
- twake_lifecycle_lock_value: import("../../config/options").StringOption;
11
- twake_lifecycle_deleted_attribute: import("../../config/options").StringOption;
12
- twake_lifecycle_deleted_value: import("../../config/options").StringOption;
13
- twake_lifecycle_deleted_at_attribute: import("../../config/options").StringOption;
14
- twake_lifecycle_deleted_at_format: import("../../config/options").StringOption;
15
- twake_lifecycle_reason_attribute: import("../../config/options").StringOption;
16
- twake_lifecycle_rules: import("../../config/options").StringOption;
17
- twake_lifecycle_member_attribute: import("../../config/options").StringOption;
8
+ twake_lifecycle_role_attribute: import("../../config/options.js").StringOption;
9
+ twake_lifecycle_lock_attribute: import("../../config/options.js").StringOption;
10
+ twake_lifecycle_lock_value: import("../../config/options.js").StringOption;
11
+ twake_lifecycle_deleted_attribute: import("../../config/options.js").StringOption;
12
+ twake_lifecycle_deleted_value: import("../../config/options.js").StringOption;
13
+ twake_lifecycle_deleted_at_attribute: import("../../config/options.js").StringOption;
14
+ twake_lifecycle_deleted_at_format: import("../../config/options.js").StringOption;
15
+ twake_lifecycle_reason_attribute: import("../../config/options.js").StringOption;
16
+ twake_lifecycle_rules: import("../../config/options.js").StringOption;
17
+ twake_lifecycle_member_attribute: import("../../config/options.js").StringOption;
18
18
  };
19
19
  export type TwakeLifecycleOptions = OptionsOf<typeof twakeLifecycleOptions>;
20
20
  /** The checked values for a caller that holds a Config instead of the plugin */
@@ -1,18 +1,18 @@
1
1
  /**
2
2
  * Twake spaces options, see `docs/plugin-development/options.md`.
3
3
  */
4
- import type { Config } from '../../config/args';
5
- import { type OptionsOf } from '../../config/options';
4
+ import type { Config } from '../../config/args.js';
5
+ import { type OptionsOf } from '../../config/options.js';
6
6
  export declare const twakeSpacesOptions: {
7
- twake_space_base: import("../../config/options").StringOption;
8
- twake_space_class: import("../../config/options").ArrayOption;
9
- twake_space_display_name_attribute: import("../../config/options").StringOption;
10
- twake_space_admin_attribute: import("../../config/options").StringOption;
11
- twake_space_editor_attribute: import("../../config/options").StringOption;
12
- twake_space_viewer_attribute: import("../../config/options").StringOption;
13
- twake_space_user_role_attribute: import("../../config/options").StringOption;
14
- twake_space_exchange: import("../../config/options").StringOption;
15
- twake_space_sync_queue: import("../../config/options").StringOption;
7
+ twake_space_base: import("../../config/options.js").StringOption;
8
+ twake_space_class: import("../../config/options.js").ArrayOption;
9
+ twake_space_display_name_attribute: import("../../config/options.js").StringOption;
10
+ twake_space_admin_attribute: import("../../config/options.js").StringOption;
11
+ twake_space_editor_attribute: import("../../config/options.js").StringOption;
12
+ twake_space_viewer_attribute: import("../../config/options.js").StringOption;
13
+ twake_space_user_role_attribute: import("../../config/options.js").StringOption;
14
+ twake_space_exchange: import("../../config/options.js").StringOption;
15
+ twake_space_sync_queue: import("../../config/options.js").StringOption;
16
16
  };
17
17
  export type TwakeSpacesOptions = OptionsOf<typeof twakeSpacesOptions>;
18
18
  /** The checked values for a caller that holds a Config instead of the plugin */
@@ -1,16 +1,16 @@
1
1
  /**
2
2
  * Twake tombstone options, see `docs/plugin-development/options.md`.
3
3
  */
4
- import type { Config } from '../../config/args';
5
- import { type OptionsOf } from '../../config/options';
4
+ import type { Config } from '../../config/args.js';
5
+ import { type OptionsOf } from '../../config/options.js';
6
6
  export declare const twakeTombstoneOptions: {
7
- twake_tombstone_dn: import("../../config/options").ArrayOption;
8
- twake_tombstone_default_reason: import("../../config/options").StringOption;
9
- twake_tombstone_reason_header: import("../../config/options").StringOption;
10
- twake_tombstone_reasons: import("../../config/options").ArrayOption;
11
- twake_tombstone_clear_attributes: import("../../config/options").ArrayOption;
12
- twake_tombstone_erase_min_age: import("../../config/options").NumberOption;
13
- twake_tombstone_group_bases: import("../../config/options").ArrayOption;
7
+ twake_tombstone_dn: import("../../config/options.js").ArrayOption;
8
+ twake_tombstone_default_reason: import("../../config/options.js").StringOption;
9
+ twake_tombstone_reason_header: import("../../config/options.js").StringOption;
10
+ twake_tombstone_reasons: import("../../config/options.js").ArrayOption;
11
+ twake_tombstone_clear_attributes: import("../../config/options.js").ArrayOption;
12
+ twake_tombstone_erase_min_age: import("../../config/options.js").NumberOption;
13
+ twake_tombstone_group_bases: import("../../config/options.js").ArrayOption;
14
14
  };
15
15
  export type TwakeTombstoneOptions = OptionsOf<typeof twakeTombstoneOptions>;
16
16
  /** The checked values for a caller that holds a Config instead of the plugin */
@@ -1,5 +1,5 @@
1
1
  import type { Express, Request, Response } from 'express';
2
- import DmPlugin, { type Role } from '../abstract/plugin';
2
+ import DmPlugin, { type Role } from '../abstract/plugin.js';
3
3
  declare global {
4
4
  namespace Express {
5
5
  interface Request {
@@ -772,7 +772,12 @@ Attribute values must have the shape of their declared type, see
772
772
 
773
773
  ### Fixed Attributes
774
774
 
775
- Attributes with `"fixed": true` cannot be modified after creation.
775
+ Attributes with `"fixed": true` cannot be modified after creation. A creation
776
+ that sends one **with a default** under an option (`l;lang-fr`, or an alias
777
+ such as `localityName;lang-fr`) is refused with `400`: the default is written
778
+ under the attribute's own name, and the option would add a second value beside
779
+ it. A fixed attribute without a default is set at creation and keeps its
780
+ options.
776
781
 
777
782
  ```json
778
783
  {
@@ -45,6 +45,28 @@ The snapshot records what the parser reads. A narrowed `choices` list, a
45
45
  raised `min` or a lowered `max` is checked when a plugin reads its options,
46
46
  not by the snapshot, and is reviewed by hand, as is a custom error `code`.
47
47
 
48
+ ## Resolution guard
49
+
50
+ The published package is `"type": "module"`, so a plugin compiled with
51
+ `moduleResolution: nodenext` resolves the declarations as Node resolves
52
+ JavaScript: every relative specifier needs its `.js` extension. The build
53
+ keeps them in the sources, and the declarations inherit them. TypeScript says
54
+ nothing about a specifier it cannot resolve in `node_modules`: it reports the
55
+ imported type as `any`, so a plugin loses type checking on the plugin API
56
+ without a warning.
57
+
58
+ `npm run lint` refuses an extensionless relative specifier under `src/` (the
59
+ `import-x/extensions` rule), so the mistake shows up locally. `npm run
60
+ check:declarations` then reads the built declarations for one, and type-checks
61
+ a small `nodenext` consumer against the package entries installed with only the
62
+ runtime dependencies: a type the declarations take from a devDependency is
63
+ missing there too. The consumer checks the library declarations themselves, so
64
+ a bare import they make must resolve even when the consumer names no type from
65
+ it. The build drops the browser sources' side-effect CSS imports from the
66
+ emitted declarations: they say nothing about the JavaScript API, and the
67
+ consumer has no CSS module for them. The check needs a build: run `npm run
68
+ build` first. The `test` workflow runs it after the build.
69
+
48
70
  ## The pull request gate
49
71
 
50
72
  The `contracts` job of `.github/workflows/contracts.yml` generates the
@@ -432,7 +432,7 @@ docker run -p 8081:8081 ldap-rest
432
432
  ## Create a Custom Plugin
433
433
 
434
434
  ```typescript
435
- import DmPlugin from 'ldap-rest/plugin-abstract';
435
+ import DmPlugin from 'ldap-rest/plugin';
436
436
  import { Hooks } from 'ldap-rest/hooks';
437
437
 
438
438
  export default class CustomPlugin extends DmPlugin {
@@ -432,7 +432,7 @@ docker run -p 8081:8081 ldap-rest
432
432
  ## Créer un plugin personnalisé
433
433
 
434
434
  ```typescript
435
- import DmPlugin from 'ldap-rest/plugin-abstract';
435
+ import DmPlugin from 'ldap-rest/plugin';
436
436
  import { Hooks } from 'ldap-rest/hooks';
437
437
 
438
438
  export default class CustomPlugin extends DmPlugin {
@@ -122,7 +122,9 @@ description: {
122
122
  target DNs are compared RDN by RDN, so case, spacing, escapes, `;`
123
123
  separators and attribute-type spellings (`ou`, `2.5.4.11`, `OID.2.5.4.11`)
124
124
  do not matter; an escaped comma is part of a value, never a separator.
125
- - Absent flags default to `false`.
125
+ - Only the JSON boolean `true` grants a permission. An absent flag, or one
126
+ written as anything else (a string such as `"false"` or `"true"`, a
127
+ number), is `false`; a non-boolean flag is logged as a warning.
126
128
  - `tenant` is optional; if omitted, `req.user` falls back to the value of the
127
129
  configured `tenantAttribute` (default `cn`).
128
130
 
@@ -39,7 +39,17 @@ DM_TRUSTED_PROXY_AUTH_HEADER="Auth-User"
39
39
  - **IPv4 addresses:** `192.168.1.1`
40
40
  - **IPv6 addresses:** `::1`, `fe80::1`
41
41
  - **CIDR ranges:** `10.0.0.0/8`, `192.168.0.0/16`, `2001:db8::/32`
42
- - **IPv4-mapped IPv6:** Automatically handled (e.g., `::ffff:127.0.0.1` matches `127.0.0.1`)
42
+ - **IPv4-mapped IPv6:** accepted in any spelling, e.g. `::ffff:127.0.0.1` or
43
+ `::ffff:7f00:1` matches `127.0.0.1`. A network written in mapped form is
44
+ checked as the IPv4 network it is: `::ffff:10.0.0.0/104` is `10.0.0.0/8`.
45
+ - **Zone index:** a peer address carrying an interface, such as
46
+ `fe80::1%eth0`, is matched on the address alone. A trusted entry carrying
47
+ one is refused: the same link-local address names another host on another
48
+ link.
49
+
50
+ An entry that is neither an address nor an `address/prefix` network (`:::`,
51
+ `10.0.0.0/2.`, `10.0.0.0/24x`) makes the server refuse to start: it would
52
+ otherwise trust a network the administrator never wrote.
43
53
 
44
54
  ## Auth-User Header
45
55