ldap-rest 1.2.1 → 2.0.0

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 (358) hide show
  1. package/bin/sync-james.mjs +13 -2
  2. package/dist/abstract/ldapFlat.js +1 -1
  3. package/dist/abstract/plugin.js +1 -1
  4. package/dist/abstract/twakePlugin.js +1 -1
  5. package/dist/bin/index.js +1 -1
  6. package/dist/config/args.js +1 -1
  7. package/dist/config/options.js +1 -0
  8. package/dist/config/schema.js +1 -1
  9. package/dist/lib/auth/base.js +1 -1
  10. package/dist/lib/authz/base.js +1 -1
  11. package/dist/lib/entitySchema/validator.js +1 -1
  12. package/dist/lib/errors.js +1 -1
  13. package/dist/lib/expressFormatedResponses.js +1 -1
  14. package/dist/lib/health.js +1 -1
  15. package/dist/lib/hookBus.js +1 -0
  16. package/dist/lib/instanceProviders.js +1 -1
  17. package/dist/lib/ldap/callerView.js +1 -0
  18. package/dist/lib/ldap/pool.js +1 -0
  19. package/dist/lib/ldap/schema.js +1 -0
  20. package/dist/lib/ldap/searchCache.js +1 -0
  21. package/dist/lib/ldapActions.js +1 -1
  22. package/dist/lib/ldapSchema.js +1 -1
  23. package/dist/lib/parseConfig.js +1 -1
  24. package/dist/lib/route.js +1 -0
  25. package/dist/lib/schemaFile.js +1 -1
  26. package/dist/lib/services/index.js +1 -0
  27. package/dist/lib/storage/store.js +1 -1
  28. package/dist/lib/utils.js +1 -1
  29. package/dist/lib/version.js +1 -0
  30. package/dist/logger/winston.js +1 -1
  31. package/dist/plugins/auth/auth.options.js +1 -0
  32. package/dist/plugins/auth/authzDynamic.js +1 -1
  33. package/dist/plugins/auth/authzLinid1.js +1 -1
  34. package/dist/plugins/auth/authzPerBranch.js +1 -1
  35. package/dist/plugins/auth/authzPerRoute.js +1 -1
  36. package/dist/plugins/auth/authzScope.js +1 -1
  37. package/dist/plugins/auth/crowdsec.js +1 -1
  38. package/dist/plugins/auth/fake.js +1 -1
  39. package/dist/plugins/auth/hmac.js +1 -1
  40. package/dist/plugins/auth/llng.js +1 -1
  41. package/dist/plugins/auth/openidconnect.js +1 -1
  42. package/dist/plugins/auth/rateLimit.js +1 -1
  43. package/dist/plugins/auth/token.js +1 -1
  44. package/dist/plugins/auth/totp.js +1 -1
  45. package/dist/plugins/auth/trustedProxy.js +1 -1
  46. package/dist/plugins/bcl.js +1 -1
  47. package/dist/plugins/bcl.options.js +1 -0
  48. package/dist/plugins/configApi.js +1 -1
  49. package/dist/plugins/demo/helloworld.js +1 -1
  50. package/dist/plugins/ldap/accountLifecycle.js +1 -1
  51. package/dist/plugins/ldap/bulkImport.js +1 -1
  52. package/dist/plugins/ldap/departmentSync.js +1 -1
  53. package/dist/plugins/ldap/enterpriseRules.js +1 -1
  54. package/dist/plugins/ldap/externalUsersInGroups.js +1 -1
  55. package/dist/plugins/ldap/flatGeneric.js +1 -1
  56. package/dist/plugins/ldap/groups.js +1 -1
  57. package/dist/plugins/ldap/ldap.options.js +1 -0
  58. package/dist/plugins/ldap/onChange.js +1 -1
  59. package/dist/plugins/ldap/organizations.js +1 -1
  60. package/dist/plugins/ldap/passwordPolicy.js +1 -1
  61. package/dist/plugins/ldap/raw.js +1 -1
  62. package/dist/plugins/ldap/trash.js +1 -1
  63. package/dist/plugins/metrics.js +1 -1
  64. package/dist/plugins/metrics.options.js +1 -0
  65. package/dist/plugins/rabbitmq.js +1 -1
  66. package/dist/plugins/rabbitmq.options.js +1 -0
  67. package/dist/plugins/scim/baseResolver.js +1 -1
  68. package/dist/plugins/scim/bulk.js +1 -1
  69. package/dist/plugins/scim/discovery.js +1 -1
  70. package/dist/plugins/scim/errors.js +1 -1
  71. package/dist/plugins/scim/filter.js +1 -1
  72. package/dist/plugins/scim/groups.js +1 -1
  73. package/dist/plugins/scim/mapping.js +1 -1
  74. package/dist/plugins/scim/patch.js +1 -1
  75. package/dist/plugins/scim/scim.js +1 -1
  76. package/dist/plugins/scim/scim.options.js +1 -0
  77. package/dist/plugins/scim/users.js +1 -1
  78. package/dist/plugins/static.js +1 -1
  79. package/dist/plugins/static.options.js +1 -0
  80. package/dist/plugins/storage/file.js +1 -1
  81. package/dist/plugins/storage/ldap.js +1 -1
  82. package/dist/plugins/storage/postgres.js +1 -1
  83. package/dist/plugins/storage/valkey.js +1 -1
  84. package/dist/plugins/storage.js +1 -1
  85. package/dist/plugins/storage.options.js +1 -0
  86. package/dist/plugins/twake/appAccounts.options.js +1 -0
  87. package/dist/plugins/twake/appAccountsApi.js +1 -1
  88. package/dist/plugins/twake/appAccountsConsistency.js +1 -1
  89. package/dist/plugins/twake/calendar.js +1 -1
  90. package/dist/plugins/twake/calendar.options.js +1 -0
  91. package/dist/plugins/twake/calendarResources.js +1 -1
  92. package/dist/plugins/twake/cloudery.options.js +1 -0
  93. package/dist/plugins/twake/clouderyProvision.js +1 -1
  94. package/dist/plugins/twake/cozy.options.js +1 -0
  95. package/dist/plugins/twake/cozyProvision.js +1 -1
  96. package/dist/plugins/twake/drive.js +1 -1
  97. package/dist/plugins/twake/drive.options.js +1 -0
  98. package/dist/plugins/twake/groups.js +1 -1
  99. package/dist/plugins/twake/instances.js +1 -1
  100. package/dist/plugins/twake/james.js +1 -1
  101. package/dist/plugins/twake/james.options.js +1 -0
  102. package/dist/plugins/twake/lifecycleAttributes.js +1 -1
  103. package/dist/plugins/twake/lifecycleEvents.js +1 -1
  104. package/dist/plugins/twake/migrationProxy.js +1 -1
  105. package/dist/plugins/twake/migrationProxy.options.js +1 -0
  106. package/dist/plugins/twake/spaces.js +1 -1
  107. package/dist/plugins/twake/tombstone.js +1 -1
  108. package/dist/plugins/twake/twakeGroups.options.js +1 -0
  109. package/dist/plugins/twake/twakeInstances.options.js +1 -0
  110. package/dist/plugins/twake/twakeLifecycle.options.js +1 -0
  111. package/dist/plugins/twake/twakeSpaces.options.js +1 -0
  112. package/dist/plugins/twake/twakeTombstone.options.js +1 -0
  113. package/dist/plugins/weblogs.js +1 -1
  114. package/dist/src/abstract/ldapFlat.d.ts +41 -10
  115. package/dist/src/abstract/plugin.d.ts +31 -5
  116. package/dist/src/abstract/twakePlugin.d.ts +14 -4
  117. package/dist/src/bin/index.d.ts +35 -4
  118. package/dist/src/config/args.d.ts +2 -4
  119. package/dist/src/config/options.d.ts +104 -0
  120. package/dist/src/config/schema.d.ts +50 -1
  121. package/dist/src/hooks.d.ts +60 -22
  122. package/dist/src/lib/authz/base.d.ts +4 -51
  123. package/dist/src/lib/authz/composition.d.ts +2 -2
  124. package/dist/src/lib/entitySchema/validator.d.ts +63 -6
  125. package/dist/src/lib/errors.d.ts +57 -1
  126. package/dist/src/lib/expressFormatedResponses.d.ts +49 -7
  127. package/dist/src/lib/hookBus.d.ts +226 -0
  128. package/dist/src/lib/instanceProviders.d.ts +0 -8
  129. package/dist/src/lib/ldap/callerView.d.ts +45 -0
  130. package/dist/src/lib/ldap/pool.d.ts +108 -0
  131. package/dist/src/lib/ldap/schema.d.ts +157 -0
  132. package/dist/src/lib/ldap/searchCache.d.ts +112 -0
  133. package/dist/src/lib/ldapActions.d.ts +26 -256
  134. package/dist/src/lib/parseConfig.d.ts +31 -2
  135. package/dist/src/lib/route.d.ts +99 -0
  136. package/dist/src/lib/services/index.d.ts +56 -0
  137. package/dist/src/lib/utils.d.ts +100 -36
  138. package/dist/src/lib/version.d.ts +12 -0
  139. package/dist/src/plugins/auth/auth.options.d.ts +88 -0
  140. package/dist/src/plugins/auth/authzDynamic.d.ts +10 -1
  141. package/dist/src/plugins/auth/authzLinid1.d.ts +6 -0
  142. package/dist/src/plugins/auth/authzPerBranch.d.ts +9 -0
  143. package/dist/src/plugins/auth/authzPerRoute.d.ts +3 -0
  144. package/dist/src/plugins/auth/authzScope.d.ts +23 -14
  145. package/dist/src/plugins/auth/crowdsec.d.ts +5 -0
  146. package/dist/src/plugins/auth/fake.d.ts +3 -0
  147. package/dist/src/plugins/auth/hmac.d.ts +4 -0
  148. package/dist/src/plugins/auth/llng.d.ts +4 -0
  149. package/dist/src/plugins/auth/openidconnect.d.ts +7 -0
  150. package/dist/src/plugins/auth/rateLimit.d.ts +4 -0
  151. package/dist/src/plugins/auth/token.d.ts +3 -0
  152. package/dist/src/plugins/auth/totp.d.ts +5 -0
  153. package/dist/src/plugins/auth/trustedProxy.d.ts +4 -0
  154. package/dist/src/plugins/bcl.d.ts +3 -0
  155. package/dist/src/plugins/bcl.options.d.ts +8 -0
  156. package/dist/src/plugins/configApi.d.ts +24 -5
  157. package/dist/src/plugins/demo/helloworld.d.ts +8 -19
  158. package/dist/src/plugins/ldap/accountLifecycle.d.ts +17 -0
  159. package/dist/src/plugins/ldap/bulkImport.d.ts +6 -76
  160. package/dist/src/plugins/ldap/departmentSync.d.ts +1 -0
  161. package/dist/src/plugins/ldap/enterpriseRules.d.ts +8 -15
  162. package/dist/src/plugins/ldap/externalUsersInGroups.d.ts +4 -0
  163. package/dist/src/plugins/ldap/flatGeneric.d.ts +4 -0
  164. package/dist/src/plugins/ldap/groups.d.ts +27 -11
  165. package/dist/src/plugins/ldap/ldap.options.d.ts +75 -0
  166. package/dist/src/plugins/ldap/onChange.d.ts +10 -2
  167. package/dist/src/plugins/ldap/organizations.d.ts +16 -0
  168. package/dist/src/plugins/ldap/passwordPolicy.d.ts +35 -3
  169. package/dist/src/plugins/ldap/raw.d.ts +50 -19
  170. package/dist/src/plugins/ldap/trash.d.ts +6 -0
  171. package/dist/src/plugins/metrics.d.ts +3 -0
  172. package/dist/src/plugins/metrics.options.d.ts +8 -0
  173. package/dist/src/plugins/rabbitmq.d.ts +3 -0
  174. package/dist/src/plugins/rabbitmq.options.d.ts +8 -0
  175. package/dist/src/plugins/scim/baseResolver.d.ts +2 -1
  176. package/dist/src/plugins/scim/bulk.d.ts +6 -7
  177. package/dist/src/plugins/scim/discovery.d.ts +3 -0
  178. package/dist/src/plugins/scim/errors.d.ts +2 -1
  179. package/dist/src/plugins/scim/groups.d.ts +6 -4
  180. package/dist/src/plugins/scim/mapping.d.ts +16 -3
  181. package/dist/src/plugins/scim/scim.d.ts +37 -3
  182. package/dist/src/plugins/scim/scim.options.d.ts +35 -0
  183. package/dist/src/plugins/scim/types.d.ts +2 -0
  184. package/dist/src/plugins/scim/users.d.ts +6 -7
  185. package/dist/src/plugins/static.d.ts +9 -0
  186. package/dist/src/plugins/static.options.d.ts +13 -0
  187. package/dist/src/plugins/storage.d.ts +12 -1
  188. package/dist/src/plugins/storage.options.d.ts +16 -0
  189. package/dist/src/plugins/twake/appAccounts.options.d.ts +13 -0
  190. package/dist/src/plugins/twake/appAccountsApi.d.ts +18 -0
  191. package/dist/src/plugins/twake/appAccountsConsistency.d.ts +8 -0
  192. package/dist/src/plugins/twake/calendar.d.ts +25 -2
  193. package/dist/src/plugins/twake/calendar.options.d.ts +19 -0
  194. package/dist/src/plugins/twake/cloudery.options.d.ts +26 -0
  195. package/dist/src/plugins/twake/clouderyProvision.d.ts +18 -0
  196. package/dist/src/plugins/twake/cozy.options.d.ts +23 -0
  197. package/dist/src/plugins/twake/cozyProvision.d.ts +14 -0
  198. package/dist/src/plugins/twake/drive.d.ts +7 -0
  199. package/dist/src/plugins/twake/drive.options.d.ts +15 -0
  200. package/dist/src/plugins/twake/groups.d.ts +29 -1
  201. package/dist/src/plugins/twake/instances.d.ts +74 -10
  202. package/dist/src/plugins/twake/james.d.ts +17 -0
  203. package/dist/src/plugins/twake/james.options.d.ts +21 -0
  204. package/dist/src/plugins/twake/lifecycleAttributes.d.ts +13 -2
  205. package/dist/src/plugins/twake/lifecycleEvents.d.ts +12 -0
  206. package/dist/src/plugins/twake/migrationProxy.d.ts +11 -11
  207. package/dist/src/plugins/twake/migrationProxy.options.d.ts +16 -0
  208. package/dist/src/plugins/twake/spaces.d.ts +30 -0
  209. package/dist/src/plugins/twake/tombstone.d.ts +25 -16
  210. package/dist/src/plugins/twake/twakeGroups.options.d.ts +20 -0
  211. package/dist/src/plugins/twake/twakeInstances.options.d.ts +43 -0
  212. package/dist/src/plugins/twake/twakeLifecycle.options.d.ts +21 -0
  213. package/dist/src/plugins/twake/twakeSpaces.options.d.ts +19 -0
  214. package/dist/src/plugins/twake/twakeTombstone.options.d.ts +17 -0
  215. package/docs/README.md +17 -2
  216. package/docs/client-development/api/rest-api.md +13 -3
  217. package/docs/client-development/schemas/README.md +96 -32
  218. package/docs/development/contracts.md +109 -0
  219. package/docs/plugin-development/README.md +53 -95
  220. package/docs/plugin-development/dependencies.md +24 -8
  221. package/docs/plugin-development/hooks.md +143 -23
  222. package/docs/plugin-development/openapi.md +14 -1
  223. package/docs/plugin-development/options.md +136 -0
  224. package/docs/plugin-development/routes.md +152 -0
  225. package/docs/plugin-development/services.md +95 -0
  226. package/docs/plugin-development/testing.md +3 -3
  227. package/docs/usage/configuration.md +18 -11
  228. package/docs/usage/operations.md +28 -4
  229. package/docs/usage/plugins/integrations/instances.md +11 -3
  230. package/docs/usage/plugins/integrations/lifecycle-events.md +4 -1
  231. package/docs/usage/plugins/integrations/scim.md +20 -18
  232. package/docs/usage/plugins/integrations/tombstone.md +10 -6
  233. package/docs/usage/plugins/ldap/enterprise-rules.md +10 -1
  234. package/docs/usage/plugins/ldap/flat-generic.md +11 -0
  235. package/docs/usage/plugins/ldap/groups.md +4 -1
  236. package/docs/usage/plugins/ldap/password-policy.md +7 -0
  237. package/docs/usage/plugins/ldap/raw.md +17 -1
  238. package/docs/usage/upgrading.md +253 -0
  239. package/package.json +372 -286
  240. package/static/browser/ldap-browser/LdapBrowser.js +8 -6
  241. package/static/browser/ldap-browser/LdapBrowser.js.map +1 -1
  242. package/static/browser/ldap-browser/api/RawApiClient.js +2 -0
  243. package/static/browser/ldap-browser/api/RawApiClient.js.map +1 -1
  244. package/static/browser/ldap-browser/components/EntryTree.js +9 -5
  245. package/static/browser/ldap-browser/components/EntryTree.js.map +1 -1
  246. package/static/browser/ldap-browser/components/EntryView.js +2 -0
  247. package/static/browser/ldap-browser/components/EntryView.js.map +1 -1
  248. package/static/browser/ldap-browser/schema.js +3 -2
  249. package/static/browser/ldap-browser/schema.js.map +1 -1
  250. package/static/browser/ldap-browser.esm.js +27 -18
  251. package/static/browser/ldap-browser.esm.js.map +1 -1
  252. package/static/browser/ldap-browser.js +27 -18
  253. package/static/browser/ldap-browser.js.map +1 -1
  254. package/static/browser/ldap-browser.min.js +1 -1
  255. package/static/browser/ldap-browser.min.js.map +1 -1
  256. package/static/browser/ldap-group-editor/LdapGroupEditor.js +8 -6
  257. package/static/browser/ldap-group-editor/LdapGroupEditor.js.map +1 -1
  258. package/static/browser/ldap-group-editor/api/GroupApiClient.js +1 -0
  259. package/static/browser/ldap-group-editor/api/GroupApiClient.js.map +1 -1
  260. package/static/browser/ldap-group-editor/components/CreateGroupModal.js +5 -1
  261. package/static/browser/ldap-group-editor/components/CreateGroupModal.js.map +1 -1
  262. package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js +6 -3
  263. package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js.map +1 -1
  264. package/static/browser/ldap-group-editor/components/GroupTree.js +6 -3
  265. package/static/browser/ldap-group-editor/components/GroupTree.js.map +1 -1
  266. package/static/browser/ldap-group-editor/components/MoveGroupModal.js +6 -3
  267. package/static/browser/ldap-group-editor/components/MoveGroupModal.js.map +1 -1
  268. package/static/browser/ldap-group-editor.esm.js +32 -16
  269. package/static/browser/ldap-group-editor.esm.js.map +1 -1
  270. package/static/browser/ldap-group-editor.js +32 -16
  271. package/static/browser/ldap-group-editor.js.map +1 -1
  272. package/static/browser/ldap-group-editor.min.js +1 -1
  273. package/static/browser/ldap-group-editor.min.js.map +1 -1
  274. package/static/browser/ldap-resource-editor/api/ResourceApiClient.js +3 -0
  275. package/static/browser/ldap-resource-editor/api/ResourceApiClient.js.map +1 -1
  276. package/static/browser/ldap-resource-editor/cache/CacheManager.js +3 -1
  277. package/static/browser/ldap-resource-editor/cache/CacheManager.js.map +1 -1
  278. package/static/browser/ldap-tree-viewer/LdapTreeViewer.js +6 -1
  279. package/static/browser/ldap-tree-viewer/LdapTreeViewer.js.map +1 -1
  280. package/static/browser/ldap-tree-viewer/api/LdapApiClient.js +2 -0
  281. package/static/browser/ldap-tree-viewer/api/LdapApiClient.js.map +1 -1
  282. package/static/browser/ldap-tree-viewer/components/TreeNode.js +4 -0
  283. package/static/browser/ldap-tree-viewer/components/TreeNode.js.map +1 -1
  284. package/static/browser/ldap-tree-viewer/components/TreeRoot.js +3 -0
  285. package/static/browser/ldap-tree-viewer/components/TreeRoot.js.map +1 -1
  286. package/static/browser/ldap-tree-viewer/store/Store.js +3 -1
  287. package/static/browser/ldap-tree-viewer/store/Store.js.map +1 -1
  288. package/static/browser/ldap-tree-viewer.esm.js +18 -2
  289. package/static/browser/ldap-tree-viewer.esm.js.map +1 -1
  290. package/static/browser/ldap-tree-viewer.js +18 -2
  291. package/static/browser/ldap-tree-viewer.js.map +1 -1
  292. package/static/browser/ldap-tree-viewer.min.js +1 -1
  293. package/static/browser/ldap-tree-viewer.min.js.map +1 -1
  294. package/static/browser/ldap-unit-editor/LdapUnitEditor.js +7 -5
  295. package/static/browser/ldap-unit-editor/LdapUnitEditor.js.map +1 -1
  296. package/static/browser/ldap-unit-editor/api/UnitApiClient.js +1 -0
  297. package/static/browser/ldap-unit-editor/api/UnitApiClient.js.map +1 -1
  298. package/static/browser/ldap-unit-editor/components/MoveUnitModal.js +7 -4
  299. package/static/browser/ldap-unit-editor/components/MoveUnitModal.js.map +1 -1
  300. package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js +7 -4
  301. package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js.map +1 -1
  302. package/static/browser/ldap-unit-editor/components/UnitTree.js +6 -3
  303. package/static/browser/ldap-unit-editor/components/UnitTree.js.map +1 -1
  304. package/static/browser/ldap-unit-editor.esm.js +28 -16
  305. package/static/browser/ldap-unit-editor.esm.js.map +1 -1
  306. package/static/browser/ldap-unit-editor.js +28 -16
  307. package/static/browser/ldap-unit-editor.js.map +1 -1
  308. package/static/browser/ldap-unit-editor.min.js +1 -1
  309. package/static/browser/ldap-unit-editor.min.js.map +1 -1
  310. package/static/browser/ldap-user-editor/LdapUserEditor.js +9 -7
  311. package/static/browser/ldap-user-editor/LdapUserEditor.js.map +1 -1
  312. package/static/browser/ldap-user-editor/api/UserApiClient.js +2 -0
  313. package/static/browser/ldap-user-editor/api/UserApiClient.js.map +1 -1
  314. package/static/browser/ldap-user-editor/cache/CacheManager.js +3 -1
  315. package/static/browser/ldap-user-editor/cache/CacheManager.js.map +1 -1
  316. package/static/browser/ldap-user-editor/components/MoveUserModal.js +7 -4
  317. package/static/browser/ldap-user-editor/components/MoveUserModal.js.map +1 -1
  318. package/static/browser/ldap-user-editor/components/PointerField.js +6 -1
  319. package/static/browser/ldap-user-editor/components/PointerField.js.map +1 -1
  320. package/static/browser/ldap-user-editor/components/UserEditor.js +10 -5
  321. package/static/browser/ldap-user-editor/components/UserEditor.js.map +1 -1
  322. package/static/browser/ldap-user-editor/components/UserList.js +8 -4
  323. package/static/browser/ldap-user-editor/components/UserList.js.map +1 -1
  324. package/static/browser/ldap-user-editor/components/UserTree.js +7 -3
  325. package/static/browser/ldap-user-editor/components/UserTree.js.map +1 -1
  326. package/static/browser/ldap-user-editor.esm.js +55 -30
  327. package/static/browser/ldap-user-editor.esm.js.map +1 -1
  328. package/static/browser/ldap-user-editor.js +55 -30
  329. package/static/browser/ldap-user-editor.js.map +1 -1
  330. package/static/browser/ldap-user-editor.min.js +1 -1
  331. package/static/browser/ldap-user-editor.min.js.map +1 -1
  332. package/static/browser/shared/components/DisposableComponent.js +3 -5
  333. package/static/browser/shared/components/DisposableComponent.js.map +1 -1
  334. package/static/browser/shared/components/Modal.js +2 -1
  335. package/static/browser/shared/components/Modal.js.map +1 -1
  336. package/static/browser/shared/components/StatusMessage.js +3 -2
  337. package/static/browser/shared/components/StatusMessage.js.map +1 -1
  338. package/static/browser/shared/utils/form.js.map +1 -1
  339. package/static/browser/shared/utils/hmac.js +1 -0
  340. package/static/browser/shared/utils/hmac.js.map +1 -1
  341. package/static/browser/shared/utils/totp.js +1 -0
  342. package/static/browser/shared/utils/totp.js.map +1 -1
  343. package/static/browser/shared.esm.js +9 -8
  344. package/static/browser/shared.esm.js.map +1 -1
  345. package/static/browser/shared.js +9 -8
  346. package/static/browser/shared.js.map +1 -1
  347. package/static/browser/shared.min.js +1 -1
  348. package/static/browser/shared.min.js.map +1 -1
  349. package/static/schemas/ad/groups.json +1 -1
  350. package/static/schemas/ad/users.json +3 -3
  351. package/static/schemas/example/organizations.json +2 -2
  352. package/static/schemas/example/users.json +2 -2
  353. package/static/schemas/obm/users.json +2 -2
  354. package/static/schemas/standard/groups.json +1 -1
  355. package/static/schemas/standard/users.json +2 -2
  356. package/static/schemas/twake/groups.json +4 -4
  357. package/static/schemas/twake/teamMailboxes.json +3 -3
  358. package/static/schemas/twake/users.json +7 -7
@@ -4,6 +4,259 @@ What to check before deploying, newest first. Only releases that need a
4
4
  decision or a configuration change appear here; see the
5
5
  [CHANGELOG](../../CHANGELOG.md) for everything else.
6
6
 
7
+ ## From 1.3.0
8
+
9
+ ### A plugin with its own `service` member
10
+
11
+ **Who is affected:** a plugin built outside this repository that declares a
12
+ field, getter or method named `service`.
13
+
14
+ `DmPlugin` now has `service(token)`, which returns the instance another plugin
15
+ provides under a service token. Rename the plugin's own `service` member. See
16
+ [plugin services](../plugin-development/services.md).
17
+
18
+ ### A plugin with its own `provides` member
19
+
20
+ **Who is affected:** a plugin built outside this repository that declares a
21
+ field named `provides`.
22
+
23
+ `DmPlugin` now has `provides`, the services a plugin offers to others. Rename
24
+ the plugin's own `provides` member, or it becomes the list of services the
25
+ plugin declares. See
26
+ [plugin services](../plugin-development/services.md#providing-a-service).
27
+
28
+ ### A path parameter is percent-decoded once
29
+
30
+ **Who is affected:** a client that encoded a path parameter twice to reach an
31
+ identifier holding `%`, sending `/users/100%2525` for the entry `100%`.
32
+
33
+ The parameter is decoded once now, as RFC 3986 spells it: an identifier
34
+ holding `%` goes out as `100%25`. A parameter still encoded twice names the
35
+ escaped text, so `/users/100%2525` addresses the entry `100%25`
36
+ ([details](../client-development/api/rest-api.md#url-encoding)).
37
+
38
+ ### A paged search opens its connection on the first page
39
+
40
+ **Who is affected:** a plugin calling `ldap.search()` with paging, leaving the
41
+ returned generator unread and expecting a connection to have been opened, or
42
+ expecting a connection or hook error from the call itself.
43
+
44
+ A paged search takes its pooled connection when the first page is read, not
45
+ when `search()` is called. A generator that is never walked holds no
46
+ connection, and the next request can use the slot. A connection or bind
47
+ failure, the 30 s wait for a pooled connection and an `ldapsearchresult` hook
48
+ that refuses are answered on the first page, not by the call; a read that
49
+ must fail when it is made uses `paged: false`.
50
+
51
+ ### A deletion date written in another shape
52
+
53
+ **Who is affected:** a deployment whose writer writes the lifecycle deletion
54
+ date as something other than an ISO 8601 date or a GeneralizedTime with its
55
+ zone — for example `date '+%F %T'` (`2025-01-01 12:00:00`), an RFC 2822 date,
56
+ or a US-style `01/02/2025`.
57
+
58
+ The deletion date is read only in those two shapes now, where the default
59
+ `iso8601` mode handed anything else to `new Date()`. An unreadable date makes
60
+ `erase` answer `409` without `force`, leaves `deletedAt` out of the events,
61
+ and a rule whose payload holds only `$changed.<date>` publishes nothing. Write
62
+ an ISO 8601 date, such as with `date -u '+%Y-%m-%dT%H:%M:%SZ'`, or a
63
+ GeneralizedTime with its zone, and see
64
+ [lifecycle events](plugins/integrations/lifecycle-events.md#configuration).
65
+
66
+ ## From 1.2.1
67
+
68
+ ### A plugin written against the old hooks API
69
+
70
+ **Who is affected:** a deployment loading a plugin built outside this
71
+ repository that calls `launchHooks` / `launchHooksChained`, or subscribes
72
+ to a `*done` hook with its arguments packed in one tuple.
73
+
74
+ Hooks are raised through `this.hookBus`, and every hook is declared in
75
+ `src/hooks.ts`: a plugin raising or subscribing to a hook the server does
76
+ not declare no longer compiles. A notified hook — `ldapadddone`,
77
+ `ldapaddafter`, `ldapmodifydone`, `ldaprenamedone`, `ldapgroupadddone`,
78
+ `ldapgroupmodifydone`, `ldapgrouprenamedone`, `ldapexternaluseradded` — now
79
+ gets its arguments one by one: `(dn, entry, context) => …`, not
80
+ `([dn, entry], context) => …`. The packed form still compiles — parameters
81
+ are bivariant — and then reads the DN's first character, so a plugin left
82
+ as it was stops reacting without saying so. `ldapgroupdeletemember` threads
83
+ `[cn, member]`, a single member DN, as it always handed one.
84
+
85
+ A test waiting for a hook to land waits on `await server.hookBus.settled()`
86
+ rather than sleeping. See [hooks](../plugin-development/hooks.md#the-bus).
87
+
88
+ ### A plugin with its own `options` or `optionDefinitions` member
89
+
90
+ **Who is affected:** a plugin built outside this repository that declares a
91
+ field, getter or method named `options`, or a static field named
92
+ `optionDefinitions`.
93
+
94
+ `DmPlugin` now has `options()`, which returns the values a plugin declared
95
+ through `optionDefinitions`. Rename the plugin's own `options` member; a
96
+ plugin that does not declare options keeps reading `this.config` as before.
97
+
98
+ ### A plugin extending `TwakePlugin`
99
+
100
+ **Who is affected:** a plugin built outside this repository whose class extends
101
+ `TwakePlugin`.
102
+
103
+ The base constructor takes the WebAdmin URL, token and concurrency instead of
104
+ the names of the options holding them:
105
+
106
+ ```ts
107
+ import { jamesOptionsOf } from 'ldap-rest/plugin-twake-james.options';
108
+
109
+ const options = jamesOptionsOf(server.config);
110
+ super(server, {
111
+ url: options.james_webadmin_url,
112
+ token: options.james_webadmin_token,
113
+ concurrency: options.james_concurrency,
114
+ urlOption: 'james_webadmin_url',
115
+ tokenOption: 'james_webadmin_token',
116
+ concurrencyOption: 'james_concurrency',
117
+ });
118
+ ```
119
+
120
+ The three `*Option` fields only name the option in the startup error and the
121
+ missing-token warning. `concurrency` must be a positive integer; the base
122
+ refuses anything else, naming `concurrencyOption`.
123
+
124
+ ### A plugin building SCIM's exported helpers
125
+
126
+ **Who is affected:** a plugin built outside this repository that constructs
127
+ `ScimUsers`, `ScimGroups`, `ScimBulk`, `ScimDiscovery` or `BaseResolver`, or
128
+ calls `scimBodyParser`.
129
+
130
+ These take the SCIM options instead of a plain `Config`:
131
+
132
+ ```ts
133
+ import { scimOptionsOf } from 'ldap-rest/plugin-scim-scim.options';
134
+
135
+ const options = scimOptionsOf(config);
136
+ ```
137
+
138
+ `BaseResolver` keeps its `(config, options)` form; the others take the checked
139
+ values beside what they already require.
140
+
141
+ ### An invalid SCIM or Twake value
142
+
143
+ **Who is affected:** a deployment setting a SCIM limit to zero or a negative
144
+ number, giving a per-instance override of the wrong JSON type, or setting the
145
+ James, Calendar, Drive or migration proxy concurrency to the wrong type.
146
+
147
+ These options now refuse a value below 1 when the plugin loads: a zero used
148
+ to be silently replaced by the default, and a negative value used as it was.
149
+ Remove the option to keep the default, or give it a positive number.
150
+
151
+ A per-instance override (`--plugin core/scim:name:{...}`) must also use the
152
+ option's JSON type: `{"scim_max_results": "50"}` and `{"scim_user_base":
153
+ null}` are refused, where the quoted number used to be coerced and the null
154
+ treated as unset. The applicative accounts options refuse the same:
155
+ `{"max_app_accounts": "5"}` used to be kept as the string, and
156
+ `{"applicative_account_attribute": "cn"}` was spread into `['c', 'n']`.
157
+
158
+ The James, Calendar, Drive and migration proxy concurrency used to replace a
159
+ value that was not a number with `10`, and now refuses it. A zero or a
160
+ negative value was already refused by `p-limit`, and the message now names
161
+ the option. The other Twake options also refuse a value of the wrong JSON
162
+ type in an override.
163
+
164
+ A zero `--twake-group-max-page-limit`, `--twake-instance-timeout`,
165
+ `--cloudery-workflow-poll-interval-ms` or
166
+ `--cloudery-workflow-max-attempts` used to be replaced by the default and is
167
+ now refused.
168
+
169
+ The authentication and authorization options are checked the same way. A zero
170
+ `--rate-limit-window-ms`, `--rate-limit-max`, `--crowdsec-cache-ttl`,
171
+ `--authz-per-branch-cache-ttl` or `--authz-dynamic-cache-ttl` used to be
172
+ replaced by the default and is now refused. A zero `--auth-totp-step` or
173
+ `--auth-hmac-window` was accepted and broke the plugin — every counter was
174
+ `Infinity`, every signature not made in the same millisecond was refused — and
175
+ is now refused at startup. A zero `--ldap-organization-max-subnodes`,
176
+ `--ldap-raw-max-results`, `--ppolicy-warn-days`, `--ppolicy-min-length` or
177
+ `--bcl-retention` used to be replaced by the default and is now refused.
178
+
179
+ `ConfigParser` keeps an empty string for a string option. A plugin reads the
180
+ declared default instead when that default is not empty, as its `|| default`
181
+ used to: `DM_COZY_ADMIN_USER=` gives `admin`, `DM_CLOUDERY_OFFER=` gives
182
+ `b2b_twake_default`. An option whose empty value means something says so in
183
+ its declaration (`--cozy-apps`, `--cozy-user-deleted-routing-key`,
184
+ `--twake-instance-cozy-apps`, `--twake-instance-cozy-context`,
185
+ `--twake-instance-cloudery-offer`) and keeps it; an option whose default is
186
+ empty keeps the empty string.
187
+
188
+ ### The group member check option
189
+
190
+ **Who is affected:** a deployment passing `--group-allow-unexistent-members`.
191
+
192
+ That spelling was stored under a key the groups plugin never read, so it never
193
+ disabled member validation. The option is now `--groups-allow-unexistent-members`
194
+ and `DM_ALLOW_UNEXISTENT_MEMBERS`, which the plugin reads; the old spelling is
195
+ gone.
196
+
197
+ ### A config key a plugin did not declare
198
+
199
+ **Who is affected:** a plugin built outside this repository reading an option
200
+ through `this.config.<name>` without declaring it.
201
+
202
+ `Config` no longer has an index signature, so such a read does not compile.
203
+ Declare the option with `defineOptions` and read it through `this.options()`
204
+ (see [plugin options](../plugin-development/options.md)); the declaration also
205
+ makes the option known to the startup report and its `env` variable read.
206
+
207
+ ### Node 22 or later is required
208
+
209
+ **Who is affected:** a deployment running on Node 20 (end of life
210
+ 2026-04-30). A deployment of the published image is not: it is built on Node 24.
211
+
212
+ `engines` declares `>=22`, and the CI runs the suite on 22, 24 and 26. Node
213
+ 20 is neither tested nor supported.
214
+
215
+ ### Values past 4096 characters, and an address with a trailing or empty label
216
+
217
+ **Who is affected:** a deployment whose schemas accept a value longer than
218
+ 4096 characters, or an address such as `a@b.c.` or `a@b..c` in an attribute
219
+ whose pattern came with the shipped schemas.
220
+
221
+ A schema `test` pattern is no longer run on a value longer than 4096
222
+ characters; the value is answered 400, naming the length, before the pattern
223
+ sees it, so that a pattern cannot be made to walk several kilobytes. This
224
+ holds for every attribute in every schema which carries a pattern, a
225
+ deployment's own included, and none of the shipped schemas declares a longer
226
+ limit. An attribute holding longer values declares its own `maxLength`, a
227
+ whole number of characters, or the server refuses to load the schema:
228
+
229
+ ```json
230
+ {
231
+ "sshPublicKey": {
232
+ "type": "array",
233
+ "items": { "type": "string", "maxLength": 16384, "test": "^[^\\r\\n]*$" }
234
+ }
235
+ }
236
+ ```
237
+
238
+ The address patterns shipped with the schemas no longer accept a trailing dot
239
+ or an empty label: `a@b.c.`, `a@b..c` and `a@.b.c` are refused. Entries already holding
240
+ such a value stay as they are; the value is refused the next time that
241
+ attribute is written. A deployment that copied one of these patterns keeps
242
+ its own copy, unbounded only if it declares no `maxLength`; the patterns to
243
+ use are in the
244
+ [schema reference](../../docs/client-development/schemas/README.md#test-optional).
245
+
246
+ ### A `null` under a name the schema does not declare
247
+
248
+ **Who is affected:** a client sending `null` to an entity whose schema does
249
+ not declare the attribute, or to an entity without a schema — the
250
+ `dhcpHosts` and `dnsRecords` schemas shipped with `"strict": false` among
251
+ them.
252
+
253
+ Such a write answered 500, with nothing written. It now succeeds: the key is
254
+ left out of a creation or an `add`, and clears the attribute in a `replace`.
255
+ No action is required. A strict schema still answers 400 for such a name, and
256
+ the value is written as if the key were left out, so a client relying on the
257
+ 500 to notice a misspelt attribute no longer hears about it — see
258
+ [what a value must look like](../client-development/schemas/README.md#what-a-value-must-look-like).
259
+
7
260
  ## From 1.2.0 to 1.2.1
8
261
 
9
262
  ### `{org}` once in a Twake branch pattern