ldap-rest 1.2.0 → 1.3.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 (342) 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/ldapActions.js +1 -1
  18. package/dist/lib/ldapSchema.js +1 -1
  19. package/dist/lib/parseConfig.js +1 -1
  20. package/dist/lib/route.js +1 -0
  21. package/dist/lib/schemaFile.js +1 -1
  22. package/dist/lib/storage/store.js +1 -1
  23. package/dist/lib/utils.js +1 -1
  24. package/dist/lib/version.js +1 -0
  25. package/dist/logger/winston.js +1 -1
  26. package/dist/plugins/auth/auth.options.js +1 -0
  27. package/dist/plugins/auth/authzDynamic.js +1 -1
  28. package/dist/plugins/auth/authzLinid1.js +1 -1
  29. package/dist/plugins/auth/authzPerBranch.js +1 -1
  30. package/dist/plugins/auth/authzPerRoute.js +1 -1
  31. package/dist/plugins/auth/authzScope.js +1 -1
  32. package/dist/plugins/auth/crowdsec.js +1 -1
  33. package/dist/plugins/auth/fake.js +1 -1
  34. package/dist/plugins/auth/hmac.js +1 -1
  35. package/dist/plugins/auth/llng.js +1 -1
  36. package/dist/plugins/auth/openidconnect.js +1 -1
  37. package/dist/plugins/auth/rateLimit.js +1 -1
  38. package/dist/plugins/auth/token.js +1 -1
  39. package/dist/plugins/auth/totp.js +1 -1
  40. package/dist/plugins/auth/trustedProxy.js +1 -1
  41. package/dist/plugins/bcl.js +1 -1
  42. package/dist/plugins/bcl.options.js +1 -0
  43. package/dist/plugins/configApi.js +1 -1
  44. package/dist/plugins/demo/helloworld.js +1 -1
  45. package/dist/plugins/ldap/accountLifecycle.js +1 -1
  46. package/dist/plugins/ldap/bulkImport.js +1 -1
  47. package/dist/plugins/ldap/departmentSync.js +1 -1
  48. package/dist/plugins/ldap/enterpriseRules.js +1 -1
  49. package/dist/plugins/ldap/externalUsersInGroups.js +1 -1
  50. package/dist/plugins/ldap/flatGeneric.js +1 -1
  51. package/dist/plugins/ldap/groups.js +1 -1
  52. package/dist/plugins/ldap/ldap.options.js +1 -0
  53. package/dist/plugins/ldap/onChange.js +1 -1
  54. package/dist/plugins/ldap/organizations.js +1 -1
  55. package/dist/plugins/ldap/passwordPolicy.js +1 -1
  56. package/dist/plugins/ldap/raw.js +1 -1
  57. package/dist/plugins/ldap/trash.js +1 -1
  58. package/dist/plugins/metrics.js +1 -1
  59. package/dist/plugins/metrics.options.js +1 -0
  60. package/dist/plugins/rabbitmq.js +1 -1
  61. package/dist/plugins/rabbitmq.options.js +1 -0
  62. package/dist/plugins/scim/baseResolver.js +1 -1
  63. package/dist/plugins/scim/bulk.js +1 -1
  64. package/dist/plugins/scim/discovery.js +1 -1
  65. package/dist/plugins/scim/errors.js +1 -1
  66. package/dist/plugins/scim/filter.js +1 -1
  67. package/dist/plugins/scim/groups.js +1 -1
  68. package/dist/plugins/scim/mapping.js +1 -1
  69. package/dist/plugins/scim/patch.js +1 -1
  70. package/dist/plugins/scim/projection.js +1 -1
  71. package/dist/plugins/scim/scim.js +1 -1
  72. package/dist/plugins/scim/scim.options.js +1 -0
  73. package/dist/plugins/scim/users.js +1 -1
  74. package/dist/plugins/static.js +1 -1
  75. package/dist/plugins/static.options.js +1 -0
  76. package/dist/plugins/storage/file.js +1 -1
  77. package/dist/plugins/storage/ldap.js +1 -1
  78. package/dist/plugins/storage/postgres.js +1 -1
  79. package/dist/plugins/storage/valkey.js +1 -1
  80. package/dist/plugins/storage.js +1 -1
  81. package/dist/plugins/storage.options.js +1 -0
  82. package/dist/plugins/twake/appAccounts.options.js +1 -0
  83. package/dist/plugins/twake/appAccountsApi.js +1 -1
  84. package/dist/plugins/twake/appAccountsConsistency.js +1 -1
  85. package/dist/plugins/twake/calendar.js +1 -1
  86. package/dist/plugins/twake/calendar.options.js +1 -0
  87. package/dist/plugins/twake/calendarResources.js +1 -1
  88. package/dist/plugins/twake/cloudery.options.js +1 -0
  89. package/dist/plugins/twake/clouderyProvision.js +1 -1
  90. package/dist/plugins/twake/cozy.options.js +1 -0
  91. package/dist/plugins/twake/cozyProvision.js +1 -1
  92. package/dist/plugins/twake/drive.js +1 -1
  93. package/dist/plugins/twake/drive.options.js +1 -0
  94. package/dist/plugins/twake/groups.js +1 -1
  95. package/dist/plugins/twake/instances.js +1 -1
  96. package/dist/plugins/twake/james.js +1 -1
  97. package/dist/plugins/twake/james.options.js +1 -0
  98. package/dist/plugins/twake/lifecycleAttributes.js +1 -1
  99. package/dist/plugins/twake/lifecycleEvents.js +1 -1
  100. package/dist/plugins/twake/migrationProxy.js +1 -1
  101. package/dist/plugins/twake/migrationProxy.options.js +1 -0
  102. package/dist/plugins/twake/spaces.js +1 -1
  103. package/dist/plugins/twake/tombstone.js +1 -1
  104. package/dist/plugins/twake/twakeGroups.options.js +1 -0
  105. package/dist/plugins/twake/twakeInstances.options.js +1 -0
  106. package/dist/plugins/twake/twakeLifecycle.options.js +1 -0
  107. package/dist/plugins/twake/twakeSpaces.options.js +1 -0
  108. package/dist/plugins/twake/twakeTombstone.options.js +1 -0
  109. package/dist/plugins/weblogs.js +1 -1
  110. package/dist/src/abstract/ldapFlat.d.ts +28 -10
  111. package/dist/src/abstract/plugin.d.ts +10 -5
  112. package/dist/src/abstract/twakePlugin.d.ts +14 -4
  113. package/dist/src/bin/index.d.ts +17 -4
  114. package/dist/src/config/args.d.ts +2 -4
  115. package/dist/src/config/options.d.ts +89 -0
  116. package/dist/src/config/schema.d.ts +50 -1
  117. package/dist/src/hooks.d.ts +60 -22
  118. package/dist/src/lib/authz/base.d.ts +4 -51
  119. package/dist/src/lib/authz/composition.d.ts +2 -2
  120. package/dist/src/lib/entitySchema/validator.d.ts +63 -6
  121. package/dist/src/lib/errors.d.ts +56 -1
  122. package/dist/src/lib/expressFormatedResponses.d.ts +49 -7
  123. package/dist/src/lib/hookBus.d.ts +226 -0
  124. package/dist/src/lib/instanceProviders.d.ts +0 -8
  125. package/dist/src/lib/ldapActions.d.ts +11 -2
  126. package/dist/src/lib/parseConfig.d.ts +5 -0
  127. package/dist/src/lib/route.d.ts +99 -0
  128. package/dist/src/lib/utils.d.ts +37 -36
  129. package/dist/src/lib/version.d.ts +12 -0
  130. package/dist/src/plugins/auth/auth.options.d.ts +88 -0
  131. package/dist/src/plugins/auth/authzDynamic.d.ts +10 -1
  132. package/dist/src/plugins/auth/authzLinid1.d.ts +6 -0
  133. package/dist/src/plugins/auth/authzPerBranch.d.ts +9 -0
  134. package/dist/src/plugins/auth/authzPerRoute.d.ts +3 -0
  135. package/dist/src/plugins/auth/authzScope.d.ts +23 -14
  136. package/dist/src/plugins/auth/crowdsec.d.ts +5 -0
  137. package/dist/src/plugins/auth/fake.d.ts +3 -0
  138. package/dist/src/plugins/auth/hmac.d.ts +4 -0
  139. package/dist/src/plugins/auth/llng.d.ts +4 -0
  140. package/dist/src/plugins/auth/openidconnect.d.ts +7 -0
  141. package/dist/src/plugins/auth/rateLimit.d.ts +4 -0
  142. package/dist/src/plugins/auth/token.d.ts +3 -0
  143. package/dist/src/plugins/auth/totp.d.ts +5 -0
  144. package/dist/src/plugins/auth/trustedProxy.d.ts +4 -0
  145. package/dist/src/plugins/bcl.d.ts +3 -0
  146. package/dist/src/plugins/bcl.options.d.ts +8 -0
  147. package/dist/src/plugins/configApi.d.ts +24 -5
  148. package/dist/src/plugins/demo/helloworld.d.ts +8 -19
  149. package/dist/src/plugins/ldap/accountLifecycle.d.ts +17 -0
  150. package/dist/src/plugins/ldap/bulkImport.d.ts +6 -76
  151. package/dist/src/plugins/ldap/departmentSync.d.ts +1 -0
  152. package/dist/src/plugins/ldap/enterpriseRules.d.ts +8 -1
  153. package/dist/src/plugins/ldap/externalUsersInGroups.d.ts +4 -0
  154. package/dist/src/plugins/ldap/flatGeneric.d.ts +4 -0
  155. package/dist/src/plugins/ldap/groups.d.ts +27 -11
  156. package/dist/src/plugins/ldap/ldap.options.d.ts +75 -0
  157. package/dist/src/plugins/ldap/onChange.d.ts +10 -2
  158. package/dist/src/plugins/ldap/organizations.d.ts +16 -0
  159. package/dist/src/plugins/ldap/passwordPolicy.d.ts +32 -1
  160. package/dist/src/plugins/ldap/raw.d.ts +50 -19
  161. package/dist/src/plugins/ldap/trash.d.ts +6 -0
  162. package/dist/src/plugins/metrics.d.ts +3 -0
  163. package/dist/src/plugins/metrics.options.d.ts +8 -0
  164. package/dist/src/plugins/rabbitmq.d.ts +3 -0
  165. package/dist/src/plugins/rabbitmq.options.d.ts +8 -0
  166. package/dist/src/plugins/scim/baseResolver.d.ts +2 -1
  167. package/dist/src/plugins/scim/bulk.d.ts +6 -7
  168. package/dist/src/plugins/scim/discovery.d.ts +3 -0
  169. package/dist/src/plugins/scim/errors.d.ts +4 -1
  170. package/dist/src/plugins/scim/groups.d.ts +6 -4
  171. package/dist/src/plugins/scim/scim.d.ts +37 -3
  172. package/dist/src/plugins/scim/scim.options.d.ts +35 -0
  173. package/dist/src/plugins/scim/types.d.ts +2 -1
  174. package/dist/src/plugins/scim/users.d.ts +6 -7
  175. package/dist/src/plugins/static.d.ts +9 -0
  176. package/dist/src/plugins/static.options.d.ts +13 -0
  177. package/dist/src/plugins/storage.d.ts +12 -1
  178. package/dist/src/plugins/storage.options.d.ts +16 -0
  179. package/dist/src/plugins/twake/appAccounts.options.d.ts +13 -0
  180. package/dist/src/plugins/twake/appAccountsApi.d.ts +18 -0
  181. package/dist/src/plugins/twake/appAccountsConsistency.d.ts +8 -0
  182. package/dist/src/plugins/twake/calendar.d.ts +25 -2
  183. package/dist/src/plugins/twake/calendar.options.d.ts +19 -0
  184. package/dist/src/plugins/twake/cloudery.options.d.ts +26 -0
  185. package/dist/src/plugins/twake/clouderyProvision.d.ts +18 -0
  186. package/dist/src/plugins/twake/cozy.options.d.ts +23 -0
  187. package/dist/src/plugins/twake/cozyProvision.d.ts +14 -0
  188. package/dist/src/plugins/twake/drive.d.ts +7 -0
  189. package/dist/src/plugins/twake/drive.options.d.ts +15 -0
  190. package/dist/src/plugins/twake/groups.d.ts +30 -3
  191. package/dist/src/plugins/twake/instances.d.ts +43 -10
  192. package/dist/src/plugins/twake/james.d.ts +17 -0
  193. package/dist/src/plugins/twake/james.options.d.ts +21 -0
  194. package/dist/src/plugins/twake/lifecycleEvents.d.ts +12 -0
  195. package/dist/src/plugins/twake/migrationProxy.d.ts +11 -11
  196. package/dist/src/plugins/twake/migrationProxy.options.d.ts +16 -0
  197. package/dist/src/plugins/twake/spaces.d.ts +30 -0
  198. package/dist/src/plugins/twake/tombstone.d.ts +16 -14
  199. package/dist/src/plugins/twake/twakeGroups.options.d.ts +20 -0
  200. package/dist/src/plugins/twake/twakeInstances.options.d.ts +43 -0
  201. package/dist/src/plugins/twake/twakeLifecycle.options.d.ts +21 -0
  202. package/dist/src/plugins/twake/twakeSpaces.options.d.ts +19 -0
  203. package/dist/src/plugins/twake/twakeTombstone.options.d.ts +17 -0
  204. package/docs/README.md +1 -0
  205. package/docs/client-development/api/rest-api.md +9 -3
  206. package/docs/client-development/schemas/README.md +96 -32
  207. package/docs/plugin-development/README.md +45 -94
  208. package/docs/plugin-development/dependencies.md +11 -6
  209. package/docs/plugin-development/hooks.md +142 -23
  210. package/docs/plugin-development/openapi.md +14 -1
  211. package/docs/plugin-development/options.md +109 -0
  212. package/docs/plugin-development/routes.md +152 -0
  213. package/docs/plugin-development/testing.md +3 -3
  214. package/docs/usage/configuration.md +31 -24
  215. package/docs/usage/operations.md +19 -4
  216. package/docs/usage/plugins/integrations/groups.md +2 -2
  217. package/docs/usage/plugins/integrations/scim.md +12 -1
  218. package/docs/usage/plugins/integrations/spaces.md +1 -1
  219. package/docs/usage/plugins/ldap/enterprise-rules.md +10 -1
  220. package/docs/usage/plugins/ldap/flat-generic.md +4 -0
  221. package/docs/usage/plugins/ldap/raw.md +17 -1
  222. package/docs/usage/upgrading.md +207 -0
  223. package/package.json +358 -277
  224. package/static/browser/ldap-browser/LdapBrowser.js +8 -6
  225. package/static/browser/ldap-browser/LdapBrowser.js.map +1 -1
  226. package/static/browser/ldap-browser/api/RawApiClient.js +2 -0
  227. package/static/browser/ldap-browser/api/RawApiClient.js.map +1 -1
  228. package/static/browser/ldap-browser/components/EntryTree.js +9 -5
  229. package/static/browser/ldap-browser/components/EntryTree.js.map +1 -1
  230. package/static/browser/ldap-browser/components/EntryView.js +2 -0
  231. package/static/browser/ldap-browser/components/EntryView.js.map +1 -1
  232. package/static/browser/ldap-browser/schema.js +3 -2
  233. package/static/browser/ldap-browser/schema.js.map +1 -1
  234. package/static/browser/ldap-browser.esm.js +27 -18
  235. package/static/browser/ldap-browser.esm.js.map +1 -1
  236. package/static/browser/ldap-browser.js +27 -18
  237. package/static/browser/ldap-browser.js.map +1 -1
  238. package/static/browser/ldap-browser.min.js +1 -1
  239. package/static/browser/ldap-browser.min.js.map +1 -1
  240. package/static/browser/ldap-group-editor/LdapGroupEditor.js +8 -6
  241. package/static/browser/ldap-group-editor/LdapGroupEditor.js.map +1 -1
  242. package/static/browser/ldap-group-editor/api/GroupApiClient.js +1 -0
  243. package/static/browser/ldap-group-editor/api/GroupApiClient.js.map +1 -1
  244. package/static/browser/ldap-group-editor/components/CreateGroupModal.js +5 -1
  245. package/static/browser/ldap-group-editor/components/CreateGroupModal.js.map +1 -1
  246. package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js +6 -3
  247. package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js.map +1 -1
  248. package/static/browser/ldap-group-editor/components/GroupTree.js +6 -3
  249. package/static/browser/ldap-group-editor/components/GroupTree.js.map +1 -1
  250. package/static/browser/ldap-group-editor/components/MoveGroupModal.js +6 -3
  251. package/static/browser/ldap-group-editor/components/MoveGroupModal.js.map +1 -1
  252. package/static/browser/ldap-group-editor.esm.js +32 -16
  253. package/static/browser/ldap-group-editor.esm.js.map +1 -1
  254. package/static/browser/ldap-group-editor.js +32 -16
  255. package/static/browser/ldap-group-editor.js.map +1 -1
  256. package/static/browser/ldap-group-editor.min.js +1 -1
  257. package/static/browser/ldap-group-editor.min.js.map +1 -1
  258. package/static/browser/ldap-resource-editor/api/ResourceApiClient.js +3 -0
  259. package/static/browser/ldap-resource-editor/api/ResourceApiClient.js.map +1 -1
  260. package/static/browser/ldap-resource-editor/cache/CacheManager.js +3 -1
  261. package/static/browser/ldap-resource-editor/cache/CacheManager.js.map +1 -1
  262. package/static/browser/ldap-tree-viewer/LdapTreeViewer.js +6 -1
  263. package/static/browser/ldap-tree-viewer/LdapTreeViewer.js.map +1 -1
  264. package/static/browser/ldap-tree-viewer/api/LdapApiClient.js +2 -0
  265. package/static/browser/ldap-tree-viewer/api/LdapApiClient.js.map +1 -1
  266. package/static/browser/ldap-tree-viewer/components/TreeNode.js +4 -0
  267. package/static/browser/ldap-tree-viewer/components/TreeNode.js.map +1 -1
  268. package/static/browser/ldap-tree-viewer/components/TreeRoot.js +3 -0
  269. package/static/browser/ldap-tree-viewer/components/TreeRoot.js.map +1 -1
  270. package/static/browser/ldap-tree-viewer/store/Store.js +3 -1
  271. package/static/browser/ldap-tree-viewer/store/Store.js.map +1 -1
  272. package/static/browser/ldap-tree-viewer.esm.js +18 -2
  273. package/static/browser/ldap-tree-viewer.esm.js.map +1 -1
  274. package/static/browser/ldap-tree-viewer.js +18 -2
  275. package/static/browser/ldap-tree-viewer.js.map +1 -1
  276. package/static/browser/ldap-tree-viewer.min.js +1 -1
  277. package/static/browser/ldap-tree-viewer.min.js.map +1 -1
  278. package/static/browser/ldap-unit-editor/LdapUnitEditor.js +7 -5
  279. package/static/browser/ldap-unit-editor/LdapUnitEditor.js.map +1 -1
  280. package/static/browser/ldap-unit-editor/api/UnitApiClient.js +1 -0
  281. package/static/browser/ldap-unit-editor/api/UnitApiClient.js.map +1 -1
  282. package/static/browser/ldap-unit-editor/components/MoveUnitModal.js +7 -4
  283. package/static/browser/ldap-unit-editor/components/MoveUnitModal.js.map +1 -1
  284. package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js +7 -4
  285. package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js.map +1 -1
  286. package/static/browser/ldap-unit-editor/components/UnitTree.js +6 -3
  287. package/static/browser/ldap-unit-editor/components/UnitTree.js.map +1 -1
  288. package/static/browser/ldap-unit-editor.esm.js +28 -16
  289. package/static/browser/ldap-unit-editor.esm.js.map +1 -1
  290. package/static/browser/ldap-unit-editor.js +28 -16
  291. package/static/browser/ldap-unit-editor.js.map +1 -1
  292. package/static/browser/ldap-unit-editor.min.js +1 -1
  293. package/static/browser/ldap-unit-editor.min.js.map +1 -1
  294. package/static/browser/ldap-user-editor/LdapUserEditor.js +9 -7
  295. package/static/browser/ldap-user-editor/LdapUserEditor.js.map +1 -1
  296. package/static/browser/ldap-user-editor/api/UserApiClient.js +2 -0
  297. package/static/browser/ldap-user-editor/api/UserApiClient.js.map +1 -1
  298. package/static/browser/ldap-user-editor/cache/CacheManager.js +3 -1
  299. package/static/browser/ldap-user-editor/cache/CacheManager.js.map +1 -1
  300. package/static/browser/ldap-user-editor/components/MoveUserModal.js +7 -4
  301. package/static/browser/ldap-user-editor/components/MoveUserModal.js.map +1 -1
  302. package/static/browser/ldap-user-editor/components/PointerField.js +6 -1
  303. package/static/browser/ldap-user-editor/components/PointerField.js.map +1 -1
  304. package/static/browser/ldap-user-editor/components/UserEditor.js +10 -5
  305. package/static/browser/ldap-user-editor/components/UserEditor.js.map +1 -1
  306. package/static/browser/ldap-user-editor/components/UserList.js +8 -4
  307. package/static/browser/ldap-user-editor/components/UserList.js.map +1 -1
  308. package/static/browser/ldap-user-editor/components/UserTree.js +7 -3
  309. package/static/browser/ldap-user-editor/components/UserTree.js.map +1 -1
  310. package/static/browser/ldap-user-editor.esm.js +55 -30
  311. package/static/browser/ldap-user-editor.esm.js.map +1 -1
  312. package/static/browser/ldap-user-editor.js +55 -30
  313. package/static/browser/ldap-user-editor.js.map +1 -1
  314. package/static/browser/ldap-user-editor.min.js +1 -1
  315. package/static/browser/ldap-user-editor.min.js.map +1 -1
  316. package/static/browser/shared/components/DisposableComponent.js +3 -5
  317. package/static/browser/shared/components/DisposableComponent.js.map +1 -1
  318. package/static/browser/shared/components/Modal.js +2 -1
  319. package/static/browser/shared/components/Modal.js.map +1 -1
  320. package/static/browser/shared/components/StatusMessage.js +3 -2
  321. package/static/browser/shared/components/StatusMessage.js.map +1 -1
  322. package/static/browser/shared/utils/form.js.map +1 -1
  323. package/static/browser/shared/utils/hmac.js +1 -0
  324. package/static/browser/shared/utils/hmac.js.map +1 -1
  325. package/static/browser/shared/utils/totp.js +1 -0
  326. package/static/browser/shared/utils/totp.js.map +1 -1
  327. package/static/browser/shared.esm.js +9 -8
  328. package/static/browser/shared.esm.js.map +1 -1
  329. package/static/browser/shared.js +9 -8
  330. package/static/browser/shared.js.map +1 -1
  331. package/static/browser/shared.min.js +1 -1
  332. package/static/browser/shared.min.js.map +1 -1
  333. package/static/schemas/ad/groups.json +1 -1
  334. package/static/schemas/ad/users.json +3 -3
  335. package/static/schemas/example/organizations.json +2 -2
  336. package/static/schemas/example/users.json +2 -2
  337. package/static/schemas/obm/users.json +2 -2
  338. package/static/schemas/standard/groups.json +1 -1
  339. package/static/schemas/standard/users.json +2 -2
  340. package/static/schemas/twake/groups.json +4 -4
  341. package/static/schemas/twake/teamMailboxes.json +3 -3
  342. package/static/schemas/twake/users.json +7 -7
@@ -1,8 +1,10 @@
1
1
  import type { Config } from '../../config/args';
2
2
  import type { DmRequest } from '../../lib/auth/base';
3
+ import type { ScimOptions } from './scim.options';
3
4
  import { type ResourceTypeDefinition, type ServiceProviderConfig, type SchemaDefinition } from './types';
4
5
  export interface DiscoveryOptions {
5
6
  config: Config;
7
+ options: ScimOptions;
6
8
  schemaDir: string;
7
9
  scimPrefix: string;
8
10
  loadedPlugins: {
@@ -11,6 +13,7 @@ export interface DiscoveryOptions {
11
13
  }
12
14
  export declare class ScimDiscovery {
13
15
  private readonly config;
16
+ private readonly options;
14
17
  private readonly schemaDir;
15
18
  private readonly scimPrefix;
16
19
  private readonly loadedPlugins;
@@ -14,6 +14,8 @@ export declare class ScimError extends HttpError {
14
14
  scimType?: ScimErrorType;
15
15
  constructor(status: number, detail: string, scimType?: ScimErrorType);
16
16
  }
17
+ /** The kind of a client value, for an error that quotes none of it */
18
+ export declare const kindOf: (v: unknown) => string;
17
19
  export declare const scimInvalidFilter: (detail?: string) => ScimError;
18
20
  export declare const scimInvalidPath: (detail?: string) => ScimError;
19
21
  export declare const scimInvalidValue: (detail?: string) => ScimError;
@@ -30,7 +32,8 @@ export declare function writeScimError(res: Response, status: number, detail: st
30
32
  * Split out from `writeScimErrorFromException` so `/Bulk`, which reports a
31
33
  * status per operation instead of writing a response, applies exactly the
32
34
  * same translations — including the ones that matter: an authorization
33
- * refusal is a 403 with the internal marker stripped, not a 500 quoting it.
35
+ * refusal is a 403 saying `AUTHZ_REFUSED`, not a 500 quoting the branch it
36
+ * judged.
34
37
  */
35
38
  export declare function scimErrorFromException(err: unknown, fallbackStatus?: number): ScimErrorResponse;
36
39
  export declare function writeScimErrorFromException(res: Response, err: unknown, fallbackStatus?: number): void;
@@ -8,9 +8,11 @@ import type winston from 'winston';
8
8
  import type ldapActions from '../../lib/ldapActions';
9
9
  import type { Config } from '../../config/args';
10
10
  import type { DmRequest } from '../../lib/auth/base';
11
+ import type HookBus from '../../lib/hookBus';
11
12
  import { BaseResolver } from './baseResolver';
12
13
  import { type ResourceMapping, type ScimGroup, type ListResponse, type PatchRequest } from './types';
13
14
  import type { ScimUsers } from './users';
15
+ import type { ScimOptions } from './scim.options';
14
16
  export interface GroupListQuery {
15
17
  filter?: string;
16
18
  startIndex?: number;
@@ -21,20 +23,20 @@ export interface GroupListQuery {
21
23
  export interface ScimGroupsOptions {
22
24
  ldap: ldapActions;
23
25
  config: Config;
26
+ options: ScimOptions;
24
27
  logger: winston.Logger;
25
28
  baseResolver: BaseResolver;
26
29
  users: ScimUsers;
27
- hooks: {
28
- [K: string]: Function[] | undefined;
29
- };
30
+ hookBus: HookBus;
30
31
  }
31
32
  export declare class ScimGroups {
32
33
  private readonly ldap;
33
34
  private readonly config;
35
+ private readonly options;
34
36
  private readonly logger;
35
37
  private readonly baseResolver;
36
38
  private readonly users;
37
- private readonly hooks;
39
+ private readonly hookBus;
38
40
  private readonly mapping;
39
41
  private readonly attributes;
40
42
  private readonly rdnAttribute;
@@ -2,7 +2,7 @@ import type { Express, RequestHandler } from 'express';
2
2
  import DmPlugin, { type Role } from '../../abstract/plugin';
3
3
  import type { DM } from '../../bin';
4
4
  import type ldapActions from '../../lib/ldapActions';
5
- import type { Config } from '../../config/args';
5
+ import { type ScimOptions } from './scim.options';
6
6
  import { writeScimErrorFromException } from './errors';
7
7
  /**
8
8
  * Reusable SCIM 2.0 schemas surfaced by this plugin.
@@ -398,11 +398,44 @@ import { writeScimErrorFromException } from './errors';
398
398
  * that a SCIM request sent as such gets the SCIM limit rather than the global
399
399
  * parser's 100kb
400
400
  *
401
- * @param config the configuration holding the SCIM limit
401
+ * @param options the SCIM options holding the payload limit
402
402
  * @returns the parser
403
403
  */
404
- export declare function scimBodyParser(config: Config): RequestHandler;
404
+ export declare function scimBodyParser(options: ScimOptions): RequestHandler;
405
+ export declare const ScimIdParams: import("@sinclair/typebox").TObject<{
406
+ id: import("@sinclair/typebox").TString;
407
+ }>;
408
+ export declare const ScimNameParams: import("@sinclair/typebox").TObject<{
409
+ name: import("@sinclair/typebox").TString;
410
+ }>;
405
411
  export default class Scim extends DmPlugin {
412
+ static optionDefinitions: {
413
+ scim_prefix: import("../../config/options").StringOption;
414
+ scim_user_base: import("../../config/options").StringOption;
415
+ scim_group_base: import("../../config/options").StringOption;
416
+ scim_user_base_template: import("../../config/options").StringOption;
417
+ scim_group_base_template: import("../../config/options").StringOption;
418
+ scim_base_map: import("../../config/options").StringOption;
419
+ scim_user_base_header: import("../../config/options").StringOption;
420
+ scim_group_base_header: import("../../config/options").StringOption;
421
+ scim_base_header_root: import("../../config/options").StringOption;
422
+ scim_user_object_class: import("../../config/options").ArrayOption;
423
+ scim_user_rdn_attribute: import("../../config/options").StringOption;
424
+ scim_user_lock_attribute: import("../../config/options").StringOption;
425
+ scim_user_lock_value: import("../../config/options").StringOption;
426
+ scim_group_object_class: import("../../config/options").ArrayOption;
427
+ scim_group_rdn_attribute: import("../../config/options").StringOption;
428
+ scim_group_external_id_attribute: import("../../config/options").StringOption;
429
+ scim_id_attribute: import("../../config/options").StringOption;
430
+ scim_user_mapping: import("../../config/options").StringOption;
431
+ scim_group_mapping: import("../../config/options").StringOption;
432
+ scim_max_results: import("../../config/options").NumberOption;
433
+ scim_max_scanned: import("../../config/options").NumberOption;
434
+ scim_bulk_max_operations: import("../../config/options").NumberOption;
435
+ scim_bulk_max_payload_size: import("../../config/options").NumberOption;
436
+ scim_etag: import("../../config/options").BooleanOption;
437
+ scim_base_url: import("../../config/options").StringOption;
438
+ };
406
439
  name: string;
407
440
  roles: Role[];
408
441
  ldap: ldapActions;
@@ -414,6 +447,7 @@ export default class Scim extends DmPlugin {
414
447
  /** Where it reads its schema files, which the static plugins may serve */
415
448
  private readonly scimSchemaDir;
416
449
  private readonly baseResolver;
450
+ private readonly settings;
417
451
  constructor(server: DM);
418
452
  private scimJson;
419
453
  /**
@@ -0,0 +1,35 @@
1
+ /**
2
+ * SCIM 2.0 plugin options, see `docs/plugin-development/options.md`.
3
+ */
4
+ import type { Config } from '../../config/args';
5
+ import { type OptionsOf } from '../../config/options';
6
+ export declare const scimOptions: {
7
+ scim_prefix: import("../../config/options").StringOption;
8
+ scim_user_base: import("../../config/options").StringOption;
9
+ scim_group_base: import("../../config/options").StringOption;
10
+ scim_user_base_template: import("../../config/options").StringOption;
11
+ scim_group_base_template: import("../../config/options").StringOption;
12
+ scim_base_map: import("../../config/options").StringOption;
13
+ scim_user_base_header: import("../../config/options").StringOption;
14
+ scim_group_base_header: import("../../config/options").StringOption;
15
+ scim_base_header_root: import("../../config/options").StringOption;
16
+ scim_user_object_class: import("../../config/options").ArrayOption;
17
+ scim_user_rdn_attribute: import("../../config/options").StringOption;
18
+ scim_user_lock_attribute: import("../../config/options").StringOption;
19
+ scim_user_lock_value: import("../../config/options").StringOption;
20
+ scim_group_object_class: import("../../config/options").ArrayOption;
21
+ scim_group_rdn_attribute: import("../../config/options").StringOption;
22
+ scim_group_external_id_attribute: import("../../config/options").StringOption;
23
+ scim_id_attribute: import("../../config/options").StringOption;
24
+ scim_user_mapping: import("../../config/options").StringOption;
25
+ scim_group_mapping: import("../../config/options").StringOption;
26
+ scim_max_results: import("../../config/options").NumberOption;
27
+ scim_max_scanned: import("../../config/options").NumberOption;
28
+ scim_bulk_max_operations: import("../../config/options").NumberOption;
29
+ scim_bulk_max_payload_size: import("../../config/options").NumberOption;
30
+ scim_etag: import("../../config/options").BooleanOption;
31
+ scim_base_url: import("../../config/options").StringOption;
32
+ };
33
+ export type ScimOptions = OptionsOf<typeof scimOptions>;
34
+ /** The checked values for a caller outside the plugin that holds a Config */
35
+ export declare function scimOptionsOf(config: Config): ScimOptions;
@@ -120,7 +120,8 @@ export interface BulkRequest {
120
120
  Operations: BulkOperationRequest[];
121
121
  }
122
122
  export interface BulkOperationResponse {
123
- method: 'POST' | 'PUT' | 'PATCH' | 'DELETE';
123
+ /** Absent when the operation was not even an object */
124
+ method?: 'POST' | 'PUT' | 'PATCH' | 'DELETE';
124
125
  bulkId?: string;
125
126
  version?: string;
126
127
  location?: string;
@@ -6,9 +6,10 @@
6
6
  */
7
7
  import type winston from 'winston';
8
8
  import type ldapActions from '../../lib/ldapActions';
9
- import type { Config } from '../../config/args';
10
9
  import type { DmRequest } from '../../lib/auth/base';
10
+ import type HookBus from '../../lib/hookBus';
11
11
  import { BaseResolver } from './baseResolver';
12
+ import type { ScimOptions } from './scim.options';
12
13
  import { type ResourceMapping, type ScimUser, type ListResponse, type PatchRequest } from './types';
13
14
  export interface ListQuery {
14
15
  filter?: string;
@@ -21,19 +22,17 @@ export interface ListQuery {
21
22
  }
22
23
  export interface ScimUsersOptions {
23
24
  ldap: ldapActions;
24
- config: Config;
25
+ options: ScimOptions;
25
26
  logger: winston.Logger;
26
27
  baseResolver: BaseResolver;
27
- hooks: {
28
- [K: string]: Function[] | undefined;
29
- };
28
+ hookBus: HookBus;
30
29
  }
31
30
  export declare class ScimUsers {
32
31
  private readonly ldap;
33
- private readonly config;
32
+ private readonly options;
34
33
  private readonly logger;
35
34
  private readonly baseResolver;
36
- private readonly hooks;
35
+ private readonly hookBus;
37
36
  private readonly mapping;
38
37
  private readonly rdnAttribute;
39
38
  private readonly objectClass;
@@ -1,5 +1,6 @@
1
1
  import type { Express } from 'express';
2
2
  import DmPlugin, { type Role } from '../abstract/plugin';
3
+ import type { DM } from '../bin';
3
4
  /**
4
5
  * @openapi-component
5
6
  * LdapSchema:
@@ -35,10 +36,18 @@ import DmPlugin, { type Role } from '../abstract/plugin';
35
36
  * required: true
36
37
  */
37
38
  export default class Static extends DmPlugin {
39
+ static optionDefinitions: {
40
+ static_path: import("../config/options").StringOption;
41
+ static_name: import("../config/options").StringOption;
42
+ static_csp: import("../config/options").StringOrFalseOption;
43
+ static_frame_options: import("../config/options").StringOrFalseOption;
44
+ };
38
45
  name: string;
39
46
  roles: Role[];
40
47
  /** The configuration's schema files it serves outside its directory, by URL */
41
48
  private configured;
49
+ private readonly settings;
50
+ constructor(server: DM);
42
51
  api(app: Express): void;
43
52
  /**
44
53
  * The handler of the schema routes
@@ -0,0 +1,13 @@
1
+ import type { Config } from '../config/args';
2
+ import { type OptionsOf } from '../config/options';
3
+ /** The headers `core/static` sends unless told otherwise: no framing by another site */
4
+ export declare const STATIC_CSP = "frame-ancestors 'self'";
5
+ export declare const STATIC_FRAME_OPTIONS = "SAMEORIGIN";
6
+ export declare const staticOptions: {
7
+ static_path: import("../config/options").StringOption;
8
+ static_name: import("../config/options").StringOption;
9
+ static_csp: import("../config/options").StringOrFalseOption;
10
+ static_frame_options: import("../config/options").StringOrFalseOption;
11
+ };
12
+ export type StaticOptions = OptionsOf<typeof staticOptions>;
13
+ export declare function staticOptionsOf(config: Config): StaticOptions;
@@ -29,9 +29,20 @@
29
29
  */
30
30
  import DmPlugin from '../abstract/plugin';
31
31
  import type { DM } from '../bin';
32
- import type Store from '../lib/storage/store';
33
32
  import type { HealthStatus } from '../lib/health';
33
+ import type Store from '../lib/storage/store';
34
34
  export default class Storage extends DmPlugin {
35
+ static optionDefinitions: {
36
+ storage_backend: import("../config/options").StringOption;
37
+ storage_sweep_interval: import("../config/options").NumberOption;
38
+ storage_ldap_base: import("../config/options").StringOption;
39
+ storage_ldap_object_class: import("../config/options").StringOption;
40
+ storage_file_directory: import("../config/options").StringOption;
41
+ storage_postgres_url: import("../config/options").StringOption;
42
+ storage_postgres_table: import("../config/options").StringOption;
43
+ storage_valkey_url: import("../config/options").StringOption;
44
+ storage_valkey_prefix: import("../config/options").StringOption;
45
+ };
35
46
  name: string;
36
47
  store: Store;
37
48
  constructor(server: DM);
@@ -0,0 +1,16 @@
1
+ /** Keyed storage plugin options. */
2
+ import type { Config } from '../config/args';
3
+ import { type OptionsOf } from '../config/options';
4
+ export declare const storageOptions: {
5
+ storage_backend: import("../config/options").StringOption;
6
+ storage_sweep_interval: import("../config/options").NumberOption;
7
+ storage_ldap_base: import("../config/options").StringOption;
8
+ storage_ldap_object_class: import("../config/options").StringOption;
9
+ storage_file_directory: import("../config/options").StringOption;
10
+ storage_postgres_url: import("../config/options").StringOption;
11
+ storage_postgres_table: import("../config/options").StringOption;
12
+ storage_valkey_url: import("../config/options").StringOption;
13
+ storage_valkey_prefix: import("../config/options").StringOption;
14
+ };
15
+ export type StorageOptions = OptionsOf<typeof storageOptions>;
16
+ export declare function storageOptionsOf(config: Config): StorageOptions;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Applicative accounts options, shared by `appAccountsApi` and
3
+ * `appAccountsConsistency`. See `docs/plugin-development/options.md`.
4
+ */
5
+ import { type OptionsOf } from '../../config/options';
6
+ export declare const appAccountsOptions: {
7
+ applicative_account_base: import("../../config/options").StringOption;
8
+ max_app_accounts: import("../../config/options").NumberOption;
9
+ app_accounts_user_attribute: import("../../config/options").StringOption;
10
+ applicative_account_attribute: import("../../config/options").ArrayOption;
11
+ ldap_operational_attribute: import("../../config/options").ArrayOption;
12
+ };
13
+ export type AppAccountsOptions = OptionsOf<typeof appAccountsOptions>;
@@ -1,12 +1,30 @@
1
1
  import type { Express } from 'express';
2
2
  import DmPlugin, { type Role } from '../../abstract/plugin';
3
3
  import type { DM } from '../../bin';
4
+ export declare const AppAccountsParams: import("@sinclair/typebox").TObject<{
5
+ user: import("@sinclair/typebox").TString;
6
+ }>;
7
+ export declare const AppAccountParams: import("@sinclair/typebox").TObject<{
8
+ user: import("@sinclair/typebox").TString;
9
+ uid: import("@sinclair/typebox").TString;
10
+ }>;
11
+ export declare const AppAccountCreateBody: import("@sinclair/typebox").TObject<{
12
+ name: import("@sinclair/typebox").TOptional<import("@sinclair/typebox").TString>;
13
+ }>;
4
14
  export default class AppAccountsApi extends DmPlugin {
15
+ static optionDefinitions: {
16
+ applicative_account_base: import("../../config/options").StringOption;
17
+ max_app_accounts: import("../../config/options").NumberOption;
18
+ app_accounts_user_attribute: import("../../config/options").StringOption;
19
+ applicative_account_attribute: import("../../config/options").ArrayOption;
20
+ ldap_operational_attribute: import("../../config/options").ArrayOption;
21
+ };
5
22
  name: string;
6
23
  roles: Role[];
7
24
  dependencies: {
8
25
  appAccountsConsistency: string;
9
26
  };
27
+ private readonly settings;
10
28
  private applicativeAccountBase;
11
29
  private maxAppAccounts;
12
30
  private mailAttr;
@@ -29,11 +29,19 @@ import type { Role } from '../../abstract/plugin';
29
29
  import type { DM } from '../../bin';
30
30
  import { Hooks } from '../../hooks';
31
31
  export default class AppAccountsConsistency extends DmPlugin {
32
+ static optionDefinitions: {
33
+ applicative_account_base: import("../../config/options").StringOption;
34
+ max_app_accounts: import("../../config/options").NumberOption;
35
+ app_accounts_user_attribute: import("../../config/options").StringOption;
36
+ applicative_account_attribute: import("../../config/options").ArrayOption;
37
+ ldap_operational_attribute: import("../../config/options").ArrayOption;
38
+ };
32
39
  name: string;
33
40
  roles: Role[];
34
41
  dependencies: {
35
42
  onLdapChange: string;
36
43
  };
44
+ private readonly settings;
37
45
  private mailAttr;
38
46
  private applicativeAccountBase;
39
47
  private operationalAttributes;
@@ -1,6 +1,7 @@
1
1
  import TwakePlugin from '../../abstract/twakePlugin';
2
2
  import { type Role } from '../../abstract/plugin';
3
- import { Hooks } from '../../hooks';
3
+ import type { AttributesList, ModifyRequest } from '../../lib/ldapActions';
4
+ import { Hooks, MaybePromise } from '../../hooks';
4
5
  /**
5
6
  * Plugin to sync LDAP resources and users with Twake Calendar
6
7
  *
@@ -10,7 +11,28 @@ import { Hooks } from '../../hooks';
10
11
  * Also propagates user identity changes (email, first name, last name) to the
11
12
  * Twake Calendar "registered users" via the WebAdmin API.
12
13
  */
14
+ /**
15
+ * The hooks of the `calendarResource` flat entity, which no flag of the
16
+ * core names: `ldapcalendarResourceadddone`, `…modifydone` and
17
+ * `…deletedone`.
18
+ */
19
+ type CalendarResourceHooks = {
20
+ ldapcalendarResourceadddone?: (dn: string, entry: AttributesList) => MaybePromise<void>;
21
+ ldapcalendarResourcemodifydone?: (dn: string, changes: ModifyRequest, op: number) => MaybePromise<void>;
22
+ ldapcalendarResourcedeletedone?: (dn: string) => MaybePromise<void>;
23
+ };
13
24
  export default class Calendar extends TwakePlugin {
25
+ static optionDefinitions: {
26
+ calendar_webadmin_url: import("../../config/options").StringOption;
27
+ calendar_webadmin_token: import("../../config/options").StringOption;
28
+ calendar_concurrency: import("../../config/options").NumberOption;
29
+ calendar_resource_base: import("../../config/options").StringOption;
30
+ calendar_resource_objectclass: import("../../config/options").StringOption;
31
+ calendar_resource_creator: import("../../config/options").StringOption;
32
+ calendar_resource_domain: import("../../config/options").StringOption;
33
+ calendar_firstname_attribute: import("../../config/options").StringOption;
34
+ calendar_lastname_attribute: import("../../config/options").StringOption;
35
+ };
14
36
  name: string;
15
37
  roles: Role[];
16
38
  dependencies: {
@@ -23,7 +45,7 @@ export default class Calendar extends TwakePlugin {
23
45
  private firstnameAttr;
24
46
  private lastnameAttr;
25
47
  constructor(server: import('../../bin').DM);
26
- hooks: Hooks;
48
+ hooks: Hooks & CalendarResourceHooks;
27
49
  /**
28
50
  * Check if a LDAP entry is a calendar resource
29
51
  */
@@ -111,3 +133,4 @@ export default class Calendar extends TwakePlugin {
111
133
  taskId: string;
112
134
  } | null>;
113
135
  }
136
+ export {};
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Twake Calendar plugin options, see `docs/plugin-development/options.md`.
3
+ */
4
+ import type { Config } from '../../config/args';
5
+ import { type OptionsOf } from '../../config/options';
6
+ export declare const calendarOptions: {
7
+ calendar_webadmin_url: import("../../config/options").StringOption;
8
+ calendar_webadmin_token: import("../../config/options").StringOption;
9
+ calendar_concurrency: import("../../config/options").NumberOption;
10
+ calendar_resource_base: import("../../config/options").StringOption;
11
+ calendar_resource_objectclass: import("../../config/options").StringOption;
12
+ calendar_resource_creator: import("../../config/options").StringOption;
13
+ calendar_resource_domain: import("../../config/options").StringOption;
14
+ calendar_firstname_attribute: import("../../config/options").StringOption;
15
+ calendar_lastname_attribute: import("../../config/options").StringOption;
16
+ };
17
+ export type CalendarOptions = OptionsOf<typeof calendarOptions>;
18
+ /** The checked values for a caller that holds a Config instead of the plugin */
19
+ export declare function calendarOptionsOf(config: Config): CalendarOptions;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Cloudery provisioning options, see `docs/plugin-development/options.md`.
3
+ */
4
+ import type { Config } from '../../config/args';
5
+ import { type OptionsOf } from '../../config/options';
6
+ export declare const clouderyOptions: {
7
+ cloudery_manager_url: import("../../config/options").StringOption;
8
+ cloudery_manager_token: import("../../config/options").StringOption;
9
+ cloudery_offer: import("../../config/options").StringOption;
10
+ cloudery_domain: import("../../config/options").StringOption;
11
+ cloudery_user_branch: import("../../config/options").StringOption;
12
+ cloudery_org_id_header: import("../../config/options").StringOption;
13
+ cloudery_org_role_header: import("../../config/options").StringOption;
14
+ cloudery_default_org_role: import("../../config/options").StringOption;
15
+ cloudery_fqdn_attribute: import("../../config/options").StringOption;
16
+ cloudery_org_id_attribute: import("../../config/options").StringOption;
17
+ cloudery_org_role_attribute: import("../../config/options").StringOption;
18
+ cloudery_phones_attribute: import("../../config/options").StringOption;
19
+ cloudery_invited_attribute: import("../../config/options").StringOption;
20
+ cloudery_default_locale: import("../../config/options").StringOption;
21
+ cloudery_workflow_poll_interval_ms: import("../../config/options").NumberOption;
22
+ cloudery_workflow_max_attempts: import("../../config/options").NumberOption;
23
+ };
24
+ export type ClouderyOptions = OptionsOf<typeof clouderyOptions>;
25
+ /** The checked values for a caller that holds a Config instead of the plugin */
26
+ export declare function clouderyOptionsOf(config: Config): ClouderyOptions;
@@ -2,6 +2,24 @@ import DmPlugin, { type Role } from '../../abstract/plugin';
2
2
  import type { DM } from '../../bin';
3
3
  import { Hooks } from '../../hooks';
4
4
  export default class ClouderyProvision extends DmPlugin {
5
+ static optionDefinitions: {
6
+ cloudery_manager_url: import("../../config/options").StringOption;
7
+ cloudery_manager_token: import("../../config/options").StringOption;
8
+ cloudery_offer: import("../../config/options").StringOption;
9
+ cloudery_domain: import("../../config/options").StringOption;
10
+ cloudery_user_branch: import("../../config/options").StringOption;
11
+ cloudery_org_id_header: import("../../config/options").StringOption;
12
+ cloudery_org_role_header: import("../../config/options").StringOption;
13
+ cloudery_default_org_role: import("../../config/options").StringOption;
14
+ cloudery_fqdn_attribute: import("../../config/options").StringOption;
15
+ cloudery_org_id_attribute: import("../../config/options").StringOption;
16
+ cloudery_org_role_attribute: import("../../config/options").StringOption;
17
+ cloudery_phones_attribute: import("../../config/options").StringOption;
18
+ cloudery_invited_attribute: import("../../config/options").StringOption;
19
+ cloudery_default_locale: import("../../config/options").StringOption;
20
+ cloudery_workflow_poll_interval_ms: import("../../config/options").NumberOption;
21
+ cloudery_workflow_max_attempts: import("../../config/options").NumberOption;
22
+ };
5
23
  name: string;
6
24
  roles: Role[];
7
25
  dependencies: {
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Cozy provisioning options, shared by `cozyProvision` and
3
+ * `clouderyProvision`. See `docs/plugin-development/options.md`.
4
+ */
5
+ import type { Config } from '../../config/args';
6
+ import { type OptionsOf } from '../../config/options';
7
+ export declare const cozyOptions: {
8
+ cozy_admin_url: import("../../config/options").StringOption;
9
+ cozy_admin_user: import("../../config/options").StringOption;
10
+ cozy_admin_passphrase: import("../../config/options").StringOption;
11
+ cozy_org_id: import("../../config/options").StringOption;
12
+ cozy_org_domain: import("../../config/options").StringOption;
13
+ cozy_default_locale: import("../../config/options").StringOption;
14
+ cozy_context_name: import("../../config/options").StringOption;
15
+ cozy_apps: import("../../config/options").StringOption;
16
+ cozy_auth_exchange: import("../../config/options").StringOption;
17
+ cozy_b2b_exchange: import("../../config/options").StringOption;
18
+ cozy_user_created_routing_key: import("../../config/options").StringOption;
19
+ cozy_user_deleted_routing_key: import("../../config/options").StringOption;
20
+ };
21
+ export type CozyOptions = OptionsOf<typeof cozyOptions>;
22
+ /** The checked values for a caller that holds a Config instead of the plugin */
23
+ export declare function cozyOptionsOf(config: Config): CozyOptions;
@@ -2,6 +2,20 @@ import DmPlugin, { type Role } from '../../abstract/plugin';
2
2
  import type { DM } from '../../bin';
3
3
  import { Hooks } from '../../hooks';
4
4
  export default class CozyProvision extends DmPlugin {
5
+ static optionDefinitions: {
6
+ cozy_admin_url: import("../../config/options").StringOption;
7
+ cozy_admin_user: import("../../config/options").StringOption;
8
+ cozy_admin_passphrase: import("../../config/options").StringOption;
9
+ cozy_org_id: import("../../config/options").StringOption;
10
+ cozy_org_domain: import("../../config/options").StringOption;
11
+ cozy_default_locale: import("../../config/options").StringOption;
12
+ cozy_context_name: import("../../config/options").StringOption;
13
+ cozy_apps: import("../../config/options").StringOption;
14
+ cozy_auth_exchange: import("../../config/options").StringOption;
15
+ cozy_b2b_exchange: import("../../config/options").StringOption;
16
+ cozy_user_created_routing_key: import("../../config/options").StringOption;
17
+ cozy_user_deleted_routing_key: import("../../config/options").StringOption;
18
+ };
5
19
  name: string;
6
20
  roles: Role[];
7
21
  dependencies: {
@@ -11,6 +11,13 @@ import { type Role } from '../../abstract/plugin';
11
11
  import type { DM } from '../../bin';
12
12
  import { Hooks } from '../../hooks';
13
13
  export default class Drive extends TwakePlugin {
14
+ static optionDefinitions: {
15
+ twake_drive_webadmin_url: import("../../config/options").StringOption;
16
+ twake_drive_webadmin_token: import("../../config/options").StringOption;
17
+ twake_drive_concurrency: import("../../config/options").NumberOption;
18
+ twake_drive_domain_attribute: import("../../config/options").StringOption;
19
+ twake_drive_default_domain_template: import("../../config/options").StringOption;
20
+ };
14
21
  name: string;
15
22
  roles: Role[];
16
23
  dependencies: {
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Twake Drive plugin options, see `docs/plugin-development/options.md`.
3
+ */
4
+ import type { Config } from '../../config/args';
5
+ import { type OptionsOf } from '../../config/options';
6
+ export declare const driveOptions: {
7
+ twake_drive_webadmin_url: import("../../config/options").StringOption;
8
+ twake_drive_webadmin_token: import("../../config/options").StringOption;
9
+ twake_drive_concurrency: import("../../config/options").NumberOption;
10
+ twake_drive_domain_attribute: import("../../config/options").StringOption;
11
+ twake_drive_default_domain_template: import("../../config/options").StringOption;
12
+ };
13
+ export type DriveOptions = OptionsOf<typeof driveOptions>;
14
+ /** The checked values for a caller that holds a Config instead of the plugin */
15
+ export declare function driveOptionsOf(config: Config): DriveOptions;
@@ -11,6 +11,7 @@ import { type LifecycleAttributes } from './lifecycleAttributes';
11
11
  */
12
12
  export declare const read: (entry: AttributesList, attribute: string) => string | undefined;
13
13
  export declare const ORG = "{org}";
14
+ export declare function withOrg(pattern: string, org: string): string;
14
15
  /** A refusal the routes answer as `{ error, code }`. */
15
16
  export declare class RouteError extends Error {
16
17
  readonly status: number;
@@ -36,11 +37,13 @@ export declare function values(value: AttributeValue | undefined): string[];
36
37
  /** A DN spelled one way, to compare two spellings of it. */
37
38
  export declare function dnKey(dn: string): string;
38
39
  export declare function parentOf(dn: string): string;
39
- /** The RDN value of a DN, unescaped, or the DN itself if it has none. */
40
- export declare function rdnValue(dn: string): string;
41
40
  /**
42
41
  * The entries one level under a DN pattern holding `{org}`, the organization
43
- * captured as one RDN value: `(?:\\.|[^,])+` keeps an escaped comma inside it.
42
+ * captured as one RDN value: an escaped comma stays inside it.
43
+ *
44
+ * A backslash and the character it escapes are read as one, and a comma ends
45
+ * the value, so each character of the value is followed one way whatever
46
+ * the DN holds.
44
47
  */
45
48
  export declare function branchPattern(base: string): RegExp;
46
49
  /**
@@ -50,7 +53,31 @@ export declare function branchPattern(base: string): RegExp;
50
53
  export declare function movedInto(pattern: RegExp, dn: string, newDn: string): string | undefined;
51
54
  /** The organization of an entry one level under a branch pattern. */
52
55
  export declare function organizationIn(pattern: RegExp, dn: string): string | undefined;
56
+ export declare const TwakeOrganizationParams: import("@sinclair/typebox").TObject<{
57
+ id: import("@sinclair/typebox").TString;
58
+ }>;
59
+ export declare const OrganizationGroupParams: import("@sinclair/typebox").TObject<{
60
+ id: import("@sinclair/typebox").TString;
61
+ groupId: import("@sinclair/typebox").TString;
62
+ }>;
63
+ export declare const OrganizationGroupMemberParams: import("@sinclair/typebox").TObject<{
64
+ id: import("@sinclair/typebox").TString;
65
+ groupId: import("@sinclair/typebox").TString;
66
+ userId: import("@sinclair/typebox").TString;
67
+ }>;
53
68
  export default class TwakeGroups extends LdapGroups {
69
+ static optionDefinitions: {
70
+ twake_group_base: import("../../config/options").StringOption;
71
+ twake_group_user_base: import("../../config/options").StringOption;
72
+ twake_group_organization_dn: import("../../config/options").StringOption;
73
+ twake_group_organization_status_attribute: import("../../config/options").StringOption;
74
+ twake_group_organization_deleted_value: import("../../config/options").StringOption;
75
+ twake_group_display_name_attribute: import("../../config/options").StringOption;
76
+ twake_group_color_attribute: import("../../config/options").StringOption;
77
+ twake_group_created_at_attribute: import("../../config/options").StringOption;
78
+ twake_group_max_page_limit: import("../../config/options").NumberOption;
79
+ twake_group_member_fields: import("../../config/options").JsonOption<{}>;
80
+ };
54
81
  name: string;
55
82
  protected readonly groupBase: string;
56
83
  protected readonly userBase: string;