@itwin/access-control-client 3.7.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +116 -25
- package/README.md +147 -669
- package/lib/cjs/AccessControlClient.d.ts +26 -9
- package/lib/cjs/AccessControlClient.d.ts.map +1 -1
- package/lib/cjs/AccessControlClient.js +21 -5
- package/lib/cjs/AccessControlClient.js.map +1 -1
- package/lib/cjs/access-control-client.d.ts +30 -1
- package/lib/cjs/access-control-client.d.ts.map +1 -1
- package/lib/cjs/access-control-client.js +42 -6
- package/lib/cjs/access-control-client.js.map +1 -1
- package/lib/cjs/accessControlClientInterfaces/GroupClient.d.ts +19 -0
- package/lib/cjs/accessControlClientInterfaces/GroupClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/GroupClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts +15 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.d.ts +19 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.d.ts +12 -0
- package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.d.ts +25 -0
- package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.d.ts +10 -0
- package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .d.ts +13 -0
- package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .js +7 -0
- package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/PermissionsClient.d.ts +10 -0
- package/lib/cjs/accessControlClientInterfaces/PermissionsClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/PermissionsClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/PermissionsClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/RolesClient.d.ts +16 -0
- package/lib/cjs/accessControlClientInterfaces/RolesClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/RolesClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/RolesClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/UserMembersClient.d.ts +16 -0
- package/lib/cjs/accessControlClientInterfaces/UserMembersClient.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/UserMembersClient.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/UserMembersClient.js.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/accessControl.d.ts +23 -0
- package/lib/cjs/accessControlClientInterfaces/accessControl.d.ts.map +1 -0
- package/lib/cjs/accessControlClientInterfaces/accessControl.js +7 -0
- package/lib/cjs/accessControlClientInterfaces/accessControl.js.map +1 -0
- package/lib/cjs/subClients/BaseClient.d.ts +88 -29
- package/lib/cjs/subClients/BaseClient.d.ts.map +1 -1
- package/lib/cjs/subClients/BaseClient.js +165 -40
- package/lib/cjs/subClients/BaseClient.js.map +1 -1
- package/lib/cjs/subClients/GroupMemberInvitationsClient.d.ts +33 -0
- package/lib/cjs/subClients/GroupMemberInvitationsClient.d.ts.map +1 -0
- package/lib/cjs/subClients/GroupMemberInvitationsClient.js +48 -0
- package/lib/cjs/subClients/GroupMemberInvitationsClient.js.map +1 -0
- package/lib/cjs/subClients/GroupMembersClient.d.ts +16 -6
- package/lib/cjs/subClients/GroupMembersClient.d.ts.map +1 -1
- package/lib/cjs/subClients/GroupMembersClient.js +22 -13
- package/lib/cjs/subClients/GroupMembersClient.js.map +1 -1
- package/lib/cjs/subClients/GroupsClient.d.ts +17 -9
- package/lib/cjs/subClients/GroupsClient.d.ts.map +1 -1
- package/lib/cjs/subClients/GroupsClient.js +22 -10
- package/lib/cjs/subClients/GroupsClient.js.map +1 -1
- package/lib/cjs/subClients/ITwinJobsClient.d.ts +12 -5
- package/lib/cjs/subClients/ITwinJobsClient.d.ts.map +1 -1
- package/lib/cjs/subClients/ITwinJobsClient.js +15 -3
- package/lib/cjs/subClients/ITwinJobsClient.js.map +1 -1
- package/lib/cjs/subClients/ItwinShares.d.ts +61 -0
- package/lib/cjs/subClients/ItwinShares.d.ts.map +1 -0
- package/lib/cjs/subClients/ItwinShares.js +77 -0
- package/lib/cjs/subClients/ItwinShares.js.map +1 -0
- package/lib/cjs/subClients/MemberInvitationsClient.d.ts +16 -3
- package/lib/cjs/subClients/MemberInvitationsClient.d.ts.map +1 -1
- package/lib/cjs/subClients/MemberInvitationsClient.js +22 -7
- package/lib/cjs/subClients/MemberInvitationsClient.js.map +1 -1
- package/lib/cjs/subClients/OwnerMembersClient.d.ts +45 -6
- package/lib/cjs/subClients/OwnerMembersClient.d.ts.map +1 -1
- package/lib/cjs/subClients/OwnerMembersClient.js +50 -10
- package/lib/cjs/subClients/OwnerMembersClient.js.map +1 -1
- package/lib/cjs/subClients/PermissionsClient.d.ts +10 -3
- package/lib/cjs/subClients/PermissionsClient.d.ts.map +1 -1
- package/lib/cjs/subClients/PermissionsClient.js +14 -2
- package/lib/cjs/subClients/PermissionsClient.js.map +1 -1
- package/lib/cjs/subClients/RolesClient.d.ts +13 -8
- package/lib/cjs/subClients/RolesClient.d.ts.map +1 -1
- package/lib/cjs/subClients/RolesClient.js +18 -6
- package/lib/cjs/subClients/RolesClient.js.map +1 -1
- package/lib/cjs/subClients/UserMembersClient.d.ts +13 -6
- package/lib/cjs/subClients/UserMembersClient.d.ts.map +1 -1
- package/lib/cjs/subClients/UserMembersClient.js +21 -9
- package/lib/cjs/subClients/UserMembersClient.js.map +1 -1
- package/lib/cjs/types/CommonApiTypes.d.ts +78 -0
- package/lib/cjs/types/CommonApiTypes.d.ts.map +1 -0
- package/lib/cjs/types/CommonApiTypes.js +7 -0
- package/lib/cjs/types/CommonApiTypes.js.map +1 -0
- package/lib/cjs/types/GroupMember.d.ts +75 -0
- package/lib/cjs/types/GroupMember.d.ts.map +1 -0
- package/lib/cjs/types/GroupMember.js +7 -0
- package/lib/cjs/types/GroupMember.js.map +1 -0
- package/lib/cjs/types/Groups.d.ts +64 -0
- package/lib/cjs/types/Groups.d.ts.map +1 -0
- package/lib/cjs/types/Groups.js +7 -0
- package/lib/cjs/types/Groups.js.map +1 -0
- package/lib/cjs/types/ITwinJob.d.ts +70 -0
- package/lib/cjs/types/ITwinJob.d.ts.map +1 -0
- package/lib/cjs/types/ITwinJob.js +7 -0
- package/lib/cjs/types/ITwinJob.js.map +1 -0
- package/lib/cjs/types/Invitations.d.ts +128 -0
- package/lib/cjs/types/Invitations.d.ts.map +1 -0
- package/lib/cjs/types/Invitations.js +7 -0
- package/lib/cjs/types/Invitations.js.map +1 -0
- package/lib/cjs/types/Members.d.ts +71 -0
- package/lib/cjs/types/Members.d.ts.map +1 -0
- package/lib/cjs/types/Members.js +7 -0
- package/lib/cjs/types/Members.js.map +1 -0
- package/lib/cjs/types/OwnerMember.d.ts +105 -0
- package/lib/cjs/types/OwnerMember.d.ts.map +1 -0
- package/lib/cjs/types/OwnerMember.js +7 -0
- package/lib/cjs/types/OwnerMember.js.map +1 -0
- package/lib/cjs/types/Permission.d.ts +5 -0
- package/lib/cjs/types/Permission.d.ts.map +1 -0
- package/lib/cjs/types/Permission.js +7 -0
- package/lib/cjs/types/Permission.js.map +1 -0
- package/lib/cjs/types/Role.d.ts +33 -0
- package/lib/cjs/types/Role.d.ts.map +1 -0
- package/lib/cjs/types/Role.js +7 -0
- package/lib/cjs/types/Role.js.map +1 -0
- package/lib/cjs/types/ShareContract.d.ts +80 -0
- package/lib/cjs/types/ShareContract.d.ts.map +1 -0
- package/lib/cjs/types/ShareContract.js +7 -0
- package/lib/cjs/types/ShareContract.js.map +1 -0
- package/lib/cjs/types/UserMembers.d.ts +115 -0
- package/lib/cjs/types/UserMembers.d.ts.map +1 -0
- package/lib/cjs/types/UserMembers.js +7 -0
- package/lib/cjs/types/UserMembers.js.map +1 -0
- package/lib/cjs/types/links.d.ts +20 -0
- package/lib/cjs/types/links.d.ts.map +1 -0
- package/lib/cjs/types/links.js +7 -0
- package/lib/cjs/types/links.js.map +1 -0
- package/lib/cjs/types/typeUtils.d.ts +42 -0
- package/lib/cjs/types/typeUtils.d.ts.map +1 -0
- package/lib/cjs/types/typeUtils.js +25 -0
- package/lib/cjs/types/typeUtils.js.map +1 -0
- package/lib/esm/AccessControlClient.d.ts +26 -9
- package/lib/esm/AccessControlClient.d.ts.map +1 -1
- package/lib/esm/AccessControlClient.js +31 -5
- package/lib/esm/AccessControlClient.js.map +1 -1
- package/lib/esm/access-control-client.d.ts +30 -1
- package/lib/esm/access-control-client.d.ts.map +1 -1
- package/lib/esm/access-control-client.js +33 -1
- package/lib/esm/access-control-client.js.map +1 -1
- package/lib/esm/accessControlClientInterfaces/GroupClient.d.ts +19 -0
- package/lib/esm/accessControlClientInterfaces/GroupClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/GroupClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts +15 -0
- package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupMembersClient.d.ts +19 -0
- package/lib/esm/accessControlClientInterfaces/GroupMembersClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/GroupMembersClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/GroupMembersClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.d.ts +12 -0
- package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.d.ts +25 -0
- package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.d.ts +10 -0
- package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .d.ts +13 -0
- package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .js +6 -0
- package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/PermissionsClient.d.ts +10 -0
- package/lib/esm/accessControlClientInterfaces/PermissionsClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/PermissionsClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/PermissionsClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/RolesClient.d.ts +16 -0
- package/lib/esm/accessControlClientInterfaces/RolesClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/RolesClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/RolesClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/UserMembersClient.d.ts +16 -0
- package/lib/esm/accessControlClientInterfaces/UserMembersClient.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/UserMembersClient.js +6 -0
- package/lib/esm/accessControlClientInterfaces/UserMembersClient.js.map +1 -0
- package/lib/esm/accessControlClientInterfaces/accessControl.d.ts +23 -0
- package/lib/esm/accessControlClientInterfaces/accessControl.d.ts.map +1 -0
- package/lib/esm/accessControlClientInterfaces/accessControl.js +6 -0
- package/lib/esm/accessControlClientInterfaces/accessControl.js.map +1 -0
- package/lib/esm/subClients/BaseClient.d.ts +88 -29
- package/lib/esm/subClients/BaseClient.d.ts.map +1 -1
- package/lib/esm/subClients/BaseClient.js +166 -41
- package/lib/esm/subClients/BaseClient.js.map +1 -1
- package/lib/esm/subClients/GroupMemberInvitationsClient.d.ts +33 -0
- package/lib/esm/subClients/GroupMemberInvitationsClient.d.ts.map +1 -0
- package/lib/esm/subClients/GroupMemberInvitationsClient.js +44 -0
- package/lib/esm/subClients/GroupMemberInvitationsClient.js.map +1 -0
- package/lib/esm/subClients/GroupMembersClient.d.ts +16 -6
- package/lib/esm/subClients/GroupMembersClient.d.ts.map +1 -1
- package/lib/esm/subClients/GroupMembersClient.js +22 -13
- package/lib/esm/subClients/GroupMembersClient.js.map +1 -1
- package/lib/esm/subClients/GroupsClient.d.ts +17 -9
- package/lib/esm/subClients/GroupsClient.d.ts.map +1 -1
- package/lib/esm/subClients/GroupsClient.js +22 -10
- package/lib/esm/subClients/GroupsClient.js.map +1 -1
- package/lib/esm/subClients/ITwinJobsClient.d.ts +12 -5
- package/lib/esm/subClients/ITwinJobsClient.d.ts.map +1 -1
- package/lib/esm/subClients/ITwinJobsClient.js +15 -3
- package/lib/esm/subClients/ITwinJobsClient.js.map +1 -1
- package/lib/esm/subClients/ItwinShares.d.ts +61 -0
- package/lib/esm/subClients/ItwinShares.d.ts.map +1 -0
- package/lib/esm/subClients/ItwinShares.js +73 -0
- package/lib/esm/subClients/ItwinShares.js.map +1 -0
- package/lib/esm/subClients/MemberInvitationsClient.d.ts +16 -3
- package/lib/esm/subClients/MemberInvitationsClient.d.ts.map +1 -1
- package/lib/esm/subClients/MemberInvitationsClient.js +22 -7
- package/lib/esm/subClients/MemberInvitationsClient.js.map +1 -1
- package/lib/esm/subClients/OwnerMembersClient.d.ts +45 -6
- package/lib/esm/subClients/OwnerMembersClient.d.ts.map +1 -1
- package/lib/esm/subClients/OwnerMembersClient.js +50 -10
- package/lib/esm/subClients/OwnerMembersClient.js.map +1 -1
- package/lib/esm/subClients/PermissionsClient.d.ts +10 -3
- package/lib/esm/subClients/PermissionsClient.d.ts.map +1 -1
- package/lib/esm/subClients/PermissionsClient.js +14 -2
- package/lib/esm/subClients/PermissionsClient.js.map +1 -1
- package/lib/esm/subClients/RolesClient.d.ts +13 -8
- package/lib/esm/subClients/RolesClient.d.ts.map +1 -1
- package/lib/esm/subClients/RolesClient.js +18 -6
- package/lib/esm/subClients/RolesClient.js.map +1 -1
- package/lib/esm/subClients/UserMembersClient.d.ts +13 -6
- package/lib/esm/subClients/UserMembersClient.d.ts.map +1 -1
- package/lib/esm/subClients/UserMembersClient.js +21 -9
- package/lib/esm/subClients/UserMembersClient.js.map +1 -1
- package/lib/esm/types/CommonApiTypes.d.ts +78 -0
- package/lib/esm/types/CommonApiTypes.d.ts.map +1 -0
- package/lib/esm/types/CommonApiTypes.js +6 -0
- package/lib/esm/types/CommonApiTypes.js.map +1 -0
- package/lib/esm/types/GroupMember.d.ts +75 -0
- package/lib/esm/types/GroupMember.d.ts.map +1 -0
- package/lib/esm/types/GroupMember.js +6 -0
- package/lib/esm/types/GroupMember.js.map +1 -0
- package/lib/esm/types/Groups.d.ts +64 -0
- package/lib/esm/types/Groups.d.ts.map +1 -0
- package/lib/esm/types/Groups.js +6 -0
- package/lib/esm/types/Groups.js.map +1 -0
- package/lib/esm/types/ITwinJob.d.ts +70 -0
- package/lib/esm/types/ITwinJob.d.ts.map +1 -0
- package/lib/esm/types/ITwinJob.js +6 -0
- package/lib/esm/types/ITwinJob.js.map +1 -0
- package/lib/esm/types/Invitations.d.ts +128 -0
- package/lib/esm/types/Invitations.d.ts.map +1 -0
- package/lib/esm/types/Invitations.js +6 -0
- package/lib/esm/types/Invitations.js.map +1 -0
- package/lib/esm/types/Members.d.ts +71 -0
- package/lib/esm/types/Members.d.ts.map +1 -0
- package/lib/esm/types/Members.js +6 -0
- package/lib/esm/types/Members.js.map +1 -0
- package/lib/esm/types/OwnerMember.d.ts +105 -0
- package/lib/esm/types/OwnerMember.d.ts.map +1 -0
- package/lib/esm/types/OwnerMember.js +6 -0
- package/lib/esm/types/OwnerMember.js.map +1 -0
- package/lib/esm/types/Permission.d.ts +5 -0
- package/lib/esm/types/Permission.d.ts.map +1 -0
- package/lib/esm/types/Permission.js +6 -0
- package/lib/esm/types/Permission.js.map +1 -0
- package/lib/esm/types/Role.d.ts +33 -0
- package/lib/esm/types/Role.d.ts.map +1 -0
- package/lib/esm/types/Role.js +6 -0
- package/lib/esm/types/Role.js.map +1 -0
- package/lib/esm/types/ShareContract.d.ts +80 -0
- package/lib/esm/types/ShareContract.d.ts.map +1 -0
- package/lib/esm/types/ShareContract.js +6 -0
- package/lib/esm/types/ShareContract.js.map +1 -0
- package/lib/esm/types/UserMembers.d.ts +115 -0
- package/lib/esm/types/UserMembers.d.ts.map +1 -0
- package/lib/esm/types/UserMembers.js +6 -0
- package/lib/esm/types/UserMembers.js.map +1 -0
- package/lib/esm/types/links.d.ts +20 -0
- package/lib/esm/types/links.d.ts.map +1 -0
- package/lib/esm/types/links.js +6 -0
- package/lib/esm/types/links.js.map +1 -0
- package/lib/esm/types/typeUtils.d.ts +42 -0
- package/lib/esm/types/typeUtils.d.ts.map +1 -0
- package/lib/esm/types/typeUtils.js +22 -0
- package/lib/esm/types/typeUtils.js.map +1 -0
- package/package.json +59 -45
- package/CONTRIBUTING.md +0 -90
- package/GETTINGSTARTED.md +0 -35
- package/lib/cjs/accessControlTypes.d.ts +0 -229
- package/lib/cjs/accessControlTypes.d.ts.map +0 -1
- package/lib/cjs/accessControlTypes.js +0 -25
- package/lib/cjs/accessControlTypes.js.map +0 -1
- package/lib/esm/accessControlTypes.d.ts +0 -229
- package/lib/esm/accessControlTypes.d.ts.map +0 -1
- package/lib/esm/accessControlTypes.js +0 -22
- package/lib/esm/accessControlTypes.js.map +0 -1
|
@@ -1,6 +1,55 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/** @packageDocumentation
|
|
6
|
+
* @module AccessControlClient
|
|
7
|
+
*/
|
|
8
|
+
import { hasProperty } from "../types/typeUtils";
|
|
9
|
+
/**
|
|
10
|
+
* Type guard to validate if an object is a valid Error structure
|
|
11
|
+
* @param error - Unknown object to validate
|
|
12
|
+
* @returns True if the object is a valid Error type
|
|
13
|
+
*/
|
|
14
|
+
function isValidError(error) {
|
|
15
|
+
if (typeof error !== "object" || error === null) {
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
const obj = error;
|
|
19
|
+
return typeof obj.code === "string" && typeof obj.message === "string";
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Type guard to validate if response data contains an error
|
|
23
|
+
* @param data - Unknown response data to validate
|
|
24
|
+
* @returns True if the data contains a valid Error object
|
|
25
|
+
*/
|
|
26
|
+
function isErrorResponse(data) {
|
|
27
|
+
if (typeof data !== "object" || data === null) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
const obj = data;
|
|
31
|
+
return "error" in obj && isValidError(obj.error);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Base client class providing common functionality for Access Control API requests.
|
|
35
|
+
* Handles authentication, request configuration, and query string building, and error validation.
|
|
36
|
+
*/
|
|
1
37
|
export class BaseClient {
|
|
38
|
+
_baseUrl = "https://api.bentley.com/accesscontrol/itwins";
|
|
39
|
+
/**
|
|
40
|
+
* Creates a new BaseClient instance for Access Control API operations
|
|
41
|
+
* @param url - Optional custom base URL, defaults to production iTwins API URL
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Use default production URL
|
|
46
|
+
* const client = new BaseClient();
|
|
47
|
+
*
|
|
48
|
+
* // Use custom URL for development/testing
|
|
49
|
+
* const client = new ITwinsAccessClient("https://api.bentley.com/accesscontrol/itwins");
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
2
52
|
constructor(url) {
|
|
3
|
-
this._baseUrl = "https://api.bentley.com/accesscontrol/itwins";
|
|
4
53
|
if (url !== undefined) {
|
|
5
54
|
this._baseUrl = url;
|
|
6
55
|
}
|
|
@@ -14,40 +63,66 @@ export class BaseClient {
|
|
|
14
63
|
}
|
|
15
64
|
}
|
|
16
65
|
/**
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
66
|
+
* Maps the some properties of {@link ODataQueryParams} to their corresponding query parameter names.
|
|
67
|
+
*
|
|
68
|
+
* @remarks
|
|
69
|
+
* This mapping is used to translate internal property names to the expected parameter names
|
|
70
|
+
* when constructing requests. Properties mapped to empty strings are excluded from
|
|
71
|
+
* the query string as they should be sent as headers instead.
|
|
72
|
+
*
|
|
73
|
+
* The mapping includes OData query parameters (prefixed with $) for pagination.
|
|
74
|
+
*
|
|
75
|
+
* @readonly
|
|
76
|
+
*/
|
|
77
|
+
static paginationParamMapping = {
|
|
78
|
+
top: "$top",
|
|
79
|
+
skip: "$skip",
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Sends a basic API request to the specified URL with the given method and data.
|
|
83
|
+
* @param accessToken The client access token
|
|
84
|
+
* @param method The HTTP method of the request (GET, POST, DELETE, etc)
|
|
85
|
+
* @param url The URL of the request
|
|
86
|
+
* @param data Optional request body data
|
|
87
|
+
* @param property Optional property name to extract from response data
|
|
88
|
+
* @param additionalHeaders Optional additional headers to include in the request
|
|
89
|
+
* @returns Promise resolving to a BentleyAPIResponse containing the response data or error
|
|
90
|
+
*/
|
|
22
91
|
async sendGenericAPIRequest(accessToken, method, url, data, property, additionalHeaders) {
|
|
23
92
|
const requestOptions = this.getRequestOptions(accessToken, method, url, data, additionalHeaders);
|
|
24
93
|
try {
|
|
25
94
|
const response = await fetch(requestOptions.url, {
|
|
26
95
|
method: requestOptions.method,
|
|
27
96
|
headers: requestOptions.headers,
|
|
28
|
-
body: requestOptions.
|
|
97
|
+
body: requestOptions.body,
|
|
29
98
|
});
|
|
30
|
-
let responseData;
|
|
31
|
-
const contentType = response.headers.get("content-type");
|
|
32
|
-
if (contentType && contentType.includes("application/json")) {
|
|
33
|
-
responseData = await response.json();
|
|
34
|
-
}
|
|
35
|
-
else {
|
|
36
|
-
responseData = await response.text();
|
|
37
|
-
}
|
|
38
99
|
// Convert Headers object to plain object for compatibility
|
|
39
100
|
const headers = {};
|
|
40
101
|
response.headers.forEach((value, key) => {
|
|
41
102
|
headers[key] = value;
|
|
42
103
|
});
|
|
104
|
+
const responseData = response.status !== 204 ? await response.json() : undefined;
|
|
105
|
+
if (!response.ok) {
|
|
106
|
+
if (isErrorResponse(responseData)) {
|
|
107
|
+
return {
|
|
108
|
+
status: response.status,
|
|
109
|
+
error: responseData.error,
|
|
110
|
+
headers,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
throw new Error("An error occurred while processing the request");
|
|
114
|
+
}
|
|
43
115
|
return {
|
|
44
116
|
status: response.status,
|
|
45
|
-
data: responseData
|
|
46
|
-
|
|
117
|
+
data: (responseData === "" || responseData === undefined
|
|
118
|
+
? undefined
|
|
119
|
+
: property && hasProperty(responseData, property)
|
|
120
|
+
? responseData[property]
|
|
121
|
+
: responseData),
|
|
47
122
|
headers,
|
|
48
123
|
};
|
|
49
124
|
}
|
|
50
|
-
catch
|
|
125
|
+
catch {
|
|
51
126
|
return {
|
|
52
127
|
status: 500,
|
|
53
128
|
error: {
|
|
@@ -59,40 +134,90 @@ export class BaseClient {
|
|
|
59
134
|
}
|
|
60
135
|
}
|
|
61
136
|
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
137
|
+
* Build the request configuration including method, headers, and body
|
|
138
|
+
* @param accessTokenString The client access token
|
|
139
|
+
* @param method The HTTP method of the request
|
|
140
|
+
* @param url The URL of the request
|
|
141
|
+
* @param data Optional request body data
|
|
142
|
+
* @param additionalHeaders Optional additional headers to include in the request
|
|
143
|
+
* @returns RequestConfig object with method, url, body, and headers
|
|
144
|
+
*/
|
|
145
|
+
getRequestOptions(accessTokenString, method, url, data, additionalHeaders) {
|
|
146
|
+
if (!accessTokenString) {
|
|
147
|
+
throw new Error("Access token is required");
|
|
148
|
+
}
|
|
149
|
+
if (!url) {
|
|
150
|
+
throw new Error("URL is required");
|
|
151
|
+
}
|
|
152
|
+
const body = JSON.stringify(data);
|
|
66
153
|
return {
|
|
67
154
|
method,
|
|
68
155
|
url,
|
|
69
|
-
|
|
156
|
+
body,
|
|
70
157
|
headers: {
|
|
71
|
-
|
|
158
|
+
authorization: accessTokenString,
|
|
72
159
|
"content-type": "application/json",
|
|
73
|
-
|
|
160
|
+
accept: "application/vnd.bentley.itwin-platform.v2+json",
|
|
74
161
|
...additionalHeaders,
|
|
75
162
|
},
|
|
76
|
-
validateStatus(status) {
|
|
77
|
-
return status < 500; // Resolve only if the status code is less than 500
|
|
78
|
-
},
|
|
79
163
|
};
|
|
80
164
|
}
|
|
81
165
|
/**
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
166
|
+
* Builds a query string to be appended to a URL from query arguments
|
|
167
|
+
* @param parameterMapping - Parameter mapping configuration that maps object properties to query parameter names
|
|
168
|
+
* @param queryArg - Object containing queryable properties for filtering
|
|
169
|
+
* @returns Query string with parameters applied, ready to append to a URL
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* const queryString = this.getQueryString(
|
|
174
|
+
* BaseClient.paginationParamMapping,
|
|
175
|
+
* {
|
|
176
|
+
* top: 10,
|
|
177
|
+
* skip: 5,
|
|
178
|
+
* }
|
|
179
|
+
* );
|
|
180
|
+
* // Returns: "$top=10&$skip=5"
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
getQueryString(parameterMapping, queryArg) {
|
|
184
|
+
if (!queryArg)
|
|
185
|
+
return "";
|
|
186
|
+
const params = this.buildQueryParams(queryArg, parameterMapping);
|
|
187
|
+
return params.join("&");
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Helper method to build query parameter array from mapping.
|
|
191
|
+
* Uses exhaustive parameter mapping to ensure type safety and prevent missing parameters.
|
|
192
|
+
* Automatically handles URL encoding and filters out excluded parameters.
|
|
193
|
+
*
|
|
194
|
+
* @param queryArg - Object containing queryable properties
|
|
195
|
+
* @param mapping - Parameter mapping configuration that maps object properties to query parameter names
|
|
196
|
+
* @returns Array of formatted query parameter strings ready for URL construction
|
|
197
|
+
*
|
|
198
|
+
* @example
|
|
199
|
+
* ```typescript
|
|
200
|
+
* const params = this.buildQueryParams(
|
|
201
|
+
* { top: 10, skip: 5 },
|
|
202
|
+
* { top: "$top", skip: "$skip" }
|
|
203
|
+
* );
|
|
204
|
+
* // Returns: ["$top=10", "$skip=5"]
|
|
205
|
+
* ```
|
|
206
|
+
*/
|
|
207
|
+
buildQueryParams(queryArg, mapping) {
|
|
208
|
+
const params = [];
|
|
209
|
+
// Type assertion constrains paramKey to actual property names and mappedValue to the specific strings from the mapping
|
|
210
|
+
// Narrows from set of all strings to only valid keys/values
|
|
211
|
+
for (const [paramKey, mappedValue] of Object.entries(mapping)) {
|
|
212
|
+
if (mappedValue === "")
|
|
213
|
+
continue;
|
|
214
|
+
const queryArgValue = queryArg[paramKey];
|
|
215
|
+
if (queryArgValue !== undefined && queryArgValue !== null) {
|
|
216
|
+
const stringValue = String(queryArgValue);
|
|
217
|
+
params.push(`${mappedValue}=${encodeURIComponent(stringValue)}`);
|
|
218
|
+
}
|
|
93
219
|
}
|
|
94
|
-
|
|
95
|
-
return queryString.replace(/^&+/, "");
|
|
220
|
+
return params;
|
|
96
221
|
}
|
|
97
222
|
}
|
|
98
223
|
//# sourceMappingURL=BaseClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseClient.js","sourceRoot":"","sources":["../../../src/subClients/BaseClient.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module AccessControlClient\r\n */\r\nimport type { AccessToken } from \"@itwin/core-bentley\";\r\nimport type { AccessControlAPIResponse, AccessControlQueryArg } from \"../accessControlTypes\";\r\n\r\n// Custom types to replace axios types\r\ntype Method = \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\r\n\r\ninterface RequestConfig {\r\n method: Method;\r\n url: string;\r\n data?: any;\r\n headers?: Record<string, string>;\r\n validateStatus?: (status: number) => boolean;\r\n}\r\n\r\nexport class BaseClient {\r\n protected _baseUrl: string = \"https://api.bentley.com/accesscontrol/itwins\";\r\n\r\n public constructor(url?: string) {\r\n if (url !== undefined) {\r\n this._baseUrl = url;\r\n } else {\r\n const urlPrefix = process.env.IMJS_URL_PREFIX;\r\n if (urlPrefix) {\r\n const baseUrl = new URL(this._baseUrl);\r\n baseUrl.hostname = urlPrefix + baseUrl.hostname;\r\n this._baseUrl = baseUrl.href;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sends a basic API request\r\n * @param accessToken The client access token\r\n * @param method The method type of the request (ex. GET, POST, DELETE, etc)\r\n * @param url The url of the request\r\n */\r\n protected async sendGenericAPIRequest(\r\n accessToken: AccessToken,\r\n method: Method,\r\n url: string,\r\n data?: any,\r\n property?: string,\r\n additionalHeaders?: { [key: string]: string }\r\n ): Promise<AccessControlAPIResponse<any>> { // TODO: Change any response\r\n const requestOptions = this.getRequestOptions(accessToken, method, url, data, additionalHeaders);\r\n try {\r\n const response = await fetch(requestOptions.url, {\r\n method: requestOptions.method,\r\n headers: requestOptions.headers,\r\n body: requestOptions.data ? JSON.stringify(requestOptions.data) : undefined,\r\n });\r\n\r\n let responseData: any;\r\n const contentType = response.headers.get(\"content-type\");\r\n\r\n if (contentType && contentType.includes(\"application/json\")) {\r\n responseData = await response.json();\r\n } else {\r\n responseData = await response.text();\r\n }\r\n\r\n // Convert Headers object to plain object for compatibility\r\n const headers: Record<string, string> = {};\r\n response.headers.forEach((value, key) => {\r\n headers[key] = value;\r\n });\r\n\r\n return {\r\n status: response.status,\r\n data: responseData?.error || responseData === \"\" ? undefined : property ? responseData[property] : responseData,\r\n error: responseData?.error,\r\n headers,\r\n };\r\n } catch (err) {\r\n return {\r\n status: 500,\r\n error: {\r\n code: \"InternalServerError\",\r\n message:\r\n \"An internal exception happened while calling iTwins Service\",\r\n },\r\n headers: {},\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Build the request methods, headers, and other options\r\n * @param accessToken The client access token\r\n */\r\n protected getRequestOptions(accessToken: AccessToken, method: Method, url: string, data?: any, additionalHeaders?: { [key: string]: string }): RequestConfig {\r\n return {\r\n method,\r\n url,\r\n data,\r\n headers: {\r\n \"authorization\": accessToken,\r\n \"content-type\": \"application/json\",\r\n \"accept\": \"application/vnd.bentley.itwin-platform.v2+json\",\r\n ...additionalHeaders,\r\n },\r\n validateStatus(status: number) {\r\n return status < 500; // Resolve only if the status code is less than 500\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Build a query to be appended to a URL\r\n * @param queryArg Object container queryable properties\r\n * @returns query string with AccessControlQueryArg applied, which should be appended to a url\r\n */\r\n protected getQueryString(queryArg: AccessControlQueryArg): string {\r\n let queryString = \"\";\r\n\r\n if (queryArg.top) {\r\n queryString += `&$top=${queryArg.top}`;\r\n }\r\n\r\n if (queryArg.skip) {\r\n queryString += `&$skip=${queryArg.skip}`;\r\n }\r\n\r\n // trim & from start of string\r\n return queryString.replace(/^&+/, \"\");\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"BaseClient.js","sourceRoot":"","sources":["../../../src/subClients/BaseClient.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module AccessControlClient\r\n */\r\n\r\nimport type { AccessToken } from \"@itwin/core-bentley\";\r\nimport type {\r\n ApimError,\r\n BentleyAPIResponse,\r\n Method,\r\n ODataQueryParams,\r\n RequestConfig,\r\n} from \"../types/CommonApiTypes\";\r\nimport { hasProperty, ParameterMapping } from \"../types/typeUtils\";\r\n\r\n/**\r\n * Type guard to validate if an object is a valid Error structure\r\n * @param error - Unknown object to validate\r\n * @returns True if the object is a valid Error type\r\n */\r\nfunction isValidError(error: unknown): error is ApimError {\r\n if (typeof error !== \"object\" || error === null) {\r\n return false;\r\n }\r\n\r\n const obj = error as Record<string, unknown>;\r\n return typeof obj.code === \"string\" && typeof obj.message === \"string\";\r\n}\r\n\r\n/**\r\n * Type guard to validate if response data contains an error\r\n * @param data - Unknown response data to validate\r\n * @returns True if the data contains a valid Error object\r\n */\r\nfunction isErrorResponse(data: unknown): data is { error: ApimError } {\r\n if (typeof data !== \"object\" || data === null) {\r\n return false;\r\n }\r\n\r\n const obj = data as Record<string, unknown>;\r\n return \"error\" in obj && isValidError(obj.error);\r\n}\r\n\r\n/**\r\n * Base client class providing common functionality for Access Control API requests.\r\n * Handles authentication, request configuration, and query string building, and error validation.\r\n */\r\nexport class BaseClient {\r\n protected _baseUrl: string = \"https://api.bentley.com/accesscontrol/itwins\";\r\n\r\n /**\r\n * Creates a new BaseClient instance for Access Control API operations\r\n * @param url - Optional custom base URL, defaults to production iTwins API URL\r\n *\r\n * @example\r\n * ```typescript\r\n * // Use default production URL\r\n * const client = new BaseClient();\r\n *\r\n * // Use custom URL for development/testing\r\n * const client = new ITwinsAccessClient(\"https://api.bentley.com/accesscontrol/itwins\");\r\n * ```\r\n */\r\n public constructor(url?: string) {\r\n if (url !== undefined) {\r\n this._baseUrl = url;\r\n } else {\r\n const urlPrefix = process.env.IMJS_URL_PREFIX;\r\n if (urlPrefix) {\r\n const baseUrl = new URL(this._baseUrl);\r\n baseUrl.hostname = urlPrefix + baseUrl.hostname;\r\n this._baseUrl = baseUrl.href;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Maps the some properties of {@link ODataQueryParams} to their corresponding query parameter names.\r\n *\r\n * @remarks\r\n * This mapping is used to translate internal property names to the expected parameter names\r\n * when constructing requests. Properties mapped to empty strings are excluded from\r\n * the query string as they should be sent as headers instead.\r\n *\r\n * The mapping includes OData query parameters (prefixed with $) for pagination.\r\n *\r\n * @readonly\r\n */\r\n protected static readonly paginationParamMapping: ParameterMapping<Pick<ODataQueryParams, \"top\" | \"skip\">> =\r\n {\r\n top: \"$top\",\r\n skip: \"$skip\",\r\n } as const;\r\n\r\n /**\r\n * Sends a basic API request to the specified URL with the given method and data.\r\n * @param accessToken The client access token\r\n * @param method The HTTP method of the request (GET, POST, DELETE, etc)\r\n * @param url The URL of the request\r\n * @param data Optional request body data\r\n * @param property Optional property name to extract from response data\r\n * @param additionalHeaders Optional additional headers to include in the request\r\n * @returns Promise resolving to a BentleyAPIResponse containing the response data or error\r\n */\r\n protected async sendGenericAPIRequest<TResponse = unknown, TData = unknown>(\r\n accessToken: AccessToken,\r\n method: Method,\r\n url: string,\r\n data?: TData,\r\n property?: string,\r\n additionalHeaders?: Record<string, string>\r\n ): Promise<BentleyAPIResponse<TResponse>> {\r\n const requestOptions = this.getRequestOptions(\r\n accessToken,\r\n method,\r\n url,\r\n data,\r\n additionalHeaders\r\n );\r\n try {\r\n const response = await fetch(requestOptions.url, {\r\n method: requestOptions.method,\r\n headers: requestOptions.headers,\r\n body: requestOptions.body,\r\n });\r\n // Convert Headers object to plain object for compatibility\r\n const headers: Record<string, string> = {};\r\n response.headers.forEach((value, key) => {\r\n headers[key] = value;\r\n });\r\n const responseData =\r\n response.status !== 204 ? await response.json() : undefined;\r\n\r\n if (!response.ok) {\r\n if (isErrorResponse(responseData)) {\r\n return {\r\n status: response.status,\r\n error: responseData.error,\r\n headers,\r\n };\r\n }\r\n throw new Error(\"An error occurred while processing the request\");\r\n }\r\n return {\r\n status: response.status,\r\n data:\r\n (responseData === \"\" || responseData === undefined\r\n ? undefined\r\n : property && hasProperty(responseData, property)\r\n ? responseData[property]\r\n : responseData) as TResponse,\r\n headers,\r\n };\r\n } catch {\r\n return {\r\n status: 500,\r\n error: {\r\n code: \"InternalServerError\",\r\n message:\r\n \"An internal exception happened while calling iTwins Service\",\r\n },\r\n headers: {},\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Build the request configuration including method, headers, and body\r\n * @param accessTokenString The client access token\r\n * @param method The HTTP method of the request\r\n * @param url The URL of the request\r\n * @param data Optional request body data\r\n * @param additionalHeaders Optional additional headers to include in the request\r\n * @returns RequestConfig object with method, url, body, and headers\r\n */\r\n protected getRequestOptions<TData>(\r\n accessTokenString: AccessToken,\r\n method: Method,\r\n url: string,\r\n data?: TData,\r\n additionalHeaders?: Record<string, string>\r\n ): RequestConfig {\r\n if (!accessTokenString) {\r\n throw new Error(\"Access token is required\");\r\n }\r\n\r\n if (!url) {\r\n throw new Error(\"URL is required\");\r\n }\r\n const body: string | undefined = JSON.stringify(data);\r\n\r\n return {\r\n method,\r\n url,\r\n body,\r\n headers: {\r\n authorization: accessTokenString,\r\n \"content-type\": \"application/json\",\r\n accept: \"application/vnd.bentley.itwin-platform.v2+json\",\r\n ...additionalHeaders,\r\n },\r\n };\r\n }\r\n\r\n /**\r\n * Builds a query string to be appended to a URL from query arguments\r\n * @param parameterMapping - Parameter mapping configuration that maps object properties to query parameter names\r\n * @param queryArg - Object containing queryable properties for filtering\r\n * @returns Query string with parameters applied, ready to append to a URL\r\n *\r\n * @example\r\n * ```typescript\r\n * const queryString = this.getQueryString(\r\n * BaseClient.paginationParamMapping,\r\n * {\r\n * top: 10,\r\n * skip: 5,\r\n * }\r\n * );\r\n * // Returns: \"$top=10&$skip=5\"\r\n * ```\r\n */\r\n protected getQueryString<T>(\r\n parameterMapping: ParameterMapping<NonNullable<T>>,\r\n queryArg?: T\r\n ): string {\r\n if (!queryArg) return \"\";\r\n\r\n const params = this.buildQueryParams(queryArg, parameterMapping);\r\n return params.join(\"&\");\r\n }\r\n\r\n /**\r\n * Helper method to build query parameter array from mapping.\r\n * Uses exhaustive parameter mapping to ensure type safety and prevent missing parameters.\r\n * Automatically handles URL encoding and filters out excluded parameters.\r\n *\r\n * @param queryArg - Object containing queryable properties\r\n * @param mapping - Parameter mapping configuration that maps object properties to query parameter names\r\n * @returns Array of formatted query parameter strings ready for URL construction\r\n *\r\n * @example\r\n * ```typescript\r\n * const params = this.buildQueryParams(\r\n * { top: 10, skip: 5 },\r\n * { top: \"$top\", skip: \"$skip\" }\r\n * );\r\n * // Returns: [\"$top=10\", \"$skip=5\"]\r\n * ```\r\n */\r\n private buildQueryParams<T>(\r\n queryArg: T,\r\n mapping: ParameterMapping<T>\r\n ): string[] {\r\n const params: string[] = [];\r\n // Type assertion constrains paramKey to actual property names and mappedValue to the specific strings from the mapping\r\n // Narrows from set of all strings to only valid keys/values\r\n for (const [paramKey, mappedValue] of Object.entries(mapping) as [\r\n keyof T,\r\n ParameterMapping<T>[keyof T]\r\n ][]) {\r\n if (mappedValue === \"\") continue;\r\n const queryArgValue = queryArg[paramKey];\r\n if (queryArgValue !== undefined && queryArgValue !== null) {\r\n const stringValue = String(queryArgValue);\r\n params.push(`${mappedValue}=${encodeURIComponent(stringValue)}`);\r\n }\r\n }\r\n return params;\r\n }\r\n}\r\n"]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/** @packageDocumentation
|
|
2
|
+
* @module AccessControlClient
|
|
3
|
+
*/
|
|
4
|
+
import type { AccessToken } from "@itwin/core-bentley";
|
|
5
|
+
import type { MultipleGroupMemberInvitationResponse } from "../access-control-client";
|
|
6
|
+
import type { IGroupMemberInvitationClient } from "../accessControlClientInterfaces/GroupMemberInvitationClient";
|
|
7
|
+
import type { BentleyAPIResponse, ODataQueryParams } from "../types/CommonApiTypes";
|
|
8
|
+
import { BaseClient } from "./BaseClient";
|
|
9
|
+
/** Client API to perform iTwin group members operations.
|
|
10
|
+
* @beta
|
|
11
|
+
*/
|
|
12
|
+
export declare class GroupMemberInvitationClient extends BaseClient implements IGroupMemberInvitationClient {
|
|
13
|
+
/** Create a new GroupMembersClient instance
|
|
14
|
+
* @param url Optional base URL for the access control service. If not provided, defaults to base url.
|
|
15
|
+
*/
|
|
16
|
+
constructor(url?: string);
|
|
17
|
+
/** Retrieves a list of iTwin group members and their roles assignments.
|
|
18
|
+
* @param accessToken The client access token string
|
|
19
|
+
* @param iTwinId The id of the iTwin
|
|
20
|
+
* @beta
|
|
21
|
+
* @returns Array of members
|
|
22
|
+
*/
|
|
23
|
+
queryITwinGroupMemberInvitations(accessToken: AccessToken, iTwinId: string, groupId: string, arg?: Pick<ODataQueryParams, "top" | "skip">): Promise<BentleyAPIResponse<MultipleGroupMemberInvitationResponse>>;
|
|
24
|
+
/** Deletes a member invitations.
|
|
25
|
+
* @param accessToken The client access token string
|
|
26
|
+
* @param iTwinId The id of the iTwin
|
|
27
|
+
* @param invitationId The id of the invitation id
|
|
28
|
+
* @beta
|
|
29
|
+
* @returns Array of member invitations
|
|
30
|
+
*/
|
|
31
|
+
deleteITwinGroupMemberInvitation(accessToken: AccessToken, iTwinId: string, groupId: string, invitationId: string): Promise<BentleyAPIResponse<undefined>>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=GroupMemberInvitationsClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupMemberInvitationsClient.d.ts","sourceRoot":"","sources":["../../../src/subClients/GroupMemberInvitationsClient.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,8DAA8D,CAAC;AACjH,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,qBAAa,2BACX,SAAQ,UACR,YAAW,4BAA4B;IACvC;;OAEG;gBACgB,GAAG,CAAC,EAAE,MAAM;IAI/B;;;;;OAKG;IACU,gCAAgC,CAC3C,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,MAAM,CAAC,GAC3C,OAAO,CAAC,kBAAkB,CAAC,qCAAqC,CAAC,CAAC;IAenE;;;;;;KAMC;IACU,gCAAgC,CAC3C,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;CAI1C"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/** @packageDocumentation
|
|
6
|
+
* @module AccessControlClient
|
|
7
|
+
*/
|
|
8
|
+
import { BaseClient } from "./BaseClient";
|
|
9
|
+
/** Client API to perform iTwin group members operations.
|
|
10
|
+
* @beta
|
|
11
|
+
*/
|
|
12
|
+
export class GroupMemberInvitationClient extends BaseClient {
|
|
13
|
+
/** Create a new GroupMembersClient instance
|
|
14
|
+
* @param url Optional base URL for the access control service. If not provided, defaults to base url.
|
|
15
|
+
*/
|
|
16
|
+
constructor(url) {
|
|
17
|
+
super(url);
|
|
18
|
+
}
|
|
19
|
+
/** Retrieves a list of iTwin group members and their roles assignments.
|
|
20
|
+
* @param accessToken The client access token string
|
|
21
|
+
* @param iTwinId The id of the iTwin
|
|
22
|
+
* @beta
|
|
23
|
+
* @returns Array of members
|
|
24
|
+
*/
|
|
25
|
+
async queryITwinGroupMemberInvitations(accessToken, iTwinId, groupId, arg) {
|
|
26
|
+
let url = `${this._baseUrl}/${iTwinId}/groups/${groupId}/invitations`;
|
|
27
|
+
if (arg) {
|
|
28
|
+
url += `?${this.getQueryString(GroupMemberInvitationClient.paginationParamMapping, { top: arg.top, skip: arg.skip })}`;
|
|
29
|
+
}
|
|
30
|
+
return this.sendGenericAPIRequest(accessToken, "GET", url, undefined);
|
|
31
|
+
}
|
|
32
|
+
/** Deletes a member invitations.
|
|
33
|
+
* @param accessToken The client access token string
|
|
34
|
+
* @param iTwinId The id of the iTwin
|
|
35
|
+
* @param invitationId The id of the invitation id
|
|
36
|
+
* @beta
|
|
37
|
+
* @returns Array of member invitations
|
|
38
|
+
*/
|
|
39
|
+
async deleteITwinGroupMemberInvitation(accessToken, iTwinId, groupId, invitationId) {
|
|
40
|
+
const url = `${this._baseUrl}/${iTwinId}/groups/${groupId}/invitations/${invitationId}`;
|
|
41
|
+
return this.sendGenericAPIRequest(accessToken, "DELETE", url);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=GroupMemberInvitationsClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupMemberInvitationsClient.js","sourceRoot":"","sources":["../../../src/subClients/GroupMemberInvitationsClient.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAMH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;GAEG;AACH,MAAM,OAAO,2BACX,SAAQ,UAAU;IAElB;;OAEG;IACH,YAAmB,GAAY;QAC7B,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,gCAAgC,CAC3C,WAAwB,EACxB,OAAe,EACf,OAAe,EACf,GAA4C;QAE5C,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,WAAW,OAAO,cAAc,CAAC;QAEtE,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,2BAA2B,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QACzH,CAAC;QAED,OAAO,IAAI,CAAC,qBAAqB,CAC/B,WAAW,EACX,KAAK,EACL,GAAG,EACH,SAAS,CACV,CAAC;IACJ,CAAC;IAEC;;;;;;KAMC;IACI,KAAK,CAAC,gCAAgC,CAC3C,WAAwB,EACxB,OAAe,EACf,OAAe,EACf,YAAoB;QAEpB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,WAAW,OAAO,gBAAgB,YAAY,EAAE,CAAC;QACxF,OAAO,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module AccessControlClient\n */\n\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport type { MultipleGroupMemberInvitationResponse } from \"../access-control-client\";\nimport type { IGroupMemberInvitationClient } from \"../accessControlClientInterfaces/GroupMemberInvitationClient\";\nimport type { BentleyAPIResponse, ODataQueryParams } from \"../types/CommonApiTypes\";\nimport { BaseClient } from \"./BaseClient\";\n\n/** Client API to perform iTwin group members operations.\n * @beta\n */\nexport class GroupMemberInvitationClient\n extends BaseClient\n implements IGroupMemberInvitationClient {\n /** Create a new GroupMembersClient instance\n * @param url Optional base URL for the access control service. If not provided, defaults to base url.\n */\n public constructor(url?: string) {\n super(url);\n }\n\n /** Retrieves a list of iTwin group members and their roles assignments.\n * @param accessToken The client access token string\n * @param iTwinId The id of the iTwin\n * @beta\n * @returns Array of members\n */\n public async queryITwinGroupMemberInvitations(\n accessToken: AccessToken,\n iTwinId: string,\n groupId: string,\n arg?: Pick<ODataQueryParams, \"top\" | \"skip\">\n ): Promise<BentleyAPIResponse<MultipleGroupMemberInvitationResponse>> {\n let url = `${this._baseUrl}/${iTwinId}/groups/${groupId}/invitations`;\n\n if (arg) {\n url += `?${this.getQueryString(GroupMemberInvitationClient.paginationParamMapping, { top: arg.top, skip: arg.skip })}`;\n }\n\n return this.sendGenericAPIRequest(\n accessToken,\n \"GET\",\n url,\n undefined,\n );\n }\n\n /** Deletes a member invitations.\n * @param accessToken The client access token string\n * @param iTwinId The id of the iTwin\n * @param invitationId The id of the invitation id\n * @beta\n * @returns Array of member invitations\n */\n public async deleteITwinGroupMemberInvitation(\n accessToken: AccessToken,\n iTwinId: string,\n groupId: string,\n invitationId: string\n ): Promise<BentleyAPIResponse<undefined>> {\n const url = `${this._baseUrl}/${iTwinId}/groups/${groupId}/invitations/${invitationId}`;\n return this.sendGenericAPIRequest(accessToken, \"DELETE\", url);\n }\n}\n"]}
|
|
@@ -2,37 +2,47 @@
|
|
|
2
2
|
* @module AccessControlClient
|
|
3
3
|
*/
|
|
4
4
|
import type { AccessToken } from "@itwin/core-bentley";
|
|
5
|
-
import type {
|
|
5
|
+
import type { IGroupMembersClient } from "../accessControlClientInterfaces/GroupMembersClient";
|
|
6
|
+
import type { BentleyAPIResponse, ODataQueryParams } from "../types/CommonApiTypes";
|
|
7
|
+
import type { GroupMemberAssignment, MultipleGroupMembersResponse, SingleGroupMemberResponse } from "../types/GroupMember";
|
|
8
|
+
import type { Links } from "../types/links";
|
|
6
9
|
import { BaseClient } from "./BaseClient";
|
|
10
|
+
/** Client API to perform iTwin group members operations.
|
|
11
|
+
*/
|
|
7
12
|
export declare class GroupMembersClient extends BaseClient implements IGroupMembersClient {
|
|
13
|
+
/** Create a new GroupMembersClient instance
|
|
14
|
+
* @param url Optional base URL for the access control service. If not provided, defaults to base url.
|
|
15
|
+
*/
|
|
8
16
|
constructor(url?: string);
|
|
9
17
|
/** Retrieves a list of iTwin group members and their roles assignments.
|
|
10
18
|
* @param accessToken The client access token string
|
|
11
19
|
* @param iTwinId The id of the iTwin
|
|
12
20
|
* @returns Array of members
|
|
13
21
|
*/
|
|
14
|
-
|
|
22
|
+
queryITwinGroupMembers(accessToken: AccessToken, iTwinId: string, arg?: Pick<ODataQueryParams, "top" | "skip">): Promise<BentleyAPIResponse<MultipleGroupMembersResponse & {
|
|
23
|
+
_links: Links;
|
|
24
|
+
}>>;
|
|
15
25
|
/** Retrieves a specific group member for a specified iTwin.
|
|
16
26
|
* @param accessToken The client access token string
|
|
17
27
|
* @param iTwinId The id of the iTwin
|
|
18
28
|
* @param memberId The id of the member
|
|
19
29
|
* @returns Member
|
|
20
30
|
*/
|
|
21
|
-
|
|
31
|
+
getITwinGroupMember(accessToken: AccessToken, iTwinId: string, memberId: string): Promise<BentleyAPIResponse<SingleGroupMemberResponse>>;
|
|
22
32
|
/** Add new iTwin group members
|
|
23
33
|
* @param accessToken The client access token string
|
|
24
34
|
* @param iTwinId The id of the iTwin
|
|
25
35
|
* @param newMembers The list of new members to be added along with their role
|
|
26
36
|
* @returns Member[]
|
|
27
37
|
*/
|
|
28
|
-
|
|
38
|
+
addITwinGroupMembers(accessToken: AccessToken, iTwinId: string, newMembers: GroupMemberAssignment): Promise<BentleyAPIResponse<MultipleGroupMembersResponse>>;
|
|
29
39
|
/** Remove the specified group member from the iTwin
|
|
30
40
|
* @param accessToken The client access token string
|
|
31
41
|
* @param iTwinId The id of the iTwin
|
|
32
42
|
* @param memberId The id of the member
|
|
33
43
|
* @returns No Content
|
|
34
44
|
*/
|
|
35
|
-
|
|
45
|
+
removeITwinGroupMember(accessToken: AccessToken, iTwinId: string, memberId: string): Promise<BentleyAPIResponse<undefined>>;
|
|
36
46
|
/** Update iTwin group member roles
|
|
37
47
|
* @param accessToken The client access token string
|
|
38
48
|
* @param iTwinId The id of the iTwin
|
|
@@ -40,6 +50,6 @@ export declare class GroupMembersClient extends BaseClient implements IGroupMemb
|
|
|
40
50
|
* @param roleIds The ids of the roles to be assigned
|
|
41
51
|
* @returns Member
|
|
42
52
|
*/
|
|
43
|
-
|
|
53
|
+
updateITwinGroupMember(accessToken: AccessToken, iTwinId: string, memberId: string, roleIds: string[]): Promise<BentleyAPIResponse<SingleGroupMemberResponse>>;
|
|
44
54
|
}
|
|
45
55
|
//# sourceMappingURL=GroupMembersClient.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupMembersClient.d.ts","sourceRoot":"","sources":["../../../src/subClients/GroupMembersClient.ts"],"names":[],"mappings":"AAIA;;GAEG;
|
|
1
|
+
{"version":3,"file":"GroupMembersClient.d.ts","sourceRoot":"","sources":["../../../src/subClients/GroupMembersClient.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAC;AAC/F,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,KAAK,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AAC3H,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;GACG;AACH,qBAAa,kBACX,SAAQ,UACR,YAAW,mBAAmB;IAC9B;;OAEG;gBACgB,GAAG,CAAC,EAAE,MAAM;IAI/B;;;;OAIG;IACU,sBAAsB,CACjC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,MAAM,CAAC,GAC3C,OAAO,CAAC,kBAAkB,CAAC,4BAA4B,GAC1D;QAEA,MAAM,EAAE,KAAK,CAAA;KACZ,CACA,CAAC;IAeF;;;;;OAKG;IACU,mBAAmB,CAC9B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;IAUzD;;;;;OAKG;IACU,oBAAoB,CAC/B,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,qBAAqB,GAChC,OAAO,CAAC,kBAAkB,CAAC,4BAA4B,CAAC,CAAC;IAU5D;;;;;OAKG;IACU,sBAAsB,CACjC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAKzC;;;;;;OAMG;IACU,sBAAsB,CACjC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;CAY1D"}
|
|
@@ -1,5 +1,17 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
/** @packageDocumentation
|
|
6
|
+
* @module AccessControlClient
|
|
7
|
+
*/
|
|
1
8
|
import { BaseClient } from "./BaseClient";
|
|
9
|
+
/** Client API to perform iTwin group members operations.
|
|
10
|
+
*/
|
|
2
11
|
export class GroupMembersClient extends BaseClient {
|
|
12
|
+
/** Create a new GroupMembersClient instance
|
|
13
|
+
* @param url Optional base URL for the access control service. If not provided, defaults to base url.
|
|
14
|
+
*/
|
|
3
15
|
constructor(url) {
|
|
4
16
|
super(url);
|
|
5
17
|
}
|
|
@@ -8,12 +20,12 @@ export class GroupMembersClient extends BaseClient {
|
|
|
8
20
|
* @param iTwinId The id of the iTwin
|
|
9
21
|
* @returns Array of members
|
|
10
22
|
*/
|
|
11
|
-
async
|
|
23
|
+
async queryITwinGroupMembers(accessToken, iTwinId, arg) {
|
|
12
24
|
let url = `${this._baseUrl}/${iTwinId}/members/groups`;
|
|
13
25
|
if (arg) {
|
|
14
|
-
url += `?${this.getQueryString(arg)}`;
|
|
26
|
+
url += `?${this.getQueryString(GroupMembersClient.paginationParamMapping, { top: arg.top, skip: arg.skip })}`;
|
|
15
27
|
}
|
|
16
|
-
return this.sendGenericAPIRequest(accessToken, "GET", url, undefined
|
|
28
|
+
return this.sendGenericAPIRequest(accessToken, "GET", url, undefined);
|
|
17
29
|
}
|
|
18
30
|
/** Retrieves a specific group member for a specified iTwin.
|
|
19
31
|
* @param accessToken The client access token string
|
|
@@ -21,9 +33,9 @@ export class GroupMembersClient extends BaseClient {
|
|
|
21
33
|
* @param memberId The id of the member
|
|
22
34
|
* @returns Member
|
|
23
35
|
*/
|
|
24
|
-
async
|
|
36
|
+
async getITwinGroupMember(accessToken, iTwinId, memberId) {
|
|
25
37
|
const url = `${this._baseUrl}/${iTwinId}/members/groups/${memberId}`;
|
|
26
|
-
return this.sendGenericAPIRequest(accessToken, "GET", url, undefined
|
|
38
|
+
return this.sendGenericAPIRequest(accessToken, "GET", url, undefined);
|
|
27
39
|
}
|
|
28
40
|
/** Add new iTwin group members
|
|
29
41
|
* @param accessToken The client access token string
|
|
@@ -31,12 +43,9 @@ export class GroupMembersClient extends BaseClient {
|
|
|
31
43
|
* @param newMembers The list of new members to be added along with their role
|
|
32
44
|
* @returns Member[]
|
|
33
45
|
*/
|
|
34
|
-
async
|
|
46
|
+
async addITwinGroupMembers(accessToken, iTwinId, newMembers) {
|
|
35
47
|
const url = `${this._baseUrl}/${iTwinId}/members/groups`;
|
|
36
|
-
|
|
37
|
-
members: newMembers,
|
|
38
|
-
};
|
|
39
|
-
return this.sendGenericAPIRequest(accessToken, "POST", url, body, "members");
|
|
48
|
+
return this.sendGenericAPIRequest(accessToken, "POST", url, newMembers);
|
|
40
49
|
}
|
|
41
50
|
/** Remove the specified group member from the iTwin
|
|
42
51
|
* @param accessToken The client access token string
|
|
@@ -44,7 +53,7 @@ export class GroupMembersClient extends BaseClient {
|
|
|
44
53
|
* @param memberId The id of the member
|
|
45
54
|
* @returns No Content
|
|
46
55
|
*/
|
|
47
|
-
async
|
|
56
|
+
async removeITwinGroupMember(accessToken, iTwinId, memberId) {
|
|
48
57
|
const url = `${this._baseUrl}/${iTwinId}/members/groups/${memberId}`;
|
|
49
58
|
return this.sendGenericAPIRequest(accessToken, "DELETE", url);
|
|
50
59
|
}
|
|
@@ -55,12 +64,12 @@ export class GroupMembersClient extends BaseClient {
|
|
|
55
64
|
* @param roleIds The ids of the roles to be assigned
|
|
56
65
|
* @returns Member
|
|
57
66
|
*/
|
|
58
|
-
async
|
|
67
|
+
async updateITwinGroupMember(accessToken, iTwinId, memberId, roleIds) {
|
|
59
68
|
const url = `${this._baseUrl}/${iTwinId}/members/groups/${memberId}`;
|
|
60
69
|
const body = {
|
|
61
70
|
roleIds,
|
|
62
71
|
};
|
|
63
|
-
return this.sendGenericAPIRequest(accessToken, "PATCH", url, body
|
|
72
|
+
return this.sendGenericAPIRequest(accessToken, "PATCH", url, body);
|
|
64
73
|
}
|
|
65
74
|
}
|
|
66
75
|
//# sourceMappingURL=GroupMembersClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupMembersClient.js","sourceRoot":"","sources":["../../../src/subClients/GroupMembersClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GroupMembersClient.js","sourceRoot":"","sources":["../../../src/subClients/GroupMembersClient.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG;;GAEG;AAOH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;GACG;AACH,MAAM,OAAO,kBACX,SAAQ,UAAU;IAElB;;OAEG;IACH,YAAmB,GAAY;QAC7B,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,sBAAsB,CACjC,WAAwB,EACxB,OAAe,EACf,GAA4C;QAO5C,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,CAAC;QAEvD,IAAI,GAAG,EAAE,CAAC;YACR,GAAG,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,kBAAkB,CAAC,sBAAsB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;QAChH,CAAC;QAED,OAAO,IAAI,CAAC,qBAAqB,CAC/B,WAAW,EACX,KAAK,EACL,GAAG,EACH,SAAS,CACV,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,mBAAmB,CAC9B,WAAwB,EACxB,OAAe,EACf,QAAgB;QAEhB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,mBAAmB,QAAQ,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,qBAAqB,CAC/B,WAAW,EACX,KAAK,EACL,GAAG,EACH,SAAS,CACV,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,oBAAoB,CAC/B,WAAwB,EACxB,OAAe,EACf,UAAiC;QAEjC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,CAAC;QACzD,OAAO,IAAI,CAAC,qBAAqB,CAC/B,WAAW,EACX,MAAM,EACN,GAAG,EACH,UAAU,CACX,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,sBAAsB,CACjC,WAAwB,EACxB,OAAe,EACf,QAAgB;QAEhB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,mBAAmB,QAAQ,EAAE,CAAC;QACrE,OAAO,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAChE,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,sBAAsB,CACjC,WAAwB,EACxB,OAAe,EACf,QAAgB,EAChB,OAAiB;QAEjB,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,mBAAmB,QAAQ,EAAE,CAAC;QACrE,MAAM,IAAI,GAAG;YACX,OAAO;SACR,CAAC;QACF,OAAO,IAAI,CAAC,qBAAqB,CAC/B,WAAW,EACX,OAAO,EACP,GAAG,EACH,IAAI,CACL,CAAC;IACJ,CAAC;CACF","sourcesContent":["/*---------------------------------------------------------------------------------------------\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n * See LICENSE.md in the project root for license terms and full copyright notice.\n *--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module AccessControlClient\n */\n\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport type { IGroupMembersClient } from \"../accessControlClientInterfaces/GroupMembersClient\";\nimport type { BentleyAPIResponse, ODataQueryParams } from \"../types/CommonApiTypes\";\nimport type { GroupMemberAssignment, MultipleGroupMembersResponse, SingleGroupMemberResponse } from \"../types/GroupMember\";\nimport type { Links } from \"../types/links\";\nimport { BaseClient } from \"./BaseClient\";\n\n/** Client API to perform iTwin group members operations.\n */\nexport class GroupMembersClient\n extends BaseClient\n implements IGroupMembersClient {\n /** Create a new GroupMembersClient instance\n * @param url Optional base URL for the access control service. If not provided, defaults to base url.\n */\n public constructor(url?: string) {\n super(url);\n }\n\n /** Retrieves a list of iTwin group members and their roles assignments.\n * @param accessToken The client access token string\n * @param iTwinId The id of the iTwin\n * @returns Array of members\n */\n public async queryITwinGroupMembers(\n accessToken: AccessToken,\n iTwinId: string,\n arg?: Pick<ODataQueryParams, \"top\" | \"skip\">\n ): Promise<BentleyAPIResponse<MultipleGroupMembersResponse &\n {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n _links: Links\n }\n >> {\n let url = `${this._baseUrl}/${iTwinId}/members/groups`;\n\n if (arg) {\n url += `?${this.getQueryString(GroupMembersClient.paginationParamMapping, { top: arg.top, skip: arg.skip })}`;\n }\n\n return this.sendGenericAPIRequest(\n accessToken,\n \"GET\",\n url,\n undefined,\n );\n }\n\n /** Retrieves a specific group member for a specified iTwin.\n * @param accessToken The client access token string\n * @param iTwinId The id of the iTwin\n * @param memberId The id of the member\n * @returns Member\n */\n public async getITwinGroupMember(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string\n ): Promise<BentleyAPIResponse<SingleGroupMemberResponse>>{\n const url = `${this._baseUrl}/${iTwinId}/members/groups/${memberId}`;\n return this.sendGenericAPIRequest(\n accessToken,\n \"GET\",\n url,\n undefined,\n );\n }\n\n /** Add new iTwin group members\n * @param accessToken The client access token string\n * @param iTwinId The id of the iTwin\n * @param newMembers The list of new members to be added along with their role\n * @returns Member[]\n */\n public async addITwinGroupMembers(\n accessToken: AccessToken,\n iTwinId: string,\n newMembers: GroupMemberAssignment\n ): Promise<BentleyAPIResponse<MultipleGroupMembersResponse>> {\n const url = `${this._baseUrl}/${iTwinId}/members/groups`;\n return this.sendGenericAPIRequest(\n accessToken,\n \"POST\",\n url,\n newMembers,\n );\n }\n\n /** Remove the specified group member from the iTwin\n * @param accessToken The client access token string\n * @param iTwinId The id of the iTwin\n * @param memberId The id of the member\n * @returns No Content\n */\n public async removeITwinGroupMember(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string\n ): Promise<BentleyAPIResponse<undefined>> {\n const url = `${this._baseUrl}/${iTwinId}/members/groups/${memberId}`;\n return this.sendGenericAPIRequest(accessToken, \"DELETE\", url);\n }\n\n /** Update iTwin group member roles\n * @param accessToken The client access token string\n * @param iTwinId The id of the iTwin\n * @param memberId The id of the member\n * @param roleIds The ids of the roles to be assigned\n * @returns Member\n */\n public async updateITwinGroupMember(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string,\n roleIds: string[]\n ): Promise<BentleyAPIResponse<SingleGroupMemberResponse>> {\n const url = `${this._baseUrl}/${iTwinId}/members/groups/${memberId}`;\n const body = {\n roleIds,\n };\n return this.sendGenericAPIRequest(\n accessToken,\n \"PATCH\",\n url,\n body\n );\n }\n}\n"]}
|