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.
- package/LICENSE +661 -0
- package/README.md +48 -0
- package/bin/cleanup-external-users.mjs +219 -0
- package/bin/index.mjs +54 -0
- package/bin/sync-james.mjs +190 -0
- package/dist/abstract/ldapFlat.js +1 -0
- package/dist/abstract/plugin.js +1 -0
- package/dist/abstract/twakePlugin.js +1 -0
- package/dist/bin/index.js +1 -0
- package/dist/config/args.js +1 -0
- package/dist/lib/auth/base.js +1 -0
- package/dist/lib/authz/base.js +1 -0
- package/dist/lib/expressFormatedResponses.js +1 -0
- package/dist/lib/ldapActions.js +1 -0
- package/dist/lib/parseConfig.js +1 -0
- package/dist/lib/utils.js +1 -0
- package/dist/logger/winston.js +1 -0
- package/dist/plugins/auth/authzLinid1.js +1 -0
- package/dist/plugins/auth/authzPerBranch.js +1 -0
- package/dist/plugins/auth/crowdsec.js +1 -0
- package/dist/plugins/auth/llng.js +1 -0
- package/dist/plugins/auth/openidconnect.js +1 -0
- package/dist/plugins/auth/rateLimit.js +1 -0
- package/dist/plugins/auth/token.js +1 -0
- package/dist/plugins/configApi.js +1 -0
- package/dist/plugins/demo/helloworld.js +1 -0
- package/dist/plugins/ldap/bulkImport.js +1 -0
- package/dist/plugins/ldap/departmentSync.js +1 -0
- package/dist/plugins/ldap/externalUsersInGroups.js +1 -0
- package/dist/plugins/ldap/flatGeneric.js +1 -0
- package/dist/plugins/ldap/groups.js +1 -0
- package/dist/plugins/ldap/onChange.js +1 -0
- package/dist/plugins/ldap/organization.js +1 -0
- package/dist/plugins/ldap/trash.js +1 -0
- package/dist/plugins/priority.json.js +1 -0
- package/dist/plugins/static.js +1 -0
- package/dist/plugins/twake/calendarResources.js +1 -0
- package/dist/plugins/twake/james.js +1 -0
- package/dist/plugins/weblogs.js +1 -0
- package/dist/src/abstract/ldapFlat.d.ts +94 -0
- package/dist/src/abstract/plugin.d.ts +43 -0
- package/dist/src/abstract/twakePlugin.d.ts +90 -0
- package/dist/src/bin/index.d.ts +43 -0
- package/dist/src/browser/ldap-group-editor/LdapGroupEditor.d.ts +31 -0
- package/dist/src/browser/ldap-group-editor/api/GroupApiClient.d.ts +23 -0
- package/dist/src/browser/ldap-group-editor/components/CreateGroupModal.d.ts +19 -0
- package/dist/src/browser/ldap-group-editor/components/GroupPropertyEditor.d.ts +30 -0
- package/dist/src/browser/ldap-group-editor/components/GroupTree.d.ts +17 -0
- package/dist/src/browser/ldap-group-editor/components/MoveGroupModal.d.ts +20 -0
- package/dist/src/browser/ldap-group-editor/index.d.ts +6 -0
- package/dist/src/browser/ldap-group-editor/types.d.ts +58 -0
- package/dist/src/browser/ldap-resource-editor/api/ResourceApiClient.d.ts +53 -0
- package/dist/src/browser/ldap-resource-editor/cache/CacheManager.d.ts +65 -0
- package/dist/src/browser/ldap-resource-editor/index.d.ts +6 -0
- package/dist/src/browser/ldap-resource-editor/types.d.ts +78 -0
- package/dist/src/browser/ldap-tree-viewer/LdapTreeViewer.d.ts +26 -0
- package/dist/src/browser/ldap-tree-viewer/api/LdapApiClient.d.ts +30 -0
- package/dist/src/browser/ldap-tree-viewer/components/TreeNode.d.ts +17 -0
- package/dist/src/browser/ldap-tree-viewer/components/TreeRoot.d.ts +14 -0
- package/dist/src/browser/ldap-tree-viewer/index.d.ts +7 -0
- package/dist/src/browser/ldap-tree-viewer/store/Store.d.ts +18 -0
- package/dist/src/browser/ldap-tree-viewer/store/actions.d.ts +28 -0
- package/dist/src/browser/ldap-tree-viewer/store/reducers.d.ts +7 -0
- package/dist/src/browser/ldap-tree-viewer/types.d.ts +34 -0
- package/dist/src/browser/ldap-unit-editor/LdapUnitEditor.d.ts +27 -0
- package/dist/src/browser/ldap-unit-editor/api/UnitApiClient.d.ts +24 -0
- package/dist/src/browser/ldap-unit-editor/components/MoveUnitModal.d.ts +28 -0
- package/dist/src/browser/ldap-unit-editor/components/UnitPropertyEditor.d.ts +28 -0
- package/dist/src/browser/ldap-unit-editor/components/UnitTree.d.ts +18 -0
- package/dist/src/browser/ldap-unit-editor/index.d.ts +6 -0
- package/dist/src/browser/ldap-unit-editor/types.d.ts +55 -0
- package/dist/src/browser/ldap-user-editor/LdapUserEditor.d.ts +32 -0
- package/dist/src/browser/ldap-user-editor/api/UserApiClient.d.ts +55 -0
- package/dist/src/browser/ldap-user-editor/cache/CacheManager.d.ts +65 -0
- package/dist/src/browser/ldap-user-editor/components/MoveUserModal.d.ts +28 -0
- package/dist/src/browser/ldap-user-editor/components/PointerField.d.ts +22 -0
- package/dist/src/browser/ldap-user-editor/components/UserEditor.d.ts +46 -0
- package/dist/src/browser/ldap-user-editor/components/UserList.d.ts +24 -0
- package/dist/src/browser/ldap-user-editor/components/UserTree.d.ts +24 -0
- package/dist/src/browser/ldap-user-editor/index.d.ts +7 -0
- package/dist/src/browser/ldap-user-editor/types.d.ts +67 -0
- package/dist/src/browser/shared/components/Modal.d.ts +38 -0
- package/dist/src/browser/shared/components/StatusMessage.d.ts +48 -0
- package/dist/src/browser/shared/index.d.ts +10 -0
- package/dist/src/browser/shared/types/index.d.ts +65 -0
- package/dist/src/browser/shared/utils/dom.d.ts +33 -0
- package/dist/src/browser/shared/utils/form.d.ts +28 -0
- package/dist/src/browser/shared/utils/schema.d.ts +29 -0
- package/dist/src/config/args.d.ts +128 -0
- package/dist/src/config/schema.d.ts +18 -0
- package/dist/src/hooks.d.ts +76 -0
- package/dist/src/lib/auth/base.d.ts +9 -0
- package/dist/src/lib/authz/base.d.ts +63 -0
- package/dist/src/lib/expressFormatedResponses.d.ts +26 -0
- package/dist/src/lib/ldapActions.d.ts +91 -0
- package/dist/src/lib/parseConfig.d.ts +23 -0
- package/dist/src/lib/utils.d.ts +73 -0
- package/dist/src/logger/winston.d.ts +3 -0
- package/dist/src/plugins/auth/authzLinid1.d.ts +46 -0
- package/dist/src/plugins/auth/authzPerBranch.d.ts +59 -0
- package/dist/src/plugins/auth/crowdsec.d.ts +29 -0
- package/dist/src/plugins/auth/llng.d.ts +8 -0
- package/dist/src/plugins/auth/openidconnect.d.ts +11 -0
- package/dist/src/plugins/auth/rateLimit.d.ts +24 -0
- package/dist/src/plugins/auth/token.d.ts +17 -0
- package/dist/src/plugins/configApi.d.ts +24 -0
- package/dist/src/plugins/demo/helloworld.d.ts +12 -0
- package/dist/src/plugins/ldap/bulkImport.d.ts +48 -0
- package/dist/src/plugins/ldap/departmentSync.d.ts +35 -0
- package/dist/src/plugins/ldap/externalUsersInGroups.d.ts +21 -0
- package/dist/src/plugins/ldap/flatGeneric.d.ts +31 -0
- package/dist/src/plugins/ldap/groups.d.ts +95 -0
- package/dist/src/plugins/ldap/onChange.d.ts +32 -0
- package/dist/src/plugins/ldap/organization.d.ts +65 -0
- package/dist/src/plugins/ldap/trash.d.ts +52 -0
- package/dist/src/plugins/static.d.ts +7 -0
- package/dist/src/plugins/twake/calendarResources.d.ts +31 -0
- package/dist/src/plugins/twake/james.d.ts +83 -0
- package/dist/src/plugins/weblogs.d.ts +8 -0
- package/docs/DEVELOPER_GUIDE.md +298 -0
- package/docs/OPENAPI.md +440 -0
- package/docs/PLUGIN_DEPENDENCIES.md +612 -0
- package/docs/README.md +466 -0
- package/docs/api/REFERENCE.md +983 -0
- package/docs/api/REST_API.md +1237 -0
- package/docs/authentication.md +469 -0
- package/docs/authzLinid1.md +521 -0
- package/docs/authzPerBranch.md +596 -0
- package/docs/browser/LIBRARIES.md +1196 -0
- package/docs/examples/EXAMPLES.md +1659 -0
- package/docs/examples/twake-mailbox-type-nomenclature.ldif +37 -0
- package/docs/examples/twake-mailbox-type-schema-amendment.ldif +30 -0
- package/docs/jamesTeamMailboxes.md +343 -0
- package/docs/ldapBulkImport.md +722 -0
- package/docs/ldapExternalUsersInGroups.md +325 -0
- package/docs/ldapFlatGeneric.md +444 -0
- package/docs/ldapGroups.md +589 -0
- package/docs/ldapOrganizations.md +659 -0
- package/docs/ldapTrash.md +260 -0
- package/docs/linagora.png +0 -0
- package/docs/onChange.md +318 -0
- package/docs/plugins/DEVELOPMENT.md +1219 -0
- package/docs/presenterm-fr.md +721 -0
- package/docs/presenterm.md +721 -0
- package/docs/schemas/SCHEMAS.md +1212 -0
- package/docs/static.md +410 -0
- package/docs/twakeCalendarResources.md +148 -0
- package/docs/twakeJames.md +661 -0
- package/docs/weblogs.md +399 -0
- package/examples/web/ldap-group-editor.html +113 -0
- package/examples/web/ldap-tree-viewer.html +368 -0
- package/examples/web/ldap-unit-editor.html +108 -0
- package/examples/web/ldap-user-editor.html +412 -0
- package/package.json +458 -0
- package/static/browser/common-demo.css +450 -0
- package/static/browser/ldap-group-editor/LdapGroupEditor.js +207 -0
- package/static/browser/ldap-group-editor/LdapGroupEditor.js.map +1 -0
- package/static/browser/ldap-group-editor/api/GroupApiClient.js +112 -0
- package/static/browser/ldap-group-editor/api/GroupApiClient.js.map +1 -0
- package/static/browser/ldap-group-editor/components/CreateGroupModal.js +212 -0
- package/static/browser/ldap-group-editor/components/CreateGroupModal.js.map +1 -0
- package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js +497 -0
- package/static/browser/ldap-group-editor/components/GroupPropertyEditor.js.map +1 -0
- package/static/browser/ldap-group-editor/components/GroupTree.js +153 -0
- package/static/browser/ldap-group-editor/components/GroupTree.js.map +1 -0
- package/static/browser/ldap-group-editor/components/MoveGroupModal.js +235 -0
- package/static/browser/ldap-group-editor/components/MoveGroupModal.js.map +1 -0
- package/static/browser/ldap-group-editor/index.js +2 -0
- package/static/browser/ldap-group-editor/index.js.map +1 -0
- package/static/browser/ldap-group-editor/types.js +2 -0
- package/static/browser/ldap-group-editor/types.js.map +1 -0
- package/static/browser/ldap-group-editor.esm.js +1399 -0
- package/static/browser/ldap-group-editor.esm.js.map +1 -0
- package/static/browser/ldap-group-editor.js +1407 -0
- package/static/browser/ldap-group-editor.js.map +1 -0
- package/static/browser/ldap-group-editor.min.js +2 -0
- package/static/browser/ldap-group-editor.min.js.map +1 -0
- package/static/browser/ldap-resource-editor/api/ResourceApiClient.js +226 -0
- package/static/browser/ldap-resource-editor/api/ResourceApiClient.js.map +1 -0
- package/static/browser/ldap-resource-editor/cache/CacheManager.js +123 -0
- package/static/browser/ldap-resource-editor/cache/CacheManager.js.map +1 -0
- package/static/browser/ldap-resource-editor/index.js +2 -0
- package/static/browser/ldap-resource-editor/index.js.map +1 -0
- package/static/browser/ldap-resource-editor/types.js +2 -0
- package/static/browser/ldap-resource-editor/types.js.map +1 -0
- package/static/browser/ldap-tree-viewer/LdapTreeViewer.js +187 -0
- package/static/browser/ldap-tree-viewer/LdapTreeViewer.js.map +1 -0
- package/static/browser/ldap-tree-viewer/api/LdapApiClient.js +50 -0
- package/static/browser/ldap-tree-viewer/api/LdapApiClient.js.map +1 -0
- package/static/browser/ldap-tree-viewer/components/TreeNode.js +140 -0
- package/static/browser/ldap-tree-viewer/components/TreeNode.js.map +1 -0
- package/static/browser/ldap-tree-viewer/components/TreeRoot.js +98 -0
- package/static/browser/ldap-tree-viewer/components/TreeRoot.js.map +1 -0
- package/static/browser/ldap-tree-viewer/index.js +2 -0
- package/static/browser/ldap-tree-viewer/index.js.map +1 -0
- package/static/browser/ldap-tree-viewer/store/Store.js +29 -0
- package/static/browser/ldap-tree-viewer/store/Store.js.map +1 -0
- package/static/browser/ldap-tree-viewer/store/actions.js +53 -0
- package/static/browser/ldap-tree-viewer/store/actions.js.map +1 -0
- package/static/browser/ldap-tree-viewer/store/reducers.js +79 -0
- package/static/browser/ldap-tree-viewer/store/reducers.js.map +1 -0
- package/static/browser/ldap-tree-viewer/types.js +2 -0
- package/static/browser/ldap-tree-viewer/types.js.map +1 -0
- package/static/browser/ldap-tree-viewer.css +2 -0
- package/static/browser/ldap-tree-viewer.css.map +1 -0
- package/static/browser/ldap-tree-viewer.esm.js +606 -0
- package/static/browser/ldap-tree-viewer.esm.js.map +1 -0
- package/static/browser/ldap-tree-viewer.js +614 -0
- package/static/browser/ldap-tree-viewer.js.map +1 -0
- package/static/browser/ldap-tree-viewer.min.js +2 -0
- package/static/browser/ldap-tree-viewer.min.js.map +1 -0
- package/static/browser/ldap-unit-editor/LdapUnitEditor.js +119 -0
- package/static/browser/ldap-unit-editor/LdapUnitEditor.js.map +1 -0
- package/static/browser/ldap-unit-editor/api/UnitApiClient.js +95 -0
- package/static/browser/ldap-unit-editor/api/UnitApiClient.js.map +1 -0
- package/static/browser/ldap-unit-editor/components/MoveUnitModal.js +295 -0
- package/static/browser/ldap-unit-editor/components/MoveUnitModal.js.map +1 -0
- package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js +321 -0
- package/static/browser/ldap-unit-editor/components/UnitPropertyEditor.js.map +1 -0
- package/static/browser/ldap-unit-editor/components/UnitTree.js +197 -0
- package/static/browser/ldap-unit-editor/components/UnitTree.js.map +1 -0
- package/static/browser/ldap-unit-editor/index.js +2 -0
- package/static/browser/ldap-unit-editor/index.js.map +1 -0
- package/static/browser/ldap-unit-editor/types.js +2 -0
- package/static/browser/ldap-unit-editor/types.js.map +1 -0
- package/static/browser/ldap-unit-editor.esm.js +1013 -0
- package/static/browser/ldap-unit-editor.esm.js.map +1 -0
- package/static/browser/ldap-unit-editor.js +1021 -0
- package/static/browser/ldap-unit-editor.js.map +1 -0
- package/static/browser/ldap-unit-editor.min.js +2 -0
- package/static/browser/ldap-unit-editor.min.js.map +1 -0
- package/static/browser/ldap-user-editor/LdapUserEditor.js +184 -0
- package/static/browser/ldap-user-editor/LdapUserEditor.js.map +1 -0
- package/static/browser/ldap-user-editor/api/UserApiClient.js +209 -0
- package/static/browser/ldap-user-editor/api/UserApiClient.js.map +1 -0
- package/static/browser/ldap-user-editor/cache/CacheManager.js +123 -0
- package/static/browser/ldap-user-editor/cache/CacheManager.js.map +1 -0
- package/static/browser/ldap-user-editor/components/MoveUserModal.js +302 -0
- package/static/browser/ldap-user-editor/components/MoveUserModal.js.map +1 -0
- package/static/browser/ldap-user-editor/components/PointerField.js +152 -0
- package/static/browser/ldap-user-editor/components/PointerField.js.map +1 -0
- package/static/browser/ldap-user-editor/components/UserEditor.js +608 -0
- package/static/browser/ldap-user-editor/components/UserEditor.js.map +1 -0
- package/static/browser/ldap-user-editor/components/UserList.js +181 -0
- package/static/browser/ldap-user-editor/components/UserList.js.map +1 -0
- package/static/browser/ldap-user-editor/components/UserTree.js +164 -0
- package/static/browser/ldap-user-editor/components/UserTree.js.map +1 -0
- package/static/browser/ldap-user-editor/index.js +2 -0
- package/static/browser/ldap-user-editor/index.js.map +1 -0
- package/static/browser/ldap-user-editor/types.js +2 -0
- package/static/browser/ldap-user-editor/types.js.map +1 -0
- package/static/browser/ldap-user-editor.css +2 -0
- package/static/browser/ldap-user-editor.css.map +1 -0
- package/static/browser/ldap-user-editor.esm.js +1897 -0
- package/static/browser/ldap-user-editor.esm.js.map +1 -0
- package/static/browser/ldap-user-editor.js +1905 -0
- package/static/browser/ldap-user-editor.js.map +1 -0
- package/static/browser/ldap-user-editor.min.js +2 -0
- package/static/browser/ldap-user-editor.min.js.map +1 -0
- package/static/browser/shared/components/Modal.js +121 -0
- package/static/browser/shared/components/Modal.js.map +1 -0
- package/static/browser/shared/components/StatusMessage.js +119 -0
- package/static/browser/shared/components/StatusMessage.js.map +1 -0
- package/static/browser/shared/index.js +7 -0
- package/static/browser/shared/index.js.map +1 -0
- package/static/browser/shared/types/index.js +37 -0
- package/static/browser/shared/types/index.js.map +1 -0
- package/static/browser/shared/utils/dom.js +78 -0
- package/static/browser/shared/utils/dom.js.map +1 -0
- package/static/browser/shared/utils/form.js +234 -0
- package/static/browser/shared/utils/form.js.map +1 -0
- package/static/browser/shared/utils/schema.js +121 -0
- package/static/browser/shared/utils/schema.js.map +1 -0
- package/static/browser/shared.esm.js +694 -0
- package/static/browser/shared.esm.js.map +1 -0
- package/static/browser/shared.js +723 -0
- package/static/browser/shared.js.map +1 -0
- package/static/browser/shared.min.js +2 -0
- package/static/browser/shared.min.js.map +1 -0
- package/static/schemas/ad/computers.json +92 -0
- package/static/schemas/ad/groups.json +55 -0
- package/static/schemas/ad/organizations.json +66 -0
- package/static/schemas/ad/users.json +116 -0
- package/static/schemas/standard/devices.json +72 -0
- package/static/schemas/standard/groups.json +54 -0
- package/static/schemas/standard/organizations.json +49 -0
- package/static/schemas/standard/users.json +86 -0
- package/static/schemas/twake/groups.json +75 -0
- package/static/schemas/twake/nomenclature/twakeAccountStatus.json +31 -0
- package/static/schemas/twake/nomenclature/twakeDeliveryMode.json +31 -0
- package/static/schemas/twake/nomenclature/twakeListType.json +31 -0
- package/static/schemas/twake/nomenclature/twakeMailboxType.json +31 -0
- package/static/schemas/twake/nomenclature/twakeTitle.json +31 -0
- package/static/schemas/twake/organizations.json +52 -0
- package/static/schemas/twake/positions.json +32 -0
- package/static/schemas/twake/users.json +112 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LDAP User Editor - Main class
|
|
3
|
+
* @author Xavier Guimard
|
|
4
|
+
*/
|
|
5
|
+
import type { EditorOptions, Config, LdapUser } from './types';
|
|
6
|
+
import { UserApiClient } from './api/UserApiClient';
|
|
7
|
+
export declare class LdapUserEditor {
|
|
8
|
+
private options;
|
|
9
|
+
private api;
|
|
10
|
+
private container;
|
|
11
|
+
private userTree;
|
|
12
|
+
private userEditor;
|
|
13
|
+
private userList;
|
|
14
|
+
private currentUserDn;
|
|
15
|
+
private currentOrgDn;
|
|
16
|
+
private config;
|
|
17
|
+
constructor(options: EditorOptions);
|
|
18
|
+
init(): Promise<void>;
|
|
19
|
+
private render;
|
|
20
|
+
private initComponents;
|
|
21
|
+
private onOrganizationSelected;
|
|
22
|
+
private onUserSelected;
|
|
23
|
+
private handleError;
|
|
24
|
+
refresh(): Promise<void>;
|
|
25
|
+
destroy(): void;
|
|
26
|
+
createUser(userData: Partial<LdapUser>): Promise<LdapUser>;
|
|
27
|
+
deleteUser(dn: string): Promise<void>;
|
|
28
|
+
getConfig(): Config | null;
|
|
29
|
+
getApi(): UserApiClient;
|
|
30
|
+
getCurrentOrgDn(): string | null;
|
|
31
|
+
getCurrentUserDn(): string | null;
|
|
32
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LDAP User Editor - API Client
|
|
3
|
+
*/
|
|
4
|
+
import type { Config, LdapUser, PointerOption, Schema } from '../types';
|
|
5
|
+
import { CacheManager } from '../cache/CacheManager';
|
|
6
|
+
export declare class UserApiClient {
|
|
7
|
+
private baseUrl;
|
|
8
|
+
private cache;
|
|
9
|
+
constructor(baseUrl?: string, cacheOptions?: {
|
|
10
|
+
ttl?: number;
|
|
11
|
+
maxEntries?: number;
|
|
12
|
+
});
|
|
13
|
+
private getApiBase;
|
|
14
|
+
private getFirstValue;
|
|
15
|
+
/**
|
|
16
|
+
* Fetch with cache support for GET requests
|
|
17
|
+
*/
|
|
18
|
+
private cachedFetch;
|
|
19
|
+
getConfig(): Promise<Config>;
|
|
20
|
+
getSchema(schemaUrl: string): Promise<Schema>;
|
|
21
|
+
getUsers(search?: string): Promise<LdapUser[]>;
|
|
22
|
+
getUser(dn: string): Promise<LdapUser>;
|
|
23
|
+
updateUser(dn: string, data: Partial<LdapUser>): Promise<LdapUser>;
|
|
24
|
+
createUser(data: Partial<LdapUser>): Promise<LdapUser>;
|
|
25
|
+
deleteUser(dn: string): Promise<void>;
|
|
26
|
+
moveUser(dn: string, targetOrgDn: string): Promise<{
|
|
27
|
+
success: boolean;
|
|
28
|
+
newDn?: string;
|
|
29
|
+
}>;
|
|
30
|
+
getPointerOptions(branch: string): Promise<PointerOption[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Cache management methods
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Clear all cache
|
|
36
|
+
*/
|
|
37
|
+
clearCache(): void;
|
|
38
|
+
/**
|
|
39
|
+
* Invalidate cache for a specific URL pattern
|
|
40
|
+
*/
|
|
41
|
+
invalidateCache(pattern: string): void;
|
|
42
|
+
/**
|
|
43
|
+
* Get cache statistics
|
|
44
|
+
*/
|
|
45
|
+
getCacheStats(): {
|
|
46
|
+
size: number;
|
|
47
|
+
maxSize: number;
|
|
48
|
+
ttl: number;
|
|
49
|
+
keys: string[];
|
|
50
|
+
};
|
|
51
|
+
/**
|
|
52
|
+
* Get cache instance (for advanced usage)
|
|
53
|
+
*/
|
|
54
|
+
getCache(): CacheManager;
|
|
55
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple in-memory cache manager with LRU eviction
|
|
3
|
+
* Prevents excessive API calls when navigating the organization tree
|
|
4
|
+
*/
|
|
5
|
+
export interface CacheOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Time to live in milliseconds (default: 5 minutes)
|
|
8
|
+
*/
|
|
9
|
+
ttl?: number;
|
|
10
|
+
/**
|
|
11
|
+
* Maximum number of entries (default: 200)
|
|
12
|
+
*/
|
|
13
|
+
maxEntries?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare class CacheManager {
|
|
16
|
+
private cache;
|
|
17
|
+
private ttl;
|
|
18
|
+
private maxEntries;
|
|
19
|
+
constructor(options?: CacheOptions);
|
|
20
|
+
/**
|
|
21
|
+
* Get an item from cache
|
|
22
|
+
* Returns null if not found or expired
|
|
23
|
+
*/
|
|
24
|
+
get<T>(key: string): T | null;
|
|
25
|
+
/**
|
|
26
|
+
* Set an item in cache
|
|
27
|
+
* Evicts least recently used items if cache is full
|
|
28
|
+
*/
|
|
29
|
+
set<T>(key: string, data: T): void;
|
|
30
|
+
/**
|
|
31
|
+
* Check if key exists and is not expired
|
|
32
|
+
*/
|
|
33
|
+
has(key: string): boolean;
|
|
34
|
+
/**
|
|
35
|
+
* Invalidate a specific key
|
|
36
|
+
*/
|
|
37
|
+
invalidate(key: string): void;
|
|
38
|
+
/**
|
|
39
|
+
* Invalidate all keys matching a pattern
|
|
40
|
+
* Pattern can contain wildcards (*)
|
|
41
|
+
*/
|
|
42
|
+
invalidatePattern(pattern: string): void;
|
|
43
|
+
/**
|
|
44
|
+
* Clear all cache
|
|
45
|
+
*/
|
|
46
|
+
clear(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get cache statistics
|
|
49
|
+
*/
|
|
50
|
+
getStats(): {
|
|
51
|
+
size: number;
|
|
52
|
+
maxSize: number;
|
|
53
|
+
ttl: number;
|
|
54
|
+
keys: string[];
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Evict least recently used entry
|
|
58
|
+
*/
|
|
59
|
+
private evictLRU;
|
|
60
|
+
/**
|
|
61
|
+
* Clean expired entries
|
|
62
|
+
* Should be called periodically
|
|
63
|
+
*/
|
|
64
|
+
cleanExpired(): number;
|
|
65
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LDAP User Editor - Move User Modal Component
|
|
3
|
+
* Modal dialog for selecting target organization when moving a user
|
|
4
|
+
*/
|
|
5
|
+
import type { UserApiClient } from '../api/UserApiClient';
|
|
6
|
+
export declare class MoveUserModal {
|
|
7
|
+
private modal;
|
|
8
|
+
private api;
|
|
9
|
+
private currentOrgDn;
|
|
10
|
+
private selectedOrgDn;
|
|
11
|
+
private onMove;
|
|
12
|
+
private expandedNodes;
|
|
13
|
+
private rootDn;
|
|
14
|
+
constructor(api: UserApiClient, currentOrgDn: string, onMove: (targetOrgDn: string) => void);
|
|
15
|
+
/**
|
|
16
|
+
* Escape HTML special characters to prevent XSS attacks
|
|
17
|
+
*/
|
|
18
|
+
private static escapeHtml;
|
|
19
|
+
show(): Promise<void>;
|
|
20
|
+
private attachHandlers;
|
|
21
|
+
private loadOrganizationTree;
|
|
22
|
+
private renderTree;
|
|
23
|
+
private renderNode;
|
|
24
|
+
private attachTreeHandlers;
|
|
25
|
+
private selectOrganization;
|
|
26
|
+
private handleMove;
|
|
27
|
+
close(): void;
|
|
28
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LDAP User Editor - Pointer Field Component
|
|
3
|
+
*/
|
|
4
|
+
import type { SchemaAttribute } from '../types';
|
|
5
|
+
import type { UserApiClient } from '../api/UserApiClient';
|
|
6
|
+
export declare class PointerField {
|
|
7
|
+
private api;
|
|
8
|
+
private attribute;
|
|
9
|
+
private fieldName;
|
|
10
|
+
private value;
|
|
11
|
+
private onChange;
|
|
12
|
+
private options;
|
|
13
|
+
constructor(api: UserApiClient, fieldName: string, attribute: SchemaAttribute, value: string | string[], onChange: (value: string | string[]) => void);
|
|
14
|
+
init(): Promise<void>;
|
|
15
|
+
private loadOptions;
|
|
16
|
+
render(): string;
|
|
17
|
+
private renderSingle;
|
|
18
|
+
private renderArray;
|
|
19
|
+
attachHandlers(container: HTMLElement): void;
|
|
20
|
+
private attachSingleHandlers;
|
|
21
|
+
private attachArrayHandlers;
|
|
22
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LDAP User Editor - User Editor Component
|
|
3
|
+
*/
|
|
4
|
+
import type { UserApiClient } from '../api/UserApiClient';
|
|
5
|
+
export declare class UserEditor {
|
|
6
|
+
private container;
|
|
7
|
+
private api;
|
|
8
|
+
private userDn;
|
|
9
|
+
private user;
|
|
10
|
+
private schema;
|
|
11
|
+
private formData;
|
|
12
|
+
private pointerFields;
|
|
13
|
+
private onSaved?;
|
|
14
|
+
private onDeleted?;
|
|
15
|
+
private ldapBase;
|
|
16
|
+
/**
|
|
17
|
+
* Escape HTML special characters to prevent XSS attacks
|
|
18
|
+
* Reference: https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html
|
|
19
|
+
*/
|
|
20
|
+
private static escapeHtml;
|
|
21
|
+
constructor(container: HTMLElement, api: UserApiClient, userDn: string, onSaved?: () => void, onDeleted?: () => void);
|
|
22
|
+
init(): Promise<void>;
|
|
23
|
+
private showLoading;
|
|
24
|
+
private showError;
|
|
25
|
+
private loadUserAndSchema;
|
|
26
|
+
private replacePlaceholders;
|
|
27
|
+
private getFirstValue;
|
|
28
|
+
private getFieldByRole;
|
|
29
|
+
private render;
|
|
30
|
+
private renderFormSections;
|
|
31
|
+
private renderField;
|
|
32
|
+
private renderIdentifierField;
|
|
33
|
+
private renderStringField;
|
|
34
|
+
private renderNumberField;
|
|
35
|
+
private renderArrayField;
|
|
36
|
+
private initPointerFields;
|
|
37
|
+
private rerenderPointerField;
|
|
38
|
+
private attachHandlers;
|
|
39
|
+
private attachArrayFieldHandlers;
|
|
40
|
+
private rerenderArrayField;
|
|
41
|
+
private handleSubmit;
|
|
42
|
+
private handleMove;
|
|
43
|
+
private performMove;
|
|
44
|
+
private handleDelete;
|
|
45
|
+
refresh(): Promise<void>;
|
|
46
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LDAP User Editor - User List Component
|
|
3
|
+
* Shows users in a selected organization
|
|
4
|
+
*/
|
|
5
|
+
import type { UserApiClient } from '../api/UserApiClient';
|
|
6
|
+
export declare class UserList {
|
|
7
|
+
private container;
|
|
8
|
+
private api;
|
|
9
|
+
private users;
|
|
10
|
+
private orgDn;
|
|
11
|
+
private searchQuery;
|
|
12
|
+
private onSelectUser;
|
|
13
|
+
private schema;
|
|
14
|
+
private config;
|
|
15
|
+
constructor(container: HTMLElement, api: UserApiClient, orgDn: string, onSelectUser: (dn: string) => void);
|
|
16
|
+
init(): Promise<void>;
|
|
17
|
+
private render;
|
|
18
|
+
private loadUsers;
|
|
19
|
+
private getFirstValue;
|
|
20
|
+
private getFieldNameByRole;
|
|
21
|
+
private getFieldValueByRole;
|
|
22
|
+
private renderUserList;
|
|
23
|
+
refresh(): Promise<void>;
|
|
24
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LDAP User Editor - Organization Tree Component
|
|
3
|
+
* Shows only LDAP organization tree (filters out users/groups)
|
|
4
|
+
*/
|
|
5
|
+
export declare class UserTree {
|
|
6
|
+
private container;
|
|
7
|
+
private baseUrl;
|
|
8
|
+
private onSelectOrg;
|
|
9
|
+
private expandedNodes;
|
|
10
|
+
private selectedDn;
|
|
11
|
+
private rootDn;
|
|
12
|
+
private cache;
|
|
13
|
+
constructor(container: HTMLElement, baseUrl: string, onSelectOrg: (dn: string) => void);
|
|
14
|
+
/**
|
|
15
|
+
* Fetch with cache support
|
|
16
|
+
*/
|
|
17
|
+
private cachedFetch;
|
|
18
|
+
init(): Promise<void>;
|
|
19
|
+
private renderTree;
|
|
20
|
+
private renderNode;
|
|
21
|
+
private attachEventListeners;
|
|
22
|
+
refresh(): Promise<void>;
|
|
23
|
+
destroy(): void;
|
|
24
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LDAP User Editor - Type definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface EditorOptions {
|
|
5
|
+
containerId: string;
|
|
6
|
+
apiBaseUrl?: string;
|
|
7
|
+
onUserSaved?: (userDn: string) => void;
|
|
8
|
+
onError?: (error: Error) => void;
|
|
9
|
+
}
|
|
10
|
+
export interface LdapUser {
|
|
11
|
+
dn: string;
|
|
12
|
+
[key: string]: unknown;
|
|
13
|
+
}
|
|
14
|
+
export interface SchemaAttribute {
|
|
15
|
+
type: string;
|
|
16
|
+
required?: boolean;
|
|
17
|
+
fixed?: boolean;
|
|
18
|
+
role?: string;
|
|
19
|
+
test?: string;
|
|
20
|
+
branch?: string[];
|
|
21
|
+
items?: SchemaAttribute;
|
|
22
|
+
default?: unknown;
|
|
23
|
+
ui?: 'select' | 'search';
|
|
24
|
+
group?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface Schema {
|
|
27
|
+
entity: {
|
|
28
|
+
name: string;
|
|
29
|
+
mainAttribute: string;
|
|
30
|
+
objectClass: string[];
|
|
31
|
+
singularName: string;
|
|
32
|
+
pluralName: string;
|
|
33
|
+
base: string;
|
|
34
|
+
};
|
|
35
|
+
strict: boolean;
|
|
36
|
+
attributes: Record<string, SchemaAttribute>;
|
|
37
|
+
}
|
|
38
|
+
export interface PointerOption {
|
|
39
|
+
dn: string;
|
|
40
|
+
label: string;
|
|
41
|
+
}
|
|
42
|
+
export interface FlatResourceConfig {
|
|
43
|
+
name: string;
|
|
44
|
+
singularName: string;
|
|
45
|
+
pluralName: string;
|
|
46
|
+
mainAttribute: string;
|
|
47
|
+
objectClass: string[];
|
|
48
|
+
base: string;
|
|
49
|
+
schema?: Schema;
|
|
50
|
+
schemaUrl?: string;
|
|
51
|
+
endpoints: {
|
|
52
|
+
list: string;
|
|
53
|
+
get: string;
|
|
54
|
+
create: string;
|
|
55
|
+
update: string;
|
|
56
|
+
delete: string;
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
export interface Config {
|
|
60
|
+
apiPrefix: string;
|
|
61
|
+
ldapBase: string;
|
|
62
|
+
features?: {
|
|
63
|
+
ldapFlatGeneric?: {
|
|
64
|
+
flatResources?: FlatResourceConfig[];
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable Modal component
|
|
3
|
+
* @module browser/shared/components/Modal
|
|
4
|
+
*/
|
|
5
|
+
export interface ModalOptions {
|
|
6
|
+
id: string;
|
|
7
|
+
title: string;
|
|
8
|
+
onClose?: () => void;
|
|
9
|
+
}
|
|
10
|
+
export declare class Modal {
|
|
11
|
+
private overlay;
|
|
12
|
+
private options;
|
|
13
|
+
constructor(options: ModalOptions);
|
|
14
|
+
private attachEventListeners;
|
|
15
|
+
open(): void;
|
|
16
|
+
close(): void;
|
|
17
|
+
isOpen(): boolean;
|
|
18
|
+
getFormElement(): HTMLFormElement | null;
|
|
19
|
+
resetForm(): void;
|
|
20
|
+
setContent(html: string): void;
|
|
21
|
+
setTitle(title: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Create modal HTML structure
|
|
24
|
+
*/
|
|
25
|
+
static createModalHTML(options: {
|
|
26
|
+
id: string;
|
|
27
|
+
title: string;
|
|
28
|
+
formId?: string;
|
|
29
|
+
submitLabel?: string;
|
|
30
|
+
}): string;
|
|
31
|
+
/**
|
|
32
|
+
* Create and inject modal into DOM
|
|
33
|
+
*/
|
|
34
|
+
static create(options: ModalOptions & {
|
|
35
|
+
formId?: string;
|
|
36
|
+
submitLabel?: string;
|
|
37
|
+
}): Modal;
|
|
38
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Status message component for displaying notifications
|
|
3
|
+
* @module browser/shared/components/StatusMessage
|
|
4
|
+
*/
|
|
5
|
+
export type StatusType = 'error' | 'success' | 'info' | 'warning';
|
|
6
|
+
export interface StatusMessageOptions {
|
|
7
|
+
containerId: string;
|
|
8
|
+
duration?: number;
|
|
9
|
+
dismissible?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare class StatusMessage {
|
|
12
|
+
private container;
|
|
13
|
+
private options;
|
|
14
|
+
private timeoutId;
|
|
15
|
+
constructor(options: StatusMessageOptions);
|
|
16
|
+
/**
|
|
17
|
+
* Show a status message
|
|
18
|
+
*/
|
|
19
|
+
show(message: string, type?: StatusType): void;
|
|
20
|
+
/**
|
|
21
|
+
* Show error message
|
|
22
|
+
*/
|
|
23
|
+
error(message: string): void;
|
|
24
|
+
/**
|
|
25
|
+
* Show success message
|
|
26
|
+
*/
|
|
27
|
+
success(message: string): void;
|
|
28
|
+
/**
|
|
29
|
+
* Show info message
|
|
30
|
+
*/
|
|
31
|
+
info(message: string): void;
|
|
32
|
+
/**
|
|
33
|
+
* Show warning message
|
|
34
|
+
*/
|
|
35
|
+
warning(message: string): void;
|
|
36
|
+
/**
|
|
37
|
+
* Hide the status message
|
|
38
|
+
*/
|
|
39
|
+
hide(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Get the container element
|
|
42
|
+
*/
|
|
43
|
+
getContainer(): HTMLElement | null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Simple functional API for showing status messages
|
|
47
|
+
*/
|
|
48
|
+
export declare function showStatus(containerId: string, message: string, type?: StatusType, duration?: number): void;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Main export file for shared browser utilities and components
|
|
3
|
+
* @module browser/shared
|
|
4
|
+
*/
|
|
5
|
+
export * from './utils/dom';
|
|
6
|
+
export * from './utils/form';
|
|
7
|
+
export * from './utils/schema';
|
|
8
|
+
export { Modal, type ModalOptions } from './components/Modal';
|
|
9
|
+
export { StatusMessage, showStatus, type StatusMessageOptions, } from './components/StatusMessage';
|
|
10
|
+
export * from './types';
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared TypeScript types for browser components
|
|
3
|
+
* @module browser/shared/types
|
|
4
|
+
*/
|
|
5
|
+
export interface EditorConfig {
|
|
6
|
+
ldapBase?: string;
|
|
7
|
+
features?: {
|
|
8
|
+
flatResources?: ResourceConfig[];
|
|
9
|
+
};
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
export interface ResourceConfig {
|
|
13
|
+
name: string;
|
|
14
|
+
pluralName?: string;
|
|
15
|
+
schemaUrl?: string;
|
|
16
|
+
schema?: SchemaDefinition;
|
|
17
|
+
base?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SchemaDefinition {
|
|
20
|
+
entity: {
|
|
21
|
+
objectClass?: string[];
|
|
22
|
+
base?: string;
|
|
23
|
+
};
|
|
24
|
+
attributes: Record<string, SchemaAttribute>;
|
|
25
|
+
}
|
|
26
|
+
export interface SchemaAttribute {
|
|
27
|
+
type: 'string' | 'number' | 'integer' | 'array' | 'pointer';
|
|
28
|
+
required?: boolean;
|
|
29
|
+
fixed?: boolean;
|
|
30
|
+
default?: unknown;
|
|
31
|
+
branch?: string[];
|
|
32
|
+
items?: {
|
|
33
|
+
type: string;
|
|
34
|
+
branch?: string[];
|
|
35
|
+
};
|
|
36
|
+
group?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface PointerOption {
|
|
39
|
+
dn: string;
|
|
40
|
+
label: string;
|
|
41
|
+
}
|
|
42
|
+
export interface EditorAPI {
|
|
43
|
+
getPointerOptions(branch: string): Promise<PointerOption[]>;
|
|
44
|
+
createEntry(dn: string, data: Record<string, unknown>): Promise<void>;
|
|
45
|
+
deleteEntry(dn: string): Promise<void>;
|
|
46
|
+
updateEntry(dn: string, data: Record<string, unknown>): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
export interface BaseEditor {
|
|
49
|
+
getConfig(): EditorConfig;
|
|
50
|
+
getApi(): EditorAPI;
|
|
51
|
+
getCurrentOrgDn(): string | null;
|
|
52
|
+
getCurrentUserDn?(): string | null;
|
|
53
|
+
init(): Promise<void>;
|
|
54
|
+
createUser?(data: Record<string, unknown>): Promise<void>;
|
|
55
|
+
deleteUser?(dn: string): Promise<void>;
|
|
56
|
+
}
|
|
57
|
+
export type StatusType = 'error' | 'success' | 'info' | 'warning';
|
|
58
|
+
export interface Theme {
|
|
59
|
+
name: string;
|
|
60
|
+
primaryColor: string;
|
|
61
|
+
primaryColorDark: string;
|
|
62
|
+
gradientStart: string;
|
|
63
|
+
gradientEnd: string;
|
|
64
|
+
}
|
|
65
|
+
export declare const THEMES: Record<string, Theme>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DOM utility functions
|
|
3
|
+
* @module browser/shared/utils/dom
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Escape HTML special characters to prevent XSS attacks
|
|
7
|
+
* Reference: https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html
|
|
8
|
+
*/
|
|
9
|
+
export declare function escapeHtml(text: string | null | undefined): string;
|
|
10
|
+
/**
|
|
11
|
+
* Convert camelCase or snake_case to Title Case
|
|
12
|
+
*/
|
|
13
|
+
export declare function toTitleCase(text: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Create an HTML element with attributes and children
|
|
16
|
+
*/
|
|
17
|
+
export declare function createElement(tag: string, attributes?: Record<string, string>, children?: (string | HTMLElement)[]): HTMLElement;
|
|
18
|
+
/**
|
|
19
|
+
* Set innerHTML safely (assumes content has been properly escaped)
|
|
20
|
+
*/
|
|
21
|
+
export declare function setInnerHTML(element: HTMLElement, html: string): void;
|
|
22
|
+
/**
|
|
23
|
+
* Get element by ID with type safety
|
|
24
|
+
*/
|
|
25
|
+
export declare function getElementByIdSafe<T extends HTMLElement = HTMLElement>(id: string): T | null;
|
|
26
|
+
/**
|
|
27
|
+
* Query selector with type safety
|
|
28
|
+
*/
|
|
29
|
+
export declare function querySelectorSafe<T extends HTMLElement = HTMLElement>(selector: string, parent?: Document | HTMLElement): T | null;
|
|
30
|
+
/**
|
|
31
|
+
* Query selector all with type safety
|
|
32
|
+
*/
|
|
33
|
+
export declare function querySelectorAllSafe<T extends HTMLElement = HTMLElement>(selector: string, parent?: Document | HTMLElement): NodeListOf<T>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Form utility functions
|
|
3
|
+
* @module browser/shared/utils/form
|
|
4
|
+
*/
|
|
5
|
+
import type { SchemaAttribute, PointerOption } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Get user-friendly field label from field name
|
|
8
|
+
*/
|
|
9
|
+
export declare function getFieldLabel(fieldName: string, attribute?: SchemaAttribute, customLabels?: Record<string, string>): string;
|
|
10
|
+
/**
|
|
11
|
+
* Generate HTML for a form field based on schema attribute
|
|
12
|
+
*/
|
|
13
|
+
export declare function generateFormField(fieldName: string, attribute: SchemaAttribute, options?: {
|
|
14
|
+
customLabels?: Record<string, string>;
|
|
15
|
+
pointerOptionsLoader?: (branch: string) => Promise<PointerOption[]>;
|
|
16
|
+
}): Promise<string>;
|
|
17
|
+
/**
|
|
18
|
+
* Process form data and convert types based on schema
|
|
19
|
+
*/
|
|
20
|
+
export declare function processFormData(formData: FormData, schema: Record<string, SchemaAttribute>): Record<string, unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Collect values from pointer array fields
|
|
23
|
+
*/
|
|
24
|
+
export declare function collectPointerArrayValues(container: HTMLElement): Record<string, string[]>;
|
|
25
|
+
/**
|
|
26
|
+
* Group schema fields by category
|
|
27
|
+
*/
|
|
28
|
+
export declare function groupSchemaFields(schema: Record<string, SchemaAttribute>, categorizer?: (fieldName: string, attribute: SchemaAttribute) => string | null): Map<string, [string, SchemaAttribute][]>;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema utility functions
|
|
3
|
+
* @module browser/shared/utils/schema
|
|
4
|
+
*/
|
|
5
|
+
import type { PointerOption } from '../types';
|
|
6
|
+
/**
|
|
7
|
+
* Load pointer options from API
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadPointerOptions(branch: string, apiLoader: (branch: string) => Promise<PointerOption[]>, useCache?: boolean): Promise<PointerOption[]>;
|
|
10
|
+
/**
|
|
11
|
+
* Clear pointer options cache
|
|
12
|
+
*/
|
|
13
|
+
export declare function clearPointerOptionsCache(): void;
|
|
14
|
+
/**
|
|
15
|
+
* Replace placeholders in schema branches
|
|
16
|
+
*/
|
|
17
|
+
export declare function replacePlaceholders(value: string | string[], replacements: Record<string, string>): string | string[];
|
|
18
|
+
/**
|
|
19
|
+
* Replace placeholders in schema attributes
|
|
20
|
+
*/
|
|
21
|
+
export declare function replaceSchemaPlaceholders<T extends Record<string, unknown>>(schema: T, replacements: Record<string, string>): T;
|
|
22
|
+
/**
|
|
23
|
+
* Fetch organization path from API
|
|
24
|
+
*/
|
|
25
|
+
export declare function getOrganizationPath(orgDn: string, apiBaseUrl: string): Promise<string>;
|
|
26
|
+
/**
|
|
27
|
+
* Load schema from URL or object
|
|
28
|
+
*/
|
|
29
|
+
export declare function loadSchema<T = unknown>(schemaSource: string | T): Promise<T>;
|