@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
@@ -0,0 +1,16 @@
1
+ import type { AccessToken } from "@itwin/core-bentley";
2
+ import type { BentleyAPIResponse, ODataQueryParams } from "../types/CommonApiTypes";
3
+ import type { AddUserMember, AddUserMemberResponse, MultipleUserMembersResponse, SingleUserMemberResponse } from "../types/UserMembers";
4
+ export interface IUserMembersClient {
5
+ /** Retrieves a list of user members and their roles assigned to a specified iTwin. */
6
+ queryITwinUserMembers(accessToken: AccessToken, iTwinId: string, arg?: Pick<ODataQueryParams, "top" | "skip">): Promise<BentleyAPIResponse<MultipleUserMembersResponse>>;
7
+ /** Retrieves a specific user member for a specified iTwin. */
8
+ getITwinUserMember(accessToken: AccessToken, iTwinId: string, memberId: string): Promise<BentleyAPIResponse<SingleUserMemberResponse>>;
9
+ /** Add or invite new iTwin user members */
10
+ addITwinUserMembers(accessToken: AccessToken, iTwinId: string, newMembers: AddUserMember[], customMessage?: string): Promise<BentleyAPIResponse<AddUserMemberResponse>>;
11
+ /** Remove the specified iTwin user member */
12
+ removeITwinUserMember(accessToken: AccessToken, iTwinId: string, memberId: string): Promise<BentleyAPIResponse<undefined>>;
13
+ /** Update iTwin user member roles */
14
+ updateITwinUserMember(accessToken: AccessToken, iTwinId: string, memberId: string, roleIds: string[]): Promise<BentleyAPIResponse<SingleUserMemberResponse>>;
15
+ }
16
+ //# sourceMappingURL=UserMembersClient.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMembersClient.d.ts","sourceRoot":"","sources":["../../../src/accessControlClientInterfaces/UserMembersClient.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGxI,MAAM,WAAW,kBAAkB;IACjC,sFAAsF;IACtF,qBAAqB,CACnB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,GAAG,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,MAAM,CAAC,GAC3C,OAAO,CAAC,kBAAkB,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAE5D,8DAA8D;IAC9D,kBAAkB,CAChB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC,CAAA;IAExD,2CAA2C;IAC3C,mBAAmB,CACjB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,aAAa,EAAE,EAC3B,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAEtD,8CAA8C;IAC9C,qBAAqB,CACnB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IAE1C,sCAAsC;IACtC,qBAAqB,CACnB,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,kBAAkB,CAAC,wBAAwB,CAAC,CAAC,CAAC;CAC1D"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=UserMembersClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserMembersClient.js","sourceRoot":"","sources":["../../../src/accessControlClientInterfaces/UserMembersClient.ts"],"names":[],"mappings":";AAAA;;;gGAGgG","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\nimport type { AccessToken } from \"@itwin/core-bentley\";\nimport type { BentleyAPIResponse, ODataQueryParams } from \"../types/CommonApiTypes\";\nimport type { AddUserMember, AddUserMemberResponse, MultipleUserMembersResponse, SingleUserMemberResponse } from \"../types/UserMembers\";\n\n\nexport interface IUserMembersClient {\n /** Retrieves a list of user members and their roles assigned to a specified iTwin. */\n queryITwinUserMembers(\n accessToken: AccessToken,\n iTwinId: string,\n arg?: Pick<ODataQueryParams, \"top\" | \"skip\">\n ): Promise<BentleyAPIResponse<MultipleUserMembersResponse>>;\n\n /** Retrieves a specific user member for a specified iTwin. */\n getITwinUserMember(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string\n ): Promise<BentleyAPIResponse<SingleUserMemberResponse>>\n\n /** Add or invite new iTwin user members */\n addITwinUserMembers(\n accessToken: AccessToken,\n iTwinId: string,\n newMembers: AddUserMember[],\n customMessage?: string\n ): Promise<BentleyAPIResponse<AddUserMemberResponse>>;\n\n /** Remove the specified iTwin user member */\n removeITwinUserMember(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string\n ): Promise<BentleyAPIResponse<undefined>>;\n\n /** Update iTwin user member roles */\n updateITwinUserMember(\n accessToken: AccessToken,\n iTwinId: string,\n memberId: string,\n roleIds: string[]\n ): Promise<BentleyAPIResponse<SingleUserMemberResponse>>;\n}\n"]}
@@ -0,0 +1,23 @@
1
+ import type { IGroupsClient } from "./GroupClient";
2
+ import type { IGroupMemberInvitationClient } from "./GroupMemberInvitationClient";
3
+ import type { IGroupMembersClient } from "./GroupMembersClient";
4
+ import type { IITwinJobsClient } from "./ITwinJobsClient";
5
+ import type { IITwinSharesClient } from "./ItwinSharesClient";
6
+ import type { IMemberInvitationsClient } from "./MemberInvitationsClient";
7
+ import type { IOwnerMembersClient } from "./OwnerMembersClient ";
8
+ import type { IPermissionsClient } from "./PermissionsClient";
9
+ import type { IRolesClient } from "./RolesClient";
10
+ import type { IUserMembersClient } from "./UserMembersClient";
11
+ export interface IAccessControlClient {
12
+ permissions: IPermissionsClient;
13
+ roles: IRolesClient;
14
+ groups: IGroupsClient;
15
+ userMembers: IUserMembersClient;
16
+ groupMembers: IGroupMembersClient;
17
+ ownerMembers: IOwnerMembersClient;
18
+ memberInvitations: IMemberInvitationsClient;
19
+ itwinJobs: IITwinJobsClient;
20
+ itwinShares: IITwinSharesClient;
21
+ groupMemberInvitations: IGroupMemberInvitationClient;
22
+ }
23
+ //# sourceMappingURL=accessControl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessControl.d.ts","sourceRoot":"","sources":["../../../src/accessControlClientInterfaces/accessControl.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAClF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,kBAAkB,CAAC;IAChC,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,kBAAkB,CAAC;IAChC,YAAY,EAAE,mBAAmB,CAAC;IAClC,YAAY,EAAE,mBAAmB,CAAC;IAClC,iBAAiB,EAAE,wBAAwB,CAAC;IAC5C,SAAS,EAAE,gBAAgB,CAAC;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,sBAAsB,EAAE,4BAA4B,CAAA;CACrD"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=accessControl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessControl.js","sourceRoot":"","sources":["../../../src/accessControlClientInterfaces/accessControl.ts"],"names":[],"mappings":";AAAA;;;gGAGgG","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\nimport type { IGroupsClient } from \"./GroupClient\";\nimport type { IGroupMemberInvitationClient } from \"./GroupMemberInvitationClient\";\nimport type { IGroupMembersClient } from \"./GroupMembersClient\";\nimport type { IITwinJobsClient } from \"./ITwinJobsClient\";\nimport type { IITwinSharesClient } from \"./ItwinSharesClient\";\nimport type { IMemberInvitationsClient } from \"./MemberInvitationsClient\";\nimport type { IOwnerMembersClient } from \"./OwnerMembersClient \";\nimport type { IPermissionsClient } from \"./PermissionsClient\";\nimport type { IRolesClient } from \"./RolesClient\";\nimport type { IUserMembersClient } from \"./UserMembersClient\";\n\nexport interface IAccessControlClient {\n permissions: IPermissionsClient;\n roles: IRolesClient;\n groups: IGroupsClient;\n userMembers: IUserMembersClient;\n groupMembers: IGroupMembersClient;\n ownerMembers: IOwnerMembersClient;\n memberInvitations: IMemberInvitationsClient;\n itwinJobs: IITwinJobsClient;\n itwinShares: IITwinSharesClient;\n groupMemberInvitations: IGroupMemberInvitationClient\n}\n"]}
@@ -2,33 +2,99 @@
2
2
  * @module AccessControlClient
3
3
  */
4
4
  import type { AccessToken } from "@itwin/core-bentley";
5
- import type { Method } from "axios";
6
- import type { AxiosRequestConfig } from "axios";
7
- import type { AccessControlAPIResponse, AccessControlQueryArg } from "../accessControlTypes";
5
+ import type { BentleyAPIResponse, Method, ODataQueryParams, RequestConfig } from "../types/CommonApiTypes";
6
+ import { ParameterMapping } from "../types/typeUtils";
7
+ /**
8
+ * Base client class providing common functionality for Access Control API requests.
9
+ * Handles authentication, request configuration, and query string building, and error validation.
10
+ */
8
11
  export declare class BaseClient {
9
12
  protected _baseUrl: string;
13
+ /**
14
+ * Creates a new BaseClient instance for Access Control API operations
15
+ * @param url - Optional custom base URL, defaults to production iTwins API URL
16
+ *
17
+ * @example
18
+ * ```typescript
19
+ * // Use default production URL
20
+ * const client = new BaseClient();
21
+ *
22
+ * // Use custom URL for development/testing
23
+ * const client = new ITwinsAccessClient("https://api.bentley.com/accesscontrol/itwins");
24
+ * ```
25
+ */
10
26
  constructor(url?: string);
11
27
  /**
12
- * Sends a basic API request
13
- * @param accessTokenString The client access token string
14
- * @param method The method type of the request (ex. GET, POST, DELETE, etc)
15
- * @param url The url of the request
16
- */
17
- protected sendGenericAPIRequest(accessToken: AccessToken, method: Method, url: string, data?: any, property?: string, additionalHeaders?: {
18
- [key: string]: string;
19
- }): Promise<AccessControlAPIResponse<any>>;
28
+ * Maps the some properties of {@link ODataQueryParams} to their corresponding query parameter names.
29
+ *
30
+ * @remarks
31
+ * This mapping is used to translate internal property names to the expected parameter names
32
+ * when constructing requests. Properties mapped to empty strings are excluded from
33
+ * the query string as they should be sent as headers instead.
34
+ *
35
+ * The mapping includes OData query parameters (prefixed with $) for pagination.
36
+ *
37
+ * @readonly
38
+ */
39
+ protected static readonly paginationParamMapping: ParameterMapping<Pick<ODataQueryParams, "top" | "skip">>;
40
+ /**
41
+ * Sends a basic API request to the specified URL with the given method and data.
42
+ * @param accessToken The client access token
43
+ * @param method The HTTP method of the request (GET, POST, DELETE, etc)
44
+ * @param url The URL of the request
45
+ * @param data Optional request body data
46
+ * @param property Optional property name to extract from response data
47
+ * @param additionalHeaders Optional additional headers to include in the request
48
+ * @returns Promise resolving to a BentleyAPIResponse containing the response data or error
49
+ */
50
+ protected sendGenericAPIRequest<TResponse = unknown, TData = unknown>(accessToken: AccessToken, method: Method, url: string, data?: TData, property?: string, additionalHeaders?: Record<string, string>): Promise<BentleyAPIResponse<TResponse>>;
51
+ /**
52
+ * Build the request configuration including method, headers, and body
53
+ * @param accessTokenString The client access token
54
+ * @param method The HTTP method of the request
55
+ * @param url The URL of the request
56
+ * @param data Optional request body data
57
+ * @param additionalHeaders Optional additional headers to include in the request
58
+ * @returns RequestConfig object with method, url, body, and headers
59
+ */
60
+ protected getRequestOptions<TData>(accessTokenString: AccessToken, method: Method, url: string, data?: TData, additionalHeaders?: Record<string, string>): RequestConfig;
20
61
  /**
21
- * Build the request methods, headers, and other options
22
- * @param accessTokenString The client access token string
23
- */
24
- protected getRequestOptions(accessTokenString: string, method: Method, url: string, data?: any, additionalHeaders?: {
25
- [key: string]: string;
26
- }): AxiosRequestConfig;
62
+ * Builds a query string to be appended to a URL from query arguments
63
+ * @param parameterMapping - Parameter mapping configuration that maps object properties to query parameter names
64
+ * @param queryArg - Object containing queryable properties for filtering
65
+ * @returns Query string with parameters applied, ready to append to a URL
66
+ *
67
+ * @example
68
+ * ```typescript
69
+ * const queryString = this.getQueryString(
70
+ * BaseClient.paginationParamMapping,
71
+ * {
72
+ * top: 10,
73
+ * skip: 5,
74
+ * }
75
+ * );
76
+ * // Returns: "$top=10&$skip=5"
77
+ * ```
78
+ */
79
+ protected getQueryString<T>(parameterMapping: ParameterMapping<NonNullable<T>>, queryArg?: T): string;
27
80
  /**
28
- * Build a query to be appended to a URL
29
- * @param queryArg Object container queryable properties
30
- * @returns query string with AccessControlQueryArg applied, which should be appended to a url
31
- */
32
- protected getQueryString(queryArg: AccessControlQueryArg): string;
81
+ * Helper method to build query parameter array from mapping.
82
+ * Uses exhaustive parameter mapping to ensure type safety and prevent missing parameters.
83
+ * Automatically handles URL encoding and filters out excluded parameters.
84
+ *
85
+ * @param queryArg - Object containing queryable properties
86
+ * @param mapping - Parameter mapping configuration that maps object properties to query parameter names
87
+ * @returns Array of formatted query parameter strings ready for URL construction
88
+ *
89
+ * @example
90
+ * ```typescript
91
+ * const params = this.buildQueryParams(
92
+ * { top: 10, skip: 5 },
93
+ * { top: "$top", skip: "$skip" }
94
+ * );
95
+ * // Returns: ["$top=10", "$skip=5"]
96
+ * ```
97
+ */
98
+ private buildQueryParams;
33
99
  }
34
100
  //# sourceMappingURL=BaseClient.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseClient.d.ts","sourceRoot":"","sources":["../../../src/subClients/BaseClient.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE7F,qBAAa,UAAU;IACrB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAkD;gBAEzD,GAAG,CAAC,EAAE,MAAM;IAa/B;;;;;QAKI;cACY,qBAAqB,CACnC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,GAAG,EACV,QAAQ,CAAC,EAAE,MAAM,EACjB,iBAAiB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,wBAAwB,CAAC,GAAG,CAAC,CAAC;IAwBzC;;;QAGI;IACJ,SAAS,CAAC,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,iBAAiB,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,kBAAkB;IAiBlK;;;;QAII;IACJ,SAAS,CAAC,cAAc,CAAC,QAAQ,EAAE,qBAAqB,GAAG,MAAM;CAgBlE"}
1
+ {"version":3,"file":"BaseClient.d.ts","sourceRoot":"","sources":["../../../src/subClients/BaseClient.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAEV,kBAAkB,EAClB,MAAM,EACN,gBAAgB,EAChB,aAAa,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAe,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AA8BnE;;;GAGG;AACH,qBAAa,UAAU;IACrB,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAkD;IAE1E;;;;;;;;;;;;KAYC;gBACgB,GAAG,CAAC,EAAE,MAAM;IAa/B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC,CAI7F;IAEb;;;;;;;;;OASG;cACa,qBAAqB,CAAC,SAAS,GAAG,OAAO,EAAE,KAAK,GAAG,OAAO,EACxE,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,KAAK,EACZ,QAAQ,CAAC,EAAE,MAAM,EACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,OAAO,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAuDzC;;;;;;;;OAQG;IACH,SAAS,CAAC,iBAAiB,CAAC,KAAK,EAC/B,iBAAiB,EAAE,WAAW,EAC9B,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,KAAK,EACZ,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACzC,aAAa;IAuBd;;;;;;;;;;;;;;;;;KAiBC;IACH,SAAS,CAAC,cAAc,CAAC,CAAC,EACxB,gBAAgB,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAClD,QAAQ,CAAC,EAAE,CAAC,GACX,MAAM;IAOT;;;;;;;;;;;;;;;;;OAiBG;IACH,OAAO,CAAC,gBAAgB;CAoBzB"}
@@ -1,8 +1,56 @@
1
1
  "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module AccessControlClient
8
+ */
2
9
  Object.defineProperty(exports, "__esModule", { value: true });
3
10
  exports.BaseClient = void 0;
4
- const axios_1 = require("axios");
11
+ const typeUtils_1 = require("../types/typeUtils");
12
+ /**
13
+ * Type guard to validate if an object is a valid Error structure
14
+ * @param error - Unknown object to validate
15
+ * @returns True if the object is a valid Error type
16
+ */
17
+ function isValidError(error) {
18
+ if (typeof error !== "object" || error === null) {
19
+ return false;
20
+ }
21
+ const obj = error;
22
+ return typeof obj.code === "string" && typeof obj.message === "string";
23
+ }
24
+ /**
25
+ * Type guard to validate if response data contains an error
26
+ * @param data - Unknown response data to validate
27
+ * @returns True if the data contains a valid Error object
28
+ */
29
+ function isErrorResponse(data) {
30
+ if (typeof data !== "object" || data === null) {
31
+ return false;
32
+ }
33
+ const obj = data;
34
+ return "error" in obj && isValidError(obj.error);
35
+ }
36
+ /**
37
+ * Base client class providing common functionality for Access Control API requests.
38
+ * Handles authentication, request configuration, and query string building, and error validation.
39
+ */
5
40
  class BaseClient {
41
+ /**
42
+ * Creates a new BaseClient instance for Access Control API operations
43
+ * @param url - Optional custom base URL, defaults to production iTwins API URL
44
+ *
45
+ * @example
46
+ * ```typescript
47
+ * // Use default production URL
48
+ * const client = new BaseClient();
49
+ *
50
+ * // Use custom URL for development/testing
51
+ * const client = new ITwinsAccessClient("https://api.bentley.com/accesscontrol/itwins");
52
+ * ```
53
+ */
6
54
  constructor(url) {
7
55
  this._baseUrl = "https://api.bentley.com/accesscontrol/itwins";
8
56
  if (url !== undefined) {
@@ -18,23 +66,50 @@ class BaseClient {
18
66
  }
19
67
  }
20
68
  /**
21
- * Sends a basic API request
22
- * @param accessTokenString The client access token string
23
- * @param method The method type of the request (ex. GET, POST, DELETE, etc)
24
- * @param url The url of the request
25
- */
69
+ * Sends a basic API request to the specified URL with the given method and data.
70
+ * @param accessToken The client access token
71
+ * @param method The HTTP method of the request (GET, POST, DELETE, etc)
72
+ * @param url The URL of the request
73
+ * @param data Optional request body data
74
+ * @param property Optional property name to extract from response data
75
+ * @param additionalHeaders Optional additional headers to include in the request
76
+ * @returns Promise resolving to a BentleyAPIResponse containing the response data or error
77
+ */
26
78
  async sendGenericAPIRequest(accessToken, method, url, data, property, additionalHeaders) {
27
79
  const requestOptions = this.getRequestOptions(accessToken, method, url, data, additionalHeaders);
28
80
  try {
29
- const response = await (0, axios_1.default)(requestOptions);
81
+ const response = await fetch(requestOptions.url, {
82
+ method: requestOptions.method,
83
+ headers: requestOptions.headers,
84
+ body: requestOptions.body,
85
+ });
86
+ // Convert Headers object to plain object for compatibility
87
+ const headers = {};
88
+ response.headers.forEach((value, key) => {
89
+ headers[key] = value;
90
+ });
91
+ const responseData = response.status !== 204 ? await response.json() : undefined;
92
+ if (!response.ok) {
93
+ if (isErrorResponse(responseData)) {
94
+ return {
95
+ status: response.status,
96
+ error: responseData.error,
97
+ headers,
98
+ };
99
+ }
100
+ throw new Error("An error occurred while processing the request");
101
+ }
30
102
  return {
31
103
  status: response.status,
32
- data: response.data.error || response.data === "" ? undefined : property ? response.data[property] : response.data,
33
- error: response.data.error,
34
- headers: response.headers,
104
+ data: (responseData === "" || responseData === undefined
105
+ ? undefined
106
+ : property && (0, typeUtils_1.hasProperty)(responseData, property)
107
+ ? responseData[property]
108
+ : responseData),
109
+ headers,
35
110
  };
36
111
  }
37
- catch (err) {
112
+ catch (_a) {
38
113
  return {
39
114
  status: 500,
40
115
  error: {
@@ -46,42 +121,107 @@ class BaseClient {
46
121
  }
47
122
  }
48
123
  /**
49
- * Build the request methods, headers, and other options
50
- * @param accessTokenString The client access token string
51
- */
124
+ * Build the request configuration including method, headers, and body
125
+ * @param accessTokenString The client access token
126
+ * @param method The HTTP method of the request
127
+ * @param url The URL of the request
128
+ * @param data Optional request body data
129
+ * @param additionalHeaders Optional additional headers to include in the request
130
+ * @returns RequestConfig object with method, url, body, and headers
131
+ */
52
132
  getRequestOptions(accessTokenString, method, url, data, additionalHeaders) {
133
+ if (!accessTokenString) {
134
+ throw new Error("Access token is required");
135
+ }
136
+ if (!url) {
137
+ throw new Error("URL is required");
138
+ }
139
+ const body = JSON.stringify(data);
53
140
  return {
54
141
  method,
55
142
  url,
56
- data,
143
+ body,
57
144
  headers: {
58
- "authorization": accessTokenString,
145
+ authorization: accessTokenString,
59
146
  "content-type": "application/json",
60
- "accept": "application/vnd.bentley.itwin-platform.v2+json",
147
+ accept: "application/vnd.bentley.itwin-platform.v2+json",
61
148
  ...additionalHeaders,
62
149
  },
63
- validateStatus(status) {
64
- return status < 500; // Resolve only if the status code is less than 500
65
- },
66
150
  };
67
151
  }
68
152
  /**
69
- * Build a query to be appended to a URL
70
- * @param queryArg Object container queryable properties
71
- * @returns query string with AccessControlQueryArg applied, which should be appended to a url
72
- */
73
- getQueryString(queryArg) {
74
- let queryString = "";
75
- if (queryArg.top) {
76
- queryString += `&$top=${queryArg.top}`;
77
- }
78
- if (queryArg.skip) {
79
- queryString += `&$skip=${queryArg.skip}`;
153
+ * Builds a query string to be appended to a URL from query arguments
154
+ * @param parameterMapping - Parameter mapping configuration that maps object properties to query parameter names
155
+ * @param queryArg - Object containing queryable properties for filtering
156
+ * @returns Query string with parameters applied, ready to append to a URL
157
+ *
158
+ * @example
159
+ * ```typescript
160
+ * const queryString = this.getQueryString(
161
+ * BaseClient.paginationParamMapping,
162
+ * {
163
+ * top: 10,
164
+ * skip: 5,
165
+ * }
166
+ * );
167
+ * // Returns: "$top=10&$skip=5"
168
+ * ```
169
+ */
170
+ getQueryString(parameterMapping, queryArg) {
171
+ if (!queryArg)
172
+ return "";
173
+ const params = this.buildQueryParams(queryArg, parameterMapping);
174
+ return params.join("&");
175
+ }
176
+ /**
177
+ * Helper method to build query parameter array from mapping.
178
+ * Uses exhaustive parameter mapping to ensure type safety and prevent missing parameters.
179
+ * Automatically handles URL encoding and filters out excluded parameters.
180
+ *
181
+ * @param queryArg - Object containing queryable properties
182
+ * @param mapping - Parameter mapping configuration that maps object properties to query parameter names
183
+ * @returns Array of formatted query parameter strings ready for URL construction
184
+ *
185
+ * @example
186
+ * ```typescript
187
+ * const params = this.buildQueryParams(
188
+ * { top: 10, skip: 5 },
189
+ * { top: "$top", skip: "$skip" }
190
+ * );
191
+ * // Returns: ["$top=10", "$skip=5"]
192
+ * ```
193
+ */
194
+ buildQueryParams(queryArg, mapping) {
195
+ const params = [];
196
+ // Type assertion constrains paramKey to actual property names and mappedValue to the specific strings from the mapping
197
+ // Narrows from set of all strings to only valid keys/values
198
+ for (const [paramKey, mappedValue] of Object.entries(mapping)) {
199
+ if (mappedValue === "")
200
+ continue;
201
+ const queryArgValue = queryArg[paramKey];
202
+ if (queryArgValue !== undefined && queryArgValue !== null) {
203
+ const stringValue = String(queryArgValue);
204
+ params.push(`${mappedValue}=${encodeURIComponent(stringValue)}`);
205
+ }
80
206
  }
81
- // trim & from start of string
82
- queryString.replace(/^&+/, "");
83
- return queryString;
207
+ return params;
84
208
  }
85
209
  }
86
210
  exports.BaseClient = BaseClient;
211
+ /**
212
+ * Maps the some properties of {@link ODataQueryParams} to their corresponding query parameter names.
213
+ *
214
+ * @remarks
215
+ * This mapping is used to translate internal property names to the expected parameter names
216
+ * when constructing requests. Properties mapped to empty strings are excluded from
217
+ * the query string as they should be sent as headers instead.
218
+ *
219
+ * The mapping includes OData query parameters (prefixed with $) for pagination.
220
+ *
221
+ * @readonly
222
+ */
223
+ BaseClient.paginationParamMapping = {
224
+ top: "$top",
225
+ skip: "$skip",
226
+ };
87
227
  //# sourceMappingURL=BaseClient.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BaseClient.js","sourceRoot":"","sources":["../../../src/subClients/BaseClient.ts"],"names":[],"mappings":";;;AAUA,iCAA0B;AAG1B,MAAa,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,IAAA,eAAK,EAAC,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;AA/FD,gCA+FC","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,48 @@
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ /** @packageDocumentation
7
+ * @module AccessControlClient
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.GroupMemberInvitationClient = void 0;
11
+ const BaseClient_1 = require("./BaseClient");
12
+ /** Client API to perform iTwin group members operations.
13
+ * @beta
14
+ */
15
+ class GroupMemberInvitationClient extends BaseClient_1.BaseClient {
16
+ /** Create a new GroupMembersClient instance
17
+ * @param url Optional base URL for the access control service. If not provided, defaults to base url.
18
+ */
19
+ constructor(url) {
20
+ super(url);
21
+ }
22
+ /** Retrieves a list of iTwin group members and their roles assignments.
23
+ * @param accessToken The client access token string
24
+ * @param iTwinId The id of the iTwin
25
+ * @beta
26
+ * @returns Array of members
27
+ */
28
+ async queryITwinGroupMemberInvitations(accessToken, iTwinId, groupId, arg) {
29
+ let url = `${this._baseUrl}/${iTwinId}/groups/${groupId}/invitations`;
30
+ if (arg) {
31
+ url += `?${this.getQueryString(GroupMemberInvitationClient.paginationParamMapping, { top: arg.top, skip: arg.skip })}`;
32
+ }
33
+ return this.sendGenericAPIRequest(accessToken, "GET", url, undefined);
34
+ }
35
+ /** Deletes a member invitations.
36
+ * @param accessToken The client access token string
37
+ * @param iTwinId The id of the iTwin
38
+ * @param invitationId The id of the invitation id
39
+ * @beta
40
+ * @returns Array of member invitations
41
+ */
42
+ async deleteITwinGroupMemberInvitation(accessToken, iTwinId, groupId, invitationId) {
43
+ const url = `${this._baseUrl}/${iTwinId}/groups/${groupId}/invitations/${invitationId}`;
44
+ return this.sendGenericAPIRequest(accessToken, "DELETE", url);
45
+ }
46
+ }
47
+ exports.GroupMemberInvitationClient = GroupMemberInvitationClient;
48
+ //# 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,6CAA0C;AAE1C;;GAEG;AACH,MAAa,2BACX,SAAQ,uBAAU;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;AApDD,kEAoDC","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"]}