@itwin/access-control-client 3.6.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.
Files changed (309) hide show
  1. package/CHANGELOG.md +121 -22
  2. package/README.md +147 -669
  3. package/lib/cjs/AccessControlClient.d.ts +26 -9
  4. package/lib/cjs/AccessControlClient.d.ts.map +1 -1
  5. package/lib/cjs/AccessControlClient.js +21 -5
  6. package/lib/cjs/AccessControlClient.js.map +1 -1
  7. package/lib/cjs/access-control-client.d.ts +30 -1
  8. package/lib/cjs/access-control-client.d.ts.map +1 -1
  9. package/lib/cjs/access-control-client.js +42 -6
  10. package/lib/cjs/access-control-client.js.map +1 -1
  11. package/lib/cjs/accessControlClientInterfaces/GroupClient.d.ts +19 -0
  12. package/lib/cjs/accessControlClientInterfaces/GroupClient.d.ts.map +1 -0
  13. package/lib/cjs/accessControlClientInterfaces/GroupClient.js +7 -0
  14. package/lib/cjs/accessControlClientInterfaces/GroupClient.js.map +1 -0
  15. package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts +15 -0
  16. package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts.map +1 -0
  17. package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.js +7 -0
  18. package/lib/cjs/accessControlClientInterfaces/GroupMemberInvitationClient.js.map +1 -0
  19. package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.d.ts +19 -0
  20. package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.d.ts.map +1 -0
  21. package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.js +7 -0
  22. package/lib/cjs/accessControlClientInterfaces/GroupMembersClient.js.map +1 -0
  23. package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.d.ts +12 -0
  24. package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.d.ts.map +1 -0
  25. package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.js +7 -0
  26. package/lib/cjs/accessControlClientInterfaces/ITwinJobsClient.js.map +1 -0
  27. package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.d.ts +25 -0
  28. package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.d.ts.map +1 -0
  29. package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.js +7 -0
  30. package/lib/cjs/accessControlClientInterfaces/ItwinSharesClient.js.map +1 -0
  31. package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.d.ts +10 -0
  32. package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.d.ts.map +1 -0
  33. package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.js +7 -0
  34. package/lib/cjs/accessControlClientInterfaces/MemberInvitationsClient.js.map +1 -0
  35. package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .d.ts +13 -0
  36. package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .d.ts.map +1 -0
  37. package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .js +7 -0
  38. package/lib/cjs/accessControlClientInterfaces/OwnerMembersClient .js.map +1 -0
  39. package/lib/cjs/accessControlClientInterfaces/PermissionsClient.d.ts +10 -0
  40. package/lib/cjs/accessControlClientInterfaces/PermissionsClient.d.ts.map +1 -0
  41. package/lib/cjs/accessControlClientInterfaces/PermissionsClient.js +7 -0
  42. package/lib/cjs/accessControlClientInterfaces/PermissionsClient.js.map +1 -0
  43. package/lib/cjs/accessControlClientInterfaces/RolesClient.d.ts +16 -0
  44. package/lib/cjs/accessControlClientInterfaces/RolesClient.d.ts.map +1 -0
  45. package/lib/cjs/accessControlClientInterfaces/RolesClient.js +7 -0
  46. package/lib/cjs/accessControlClientInterfaces/RolesClient.js.map +1 -0
  47. package/lib/cjs/accessControlClientInterfaces/UserMembersClient.d.ts +16 -0
  48. package/lib/cjs/accessControlClientInterfaces/UserMembersClient.d.ts.map +1 -0
  49. package/lib/cjs/accessControlClientInterfaces/UserMembersClient.js +7 -0
  50. package/lib/cjs/accessControlClientInterfaces/UserMembersClient.js.map +1 -0
  51. package/lib/cjs/accessControlClientInterfaces/accessControl.d.ts +23 -0
  52. package/lib/cjs/accessControlClientInterfaces/accessControl.d.ts.map +1 -0
  53. package/lib/cjs/accessControlClientInterfaces/accessControl.js +7 -0
  54. package/lib/cjs/accessControlClientInterfaces/accessControl.js.map +1 -0
  55. package/lib/cjs/subClients/BaseClient.d.ts +88 -22
  56. package/lib/cjs/subClients/BaseClient.d.ts.map +1 -1
  57. package/lib/cjs/subClients/BaseClient.js +174 -34
  58. package/lib/cjs/subClients/BaseClient.js.map +1 -1
  59. package/lib/cjs/subClients/GroupMemberInvitationsClient.d.ts +33 -0
  60. package/lib/cjs/subClients/GroupMemberInvitationsClient.d.ts.map +1 -0
  61. package/lib/cjs/subClients/GroupMemberInvitationsClient.js +48 -0
  62. package/lib/cjs/subClients/GroupMemberInvitationsClient.js.map +1 -0
  63. package/lib/cjs/subClients/GroupMembersClient.d.ts +16 -6
  64. package/lib/cjs/subClients/GroupMembersClient.d.ts.map +1 -1
  65. package/lib/cjs/subClients/GroupMembersClient.js +22 -13
  66. package/lib/cjs/subClients/GroupMembersClient.js.map +1 -1
  67. package/lib/cjs/subClients/GroupsClient.d.ts +17 -9
  68. package/lib/cjs/subClients/GroupsClient.d.ts.map +1 -1
  69. package/lib/cjs/subClients/GroupsClient.js +22 -10
  70. package/lib/cjs/subClients/GroupsClient.js.map +1 -1
  71. package/lib/cjs/subClients/ITwinJobsClient.d.ts +12 -5
  72. package/lib/cjs/subClients/ITwinJobsClient.d.ts.map +1 -1
  73. package/lib/cjs/subClients/ITwinJobsClient.js +15 -3
  74. package/lib/cjs/subClients/ITwinJobsClient.js.map +1 -1
  75. package/lib/cjs/subClients/ItwinShares.d.ts +61 -0
  76. package/lib/cjs/subClients/ItwinShares.d.ts.map +1 -0
  77. package/lib/cjs/subClients/ItwinShares.js +77 -0
  78. package/lib/cjs/subClients/ItwinShares.js.map +1 -0
  79. package/lib/cjs/subClients/MemberInvitationsClient.d.ts +16 -3
  80. package/lib/cjs/subClients/MemberInvitationsClient.d.ts.map +1 -1
  81. package/lib/cjs/subClients/MemberInvitationsClient.js +22 -7
  82. package/lib/cjs/subClients/MemberInvitationsClient.js.map +1 -1
  83. package/lib/cjs/subClients/OwnerMembersClient.d.ts +45 -6
  84. package/lib/cjs/subClients/OwnerMembersClient.d.ts.map +1 -1
  85. package/lib/cjs/subClients/OwnerMembersClient.js +50 -10
  86. package/lib/cjs/subClients/OwnerMembersClient.js.map +1 -1
  87. package/lib/cjs/subClients/PermissionsClient.d.ts +10 -3
  88. package/lib/cjs/subClients/PermissionsClient.d.ts.map +1 -1
  89. package/lib/cjs/subClients/PermissionsClient.js +14 -2
  90. package/lib/cjs/subClients/PermissionsClient.js.map +1 -1
  91. package/lib/cjs/subClients/RolesClient.d.ts +13 -8
  92. package/lib/cjs/subClients/RolesClient.d.ts.map +1 -1
  93. package/lib/cjs/subClients/RolesClient.js +18 -6
  94. package/lib/cjs/subClients/RolesClient.js.map +1 -1
  95. package/lib/cjs/subClients/UserMembersClient.d.ts +13 -6
  96. package/lib/cjs/subClients/UserMembersClient.d.ts.map +1 -1
  97. package/lib/cjs/subClients/UserMembersClient.js +21 -9
  98. package/lib/cjs/subClients/UserMembersClient.js.map +1 -1
  99. package/lib/cjs/types/CommonApiTypes.d.ts +78 -0
  100. package/lib/cjs/types/CommonApiTypes.d.ts.map +1 -0
  101. package/lib/cjs/types/CommonApiTypes.js +7 -0
  102. package/lib/cjs/types/CommonApiTypes.js.map +1 -0
  103. package/lib/cjs/types/GroupMember.d.ts +75 -0
  104. package/lib/cjs/types/GroupMember.d.ts.map +1 -0
  105. package/lib/cjs/types/GroupMember.js +7 -0
  106. package/lib/cjs/types/GroupMember.js.map +1 -0
  107. package/lib/cjs/types/Groups.d.ts +64 -0
  108. package/lib/cjs/types/Groups.d.ts.map +1 -0
  109. package/lib/cjs/types/Groups.js +7 -0
  110. package/lib/cjs/types/Groups.js.map +1 -0
  111. package/lib/cjs/types/ITwinJob.d.ts +70 -0
  112. package/lib/cjs/types/ITwinJob.d.ts.map +1 -0
  113. package/lib/cjs/types/ITwinJob.js +7 -0
  114. package/lib/cjs/types/ITwinJob.js.map +1 -0
  115. package/lib/cjs/types/Invitations.d.ts +128 -0
  116. package/lib/cjs/types/Invitations.d.ts.map +1 -0
  117. package/lib/cjs/types/Invitations.js +7 -0
  118. package/lib/cjs/types/Invitations.js.map +1 -0
  119. package/lib/cjs/types/Members.d.ts +71 -0
  120. package/lib/cjs/types/Members.d.ts.map +1 -0
  121. package/lib/cjs/types/Members.js +7 -0
  122. package/lib/cjs/types/Members.js.map +1 -0
  123. package/lib/cjs/types/OwnerMember.d.ts +105 -0
  124. package/lib/cjs/types/OwnerMember.d.ts.map +1 -0
  125. package/lib/cjs/types/OwnerMember.js +7 -0
  126. package/lib/cjs/types/OwnerMember.js.map +1 -0
  127. package/lib/cjs/types/Permission.d.ts +5 -0
  128. package/lib/cjs/types/Permission.d.ts.map +1 -0
  129. package/lib/cjs/types/Permission.js +7 -0
  130. package/lib/cjs/types/Permission.js.map +1 -0
  131. package/lib/cjs/types/Role.d.ts +33 -0
  132. package/lib/cjs/types/Role.d.ts.map +1 -0
  133. package/lib/cjs/types/Role.js +7 -0
  134. package/lib/cjs/types/Role.js.map +1 -0
  135. package/lib/cjs/types/ShareContract.d.ts +80 -0
  136. package/lib/cjs/types/ShareContract.d.ts.map +1 -0
  137. package/lib/cjs/types/ShareContract.js +7 -0
  138. package/lib/cjs/types/ShareContract.js.map +1 -0
  139. package/lib/cjs/types/UserMembers.d.ts +115 -0
  140. package/lib/cjs/types/UserMembers.d.ts.map +1 -0
  141. package/lib/cjs/types/UserMembers.js +7 -0
  142. package/lib/cjs/types/UserMembers.js.map +1 -0
  143. package/lib/cjs/types/links.d.ts +20 -0
  144. package/lib/cjs/types/links.d.ts.map +1 -0
  145. package/lib/cjs/types/links.js +7 -0
  146. package/lib/cjs/types/links.js.map +1 -0
  147. package/lib/cjs/types/typeUtils.d.ts +42 -0
  148. package/lib/cjs/types/typeUtils.d.ts.map +1 -0
  149. package/lib/cjs/types/typeUtils.js +25 -0
  150. package/lib/cjs/types/typeUtils.js.map +1 -0
  151. package/lib/esm/AccessControlClient.d.ts +26 -9
  152. package/lib/esm/AccessControlClient.d.ts.map +1 -1
  153. package/lib/esm/AccessControlClient.js +31 -5
  154. package/lib/esm/AccessControlClient.js.map +1 -1
  155. package/lib/esm/access-control-client.d.ts +30 -1
  156. package/lib/esm/access-control-client.d.ts.map +1 -1
  157. package/lib/esm/access-control-client.js +33 -1
  158. package/lib/esm/access-control-client.js.map +1 -1
  159. package/lib/esm/accessControlClientInterfaces/GroupClient.d.ts +19 -0
  160. package/lib/esm/accessControlClientInterfaces/GroupClient.d.ts.map +1 -0
  161. package/lib/esm/accessControlClientInterfaces/GroupClient.js +6 -0
  162. package/lib/esm/accessControlClientInterfaces/GroupClient.js.map +1 -0
  163. package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts +15 -0
  164. package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.d.ts.map +1 -0
  165. package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.js +6 -0
  166. package/lib/esm/accessControlClientInterfaces/GroupMemberInvitationClient.js.map +1 -0
  167. package/lib/esm/accessControlClientInterfaces/GroupMembersClient.d.ts +19 -0
  168. package/lib/esm/accessControlClientInterfaces/GroupMembersClient.d.ts.map +1 -0
  169. package/lib/esm/accessControlClientInterfaces/GroupMembersClient.js +6 -0
  170. package/lib/esm/accessControlClientInterfaces/GroupMembersClient.js.map +1 -0
  171. package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.d.ts +12 -0
  172. package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.d.ts.map +1 -0
  173. package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.js +6 -0
  174. package/lib/esm/accessControlClientInterfaces/ITwinJobsClient.js.map +1 -0
  175. package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.d.ts +25 -0
  176. package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.d.ts.map +1 -0
  177. package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.js +6 -0
  178. package/lib/esm/accessControlClientInterfaces/ItwinSharesClient.js.map +1 -0
  179. package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.d.ts +10 -0
  180. package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.d.ts.map +1 -0
  181. package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.js +6 -0
  182. package/lib/esm/accessControlClientInterfaces/MemberInvitationsClient.js.map +1 -0
  183. package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .d.ts +13 -0
  184. package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .d.ts.map +1 -0
  185. package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .js +6 -0
  186. package/lib/esm/accessControlClientInterfaces/OwnerMembersClient .js.map +1 -0
  187. package/lib/esm/accessControlClientInterfaces/PermissionsClient.d.ts +10 -0
  188. package/lib/esm/accessControlClientInterfaces/PermissionsClient.d.ts.map +1 -0
  189. package/lib/esm/accessControlClientInterfaces/PermissionsClient.js +6 -0
  190. package/lib/esm/accessControlClientInterfaces/PermissionsClient.js.map +1 -0
  191. package/lib/esm/accessControlClientInterfaces/RolesClient.d.ts +16 -0
  192. package/lib/esm/accessControlClientInterfaces/RolesClient.d.ts.map +1 -0
  193. package/lib/esm/accessControlClientInterfaces/RolesClient.js +6 -0
  194. package/lib/esm/accessControlClientInterfaces/RolesClient.js.map +1 -0
  195. package/lib/esm/accessControlClientInterfaces/UserMembersClient.d.ts +16 -0
  196. package/lib/esm/accessControlClientInterfaces/UserMembersClient.d.ts.map +1 -0
  197. package/lib/esm/accessControlClientInterfaces/UserMembersClient.js +6 -0
  198. package/lib/esm/accessControlClientInterfaces/UserMembersClient.js.map +1 -0
  199. package/lib/esm/accessControlClientInterfaces/accessControl.d.ts +23 -0
  200. package/lib/esm/accessControlClientInterfaces/accessControl.d.ts.map +1 -0
  201. package/lib/esm/accessControlClientInterfaces/accessControl.js +6 -0
  202. package/lib/esm/accessControlClientInterfaces/accessControl.js.map +1 -0
  203. package/lib/esm/subClients/BaseClient.d.ts +88 -22
  204. package/lib/esm/subClients/BaseClient.d.ts.map +1 -1
  205. package/lib/esm/subClients/BaseClient.js +175 -35
  206. package/lib/esm/subClients/BaseClient.js.map +1 -1
  207. package/lib/esm/subClients/GroupMemberInvitationsClient.d.ts +33 -0
  208. package/lib/esm/subClients/GroupMemberInvitationsClient.d.ts.map +1 -0
  209. package/lib/esm/subClients/GroupMemberInvitationsClient.js +44 -0
  210. package/lib/esm/subClients/GroupMemberInvitationsClient.js.map +1 -0
  211. package/lib/esm/subClients/GroupMembersClient.d.ts +16 -6
  212. package/lib/esm/subClients/GroupMembersClient.d.ts.map +1 -1
  213. package/lib/esm/subClients/GroupMembersClient.js +22 -13
  214. package/lib/esm/subClients/GroupMembersClient.js.map +1 -1
  215. package/lib/esm/subClients/GroupsClient.d.ts +17 -9
  216. package/lib/esm/subClients/GroupsClient.d.ts.map +1 -1
  217. package/lib/esm/subClients/GroupsClient.js +22 -10
  218. package/lib/esm/subClients/GroupsClient.js.map +1 -1
  219. package/lib/esm/subClients/ITwinJobsClient.d.ts +12 -5
  220. package/lib/esm/subClients/ITwinJobsClient.d.ts.map +1 -1
  221. package/lib/esm/subClients/ITwinJobsClient.js +15 -3
  222. package/lib/esm/subClients/ITwinJobsClient.js.map +1 -1
  223. package/lib/esm/subClients/ItwinShares.d.ts +61 -0
  224. package/lib/esm/subClients/ItwinShares.d.ts.map +1 -0
  225. package/lib/esm/subClients/ItwinShares.js +73 -0
  226. package/lib/esm/subClients/ItwinShares.js.map +1 -0
  227. package/lib/esm/subClients/MemberInvitationsClient.d.ts +16 -3
  228. package/lib/esm/subClients/MemberInvitationsClient.d.ts.map +1 -1
  229. package/lib/esm/subClients/MemberInvitationsClient.js +22 -7
  230. package/lib/esm/subClients/MemberInvitationsClient.js.map +1 -1
  231. package/lib/esm/subClients/OwnerMembersClient.d.ts +45 -6
  232. package/lib/esm/subClients/OwnerMembersClient.d.ts.map +1 -1
  233. package/lib/esm/subClients/OwnerMembersClient.js +50 -10
  234. package/lib/esm/subClients/OwnerMembersClient.js.map +1 -1
  235. package/lib/esm/subClients/PermissionsClient.d.ts +10 -3
  236. package/lib/esm/subClients/PermissionsClient.d.ts.map +1 -1
  237. package/lib/esm/subClients/PermissionsClient.js +14 -2
  238. package/lib/esm/subClients/PermissionsClient.js.map +1 -1
  239. package/lib/esm/subClients/RolesClient.d.ts +13 -8
  240. package/lib/esm/subClients/RolesClient.d.ts.map +1 -1
  241. package/lib/esm/subClients/RolesClient.js +18 -6
  242. package/lib/esm/subClients/RolesClient.js.map +1 -1
  243. package/lib/esm/subClients/UserMembersClient.d.ts +13 -6
  244. package/lib/esm/subClients/UserMembersClient.d.ts.map +1 -1
  245. package/lib/esm/subClients/UserMembersClient.js +21 -9
  246. package/lib/esm/subClients/UserMembersClient.js.map +1 -1
  247. package/lib/esm/types/CommonApiTypes.d.ts +78 -0
  248. package/lib/esm/types/CommonApiTypes.d.ts.map +1 -0
  249. package/lib/esm/types/CommonApiTypes.js +6 -0
  250. package/lib/esm/types/CommonApiTypes.js.map +1 -0
  251. package/lib/esm/types/GroupMember.d.ts +75 -0
  252. package/lib/esm/types/GroupMember.d.ts.map +1 -0
  253. package/lib/esm/types/GroupMember.js +6 -0
  254. package/lib/esm/types/GroupMember.js.map +1 -0
  255. package/lib/esm/types/Groups.d.ts +64 -0
  256. package/lib/esm/types/Groups.d.ts.map +1 -0
  257. package/lib/esm/types/Groups.js +6 -0
  258. package/lib/esm/types/Groups.js.map +1 -0
  259. package/lib/esm/types/ITwinJob.d.ts +70 -0
  260. package/lib/esm/types/ITwinJob.d.ts.map +1 -0
  261. package/lib/esm/types/ITwinJob.js +6 -0
  262. package/lib/esm/types/ITwinJob.js.map +1 -0
  263. package/lib/esm/types/Invitations.d.ts +128 -0
  264. package/lib/esm/types/Invitations.d.ts.map +1 -0
  265. package/lib/esm/types/Invitations.js +6 -0
  266. package/lib/esm/types/Invitations.js.map +1 -0
  267. package/lib/esm/types/Members.d.ts +71 -0
  268. package/lib/esm/types/Members.d.ts.map +1 -0
  269. package/lib/esm/types/Members.js +6 -0
  270. package/lib/esm/types/Members.js.map +1 -0
  271. package/lib/esm/types/OwnerMember.d.ts +105 -0
  272. package/lib/esm/types/OwnerMember.d.ts.map +1 -0
  273. package/lib/esm/types/OwnerMember.js +6 -0
  274. package/lib/esm/types/OwnerMember.js.map +1 -0
  275. package/lib/esm/types/Permission.d.ts +5 -0
  276. package/lib/esm/types/Permission.d.ts.map +1 -0
  277. package/lib/esm/types/Permission.js +6 -0
  278. package/lib/esm/types/Permission.js.map +1 -0
  279. package/lib/esm/types/Role.d.ts +33 -0
  280. package/lib/esm/types/Role.d.ts.map +1 -0
  281. package/lib/esm/types/Role.js +6 -0
  282. package/lib/esm/types/Role.js.map +1 -0
  283. package/lib/esm/types/ShareContract.d.ts +80 -0
  284. package/lib/esm/types/ShareContract.d.ts.map +1 -0
  285. package/lib/esm/types/ShareContract.js +6 -0
  286. package/lib/esm/types/ShareContract.js.map +1 -0
  287. package/lib/esm/types/UserMembers.d.ts +115 -0
  288. package/lib/esm/types/UserMembers.d.ts.map +1 -0
  289. package/lib/esm/types/UserMembers.js +6 -0
  290. package/lib/esm/types/UserMembers.js.map +1 -0
  291. package/lib/esm/types/links.d.ts +20 -0
  292. package/lib/esm/types/links.d.ts.map +1 -0
  293. package/lib/esm/types/links.js +6 -0
  294. package/lib/esm/types/links.js.map +1 -0
  295. package/lib/esm/types/typeUtils.d.ts +42 -0
  296. package/lib/esm/types/typeUtils.d.ts.map +1 -0
  297. package/lib/esm/types/typeUtils.js +22 -0
  298. package/lib/esm/types/typeUtils.js.map +1 -0
  299. package/package.json +58 -47
  300. package/CONTRIBUTING.md +0 -90
  301. package/GETTINGSTARTED.md +0 -35
  302. package/lib/cjs/accessControlTypes.d.ts +0 -229
  303. package/lib/cjs/accessControlTypes.d.ts.map +0 -1
  304. package/lib/cjs/accessControlTypes.js +0 -25
  305. package/lib/cjs/accessControlTypes.js.map +0 -1
  306. package/lib/esm/accessControlTypes.d.ts +0 -229
  307. package/lib/esm/accessControlTypes.d.ts.map +0 -1
  308. package/lib/esm/accessControlTypes.js +0 -22
  309. package/lib/esm/accessControlTypes.js.map +0 -1
@@ -1,7 +1,55 @@
1
- import axios from "axios";
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
+ */
2
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
+ */
3
52
  constructor(url) {
4
- this._baseUrl = "https://api.bentley.com/accesscontrol/itwins";
5
53
  if (url !== undefined) {
6
54
  this._baseUrl = url;
7
55
  }
@@ -15,23 +63,66 @@ export class BaseClient {
15
63
  }
16
64
  }
17
65
  /**
18
- * Sends a basic API request
19
- * @param accessTokenString The client access token string
20
- * @param method The method type of the request (ex. GET, POST, DELETE, etc)
21
- * @param url The url of the request
22
- */
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
+ */
23
91
  async sendGenericAPIRequest(accessToken, method, url, data, property, additionalHeaders) {
24
92
  const requestOptions = this.getRequestOptions(accessToken, method, url, data, additionalHeaders);
25
93
  try {
26
- const response = await axios(requestOptions);
94
+ const response = await fetch(requestOptions.url, {
95
+ method: requestOptions.method,
96
+ headers: requestOptions.headers,
97
+ body: requestOptions.body,
98
+ });
99
+ // Convert Headers object to plain object for compatibility
100
+ const headers = {};
101
+ response.headers.forEach((value, key) => {
102
+ headers[key] = value;
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
+ }
27
115
  return {
28
116
  status: response.status,
29
- data: response.data.error || response.data === "" ? undefined : property ? response.data[property] : response.data,
30
- error: response.data.error,
31
- headers: response.headers,
117
+ data: (responseData === "" || responseData === undefined
118
+ ? undefined
119
+ : property && hasProperty(responseData, property)
120
+ ? responseData[property]
121
+ : responseData),
122
+ headers,
32
123
  };
33
124
  }
34
- catch (err) {
125
+ catch {
35
126
  return {
36
127
  status: 500,
37
128
  error: {
@@ -43,41 +134,90 @@ export class BaseClient {
43
134
  }
44
135
  }
45
136
  /**
46
- * Build the request methods, headers, and other options
47
- * @param accessTokenString The client access token string
48
- */
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
+ */
49
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);
50
153
  return {
51
154
  method,
52
155
  url,
53
- data,
156
+ body,
54
157
  headers: {
55
- "authorization": accessTokenString,
158
+ authorization: accessTokenString,
56
159
  "content-type": "application/json",
57
- "accept": "application/vnd.bentley.itwin-platform.v2+json",
160
+ accept: "application/vnd.bentley.itwin-platform.v2+json",
58
161
  ...additionalHeaders,
59
162
  },
60
- validateStatus(status) {
61
- return status < 500; // Resolve only if the status code is less than 500
62
- },
63
163
  };
64
164
  }
65
165
  /**
66
- * Build a query to be appended to a URL
67
- * @param queryArg Object container queryable properties
68
- * @returns query string with AccessControlQueryArg applied, which should be appended to a url
69
- */
70
- getQueryString(queryArg) {
71
- let queryString = "";
72
- if (queryArg.top) {
73
- queryString += `&$top=${queryArg.top}`;
74
- }
75
- if (queryArg.skip) {
76
- queryString += `&$skip=${queryArg.skip}`;
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
+ }
77
219
  }
78
- // trim & from start of string
79
- queryString.replace(/^&+/, "");
80
- return queryString;
220
+ return params;
81
221
  }
82
222
  }
83
223
  //# sourceMappingURL=BaseClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseClient.js","sourceRoot":"","sources":["../../../src/subClients/BaseClient.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,OAAO,UAAU;IAGrB,YAAmB,GAAY;QAFrB,aAAQ,GAAW,8CAA8C,CAAC;QAG1E,IAAI,GAAG,KAAK,SAAS,EAAE;YACrB,IAAI,CAAC,QAAQ,GAAG,GAAG,CAAC;SACrB;aAAM;YACL,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC;YAC9C,IAAI,SAAS,EAAE;gBACb,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACvC,OAAO,CAAC,QAAQ,GAAG,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;gBAChD,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;aAC9B;SACF;IACH,CAAC;IAED;;;;;QAKI;IACM,KAAK,CAAC,qBAAqB,CACnC,WAAwB,EACxB,MAAc,EACd,GAAW,EACX,IAAU,EACV,QAAiB,EACjB,iBAA6C;QAE7C,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;QACjG,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,CAAC,CAAC;YAE7C,OAAO;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI;gBAClH,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,KAAK;gBAC1B,OAAO,EAAE,QAAQ,CAAC,OAAO;aAC1B,CAAC;SACH;QAAC,OAAO,GAAG,EAAE;YACZ,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE;oBACL,IAAI,EAAE,qBAAqB;oBAC3B,OAAO,EACL,6DAA6D;iBAChE;gBACD,OAAO,EAAE,EAAE;aACZ,CAAC;SACH;IACH,CAAC;IAED;;;QAGI;IACM,iBAAiB,CAAC,iBAAyB,EAAE,MAAc,EAAE,GAAW,EAAE,IAAU,EAAE,iBAA6C;QAC3I,OAAO;YACL,MAAM;YACN,GAAG;YACH,IAAI;YACJ,OAAO,EAAE;gBACP,eAAe,EAAE,iBAAiB;gBAClC,cAAc,EAAE,kBAAkB;gBAClC,QAAQ,EAAE,gDAAgD;gBAC1D,GAAG,iBAAiB;aACrB;YACD,cAAc,CAAC,MAAM;gBACnB,OAAO,MAAM,GAAG,GAAG,CAAC,CAAC,mDAAmD;YAC1E,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;QAII;IACM,cAAc,CAAC,QAA+B;QACtD,IAAI,WAAW,GAAG,EAAE,CAAC;QAErB,IAAI,QAAQ,CAAC,GAAG,EAAE;YAChB,WAAW,IAAI,SAAS,QAAQ,CAAC,GAAG,EAAE,CAAC;SACxC;QAED,IAAI,QAAQ,CAAC,IAAI,EAAE;YACjB,WAAW,IAAI,UAAU,QAAQ,CAAC,IAAI,EAAE,CAAC;SAC1C;QAED,8BAA8B;QAC9B,WAAW,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAE/B,OAAO,WAAW,CAAC;IACrB,CAAC;CACF","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 { Method } from \"axios\";\r\nimport type { AxiosRequestConfig } from \"axios\";\r\nimport axios from \"axios\";\r\nimport type { AccessControlAPIResponse, AccessControlQueryArg } from \"../accessControlTypes\";\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 accessTokenString The client access token string\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 axios(requestOptions);\r\n\r\n return {\r\n status: response.status,\r\n data: response.data.error || response.data === \"\" ? undefined : property ? response.data[property] : response.data,\r\n error: response.data.error,\r\n headers: response.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 accessTokenString The client access token string\r\n */\r\n protected getRequestOptions(accessTokenString: string, method: Method, url: string, data?: any, additionalHeaders?: { [key: string]: string }): AxiosRequestConfig {\r\n return {\r\n method,\r\n url,\r\n data,\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 validateStatus(status) {\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 queryString.replace(/^&+/, \"\");\r\n\r\n return queryString;\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 { AccessControlAPIResponse, AccessControlQueryArg, AddGroupMember, GroupMember, IGroupMembersClient } from "../accessControlTypes";
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
- queryITwinGroupMembersAsync(accessToken: AccessToken, iTwinId: string, arg?: AccessControlQueryArg): Promise<AccessControlAPIResponse<GroupMember[]>>;
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
- getITwinGroupMemberAsync(accessToken: AccessToken, iTwinId: string, memberId: string): Promise<AccessControlAPIResponse<GroupMember>>;
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
- addITwinGroupMembersAsync(accessToken: AccessToken, iTwinId: string, newMembers: AddGroupMember[]): Promise<AccessControlAPIResponse<GroupMember[]>>;
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
- removeITwinGroupMemberAsync(accessToken: AccessToken, iTwinId: string, memberId: string): Promise<AccessControlAPIResponse<undefined>>;
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
- updateITwinGroupMemberAsync(accessToken: AccessToken, iTwinId: string, memberId: string, roleIds: string[]): Promise<AccessControlAPIResponse<GroupMember>>;
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;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,WAAW,EACX,mBAAmB,EACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,qBAAa,kBACX,SAAQ,UACR,YAAW,mBAAmB;gBACX,GAAG,CAAC,EAAE,MAAM;IAI/B;;;;OAIG;IACU,2BAA2B,CACtC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,qBAAqB,GAC1B,OAAO,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC,CAAC;IAgBnD;;;;;OAKG;IACU,wBAAwB,CACnC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;IAWjD;;;;;OAKG;IACU,yBAAyB,CACpC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,cAAc,EAAE,GAC3B,OAAO,CAAC,wBAAwB,CAAC,WAAW,EAAE,CAAC,CAAC;IAcnD;;;;;OAKG;IACU,2BAA2B,CACtC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,wBAAwB,CAAC,SAAS,CAAC,CAAC;IAK/C;;;;;;OAMG;IACU,2BAA2B,CACtC,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,wBAAwB,CAAC,WAAW,CAAC,CAAC;CAalD"}
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 queryITwinGroupMembersAsync(accessToken, iTwinId, arg) {
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, "members"); // TODO: Consider how to handle paging
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 getITwinGroupMemberAsync(accessToken, iTwinId, memberId) {
36
+ async getITwinGroupMember(accessToken, iTwinId, memberId) {
25
37
  const url = `${this._baseUrl}/${iTwinId}/members/groups/${memberId}`;
26
- return this.sendGenericAPIRequest(accessToken, "GET", url, undefined, "member");
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 addITwinGroupMembersAsync(accessToken, iTwinId, newMembers) {
46
+ async addITwinGroupMembers(accessToken, iTwinId, newMembers) {
35
47
  const url = `${this._baseUrl}/${iTwinId}/members/groups`;
36
- const body = {
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 removeITwinGroupMemberAsync(accessToken, iTwinId, memberId) {
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 updateITwinGroupMemberAsync(accessToken, iTwinId, memberId, roleIds) {
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, "member");
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":"AAeA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,OAAO,kBACX,SAAQ,UAAU;IAElB,YAAmB,GAAY;QAC7B,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,2BAA2B,CACtC,WAAwB,EACxB,OAAe,EACf,GAA2B;QAE3B,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,CAAC;QAEvD,IAAI,GAAG,EAAE;YACP,GAAG,IAAI,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;SACvC;QAED,OAAO,IAAI,CAAC,qBAAqB,CAC/B,WAAW,EACX,KAAK,EACL,GAAG,EACH,SAAS,EACT,SAAS,CACV,CAAC,CAAC,sCAAsC;IAC3C,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,wBAAwB,CACnC,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,EACT,QAAQ,CACT,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,yBAAyB,CACpC,WAAwB,EACxB,OAAe,EACf,UAA4B;QAE5B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,iBAAiB,CAAC;QACzD,MAAM,IAAI,GAAG;YACX,OAAO,EAAE,UAAU;SACpB,CAAC;QACF,OAAO,IAAI,CAAC,qBAAqB,CAC/B,WAAW,EACX,MAAM,EACN,GAAG,EACH,IAAI,EACJ,SAAS,CACV,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,2BAA2B,CACtC,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,2BAA2B,CACtC,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,EACJ,QAAQ,CACT,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 */\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport type {\n AccessControlAPIResponse,\n AccessControlQueryArg,\n AddGroupMember,\n GroupMember,\n IGroupMembersClient,\n} from \"../accessControlTypes\";\nimport { BaseClient } from \"./BaseClient\";\n\nexport class GroupMembersClient\n extends BaseClient\n implements IGroupMembersClient {\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 queryITwinGroupMembersAsync(\n accessToken: AccessToken,\n iTwinId: string,\n arg?: AccessControlQueryArg\n ): Promise<AccessControlAPIResponse<GroupMember[]>> {\n let url = `${this._baseUrl}/${iTwinId}/members/groups`;\n\n if (arg) {\n url += `?${this.getQueryString(arg)}`;\n }\n\n return this.sendGenericAPIRequest(\n accessToken,\n \"GET\",\n url,\n undefined,\n \"members\"\n ); // TODO: Consider how to handle paging\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 getITwinGroupMemberAsync(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string\n ): Promise<AccessControlAPIResponse<GroupMember>> {\n const url = `${this._baseUrl}/${iTwinId}/members/groups/${memberId}`;\n return this.sendGenericAPIRequest(\n accessToken,\n \"GET\",\n url,\n undefined,\n \"member\"\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 addITwinGroupMembersAsync(\n accessToken: AccessToken,\n iTwinId: string,\n newMembers: AddGroupMember[]\n ): Promise<AccessControlAPIResponse<GroupMember[]>> {\n const url = `${this._baseUrl}/${iTwinId}/members/groups`;\n const body = {\n members: newMembers,\n };\n return this.sendGenericAPIRequest(\n accessToken,\n \"POST\",\n url,\n body,\n \"members\"\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 removeITwinGroupMemberAsync(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string\n ): Promise<AccessControlAPIResponse<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 updateITwinGroupMemberAsync(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string,\n roleIds: string[]\n ): Promise<AccessControlAPIResponse<GroupMember>> {\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 \"member\"\n );\n }\n}\n"]}
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"]}