ldap-rest 0.0.1

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 (296) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +48 -0
  3. package/bin/cleanup-external-users.mjs +219 -0
  4. package/bin/index.mjs +54 -0
  5. package/bin/sync-james.mjs +190 -0
  6. package/dist/abstract/ldapFlat.js +1 -0
  7. package/dist/abstract/plugin.js +1 -0
  8. package/dist/abstract/twakePlugin.js +1 -0
  9. package/dist/bin/index.js +1 -0
  10. package/dist/config/args.js +1 -0
  11. package/dist/lib/auth/base.js +1 -0
  12. package/dist/lib/authz/base.js +1 -0
  13. package/dist/lib/expressFormatedResponses.js +1 -0
  14. package/dist/lib/ldapActions.js +1 -0
  15. package/dist/lib/parseConfig.js +1 -0
  16. package/dist/lib/utils.js +1 -0
  17. package/dist/logger/winston.js +1 -0
  18. package/dist/plugins/auth/authzLinid1.js +1 -0
  19. package/dist/plugins/auth/authzPerBranch.js +1 -0
  20. package/dist/plugins/auth/crowdsec.js +1 -0
  21. package/dist/plugins/auth/llng.js +1 -0
  22. package/dist/plugins/auth/openidconnect.js +1 -0
  23. package/dist/plugins/auth/rateLimit.js +1 -0
  24. package/dist/plugins/auth/token.js +1 -0
  25. package/dist/plugins/configApi.js +1 -0
  26. package/dist/plugins/demo/helloworld.js +1 -0
  27. package/dist/plugins/ldap/bulkImport.js +1 -0
  28. package/dist/plugins/ldap/departmentSync.js +1 -0
  29. package/dist/plugins/ldap/externalUsersInGroups.js +1 -0
  30. package/dist/plugins/ldap/flatGeneric.js +1 -0
  31. package/dist/plugins/ldap/groups.js +1 -0
  32. package/dist/plugins/ldap/onChange.js +1 -0
  33. package/dist/plugins/ldap/organization.js +1 -0
  34. package/dist/plugins/ldap/trash.js +1 -0
  35. package/dist/plugins/priority.json.js +1 -0
  36. package/dist/plugins/static.js +1 -0
  37. package/dist/plugins/twake/calendarResources.js +1 -0
  38. package/dist/plugins/twake/james.js +1 -0
  39. package/dist/plugins/weblogs.js +1 -0
  40. package/dist/src/abstract/ldapFlat.d.ts +94 -0
  41. package/dist/src/abstract/plugin.d.ts +43 -0
  42. package/dist/src/abstract/twakePlugin.d.ts +90 -0
  43. package/dist/src/bin/index.d.ts +43 -0
  44. package/dist/src/browser/ldap-group-editor/LdapGroupEditor.d.ts +31 -0
  45. package/dist/src/browser/ldap-group-editor/api/GroupApiClient.d.ts +23 -0
  46. package/dist/src/browser/ldap-group-editor/components/CreateGroupModal.d.ts +19 -0
  47. package/dist/src/browser/ldap-group-editor/components/GroupPropertyEditor.d.ts +30 -0
  48. package/dist/src/browser/ldap-group-editor/components/GroupTree.d.ts +17 -0
  49. package/dist/src/browser/ldap-group-editor/components/MoveGroupModal.d.ts +20 -0
  50. package/dist/src/browser/ldap-group-editor/index.d.ts +6 -0
  51. package/dist/src/browser/ldap-group-editor/types.d.ts +58 -0
  52. package/dist/src/browser/ldap-resource-editor/api/ResourceApiClient.d.ts +53 -0
  53. package/dist/src/browser/ldap-resource-editor/cache/CacheManager.d.ts +65 -0
  54. package/dist/src/browser/ldap-resource-editor/index.d.ts +6 -0
  55. package/dist/src/browser/ldap-resource-editor/types.d.ts +78 -0
  56. package/dist/src/browser/ldap-tree-viewer/LdapTreeViewer.d.ts +26 -0
  57. package/dist/src/browser/ldap-tree-viewer/api/LdapApiClient.d.ts +30 -0
  58. package/dist/src/browser/ldap-tree-viewer/components/TreeNode.d.ts +17 -0
  59. package/dist/src/browser/ldap-tree-viewer/components/TreeRoot.d.ts +14 -0
  60. package/dist/src/browser/ldap-tree-viewer/index.d.ts +7 -0
  61. package/dist/src/browser/ldap-tree-viewer/store/Store.d.ts +18 -0
  62. package/dist/src/browser/ldap-tree-viewer/store/actions.d.ts +28 -0
  63. package/dist/src/browser/ldap-tree-viewer/store/reducers.d.ts +7 -0
  64. package/dist/src/browser/ldap-tree-viewer/types.d.ts +34 -0
  65. package/dist/src/browser/ldap-unit-editor/LdapUnitEditor.d.ts +27 -0
  66. package/dist/src/browser/ldap-unit-editor/api/UnitApiClient.d.ts +24 -0
  67. package/dist/src/browser/ldap-unit-editor/components/MoveUnitModal.d.ts +28 -0
  68. package/dist/src/browser/ldap-unit-editor/components/UnitPropertyEditor.d.ts +28 -0
  69. package/dist/src/browser/ldap-unit-editor/components/UnitTree.d.ts +18 -0
  70. package/dist/src/browser/ldap-unit-editor/index.d.ts +6 -0
  71. package/dist/src/browser/ldap-unit-editor/types.d.ts +55 -0
  72. package/dist/src/browser/ldap-user-editor/LdapUserEditor.d.ts +32 -0
  73. package/dist/src/browser/ldap-user-editor/api/UserApiClient.d.ts +55 -0
  74. package/dist/src/browser/ldap-user-editor/cache/CacheManager.d.ts +65 -0
  75. package/dist/src/browser/ldap-user-editor/components/MoveUserModal.d.ts +28 -0
  76. package/dist/src/browser/ldap-user-editor/components/PointerField.d.ts +22 -0
  77. package/dist/src/browser/ldap-user-editor/components/UserEditor.d.ts +46 -0
  78. package/dist/src/browser/ldap-user-editor/components/UserList.d.ts +24 -0
  79. package/dist/src/browser/ldap-user-editor/components/UserTree.d.ts +24 -0
  80. package/dist/src/browser/ldap-user-editor/index.d.ts +7 -0
  81. package/dist/src/browser/ldap-user-editor/types.d.ts +67 -0
  82. package/dist/src/browser/shared/components/Modal.d.ts +38 -0
  83. package/dist/src/browser/shared/components/StatusMessage.d.ts +48 -0
  84. package/dist/src/browser/shared/index.d.ts +10 -0
  85. package/dist/src/browser/shared/types/index.d.ts +65 -0
  86. package/dist/src/browser/shared/utils/dom.d.ts +33 -0
  87. package/dist/src/browser/shared/utils/form.d.ts +28 -0
  88. package/dist/src/browser/shared/utils/schema.d.ts +29 -0
  89. package/dist/src/config/args.d.ts +128 -0
  90. package/dist/src/config/schema.d.ts +18 -0
  91. package/dist/src/hooks.d.ts +76 -0
  92. package/dist/src/lib/auth/base.d.ts +9 -0
  93. package/dist/src/lib/authz/base.d.ts +63 -0
  94. package/dist/src/lib/expressFormatedResponses.d.ts +26 -0
  95. package/dist/src/lib/ldapActions.d.ts +91 -0
  96. package/dist/src/lib/parseConfig.d.ts +23 -0
  97. package/dist/src/lib/utils.d.ts +73 -0
  98. package/dist/src/logger/winston.d.ts +3 -0
  99. package/dist/src/plugins/auth/authzLinid1.d.ts +46 -0
  100. package/dist/src/plugins/auth/authzPerBranch.d.ts +59 -0
  101. package/dist/src/plugins/auth/crowdsec.d.ts +29 -0
  102. package/dist/src/plugins/auth/llng.d.ts +8 -0
  103. package/dist/src/plugins/auth/openidconnect.d.ts +11 -0
  104. package/dist/src/plugins/auth/rateLimit.d.ts +24 -0
  105. package/dist/src/plugins/auth/token.d.ts +17 -0
  106. package/dist/src/plugins/configApi.d.ts +24 -0
  107. package/dist/src/plugins/demo/helloworld.d.ts +12 -0
  108. package/dist/src/plugins/ldap/bulkImport.d.ts +48 -0
  109. package/dist/src/plugins/ldap/departmentSync.d.ts +35 -0
  110. package/dist/src/plugins/ldap/externalUsersInGroups.d.ts +21 -0
  111. package/dist/src/plugins/ldap/flatGeneric.d.ts +31 -0
  112. package/dist/src/plugins/ldap/groups.d.ts +95 -0
  113. package/dist/src/plugins/ldap/onChange.d.ts +32 -0
  114. package/dist/src/plugins/ldap/organization.d.ts +65 -0
  115. package/dist/src/plugins/ldap/trash.d.ts +52 -0
  116. package/dist/src/plugins/static.d.ts +7 -0
  117. package/dist/src/plugins/twake/calendarResources.d.ts +31 -0
  118. package/dist/src/plugins/twake/james.d.ts +83 -0
  119. package/dist/src/plugins/weblogs.d.ts +8 -0
  120. package/docs/DEVELOPER_GUIDE.md +298 -0
  121. package/docs/OPENAPI.md +440 -0
  122. package/docs/PLUGIN_DEPENDENCIES.md +612 -0
  123. package/docs/README.md +466 -0
  124. package/docs/api/REFERENCE.md +983 -0
  125. package/docs/api/REST_API.md +1237 -0
  126. package/docs/authentication.md +469 -0
  127. package/docs/authzLinid1.md +521 -0
  128. package/docs/authzPerBranch.md +596 -0
  129. package/docs/browser/LIBRARIES.md +1196 -0
  130. package/docs/examples/EXAMPLES.md +1659 -0
  131. package/docs/examples/twake-mailbox-type-nomenclature.ldif +37 -0
  132. package/docs/examples/twake-mailbox-type-schema-amendment.ldif +30 -0
  133. package/docs/jamesTeamMailboxes.md +343 -0
  134. package/docs/ldapBulkImport.md +722 -0
  135. package/docs/ldapExternalUsersInGroups.md +325 -0
  136. package/docs/ldapFlatGeneric.md +444 -0
  137. package/docs/ldapGroups.md +589 -0
  138. package/docs/ldapOrganizations.md +659 -0
  139. package/docs/ldapTrash.md +260 -0
  140. package/docs/linagora.png +0 -0
  141. package/docs/onChange.md +318 -0
  142. package/docs/plugins/DEVELOPMENT.md +1219 -0
  143. package/docs/presenterm-fr.md +721 -0
  144. package/docs/presenterm.md +721 -0
  145. package/docs/schemas/SCHEMAS.md +1212 -0
  146. package/docs/static.md +410 -0
  147. package/docs/twakeCalendarResources.md +148 -0
  148. package/docs/twakeJames.md +661 -0
  149. package/docs/weblogs.md +399 -0
  150. package/examples/web/ldap-group-editor.html +113 -0
  151. package/examples/web/ldap-tree-viewer.html +368 -0
  152. package/examples/web/ldap-unit-editor.html +108 -0
  153. package/examples/web/ldap-user-editor.html +412 -0
  154. package/package.json +458 -0
  155. package/static/browser/common-demo.css +450 -0
  156. package/static/browser/ldap-group-editor/LdapGroupEditor.js +207 -0
  157. package/static/browser/ldap-group-editor/LdapGroupEditor.js.map +1 -0
  158. package/static/browser/ldap-group-editor/api/GroupApiClient.js +112 -0
  159. package/static/browser/ldap-group-editor/api/GroupApiClient.js.map +1 -0
  160. package/static/browser/ldap-group-editor/components/CreateGroupModal.js +212 -0
  161. package/static/browser/ldap-group-editor/components/CreateGroupModal.js.map +1 -0
  162. package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js +497 -0
  163. package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js.map +1 -0
  164. package/static/browser/ldap-group-editor/components/GroupTree.js +153 -0
  165. package/static/browser/ldap-group-editor/components/GroupTree.js.map +1 -0
  166. package/static/browser/ldap-group-editor/components/MoveGroupModal.js +235 -0
  167. package/static/browser/ldap-group-editor/components/MoveGroupModal.js.map +1 -0
  168. package/static/browser/ldap-group-editor/index.js +2 -0
  169. package/static/browser/ldap-group-editor/index.js.map +1 -0
  170. package/static/browser/ldap-group-editor/types.js +2 -0
  171. package/static/browser/ldap-group-editor/types.js.map +1 -0
  172. package/static/browser/ldap-group-editor.esm.js +1399 -0
  173. package/static/browser/ldap-group-editor.esm.js.map +1 -0
  174. package/static/browser/ldap-group-editor.js +1407 -0
  175. package/static/browser/ldap-group-editor.js.map +1 -0
  176. package/static/browser/ldap-group-editor.min.js +2 -0
  177. package/static/browser/ldap-group-editor.min.js.map +1 -0
  178. package/static/browser/ldap-resource-editor/api/ResourceApiClient.js +226 -0
  179. package/static/browser/ldap-resource-editor/api/ResourceApiClient.js.map +1 -0
  180. package/static/browser/ldap-resource-editor/cache/CacheManager.js +123 -0
  181. package/static/browser/ldap-resource-editor/cache/CacheManager.js.map +1 -0
  182. package/static/browser/ldap-resource-editor/index.js +2 -0
  183. package/static/browser/ldap-resource-editor/index.js.map +1 -0
  184. package/static/browser/ldap-resource-editor/types.js +2 -0
  185. package/static/browser/ldap-resource-editor/types.js.map +1 -0
  186. package/static/browser/ldap-tree-viewer/LdapTreeViewer.js +187 -0
  187. package/static/browser/ldap-tree-viewer/LdapTreeViewer.js.map +1 -0
  188. package/static/browser/ldap-tree-viewer/api/LdapApiClient.js +50 -0
  189. package/static/browser/ldap-tree-viewer/api/LdapApiClient.js.map +1 -0
  190. package/static/browser/ldap-tree-viewer/components/TreeNode.js +140 -0
  191. package/static/browser/ldap-tree-viewer/components/TreeNode.js.map +1 -0
  192. package/static/browser/ldap-tree-viewer/components/TreeRoot.js +98 -0
  193. package/static/browser/ldap-tree-viewer/components/TreeRoot.js.map +1 -0
  194. package/static/browser/ldap-tree-viewer/index.js +2 -0
  195. package/static/browser/ldap-tree-viewer/index.js.map +1 -0
  196. package/static/browser/ldap-tree-viewer/store/Store.js +29 -0
  197. package/static/browser/ldap-tree-viewer/store/Store.js.map +1 -0
  198. package/static/browser/ldap-tree-viewer/store/actions.js +53 -0
  199. package/static/browser/ldap-tree-viewer/store/actions.js.map +1 -0
  200. package/static/browser/ldap-tree-viewer/store/reducers.js +79 -0
  201. package/static/browser/ldap-tree-viewer/store/reducers.js.map +1 -0
  202. package/static/browser/ldap-tree-viewer/types.js +2 -0
  203. package/static/browser/ldap-tree-viewer/types.js.map +1 -0
  204. package/static/browser/ldap-tree-viewer.css +2 -0
  205. package/static/browser/ldap-tree-viewer.css.map +1 -0
  206. package/static/browser/ldap-tree-viewer.esm.js +606 -0
  207. package/static/browser/ldap-tree-viewer.esm.js.map +1 -0
  208. package/static/browser/ldap-tree-viewer.js +614 -0
  209. package/static/browser/ldap-tree-viewer.js.map +1 -0
  210. package/static/browser/ldap-tree-viewer.min.js +2 -0
  211. package/static/browser/ldap-tree-viewer.min.js.map +1 -0
  212. package/static/browser/ldap-unit-editor/LdapUnitEditor.js +119 -0
  213. package/static/browser/ldap-unit-editor/LdapUnitEditor.js.map +1 -0
  214. package/static/browser/ldap-unit-editor/api/UnitApiClient.js +95 -0
  215. package/static/browser/ldap-unit-editor/api/UnitApiClient.js.map +1 -0
  216. package/static/browser/ldap-unit-editor/components/MoveUnitModal.js +295 -0
  217. package/static/browser/ldap-unit-editor/components/MoveUnitModal.js.map +1 -0
  218. package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js +321 -0
  219. package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js.map +1 -0
  220. package/static/browser/ldap-unit-editor/components/UnitTree.js +197 -0
  221. package/static/browser/ldap-unit-editor/components/UnitTree.js.map +1 -0
  222. package/static/browser/ldap-unit-editor/index.js +2 -0
  223. package/static/browser/ldap-unit-editor/index.js.map +1 -0
  224. package/static/browser/ldap-unit-editor/types.js +2 -0
  225. package/static/browser/ldap-unit-editor/types.js.map +1 -0
  226. package/static/browser/ldap-unit-editor.esm.js +1013 -0
  227. package/static/browser/ldap-unit-editor.esm.js.map +1 -0
  228. package/static/browser/ldap-unit-editor.js +1021 -0
  229. package/static/browser/ldap-unit-editor.js.map +1 -0
  230. package/static/browser/ldap-unit-editor.min.js +2 -0
  231. package/static/browser/ldap-unit-editor.min.js.map +1 -0
  232. package/static/browser/ldap-user-editor/LdapUserEditor.js +184 -0
  233. package/static/browser/ldap-user-editor/LdapUserEditor.js.map +1 -0
  234. package/static/browser/ldap-user-editor/api/UserApiClient.js +209 -0
  235. package/static/browser/ldap-user-editor/api/UserApiClient.js.map +1 -0
  236. package/static/browser/ldap-user-editor/cache/CacheManager.js +123 -0
  237. package/static/browser/ldap-user-editor/cache/CacheManager.js.map +1 -0
  238. package/static/browser/ldap-user-editor/components/MoveUserModal.js +302 -0
  239. package/static/browser/ldap-user-editor/components/MoveUserModal.js.map +1 -0
  240. package/static/browser/ldap-user-editor/components/PointerField.js +152 -0
  241. package/static/browser/ldap-user-editor/components/PointerField.js.map +1 -0
  242. package/static/browser/ldap-user-editor/components/UserEditor.js +608 -0
  243. package/static/browser/ldap-user-editor/components/UserEditor.js.map +1 -0
  244. package/static/browser/ldap-user-editor/components/UserList.js +181 -0
  245. package/static/browser/ldap-user-editor/components/UserList.js.map +1 -0
  246. package/static/browser/ldap-user-editor/components/UserTree.js +164 -0
  247. package/static/browser/ldap-user-editor/components/UserTree.js.map +1 -0
  248. package/static/browser/ldap-user-editor/index.js +2 -0
  249. package/static/browser/ldap-user-editor/index.js.map +1 -0
  250. package/static/browser/ldap-user-editor/types.js +2 -0
  251. package/static/browser/ldap-user-editor/types.js.map +1 -0
  252. package/static/browser/ldap-user-editor.css +2 -0
  253. package/static/browser/ldap-user-editor.css.map +1 -0
  254. package/static/browser/ldap-user-editor.esm.js +1897 -0
  255. package/static/browser/ldap-user-editor.esm.js.map +1 -0
  256. package/static/browser/ldap-user-editor.js +1905 -0
  257. package/static/browser/ldap-user-editor.js.map +1 -0
  258. package/static/browser/ldap-user-editor.min.js +2 -0
  259. package/static/browser/ldap-user-editor.min.js.map +1 -0
  260. package/static/browser/shared/components/Modal.js +121 -0
  261. package/static/browser/shared/components/Modal.js.map +1 -0
  262. package/static/browser/shared/components/StatusMessage.js +119 -0
  263. package/static/browser/shared/components/StatusMessage.js.map +1 -0
  264. package/static/browser/shared/index.js +7 -0
  265. package/static/browser/shared/index.js.map +1 -0
  266. package/static/browser/shared/types/index.js +37 -0
  267. package/static/browser/shared/types/index.js.map +1 -0
  268. package/static/browser/shared/utils/dom.js +78 -0
  269. package/static/browser/shared/utils/dom.js.map +1 -0
  270. package/static/browser/shared/utils/form.js +234 -0
  271. package/static/browser/shared/utils/form.js.map +1 -0
  272. package/static/browser/shared/utils/schema.js +121 -0
  273. package/static/browser/shared/utils/schema.js.map +1 -0
  274. package/static/browser/shared.esm.js +694 -0
  275. package/static/browser/shared.esm.js.map +1 -0
  276. package/static/browser/shared.js +723 -0
  277. package/static/browser/shared.js.map +1 -0
  278. package/static/browser/shared.min.js +2 -0
  279. package/static/browser/shared.min.js.map +1 -0
  280. package/static/schemas/ad/computers.json +92 -0
  281. package/static/schemas/ad/groups.json +55 -0
  282. package/static/schemas/ad/organizations.json +66 -0
  283. package/static/schemas/ad/users.json +116 -0
  284. package/static/schemas/standard/devices.json +72 -0
  285. package/static/schemas/standard/groups.json +54 -0
  286. package/static/schemas/standard/organizations.json +49 -0
  287. package/static/schemas/standard/users.json +86 -0
  288. package/static/schemas/twake/groups.json +75 -0
  289. package/static/schemas/twake/nomenclature/twakeAccountStatus.json +31 -0
  290. package/static/schemas/twake/nomenclature/twakeDeliveryMode.json +31 -0
  291. package/static/schemas/twake/nomenclature/twakeListType.json +31 -0
  292. package/static/schemas/twake/nomenclature/twakeMailboxType.json +31 -0
  293. package/static/schemas/twake/nomenclature/twakeTitle.json +31 -0
  294. package/static/schemas/twake/organizations.json +52 -0
  295. package/static/schemas/twake/positions.json +32 -0
  296. package/static/schemas/twake/users.json +112 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldap-group-editor.js","sources":["../../../../src/browser/ldap-group-editor/api/GroupApiClient.ts","../../../../src/browser/ldap-group-editor/components/GroupTree.ts","../../../../src/browser/ldap-group-editor/components/MoveGroupModal.ts","../../../../src/browser/ldap-group-editor/components/GroupPropertyEditor.ts","../../../../src/browser/ldap-group-editor/components/CreateGroupModal.ts","../../../../src/browser/ldap-group-editor/LdapGroupEditor.ts"],"sourcesContent":[null,null,null,null,null,null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).LdapGroupEditor={})}(this,function(e){"use strict";class t{constructor(e){this.baseUrl=e}async getConfig(){const e=await fetch(`${this.baseUrl}/api/v1/config`);if(!e.ok)throw new Error(`Failed to load config: ${e.statusText}`);return e.json()}async getOrganizations(){const e=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/top`);if(!e.ok)throw new Error(`Failed to load organizations: ${e.statusText}`);return e.json()}async getGroups(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes?objectClass=groupOfNames`);if(!t.ok)throw new Error(`Failed to load groups: ${t.statusText}`);return(await t.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:[e.objectClass];return t.includes("groupOfNames")||t.includes("group")})}async getGroup(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`);if(!t.ok)throw new Error(`Failed to load group: ${t.statusText}`);return t.json()}async updateGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok){const e=await n.text();throw new Error(`Failed to update group: ${e}`)}}async createEntry(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!n.ok){const e=await n.text();throw new Error(`Failed to create entry: ${e}`)}}async deleteEntry(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}`,{method:"DELETE"});if(!t.ok){const e=await t.text();throw new Error(`Failed to delete entry: ${e}`)}}async moveGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/move`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({targetOrgDn:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to move group: ${e}`)}}async renameGroup(e,t){const n=await fetch(`${this.baseUrl}/api/v1/ldap/groups/${encodeURIComponent(e)}/rename`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({newCn:t})});if(!n.ok){const e=await n.text();throw new Error(`Failed to rename group: ${e}`)}}async getPointerOptions(e){const t=await fetch(`${this.baseUrl}/api/v1/ldap/search?base=${encodeURIComponent(e)}&scope=one`);if(!t.ok)throw new Error(`Failed to load pointer options: ${t.statusText}`);return(await t.json()).map(e=>({dn:e.dn,label:e.cn?.[0]||e.ou?.[0]||e.dn}))}}class n{constructor(e,t,n){this.expandedNodes=new Set,this.selectedDn=null,this.rootDn=null,this.container=e,this.apiBaseUrl=t,this.onOrgSelect=n}async init(){this.container.innerHTML='\n <div class="group-tree">\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">account_tree</span>\n Organizations\n </h3>\n <div id="tree-content">\n <div class="loading"><div class="spinner"></div></div>\n </div>\n </div>\n ';try{const e=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/top`);if(!e.ok)throw new Error("Failed to load organizations");const t=await e.json();this.rootDn=t.dn,await this.renderTree()}catch(e){console.error("Failed to init tree:",e);const t=this.container.querySelector("#tree-content");t&&(t.innerHTML='<p style="color: #f44336;">Failed to load organizations</p>')}}async renderTree(){const e=this.container.querySelector("#tree-content");if(e&&this.rootDn)try{const t=await this.renderNode(this.rootDn,0);e.innerHTML=t,this.attachEventListeners()}catch(t){console.error("Failed to render tree:",t),e.innerHTML='<p style="color: #f44336;">Error rendering tree</p>'}}async renderNode(e,t){const n=this.expandedNodes.has(e),r=this.selectedDn===e,o=20*t,i=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!i.ok)throw new Error("Failed to load node");const a=await i.json();let s=e;a.ou?s=Array.isArray(a.ou)?a.ou[0]:a.ou:a.cn&&(s=Array.isArray(a.cn)?a.cn[0]:a.cn);let l=`\n <div class="tree-node ${r?"active":""}" style="padding-left: ${o}px; padding: 8px 8px 8px ${o}px; cursor: pointer; display: flex; align-items: center; gap: 4px;">\n <span class="material-icons tree-node-toggle" data-dn="${this.escapeHtml(e)}" style="font-size: 18px; cursor: pointer;">\n ${n?"expand_more":"chevron_right"}\n </span>\n <span class="material-icons" style="font-size: 18px;">business</span>\n <span class="tree-node-label" data-dn="${this.escapeHtml(e)}">${this.escapeHtml(s)}</span>\n </div>\n `;if(n)try{const n=await fetch(`${this.apiBaseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes`);if(!n.ok)throw new Error("Failed to load subnodes");const r=(await n.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:e.objectClass?[e.objectClass]:[];return t.includes("organizationalUnit")||t.includes("organization")});for(const e of r)l+=await this.renderNode(e.dn,t+1)}catch(t){console.error("Failed to load subnodes for",e,t)}return l}attachEventListeners(){this.container.querySelectorAll(".tree-node-toggle").forEach(e=>{e.addEventListener("click",async t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.expandedNodes.has(n)?this.expandedNodes.delete(n):this.expandedNodes.add(n),await this.renderTree())})}),this.container.querySelectorAll(".tree-node-label").forEach(e=>{e.addEventListener("click",t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.selectedDn=n,this.onOrgSelect(n),this.renderTree())})})}escapeHtml(e){if(null==e)return"";const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}class r{constructor(e,t,n){this.modal=null,this.expandedNodes=new Set,this.selectedOrgDn=null,this.api=e,this.currentOrgDn=t,this.onMove=n}async show(){this.modal=document.createElement("div"),this.modal.style.cssText="\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n ";const e=document.createElement("div");e.style.cssText="\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 600px;\n width: 90%;\n max-height: 80vh;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n ",e.innerHTML='\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">drive_file_move</span>\n Move Group to Organization\n </h3>\n <p style="margin: 0 0 16px 0; color: #666;">Select the target organization:</p>\n <div id="org-tree" style="margin-bottom: 24px; max-height: 400px; overflow-y: auto; border: 1px solid #ddd; border-radius: 4px; padding: 12px;">\n <div class="loading"><div class="spinner"></div></div>\n </div>\n <div style="display: flex; gap: 12px; justify-content: flex-end;">\n <button type="button" id="cancel-move-btn" style="padding: 10px 20px; border: 1px solid #ddd; background: white; border-radius: 4px; cursor: pointer;">Cancel</button>\n <button type="button" id="confirm-move-btn" disabled style="padding: 10px 20px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">drive_file_move</span>\n Move Here\n </button>\n </div>\n ',this.modal.appendChild(e),document.body.appendChild(this.modal);const t=this.modal.querySelector("#cancel-move-btn");t&&t.addEventListener("click",()=>this.close());const n=this.modal.querySelector("#confirm-move-btn");n&&n.addEventListener("click",()=>this.handleConfirm()),this.modal.addEventListener("click",e=>{e.target===this.modal&&this.close()}),await this.loadOrgTree()}async loadOrgTree(){const e=this.modal?.querySelector("#org-tree");if(e)try{const t=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/top`);if(!t.ok)throw new Error("Failed to load organizations");const n=(await t.json()).dn,r=await this.renderNode(n,0);e.innerHTML=r,this.attachTreeEventListeners()}catch(t){console.error("Failed to load organization tree:",t),e.innerHTML='<p style="color: #f44336;">Failed to load organizations</p>'}}async renderNode(e,t){const n=this.expandedNodes.has(e),r=this.selectedOrgDn===e,o=this.currentOrgDn===e,i=20*t,a=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!a.ok)throw new Error("Failed to load node");const s=await a.json();let l=e;s.ou?l=Array.isArray(s.ou)?s.ou[0]:s.ou:s.cn&&(l=Array.isArray(s.cn)?s.cn[0]:s.cn);let d=`\n <div class="${`tree-node ${r?"selected":""} ${o?"current-org":""}`}" style="${`padding-left: ${i}px; padding: 8px 8px 8px ${i}px; cursor: ${o?"not-allowed":"pointer"}; display: flex; align-items: center; gap: 4px; ${o?"opacity: 0.5; background: #f5f5f5;":r?"background: #e3f2fd;":""}`}" data-dn="${this.escapeHtml(e)}" data-is-current="${o}">\n <span class="material-icons tree-node-toggle" data-dn="${this.escapeHtml(e)}" style="font-size: 18px; cursor: pointer;">\n ${n?"expand_more":"chevron_right"}\n </span>\n <span class="material-icons" style="font-size: 18px;">business</span>\n <span class="tree-node-label" data-dn="${this.escapeHtml(e)}">${this.escapeHtml(l)}</span>\n ${o?'<span style="font-size: 12px; color: #666; margin-left: 8px;">(current)</span>':""}\n </div>\n `;if(n)try{const n=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}/subnodes`);if(!n.ok)throw new Error("Failed to load subnodes");const r=(await n.json()).filter(e=>{const t=Array.isArray(e.objectClass)?e.objectClass:e.objectClass?[e.objectClass]:[];return t.includes("organizationalUnit")||t.includes("organization")});for(const e of r)d+=await this.renderNode(e.dn,t+1)}catch(t){console.error("Failed to load subnodes for",e,t)}return d}attachTreeEventListeners(){const e=this.modal?.querySelector("#org-tree");e&&(e.querySelectorAll(".tree-node-toggle").forEach(e=>{e.addEventListener("click",async t=>{t.stopPropagation();const n=e.getAttribute("data-dn");n&&(this.expandedNodes.has(n)?this.expandedNodes.delete(n):this.expandedNodes.add(n),await this.loadOrgTree())})}),e.querySelectorAll(".tree-node").forEach(t=>{t.addEventListener("click",()=>{if("true"===t.getAttribute("data-is-current"))return;const n=t.getAttribute("data-dn");if(!n)return;this.selectedOrgDn=n,e.querySelectorAll(".tree-node").forEach(e=>{e.classList.remove("selected"),e.style.background=""}),t.classList.add("selected"),t.style.background="#e3f2fd";const r=this.modal?.querySelector("#confirm-move-btn");r&&(r.disabled=!1,r.style.opacity="1",r.style.cursor="pointer")})}))}async handleConfirm(){if(this.selectedOrgDn)try{await this.onMove(this.selectedOrgDn),this.close()}catch(e){console.error("Failed to move group:",e)}}close(){this.modal&&(document.body.removeChild(this.modal),this.modal=null)}escapeHtml(e){if(null==e)return"";const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}class o{constructor(e,t,n){this.group=null,this.schema=null,this.saveCallback=null,this.container=e,this.api=t,this.groupDn=n}async init(){try{await this.loadGroup(),await this.loadSchema(),this.render(),this.attachEventListeners()}catch(e){throw console.error("Failed to init GroupPropertyEditor:",e),e}}async loadGroup(){console.warn("[GroupPropertyEditor] Loading group:",this.groupDn),this.group=await this.api.getGroup(this.groupDn),console.warn("[GroupPropertyEditor] Group loaded:",this.group)}async loadSchema(){console.warn("[GroupPropertyEditor] Loading schema...");const e=await this.api.getConfig();console.warn("[GroupPropertyEditor] Config loaded:",e);const t=e.features?.ldapGroups;if(console.warn("[GroupPropertyEditor] Groups config:",t),t?.schemaUrl){const e=await fetch(t.schemaUrl);this.schema=await e.json(),console.warn("[GroupPropertyEditor] Schema loaded from URL:",this.schema)}else if(t?.schema)this.schema=t.schema,console.warn("[GroupPropertyEditor] Schema loaded from config:",this.schema);else{const t=e.features?.ldapFlatGeneric?.flatResources?.find(e=>"groups"===e.pluralName||"groups"===e.name);if(console.warn("[GroupPropertyEditor] Groups resource (flatResources):",t),t?.schemaUrl){const e=await fetch(t.schemaUrl);this.schema=await e.json(),console.warn("[GroupPropertyEditor] Schema loaded from URL (flatResources):",this.schema)}else t?.schema?(this.schema=t.schema,console.warn("[GroupPropertyEditor] Schema loaded from config (flatResources):",this.schema)):(console.warn("[GroupPropertyEditor] No schema configured, creating default schema from group attributes"),this.schema=this.createDefaultSchema(),console.warn("[GroupPropertyEditor] Default schema created:",this.schema))}}createDefaultSchema(){if(!this.group)return{entity:{objectClass:[]},attributes:{}};const e={};for(const[t,n]of Object.entries(this.group)){if("dn"===t||"*"===t||"objectClass"===t)continue;const r=Array.isArray(n);e[t]={type:r?"array":"string",required:!1,fixed:"dn"===t}}return{entity:{objectClass:Array.isArray(this.group.objectClass)?this.group.objectClass:[this.group.objectClass]},attributes:e}}onSave(e){this.saveCallback=e}render(){this.group&&(this.container.innerHTML=`\n <div class="group-property-editor">\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group</span>\n Edit Group\n </h3>\n <form id="group-edit-form">\n ${this.renderFields()}\n <div class="form-actions" style="margin-top: 24px; padding-top: 24px; border-top: 1px solid #e0e0e0; display: flex; gap: 12px; justify-content: space-between;">\n <button type="button" id="move-group-btn" class="btn btn-secondary" style="background: #757575; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">drive_file_move</span>\n Move\n </button>\n <div style="display: flex; gap: 12px;">\n <button type="button" id="delete-group-btn" class="btn btn-danger" style="background: #d32f2f; color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">delete</span>\n Delete Group\n </button>\n <button type="submit" class="btn btn-primary" style="background: var(--primary-color, #6200ee); color: white; padding: 10px 20px; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">save</span>\n Save Changes\n </button>\n </div>\n </div>\n </form>\n </div>\n `)}renderFields(){if(!this.group||!this.schema)return"<div>Loading...</div>";let e="";const t=[],n=[],r=[];for(const[e,o]of Object.entries(this.schema.attributes))o.fixed||"objectClass"===e||("member"===e||"owner"===e?n.push([e,o]):e.includes("mail")||e.includes("Mail")?r.push([e,o]):t.push([e,o]));if(t.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Basic Information</div>';for(const[n,r]of t)e+=this.renderField(n,r);e+="</div>"}if(r.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Email/Mailbox Settings</div>';for(const[t,n]of r)e+=this.renderField(t,n);e+="</div>"}if(n.length>0){e+='<div class="field-group" style="margin-bottom: 20px; padding: 16px; background: #f9f9f9; border-radius: 4px;">',e+='<div class="field-group-title" style="font-weight: 500; color: var(--primary-color, #6200ee); margin-bottom: 12px; font-size: 14px; text-transform: uppercase;">Members & Owners</div>';for(const[t,r]of n)e+=this.renderField(t,r);e+="</div>"}return e}renderField(e,t){const n=this.group?.[e],r=this.getFieldLabel(e),o=t.required?"required":"";if("array"===t.type){const t=Array.isArray(n)?n.join("\n"):"";return"member"===e||"owner"===e?`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <div style="display: flex; gap: 8px; margin-bottom: 8px;">\n <input type="text" id="${e}-add-input" placeholder="Search DN or email..." style="flex: 1; padding: 8px; border: 1px solid #ddd; border-radius: 4px;" list="${e}-suggestions" />\n <datalist id="${e}-suggestions"></datalist>\n <button type="button" class="btn-add-${e}" style="padding: 8px 16px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 4px;">\n <span class="material-icons" style="font-size: 16px;">add</span>\n Add\n </button>\n </div>\n <textarea name="${this.escapeHtml(e)}" id="${e}-list" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; min-height: 120px; font-family: 'Roboto', sans-serif;" ${o}>${this.escapeHtml(t)}</textarea>\n <div style="font-size: 12px; color: #666; margin-top: 4px;">\n One DN per line. Type to search for users, or enter DN/email manually. Select a line and press Delete to remove.\n </div>\n </div>\n `:`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <textarea name="${this.escapeHtml(e)}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px; min-height: 80px; font-family: 'Roboto', sans-serif;" ${o}>${this.escapeHtml(t)}</textarea>\n <div style="font-size: 12px; color: #666; margin-top: 4px;">Enter one value per line</div>\n </div>\n `}if("number"===t.type||"integer"===t.type)return`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <input type="number" name="${this.escapeHtml(e)}" value="${n||""}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ${o} />\n </div>\n `;const i=e.toLowerCase().includes("mail")?"email":"text";return`\n <div class="form-group" style="margin-bottom: 16px;">\n <label style="display: block; margin-bottom: 8px; font-weight: 500;">${this.escapeHtml(r)}</label>\n <input type="${i}" name="${this.escapeHtml(e)}" value="${this.escapeHtml(String(n||""))}" style="width: 100%; padding: 10px; border: 1px solid #ddd; border-radius: 4px;" ${o} />\n </div>\n `}getFieldLabel(e){return{cn:"Group Name",description:"Description",member:"Members",owner:"Owners",mail:"Email Address",twakeMailboxType:"Mailbox Type"}[e]||e.replace(/([A-Z])/g," $1").replace(/_/g," ").replace(/^./,e=>e.toUpperCase())}attachEventListeners(){const e=document.getElementById("group-edit-form");e&&e.addEventListener("submit",e=>this.handleSubmit(e));const t=document.getElementById("delete-group-btn");t&&t.addEventListener("click",()=>this.handleDelete());const n=document.getElementById("move-group-btn");n&&n.addEventListener("click",()=>this.handleMove());const r=this.container.querySelector(".btn-add-member");r&&r.addEventListener("click",()=>this.handleAddMember("member"));const o=this.container.querySelector(".btn-add-owner");o&&o.addEventListener("click",()=>this.handleAddMember("owner")),["member","owner"].forEach(e=>{const t=document.getElementById(`${e}-list`);t&&t.addEventListener("keydown",e=>{"Delete"===e.key&&this.handleDeleteMember(t,e)});const n=document.getElementById(`${e}-add-input`);if(n){let t;n.addEventListener("input",()=>{clearTimeout(t),t=window.setTimeout(()=>{this.searchUsers(n.value,e)},300)})}})}async searchUsers(e,t){if(e&&!(e.length<2))try{const n=await fetch(`${this.api.baseUrl}/api/v1/ldap/search?filter=(|(cn=*${encodeURIComponent(e)}*)(uid=*${encodeURIComponent(e)}*)(mail=*${encodeURIComponent(e)}*))`);if(!n.ok)return;const r=await n.json(),o=document.getElementById(`${t}-suggestions`);if(!o)return;o.innerHTML=r.slice(0,10).map(e=>{const t=e.cn?.[0]||e.uid?.[0]||e.mail?.[0]||e.dn;return`<option value="${this.escapeHtml(e.dn)}">${this.escapeHtml(t)}</option>`}).join("")}catch(e){console.error("Failed to search users:",e)}}async handleAddMember(e){const t=document.getElementById(`${e}-add-input`),n=document.getElementById(`${e}-list`);if(!t||!n)return;const r=t.value.trim();if(!r)return void alert("Please enter a DN or email address");const o=n.value.split("\n").map(e=>e.trim()).filter(e=>e);o.includes(r)?alert(`This ${e} already exists`):(o.push(r),n.value=o.join("\n"),t.value="",t.focus())}handleDeleteMember(e,t){const n=e.selectionStart,r=e.selectionEnd,o=e.value.split("\n");let i=0,a=0,s=0;for(let e=0;e<o.length;e++){const t=o[e].length+1;if(i<=n&&n<i+t&&(a=e),i<=r&&r<=i+t){s=e;break}i+=t}t.preventDefault();const l=o.filter((e,t)=>t<a||t>s);e.value=l.join("\n")}async handleSubmit(e){e.preventDefault();const t=e.target,n=new FormData(t),r={};for(const[e,t]of n.entries())"array"===this.schema?.attributes[e]?.type?r[e]=t.split("\n").map(e=>e.trim()).filter(e=>e):"number"===this.schema?.attributes[e]?.type||"integer"===this.schema?.attributes[e]?.type?r[e]=Number(t):r[e]=t;try{if(r.cn&&this.group?.cn){const e=Array.isArray(this.group.cn)?this.group.cn[0]:this.group.cn,t=r.cn;if(e!==t){delete r.cn,await this.api.renameGroup(this.groupDn,t);const n=this.groupDn.replace(new RegExp(`^cn=${e},`),`cn=${t},`);this.groupDn=n,Object.keys(r).length>0&&await this.api.updateGroup(this.groupDn,r)}else await this.api.updateGroup(this.groupDn,r)}else await this.api.updateGroup(this.groupDn,r);alert("Group updated successfully!"),this.saveCallback&&this.saveCallback()}catch(e){console.error("Failed to update group:",e),alert(`Failed to update group: ${e.message}`)}}async handleMove(){if(!this.group)return;const e=this.group.twakeDepartmentLink;if(!e)return void alert("Cannot move group: no organization link attribute found. This group may not support move operation.");const t=this.groupDn.match(/^cn=([^,]+)/),n=t?t[1]:this.groupDn,o=new r(this.api,e,async e=>{try{await this.api.moveGroup(n,e),alert("Group moved successfully!"),await this.loadGroup(),this.render(),this.attachEventListeners(),this.saveCallback&&this.saveCallback()}catch(e){console.error("Failed to move group:",e),alert(`Failed to move group: ${e.message}`)}});await o.show()}async handleDelete(){if(confirm(`Are you sure you want to delete this group?\n\n${this.groupDn}\n\nThis action cannot be undone.`))try{await this.api.deleteEntry(this.groupDn),alert("Group deleted successfully!"),this.container.innerHTML='\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>Group deleted. Select another group to edit.</p>\n </div>\n '}catch(e){console.error("Failed to delete group:",e),alert(`Failed to delete group: ${e.message}`)}}escapeHtml(e){if(null==e)return"";const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}class i{constructor(e,t,n,r){this.modal=null,this.api=e,this.config=t,this.orgDn=n,this.onCreated=r}async show(){this.modal=document.createElement("div"),this.modal.style.cssText="\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1000;\n ";const e=await this.getOrgPath(this.orgDn),t=document.createElement("div");t.style.cssText="\n background: white;\n border-radius: 8px;\n padding: 24px;\n max-width: 500px;\n width: 90%;\n max-height: 80vh;\n overflow-y: auto;\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n ",t.innerHTML=`\n <h3 style="margin: 0 0 16px 0; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group_add</span>\n Create New Group\n </h3>\n <form id="create-group-form" style="display: flex; flex-direction: column; gap: 16px;">\n <div>\n <label for="group-cn" style="display: block; margin-bottom: 4px; font-weight: 500;">Group Name (cn) *</label>\n <input type="text" id="group-cn" required pattern="[a-zA-Z][a-zA-Z0-9-]{0,254}"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;"\n placeholder="e.g., developers" />\n <small style="color: #666; font-size: 12px;">Must start with a letter, contain only letters, numbers, and hyphens</small>\n </div>\n\n <div>\n <label for="group-mail" style="display: block; margin-bottom: 4px; font-weight: 500;">Email Address</label>\n <input type="email" id="group-mail"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px;"\n placeholder="e.g., developers@example.com" />\n </div>\n\n <div>\n <label for="group-description" style="display: block; margin-bottom: 4px; font-weight: 500;">Description</label>\n <textarea id="group-description" rows="3"\n style="width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; resize: vertical;"\n placeholder="Group description..."></textarea>\n </div>\n\n <div style="padding: 12px; background: #f5f5f5; border-radius: 4px;">\n <p style="margin: 0 0 8px 0; font-size: 14px; color: #666;">Organization:</p>\n <p style="margin: 0; font-weight: 500;">${this.escapeHtml(e||this.orgDn)}</p>\n </div>\n\n <div id="error-message" style="display: none; padding: 12px; background: #ffebee; border-radius: 4px; color: #c62828;"></div>\n\n <div style="display: flex; gap: 12px; justify-content: flex-end;">\n <button type="button" id="cancel-create-btn" style="padding: 10px 20px; border: 1px solid #ddd; background: white; border-radius: 4px; cursor: pointer;">Cancel</button>\n <button type="submit" style="padding: 10px 20px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">group_add</span>\n Create Group\n </button>\n </div>\n </form>\n `,this.modal.appendChild(t),document.body.appendChild(this.modal);const n=this.modal.querySelector("#cancel-create-btn");n&&n.addEventListener("click",()=>this.close());const r=this.modal.querySelector("#create-group-form");r&&r.addEventListener("submit",e=>this.handleSubmit(e)),this.modal.addEventListener("click",e=>{e.target===this.modal&&this.close()})}async getOrgPath(e){try{const t=await fetch(`${this.api.baseUrl}/api/v1/ldap/organizations/${encodeURIComponent(e)}`);if(!t.ok)return null;const n=await t.json(),r=this.config.features?.organizations?.pathAttribute;return r&&n[r]?Array.isArray(n[r])?n[r][0]:n[r]:e}catch(e){return console.error("Failed to load organization path:",e),null}}async handleSubmit(e){e.preventDefault();const t=this.modal?.querySelector("#group-cn"),n=this.modal?.querySelector("#group-mail"),r=this.modal?.querySelector("#group-description"),o=this.modal?.querySelector("#error-message");if(!t)return;const i=t.value.trim();if(i)try{const e=await this.getOrgPath(this.orgDn),t={cn:i};n?.value.trim()&&(t.mail=n.value.trim()),r?.value.trim()&&(t.description=r.value.trim());const a=this.config.features?.organizations?.linkAttribute,s=this.config.features?.organizations?.pathAttribute;if(a&&s){if(!e)return void this.showError(o,"Failed to get organization path");t[a]=this.orgDn,t[s]=e}const l=await fetch(`${this.api.baseUrl}/api/v1/ldap/groups`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)});if(!l.ok){const e=await l.text();throw new Error(e||"Failed to create group")}await this.onCreated(),this.close()}catch(e){console.error("Failed to create group:",e),this.showError(o,e.message)}else this.showError(o,"Group name is required")}showError(e,t){e&&(e.textContent=`Error: ${t}`,e.style.display="block")}close(){this.modal&&(document.body.removeChild(this.modal),this.modal=null)}escapeHtml(e){if(null==e)return"";const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}}e.LdapGroupEditor=class{constructor(e){this.container=null,this.groupTree=null,this.groupEditor=null,this.currentGroupDn=null,this.currentOrgDn=null,this.config=null,this.options={apiBaseUrl:"undefined"!=typeof window?window.location.origin:"",...e},this.api=new t(this.options.apiBaseUrl||"")}async init(){if(this.container=document.getElementById(this.options.containerId),!this.container)throw new Error(`Container #${this.options.containerId} not found`);this.config=await this.api.getConfig(),this.render(),await this.initComponents()}render(){this.container&&(this.container.innerHTML='\n <div class="ldap-group-editor">\n <div class="editor-layout">\n <div id="group-tree-container" class="demo-panel"></div>\n <div id="group-editor-container" class="demo-panel">\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>Select a group from the tree to edit its properties</p>\n </div>\n </div>\n </div>\n </div>\n ')}async initComponents(){const e=document.getElementById("group-tree-container");if(e){this.groupTree=new n(e,this.options.apiBaseUrl||window.location.origin,e=>this.onOrgSelected(e));try{await this.groupTree.init()}catch(e){this.handleError(e)}}}async onOrgSelected(e){const t=document.getElementById("group-editor-container");if(t){this.currentOrgDn=e;try{const n=await this.api.getGroups(e);t.innerHTML=`\n <div style="padding: 20px;">\n <div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;">\n <h3 style="margin: 0;">Groups</h3>\n <button type="button" id="create-group-btn" style="padding: 8px 16px; background: var(--primary-color, #6200ee); color: white; border: none; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons" style="font-size: 18px;">group_add</span>\n Create\n </button>\n </div>\n ${0===n.length?'\n <div class="empty-state">\n <span class="material-icons">group</span>\n <p>No groups in this organization</p>\n </div>\n ':`\n <div style="display: flex; flex-direction: column; gap: 8px;">\n ${n.map(e=>`\n <div class="group-item" data-dn="${this.escapeHtml(e.dn)}" style="padding: 12px; border: 1px solid #ddd; border-radius: 4px; cursor: pointer; display: flex; align-items: center; gap: 8px;">\n <span class="material-icons">group</span>\n <span>${this.escapeHtml(e.cn||e.dn)}</span>\n </div>\n `).join("")}\n </div>\n `}\n </div>\n `,t.querySelectorAll(".group-item").forEach(e=>{e.addEventListener("click",()=>{const t=e.dataset.dn;this.onGroupSelected(t)})});const r=t.querySelector("#create-group-btn");r&&r.addEventListener("click",()=>this.handleCreateGroup())}catch(e){this.handleError(e),t.innerHTML='\n <div class="empty-state">\n <span class="material-icons">error</span>\n <p>Failed to load groups</p>\n </div>\n '}}}async onGroupSelected(e){const t=document.getElementById("group-editor-container");if(t){this.currentGroupDn=e;try{this.groupEditor=new o(t,this.api,e),await this.groupEditor.init(),this.options.onGroupSaved&&this.groupEditor.onSave(()=>{this.options.onGroupSaved?.(e)})}catch(e){this.handleError(e),t.innerHTML='\n <div class="empty-state">\n <span class="material-icons">error</span>\n <p>Failed to load group properties</p>\n </div>\n '}}}async handleCreateGroup(){if(!this.currentOrgDn||!this.config)return;const e=new i(this.api,this.config,this.currentOrgDn,async()=>{await this.onOrgSelected(this.currentOrgDn),this.options.onGroupSaved&&this.options.onGroupSaved("")});await e.show()}escapeHtml(e){if(null==e)return"";const t={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","/":"&#x2F;"};return String(e).replace(/[&<>"'/]/g,e=>t[e])}handleError(e){console.error("LdapGroupEditor error:",e),this.options.onError&&this.options.onError(e)}getApi(){return this.api}getConfig(){return this.config}getCurrentOrgDn(){return this.currentOrgDn}getCurrentUserDn(){return this.currentGroupDn}async createUser(e){return this.api.createEntry(e.dn,e)}async deleteUser(e){return this.api.deleteEntry(e)}}});
2
+ //# sourceMappingURL=ldap-group-editor.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ldap-group-editor.min.js","sources":["../../../../src/browser/ldap-group-editor/api/GroupApiClient.ts","../../../../src/browser/ldap-group-editor/components/GroupTree.ts","../../../../src/browser/ldap-group-editor/components/MoveGroupModal.ts","../../../../src/browser/ldap-group-editor/components/GroupPropertyEditor.ts","../../../../src/browser/ldap-group-editor/components/CreateGroupModal.ts","../../../../src/browser/ldap-group-editor/LdapGroupEditor.ts"],"sourcesContent":[null,null,null,null,null,null],"names":["GroupApiClient","constructor","baseUrl","this","getConfig","response","fetch","ok","Error","statusText","json","getOrganizations","getGroups","orgDn","encodeURIComponent","filter","node","classes","Array","isArray","objectClass","includes","getGroup","dn","updateGroup","data","method","headers","body","JSON","stringify","error","text","createEntry","deleteEntry","moveGroup","cn","targetOrgDn","renameGroup","newCn","getPointerOptions","branch","map","entry","label","ou","GroupTree","container","apiBaseUrl","onOrgSelect","expandedNodes","Set","selectedDn","rootDn","init","innerHTML","topOrg","renderTree","console","treeEl","querySelector","html","renderNode","attachEventListeners","level","isExpanded","has","isSelected","indent","displayName","escapeHtml","subnodesResponse","orgs","n","subnode","querySelectorAll","forEach","el","addEventListener","async","e","stopPropagation","getAttribute","delete","add","String","replace","m","MoveGroupModal","api","currentOrgDn","onMove","modal","selectedOrgDn","show","document","createElement","style","cssText","modalContent","appendChild","cancelBtn","close","confirmBtn","handleConfirm","target","loadOrgTree","treeContainer","attachTreeEventListeners","isCurrent","classList","remove","background","disabled","opacity","cursor","removeChild","GroupPropertyEditor","groupDn","group","schema","saveCallback","loadGroup","loadSchema","render","warn","config","groupsConfig","features","ldapGroups","schemaUrl","groupsResource","ldapFlatGeneric","flatResources","find","r","pluralName","name","createDefaultSchema","entity","attributes","key","value","Object","entries","type","required","fixed","onSave","callback","renderFields","basicFields","memberFields","mailFields","fieldName","attribute","push","length","renderField","getFieldLabel","arrayValue","join","toLowerCase","description","member","owner","mail","twakeMailboxType","str","toUpperCase","form","getElementById","handleSubmit","deleteBtn","handleDelete","moveBtn","handleMove","addMemberBtn","handleAddMember","addOwnerBtn","textarea","handleDeleteMember","input","searchTimeout","clearTimeout","window","setTimeout","searchUsers","query","results","datalist","slice","user","uid","valueToAdd","trim","alert","currentValues","split","v","focus","start","selectionStart","end","selectionEnd","lines","currentPos","startLine","endLine","i","lineLength","preventDefault","newLines","_","formData","FormData","updates","Number","oldCn","newDn","RegExp","keys","message","twakeDepartmentLink","cnMatch","match","confirm","CreateGroupModal","onCreated","orgPath","getOrgPath","org","pathAttr","organizations","pathAttribute","cnInput","mailInput","descInput","errorDiv","groupData","linkAttr","linkAttribute","showError","textContent","display","options","groupTree","groupEditor","currentGroupDn","location","origin","containerId","initComponents","onOrgSelected","handleError","editorContainer","groups","item","dataset","onGroupSelected","createBtn","handleCreateGroup","onGroupSaved","onError","getApi","getCurrentOrgDn","getCurrentUserDn","createUser","deleteUser"],"mappings":"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"}
@@ -0,0 +1,226 @@
1
+ import { CacheManager } from '../cache/CacheManager.js';
2
+
3
+ /**
4
+ * LDAP Resource Editor - Generic API Client
5
+ */
6
+ class ResourceApiClient {
7
+ constructor(resourceType, baseUrl = '', cacheOptions) {
8
+ this.resourceType = resourceType;
9
+ this.baseUrl =
10
+ baseUrl || (typeof window !== 'undefined' ? window.location.origin : '');
11
+ this.cache = new CacheManager(cacheOptions);
12
+ // Clean expired entries every 5 minutes (only in browser context)
13
+ if (typeof window !== 'undefined') {
14
+ window.setInterval(() => this.cache.cleanExpired(), 5 * 60 * 1000);
15
+ }
16
+ }
17
+ getApiBase() {
18
+ return `${this.baseUrl}/api/v1`;
19
+ }
20
+ getResourceEndpoint() {
21
+ return `${this.getApiBase()}/ldap/${this.resourceType}`;
22
+ }
23
+ getFirstValue(value) {
24
+ if (!value)
25
+ return '';
26
+ if (Array.isArray(value))
27
+ return value[0] || '';
28
+ return String(value);
29
+ }
30
+ /**
31
+ * Fetch with cache support for GET requests
32
+ */
33
+ async cachedFetch(url, options) {
34
+ const method = options?.method || 'GET';
35
+ // Only cache GET requests
36
+ if (method === 'GET') {
37
+ const cached = this.cache.get(url);
38
+ if (cached !== null) {
39
+ return cached;
40
+ }
41
+ }
42
+ const res = await fetch(url, options);
43
+ if (!res.ok) {
44
+ throw new Error(`HTTP ${res.status}: ${res.statusText}`);
45
+ }
46
+ const data = (await res.json());
47
+ // Cache GET responses
48
+ if (method === 'GET') {
49
+ this.cache.set(url, data);
50
+ }
51
+ return data;
52
+ }
53
+ async getConfig() {
54
+ return this.cachedFetch(`${this.getApiBase()}/config`);
55
+ }
56
+ async getSchema(schemaUrl) {
57
+ // Handle relative URLs by prepending baseUrl
58
+ const url = schemaUrl.startsWith('http')
59
+ ? schemaUrl
60
+ : `${this.baseUrl}${schemaUrl}`;
61
+ return this.cachedFetch(url);
62
+ }
63
+ async getResources(search = '') {
64
+ const url = search
65
+ ? `${this.getResourceEndpoint()}?match=${encodeURIComponent(search)}&attribute=${this.getMainAttribute()}`
66
+ : this.getResourceEndpoint();
67
+ const data = await this.cachedFetch(url);
68
+ // Convert from object format {key: entry} to array format
69
+ return Array.isArray(data) ? data : Object.values(data);
70
+ }
71
+ async getResource(dn) {
72
+ const url = `${this.getResourceEndpoint()}/${encodeURIComponent(dn)}`;
73
+ return this.cachedFetch(url);
74
+ }
75
+ async updateResource(dn, data) {
76
+ const res = await fetch(`${this.getResourceEndpoint()}/${encodeURIComponent(dn)}`, {
77
+ method: 'PUT',
78
+ headers: { 'Content-Type': 'application/json' },
79
+ body: JSON.stringify(data),
80
+ });
81
+ if (!res.ok) {
82
+ const error = await res.text();
83
+ throw new Error(`Failed to update ${this.resourceType}: ${error || 'Unknown error'}`);
84
+ }
85
+ const result = await res.json();
86
+ // Invalidate cache
87
+ this.cache.invalidate(`${this.getResourceEndpoint()}/${encodeURIComponent(dn)}`);
88
+ this.cache.invalidatePattern(`${this.getResourceEndpoint()}*`);
89
+ return result;
90
+ }
91
+ async createResource(data) {
92
+ const res = await fetch(this.getResourceEndpoint(), {
93
+ method: 'POST',
94
+ headers: { 'Content-Type': 'application/json' },
95
+ body: JSON.stringify(data),
96
+ });
97
+ if (!res.ok) {
98
+ const error = await res.text();
99
+ throw new Error(`Failed to create ${this.resourceType}: ${error || 'Unknown error'}`);
100
+ }
101
+ const result = await res.json();
102
+ // Invalidate cache
103
+ this.cache.invalidatePattern(`${this.getResourceEndpoint()}*`);
104
+ return result;
105
+ }
106
+ async deleteResource(dn) {
107
+ const res = await fetch(`${this.getResourceEndpoint()}/${encodeURIComponent(dn)}`, {
108
+ method: 'DELETE',
109
+ });
110
+ if (!res.ok) {
111
+ const error = await res.text();
112
+ throw new Error(`Failed to delete ${this.resourceType}: ${error || 'Unknown error'}`);
113
+ }
114
+ // Invalidate cache
115
+ this.cache.invalidate(`${this.getResourceEndpoint()}/${encodeURIComponent(dn)}`);
116
+ this.cache.invalidatePattern(`${this.getResourceEndpoint()}*`);
117
+ }
118
+ /**
119
+ * Create a generic entry (for organizations tree navigation)
120
+ */
121
+ async createEntry(dn, data) {
122
+ const res = await fetch(`${this.getApiBase()}/ldap/entry/${encodeURIComponent(dn)}`, {
123
+ method: 'PUT',
124
+ headers: { 'Content-Type': 'application/json' },
125
+ body: JSON.stringify(data),
126
+ });
127
+ if (!res.ok) {
128
+ const error = await res.text();
129
+ throw new Error(`Failed to create entry: ${error || 'Unknown error'}`);
130
+ }
131
+ const result = await res.json();
132
+ // Invalidate cache
133
+ this.cache.invalidatePattern(`${this.getResourceEndpoint()}*`);
134
+ this.cache.invalidatePattern(`${this.getApiBase()}/ldap/organizations*`);
135
+ return result;
136
+ }
137
+ /**
138
+ * Delete a generic entry (for organizations)
139
+ */
140
+ async deleteEntry(dn) {
141
+ const res = await fetch(`${this.getApiBase()}/ldap/entry/${encodeURIComponent(dn)}`, {
142
+ method: 'DELETE',
143
+ });
144
+ if (!res.ok) {
145
+ const error = await res.text();
146
+ throw new Error(`Failed to delete entry: ${error || 'Unknown error'}`);
147
+ }
148
+ // Invalidate cache
149
+ this.cache.invalidatePattern(`${this.getResourceEndpoint()}*`);
150
+ this.cache.invalidatePattern(`${this.getApiBase()}/ldap/organizations*`);
151
+ }
152
+ async getPointerOptions(branch) {
153
+ try {
154
+ const config = await this.getConfig();
155
+ const resource = config.features?.ldapFlatGeneric?.flatResources?.find(r => {
156
+ return branch === r.base || branch.startsWith(r.base);
157
+ });
158
+ if (resource && resource.endpoints?.list) {
159
+ const url = `${this.baseUrl}${resource.endpoints.list}`;
160
+ const data = await this.cachedFetch(url);
161
+ const items = Array.isArray(data) ? data : Object.values(data);
162
+ let displayNameField = 'cn';
163
+ const identifierField = resource.mainAttribute;
164
+ if (resource.schemaUrl) {
165
+ try {
166
+ const schema = await this.getSchema(resource.schemaUrl);
167
+ const displayField = Object.entries(schema.attributes).find(([, attr]) => attr.role === 'displayName');
168
+ if (displayField) {
169
+ displayNameField = displayField[0];
170
+ }
171
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
172
+ }
173
+ catch (e) {
174
+ // Use defaults if schema fails
175
+ }
176
+ }
177
+ return items.map((item) => {
178
+ const displayName = this.getFirstValue(item[displayNameField]);
179
+ const identifier = this.getFirstValue(item[identifierField]);
180
+ return {
181
+ dn: item.dn,
182
+ label: displayName || identifier || item.dn,
183
+ };
184
+ });
185
+ }
186
+ throw new Error(`No flatResource found in config for branch: ${branch}`);
187
+ }
188
+ catch (error) {
189
+ console.error('Failed to load pointer options for branch:', branch, error);
190
+ return [];
191
+ }
192
+ }
193
+ /**
194
+ * Get main attribute for this resource type
195
+ */
196
+ getMainAttribute() {
197
+ switch (this.resourceType) {
198
+ case 'users':
199
+ return 'uid';
200
+ case 'groups':
201
+ return 'cn';
202
+ case 'organizations':
203
+ return 'ou';
204
+ default:
205
+ return 'cn';
206
+ }
207
+ }
208
+ /**
209
+ * Cache management methods
210
+ */
211
+ clearCache() {
212
+ this.cache.clear();
213
+ }
214
+ invalidateCache(pattern) {
215
+ this.cache.invalidatePattern(pattern);
216
+ }
217
+ getCacheStats() {
218
+ return this.cache.getStats();
219
+ }
220
+ getCache() {
221
+ return this.cache;
222
+ }
223
+ }
224
+
225
+ export { ResourceApiClient };
226
+ //# sourceMappingURL=ResourceApiClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceApiClient.js","sources":["../../../../../src/browser/ldap-resource-editor/api/ResourceApiClient.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA;;AAEG;MAWU,iBAAiB,CAAA;AAK5B,IAAA,WAAA,CACE,YAA0B,EAC1B,OAAA,GAAkB,EAAE,EACpB,YAAoD,EAAA;AAEpD,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,OAAO;AACV,YAAA,OAAO,KAAK,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE,CAAC;QAC1E,IAAI,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,YAAY,CAAC;;AAG3C,QAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,YAAA,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QACpE;IACF;IAEQ,UAAU,GAAA;AAChB,QAAA,OAAO,CAAA,EAAG,IAAI,CAAC,OAAO,SAAS;IACjC;IAEQ,mBAAmB,GAAA;QACzB,OAAO,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,SAAS,IAAI,CAAC,YAAY,CAAA,CAAE;IACzD;AAEQ,IAAA,aAAa,CAAC,KAAc,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,EAAE;AACrB,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAAE,YAAA,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;AAC/C,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB;AAEA;;AAEG;AACK,IAAA,MAAM,WAAW,CAAI,GAAW,EAAE,OAAqB,EAAA;AAC7D,QAAA,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK;;AAGvC,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAI,GAAG,CAAC;AACrC,YAAA,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,gBAAA,OAAO,MAAM;YACf;QACF;QAEA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,OAAO,CAAC;AACrC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,KAAA,EAAQ,GAAG,CAAC,MAAM,CAAA,EAAA,EAAK,GAAG,CAAC,UAAU,CAAA,CAAE,CAAC;QAC1D;QAEA,MAAM,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM;;AAGpC,QAAA,IAAI,MAAM,KAAK,KAAK,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;QAC3B;AAEA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,MAAM,SAAS,GAAA;QACb,OAAO,IAAI,CAAC,WAAW,CAAS,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,OAAA,CAAS,CAAC;IAChE;IAEA,MAAM,SAAS,CAAC,SAAiB,EAAA;;AAE/B,QAAA,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM;AACrC,cAAE;cACA,GAAG,IAAI,CAAC,OAAO,CAAA,EAAG,SAAS,EAAE;AACjC,QAAA,OAAO,IAAI,CAAC,WAAW,CAAS,GAAG,CAAC;IACtC;AAEA,IAAA,MAAM,YAAY,CAAC,MAAM,GAAG,EAAE,EAAA;QAC5B,MAAM,GAAG,GAAG;AACV,cAAE,CAAA,EAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA,OAAA,EAAU,kBAAkB,CAAC,MAAM,CAAC,CAAA,WAAA,EAAc,IAAI,CAAC,gBAAgB,EAAE,CAAA;AACxG,cAAE,IAAI,CAAC,mBAAmB,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAEjC,GAAG,CAAC;;AAEN,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IACzD;IAEA,MAAM,WAAW,CAAC,EAAU,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA,CAAA,EAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE;AACrE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAe,GAAG,CAAC;IAC5C;AAEA,IAAA,MAAM,cAAc,CAClB,EAAU,EACV,IAA2B,EAAA;AAE3B,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,EACzD;AACE,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,SAAA,CACF;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,iBAAA,EAAoB,IAAI,CAAC,YAAY,CAAA,EAAA,EAAK,KAAK,IAAI,eAAe,CAAA,CAAE,CACrE;QACH;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;;AAG/B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CACnB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA,CAAE,CAC1D;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA,EAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA,CAAA,CAAG,CAAC;AAE9D,QAAA,OAAO,MAAM;IACf;IAEA,MAAM,cAAc,CAAC,IAA2B,EAAA;QAC9C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE;AAClD,YAAA,MAAM,EAAE,MAAM;AACd,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,SAAA,CAAC;AACF,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,iBAAA,EAAoB,IAAI,CAAC,YAAY,CAAA,EAAA,EAAK,KAAK,IAAI,eAAe,CAAA,CAAE,CACrE;QACH;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;;AAG/B,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA,EAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA,CAAA,CAAG,CAAC;AAE9D,QAAA,OAAO,MAAM;IACf;IAEA,MAAM,cAAc,CAAC,EAAU,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,EACzD;AACE,YAAA,MAAM,EAAE,QAAQ;AACjB,SAAA,CACF;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC9B,YAAA,MAAM,IAAI,KAAK,CACb,CAAA,iBAAA,EAAoB,IAAI,CAAC,YAAY,CAAA,EAAA,EAAK,KAAK,IAAI,eAAe,CAAA,CAAE,CACrE;QACH;;AAGA,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CACnB,GAAG,IAAI,CAAC,mBAAmB,EAAE,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAA,CAAE,CAC1D;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA,EAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA,CAAA,CAAG,CAAC;IAChE;AAEA;;AAEG;AACH,IAAA,MAAM,WAAW,CACf,EAAU,EACV,IAA2B,EAAA;AAE3B,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAC3D;AACE,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC/C,YAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAC3B,SAAA,CACF;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,KAAK,IAAI,eAAe,CAAA,CAAE,CAAC;QACxE;AACA,QAAA,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;;AAG/B,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA,EAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA,CAAA,CAAG,CAAC;AAC9D,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,oBAAA,CAAsB,CAAC;AAExE,QAAA,OAAO,MAAM;IACf;AAEA;;AAEG;IACH,MAAM,WAAW,CAAC,EAAU,EAAA;AAC1B,QAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CACrB,GAAG,IAAI,CAAC,UAAU,EAAE,eAAe,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAC3D;AACE,YAAA,MAAM,EAAE,QAAQ;AACjB,SAAA,CACF;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACX,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,CAAA,wBAAA,EAA2B,KAAK,IAAI,eAAe,CAAA,CAAE,CAAC;QACxE;;AAGA,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA,EAAG,IAAI,CAAC,mBAAmB,EAAE,CAAA,CAAA,CAAG,CAAC;AAC9D,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAA,EAAG,IAAI,CAAC,UAAU,EAAE,CAAA,oBAAA,CAAsB,CAAC;IAC1E;IAEA,MAAM,iBAAiB,CAAC,MAAc,EAAA;AACpC,QAAA,IAAI;AACF,YAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;AAErC,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,aAAa,EAAE,IAAI,CACpE,CAAC,IAAG;AACF,gBAAA,OAAO,MAAM,KAAK,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AACvD,YAAA,CAAC,CACF;YAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,EAAE,IAAI,EAAE;AACxC,gBAAA,MAAM,GAAG,GAAG,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,EAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;gBACvD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAEjC,GAAG,CAAC;gBAEN,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBAE9D,IAAI,gBAAgB,GAAG,IAAI;AAC3B,gBAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,aAAa;AAE9C,gBAAA,IAAI,QAAQ,CAAC,SAAS,EAAE;AACtB,oBAAA,IAAI;wBACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC;wBACvD,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CACzD,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,aAAa,CAC1C;wBACD,IAAI,YAAY,EAAE;AAChB,4BAAA,gBAAgB,GAAG,YAAY,CAAC,CAAC,CAAC;wBACpC;;oBAEF;oBAAE,OAAO,CAAC,EAAE;;oBAEZ;gBACF;AAEA,gBAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAkB,KAAI;oBACtC,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;oBAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC5D,OAAO;wBACL,EAAE,EAAE,IAAI,CAAC,EAAE;AACX,wBAAA,KAAK,EAAE,WAAW,IAAI,UAAU,IAAI,IAAI,CAAC,EAAE;qBAC5C;AACH,gBAAA,CAAC,CAAC;YACJ;AAEA,YAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,MAAM,CAAA,CAAE,CAAC;QAC1E;QAAE,OAAO,KAAK,EAAE;YACd,OAAO,CAAC,KAAK,CACX,4CAA4C,EAC5C,MAAM,EACN,KAAK,CACN;AACD,YAAA,OAAO,EAAE;QACX;IACF;AAEA;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,QAAQ,IAAI,CAAC,YAAY;AACvB,YAAA,KAAK,OAAO;AACV,gBAAA,OAAO,KAAK;AACd,YAAA,KAAK,QAAQ;AACX,gBAAA,OAAO,IAAI;AACb,YAAA,KAAK,eAAe;AAClB,gBAAA,OAAO,IAAI;AACb,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;AAEA;;AAEG;IACH,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;IACpB;AAEA,IAAA,eAAe,CAAC,OAAe,EAAA;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC;IACvC;IAEA,aAAa,GAAA;AAMX,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;IAC9B;IAEA,QAAQ,GAAA;QACN,OAAO,IAAI,CAAC,KAAK;IACnB;AACD;;;;"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Simple in-memory cache manager with LRU eviction
3
+ * Prevents excessive API calls when navigating the organization tree
4
+ */
5
+ class CacheManager {
6
+ constructor(options = {}) {
7
+ this.cache = new Map();
8
+ this.ttl = options.ttl ?? 5 * 60 * 1000; // 5 minutes default
9
+ this.maxEntries = options.maxEntries ?? 200; // 200 entries max
10
+ }
11
+ /**
12
+ * Get an item from cache
13
+ * Returns null if not found or expired
14
+ */
15
+ get(key) {
16
+ const entry = this.cache.get(key);
17
+ if (!entry)
18
+ return null;
19
+ // Check if expired
20
+ if (Date.now() - entry.timestamp >= this.ttl) {
21
+ this.cache.delete(key);
22
+ return null;
23
+ }
24
+ // Update access count for LRU
25
+ entry.accessCount++;
26
+ entry.timestamp = Date.now();
27
+ return entry.data;
28
+ }
29
+ /**
30
+ * Set an item in cache
31
+ * Evicts least recently used items if cache is full
32
+ */
33
+ set(key, data) {
34
+ // If cache is full, evict LRU entry
35
+ if (this.cache.size >= this.maxEntries && !this.cache.has(key)) {
36
+ this.evictLRU();
37
+ }
38
+ this.cache.set(key, {
39
+ data,
40
+ timestamp: Date.now(),
41
+ accessCount: 0,
42
+ });
43
+ }
44
+ /**
45
+ * Check if key exists and is not expired
46
+ */
47
+ has(key) {
48
+ return this.get(key) !== null;
49
+ }
50
+ /**
51
+ * Invalidate a specific key
52
+ */
53
+ invalidate(key) {
54
+ this.cache.delete(key);
55
+ }
56
+ /**
57
+ * Invalidate all keys matching a pattern
58
+ * Pattern can contain wildcards (*)
59
+ */
60
+ invalidatePattern(pattern) {
61
+ const regex = new RegExp('^' + pattern.replace(/\*/g, '.*').replace(/\?/g, '.') + '$');
62
+ for (const key of this.cache.keys()) {
63
+ if (regex.test(key)) {
64
+ this.cache.delete(key);
65
+ }
66
+ }
67
+ }
68
+ /**
69
+ * Clear all cache
70
+ */
71
+ clear() {
72
+ this.cache.clear();
73
+ }
74
+ /**
75
+ * Get cache statistics
76
+ */
77
+ getStats() {
78
+ return {
79
+ size: this.cache.size,
80
+ maxSize: this.maxEntries,
81
+ ttl: this.ttl,
82
+ keys: Array.from(this.cache.keys()),
83
+ };
84
+ }
85
+ /**
86
+ * Evict least recently used entry
87
+ */
88
+ evictLRU() {
89
+ let lruKey = null;
90
+ let lruTime = Infinity;
91
+ let lruCount = Infinity;
92
+ for (const [key, entry] of this.cache.entries()) {
93
+ // Prioritize by access count, then by timestamp
94
+ if (entry.accessCount < lruCount ||
95
+ (entry.accessCount === lruCount && entry.timestamp < lruTime)) {
96
+ lruKey = key;
97
+ lruTime = entry.timestamp;
98
+ lruCount = entry.accessCount;
99
+ }
100
+ }
101
+ if (lruKey) {
102
+ this.cache.delete(lruKey);
103
+ }
104
+ }
105
+ /**
106
+ * Clean expired entries
107
+ * Should be called periodically
108
+ */
109
+ cleanExpired() {
110
+ const now = Date.now();
111
+ let cleaned = 0;
112
+ for (const [key, entry] of this.cache.entries()) {
113
+ if (now - entry.timestamp >= this.ttl) {
114
+ this.cache.delete(key);
115
+ cleaned++;
116
+ }
117
+ }
118
+ return cleaned;
119
+ }
120
+ }
121
+
122
+ export { CacheManager };
123
+ //# sourceMappingURL=CacheManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CacheManager.js","sources":["../../../../../src/browser/ldap-resource-editor/cache/CacheManager.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { ResourceApiClient } from './api/ResourceApiClient.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}