@agility/management-sdk 0.1.36 → 0.1.38

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 (263) hide show
  1. package/README.md +396 -317
  2. package/dist/apiMethods/clientInstance.d.ts +2 -0
  3. package/dist/apiMethods/clientInstance.js +11 -2
  4. package/dist/apiMethods/containerMethods.d.ts +3 -0
  5. package/dist/apiMethods/containerMethods.js +43 -9
  6. package/dist/apiMethods/contentMethods.d.ts +12 -0
  7. package/dist/apiMethods/contentMethods.js +100 -46
  8. package/dist/apiMethods/instanceMethods.d.ts +13 -0
  9. package/dist/apiMethods/instanceMethods.js +48 -0
  10. package/dist/apiMethods/pageMethods.d.ts +12 -0
  11. package/dist/apiMethods/pageMethods.js +88 -34
  12. package/dist/enums/contentViewType.d.ts +6 -0
  13. package/dist/enums/contentViewType.js +10 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.js +3 -0
  16. package/dist/models/fetchApiStatus.d.ts +38 -0
  17. package/dist/models/fetchApiStatus.js +2 -0
  18. package/dist/models/pagedResult.d.ts +4 -0
  19. package/dist/models/pagedResult.js +2 -0
  20. package/docs/asset-methods.md +381 -381
  21. package/docs/auth-component.md +360 -360
  22. package/docs/auth.md +593 -593
  23. package/docs/batch-methods.md +243 -243
  24. package/docs/cicd.md +606 -606
  25. package/docs/container-methods.md +267 -267
  26. package/docs/content-methods.md +491 -422
  27. package/docs/instance-methods.md +185 -105
  28. package/docs/instance-user-methods.md +230 -230
  29. package/docs/model-methods.md +433 -433
  30. package/docs/multi-instance-operations.md +191 -191
  31. package/docs/page-methods.md +737 -670
  32. package/docs/server-user-methods.md +279 -279
  33. package/docs/webhook-methods.md +451 -451
  34. package/license.txt +20 -20
  35. package/package.json +40 -40
  36. package/tsconfig.json +14 -14
  37. package/.cursor/api-coverage.md +0 -217
  38. package/.cursor/api-documentation-manifest.md +0 -275
  39. package/.cursor/api-functions-analysis.md +0 -111
  40. package/.cursor/breakout-manifest.md +0 -278
  41. package/.cursor/docs-final-check.md +0 -269
  42. package/.cursor/github-actions-improvements.md +0 -76
  43. package/.cursor/hardening.md +0 -271
  44. package/.cursor/linting-fix.md +0 -160
  45. package/.cursor/manifest.md +0 -243
  46. package/.cursor/mocks.md +0 -100
  47. package/.cursor/test-coverage.md +0 -841
  48. package/.env +0 -92
  49. package/coverage/base.css +0 -224
  50. package/coverage/block-navigation.js +0 -87
  51. package/coverage/coverage-summary.json +0 -43
  52. package/coverage/favicon.png +0 -0
  53. package/coverage/index.html +0 -161
  54. package/coverage/lcov-report/base.css +0 -224
  55. package/coverage/lcov-report/block-navigation.js +0 -87
  56. package/coverage/lcov-report/favicon.png +0 -0
  57. package/coverage/lcov-report/index.html +0 -161
  58. package/coverage/lcov-report/prettify.css +0 -1
  59. package/coverage/lcov-report/prettify.js +0 -2
  60. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  61. package/coverage/lcov-report/sorter.js +0 -210
  62. package/coverage/lcov-report/src/apiClient.ts.html +0 -199
  63. package/coverage/lcov-report/src/apiMethods/assetMethods.ts.html +0 -682
  64. package/coverage/lcov-report/src/apiMethods/batchMethods.ts.html +0 -736
  65. package/coverage/lcov-report/src/apiMethods/clientInstance.ts.html +0 -403
  66. package/coverage/lcov-report/src/apiMethods/containerMethods.ts.html +0 -460
  67. package/coverage/lcov-report/src/apiMethods/contentMethods.ts.html +0 -1183
  68. package/coverage/lcov-report/src/apiMethods/index.html +0 -266
  69. package/coverage/lcov-report/src/apiMethods/instanceMethods.ts.html +0 -160
  70. package/coverage/lcov-report/src/apiMethods/instanceUserMethods.ts.html +0 -268
  71. package/coverage/lcov-report/src/apiMethods/modelMethods.ts.html +0 -352
  72. package/coverage/lcov-report/src/apiMethods/pageMethods.ts.html +0 -1276
  73. package/coverage/lcov-report/src/apiMethods/serverUserMethods.ts.html +0 -196
  74. package/coverage/lcov-report/src/apiMethods/webhookMethods.ts.html +0 -271
  75. package/coverage/lcov-report/src/enums/batchItemType.ts.html +0 -106
  76. package/coverage/lcov-report/src/enums/batchOperationType.ts.html +0 -142
  77. package/coverage/lcov-report/src/enums/batchState..ts.html +0 -106
  78. package/coverage/lcov-report/src/enums/index.html +0 -161
  79. package/coverage/lcov-report/src/enums/workflowOperationType.ts.html +0 -175
  80. package/coverage/lcov-report/src/index.html +0 -116
  81. package/coverage/lcov-report/src/models/assetContainer.ts.html +0 -106
  82. package/coverage/lcov-report/src/models/assetGalleries.ts.html +0 -103
  83. package/coverage/lcov-report/src/models/assetMediaGrouping.ts.html +0 -136
  84. package/coverage/lcov-report/src/models/assetMediaGroupingMetaData.ts.html +0 -97
  85. package/coverage/lcov-report/src/models/batch.ts.html +0 -178
  86. package/coverage/lcov-report/src/models/batchItem.ts.html +0 -127
  87. package/coverage/lcov-report/src/models/container.ts.html +0 -232
  88. package/coverage/lcov-report/src/models/contentDefinitionTypeID.ts.html +0 -142
  89. package/coverage/lcov-report/src/models/contentItem.ts.html +0 -202
  90. package/coverage/lcov-report/src/models/contentSectionDefaultModule.ts.html +0 -106
  91. package/coverage/lcov-report/src/models/contentSectionDefinition.ts.html +0 -196
  92. package/coverage/lcov-report/src/models/contentViewColumn.ts.html +0 -109
  93. package/coverage/lcov-report/src/models/exception.ts.html +0 -109
  94. package/coverage/lcov-report/src/models/index.html +0 -476
  95. package/coverage/lcov-report/src/models/instanceRole.ts.html +0 -106
  96. package/coverage/lcov-report/src/models/instanceUser.ts.html +0 -130
  97. package/coverage/lcov-report/src/models/locales.ts.html +0 -100
  98. package/coverage/lcov-report/src/models/media.ts.html +0 -178
  99. package/coverage/lcov-report/src/models/model.ts.html +0 -172
  100. package/coverage/lcov-report/src/models/notification.ts.html +0 -124
  101. package/coverage/lcov-report/src/models/options.ts.html +0 -109
  102. package/coverage/lcov-report/src/models/pageItem.ts.html +0 -268
  103. package/coverage/lcov-report/src/models/pageModel.ts.html +0 -130
  104. package/coverage/lcov-report/src/models/sharedModule.ts.html +0 -106
  105. package/coverage/lcov-report/src/models/sitemap.ts.html +0 -148
  106. package/coverage/lcov-report/src/models/websiteUser.ts.html +0 -157
  107. package/coverage/lcov.info +0 -1459
  108. package/coverage/prettify.css +0 -1
  109. package/coverage/prettify.js +0 -2
  110. package/coverage/sort-arrow-sprite.png +0 -0
  111. package/coverage/sorter.js +0 -210
  112. package/coverage/src/apiClient.ts.html +0 -199
  113. package/coverage/src/apiMethods/assetMethods.ts.html +0 -682
  114. package/coverage/src/apiMethods/batchMethods.ts.html +0 -736
  115. package/coverage/src/apiMethods/clientInstance.ts.html +0 -403
  116. package/coverage/src/apiMethods/containerMethods.ts.html +0 -460
  117. package/coverage/src/apiMethods/contentMethods.ts.html +0 -1183
  118. package/coverage/src/apiMethods/index.html +0 -266
  119. package/coverage/src/apiMethods/instanceMethods.ts.html +0 -160
  120. package/coverage/src/apiMethods/instanceUserMethods.ts.html +0 -268
  121. package/coverage/src/apiMethods/modelMethods.ts.html +0 -352
  122. package/coverage/src/apiMethods/pageMethods.ts.html +0 -1276
  123. package/coverage/src/apiMethods/serverUserMethods.ts.html +0 -196
  124. package/coverage/src/apiMethods/webhookMethods.ts.html +0 -271
  125. package/coverage/src/enums/batchItemType.ts.html +0 -106
  126. package/coverage/src/enums/batchOperationType.ts.html +0 -142
  127. package/coverage/src/enums/batchState..ts.html +0 -106
  128. package/coverage/src/enums/index.html +0 -161
  129. package/coverage/src/enums/workflowOperationType.ts.html +0 -175
  130. package/coverage/src/index.html +0 -116
  131. package/coverage/src/models/assetContainer.ts.html +0 -106
  132. package/coverage/src/models/assetGalleries.ts.html +0 -103
  133. package/coverage/src/models/assetMediaGrouping.ts.html +0 -136
  134. package/coverage/src/models/assetMediaGroupingMetaData.ts.html +0 -97
  135. package/coverage/src/models/batch.ts.html +0 -178
  136. package/coverage/src/models/batchItem.ts.html +0 -127
  137. package/coverage/src/models/container.ts.html +0 -232
  138. package/coverage/src/models/contentDefinitionTypeID.ts.html +0 -142
  139. package/coverage/src/models/contentItem.ts.html +0 -202
  140. package/coverage/src/models/contentSectionDefaultModule.ts.html +0 -106
  141. package/coverage/src/models/contentSectionDefinition.ts.html +0 -196
  142. package/coverage/src/models/contentViewColumn.ts.html +0 -109
  143. package/coverage/src/models/exception.ts.html +0 -109
  144. package/coverage/src/models/index.html +0 -476
  145. package/coverage/src/models/instanceRole.ts.html +0 -106
  146. package/coverage/src/models/instanceUser.ts.html +0 -130
  147. package/coverage/src/models/locales.ts.html +0 -100
  148. package/coverage/src/models/media.ts.html +0 -178
  149. package/coverage/src/models/model.ts.html +0 -172
  150. package/coverage/src/models/notification.ts.html +0 -124
  151. package/coverage/src/models/options.ts.html +0 -109
  152. package/coverage/src/models/pageItem.ts.html +0 -268
  153. package/coverage/src/models/pageModel.ts.html +0 -130
  154. package/coverage/src/models/sharedModule.ts.html +0 -106
  155. package/coverage/src/models/sitemap.ts.html +0 -148
  156. package/coverage/src/models/websiteUser.ts.html +0 -157
  157. package/dist/.tsbuildinfo +0 -1
  158. package/dist/apiClient.d.ts.map +0 -1
  159. package/dist/apiClient.js.map +0 -1
  160. package/dist/apiMethods/assetMethods.d.ts.map +0 -1
  161. package/dist/apiMethods/assetMethods.js.map +0 -1
  162. package/dist/apiMethods/batchMethods.d.ts.map +0 -1
  163. package/dist/apiMethods/batchMethods.js.map +0 -1
  164. package/dist/apiMethods/clientInstance.d.ts.map +0 -1
  165. package/dist/apiMethods/clientInstance.js.map +0 -1
  166. package/dist/apiMethods/containerMethods.d.ts.map +0 -1
  167. package/dist/apiMethods/containerMethods.js.map +0 -1
  168. package/dist/apiMethods/contentMethods.d.ts.map +0 -1
  169. package/dist/apiMethods/contentMethods.js.map +0 -1
  170. package/dist/apiMethods/instanceMethods.d.ts.map +0 -1
  171. package/dist/apiMethods/instanceMethods.js.map +0 -1
  172. package/dist/apiMethods/instanceUserMethods.d.ts.map +0 -1
  173. package/dist/apiMethods/instanceUserMethods.js.map +0 -1
  174. package/dist/apiMethods/modelMethods.d.ts.map +0 -1
  175. package/dist/apiMethods/modelMethods.js.map +0 -1
  176. package/dist/apiMethods/pageMethods.d.ts.map +0 -1
  177. package/dist/apiMethods/pageMethods.js.map +0 -1
  178. package/dist/apiMethods/serverUserMethods.d.ts.map +0 -1
  179. package/dist/apiMethods/serverUserMethods.js.map +0 -1
  180. package/dist/apiMethods/webhookMethods.d.ts.map +0 -1
  181. package/dist/apiMethods/webhookMethods.js.map +0 -1
  182. package/dist/enums/assetGroupingType.d.ts.map +0 -1
  183. package/dist/enums/assetGroupingType.js.map +0 -1
  184. package/dist/enums/batchItemType.d.ts.map +0 -1
  185. package/dist/enums/batchItemType.js.map +0 -1
  186. package/dist/enums/batchOperationType.d.ts.map +0 -1
  187. package/dist/enums/batchOperationType.js.map +0 -1
  188. package/dist/enums/batchState..d.ts.map +0 -1
  189. package/dist/enums/batchState..js.map +0 -1
  190. package/dist/enums/pageItemTemplateType.d.ts.map +0 -1
  191. package/dist/enums/pageItemTemplateType.js.map +0 -1
  192. package/dist/enums/workflowOperationType.d.ts.map +0 -1
  193. package/dist/enums/workflowOperationType.js.map +0 -1
  194. package/dist/index.d.ts.map +0 -1
  195. package/dist/index.js.map +0 -1
  196. package/dist/models/assetContainer.d.ts.map +0 -1
  197. package/dist/models/assetContainer.js.map +0 -1
  198. package/dist/models/assetGalleries.d.ts.map +0 -1
  199. package/dist/models/assetGalleries.js.map +0 -1
  200. package/dist/models/assetMediaGrouping.d.ts.map +0 -1
  201. package/dist/models/assetMediaGrouping.js.map +0 -1
  202. package/dist/models/assetMediaGroupingMetaData.d.ts.map +0 -1
  203. package/dist/models/assetMediaGroupingMetaData.js.map +0 -1
  204. package/dist/models/batch.d.ts.map +0 -1
  205. package/dist/models/batch.js.map +0 -1
  206. package/dist/models/batchItem.d.ts.map +0 -1
  207. package/dist/models/batchItem.js.map +0 -1
  208. package/dist/models/batchTypes.d.ts.map +0 -1
  209. package/dist/models/batchTypes.js.map +0 -1
  210. package/dist/models/container.d.ts.map +0 -1
  211. package/dist/models/container.js.map +0 -1
  212. package/dist/models/contentDefinitionTypeID.d.ts.map +0 -1
  213. package/dist/models/contentDefinitionTypeID.js.map +0 -1
  214. package/dist/models/contentItem.d.ts.map +0 -1
  215. package/dist/models/contentItem.js.map +0 -1
  216. package/dist/models/contentItemHistory.d.ts.map +0 -1
  217. package/dist/models/contentItemHistory.js.map +0 -1
  218. package/dist/models/contentListFilterModel.d.ts.map +0 -1
  219. package/dist/models/contentListFilterModel.js.map +0 -1
  220. package/dist/models/contentSectionDefaultModule.d.ts.map +0 -1
  221. package/dist/models/contentSectionDefaultModule.js.map +0 -1
  222. package/dist/models/contentSectionDefinition.d.ts.map +0 -1
  223. package/dist/models/contentSectionDefinition.js.map +0 -1
  224. package/dist/models/contentViewColumn.d.ts.map +0 -1
  225. package/dist/models/contentViewColumn.js.map +0 -1
  226. package/dist/models/exception.d.ts.map +0 -1
  227. package/dist/models/exception.js.map +0 -1
  228. package/dist/models/instanceRole.d.ts.map +0 -1
  229. package/dist/models/instanceRole.js.map +0 -1
  230. package/dist/models/instanceUser.d.ts.map +0 -1
  231. package/dist/models/instanceUser.js.map +0 -1
  232. package/dist/models/itemComments.d.ts.map +0 -1
  233. package/dist/models/itemComments.js.map +0 -1
  234. package/dist/models/listParams.d.ts.map +0 -1
  235. package/dist/models/listParams.js.map +0 -1
  236. package/dist/models/locales.d.ts.map +0 -1
  237. package/dist/models/locales.js.map +0 -1
  238. package/dist/models/media.d.ts.map +0 -1
  239. package/dist/models/media.js.map +0 -1
  240. package/dist/models/model.d.ts.map +0 -1
  241. package/dist/models/model.js.map +0 -1
  242. package/dist/models/notification.d.ts.map +0 -1
  243. package/dist/models/notification.js.map +0 -1
  244. package/dist/models/options.d.ts.map +0 -1
  245. package/dist/models/options.js.map +0 -1
  246. package/dist/models/pageHistory.d.ts.map +0 -1
  247. package/dist/models/pageHistory.js.map +0 -1
  248. package/dist/models/pageItem.d.ts.map +0 -1
  249. package/dist/models/pageItem.js.map +0 -1
  250. package/dist/models/pageModel.d.ts.map +0 -1
  251. package/dist/models/pageModel.js.map +0 -1
  252. package/dist/models/serverUser.d.ts.map +0 -1
  253. package/dist/models/serverUser.js.map +0 -1
  254. package/dist/models/sharedModule.d.ts.map +0 -1
  255. package/dist/models/sharedModule.js.map +0 -1
  256. package/dist/models/sitemap.d.ts.map +0 -1
  257. package/dist/models/sitemap.js.map +0 -1
  258. package/dist/models/webhook.d.ts.map +0 -1
  259. package/dist/models/webhook.js.map +0 -1
  260. package/dist/models/websiteListing.d.ts.map +0 -1
  261. package/dist/models/websiteListing.js.map +0 -1
  262. package/dist/models/websiteUser.d.ts.map +0 -1
  263. package/dist/models/websiteUser.js.map +0 -1
@@ -1,231 +1,231 @@
1
- # Agility CMS & Management API TypeScript SDK
2
-
3
- ## InstanceUserMethods
4
-
5
- This class provides comprehensive user management operations for Agility CMS instances. These methods allow you to manage user accounts, roles, and permissions within your instance.
6
-
7
- **Important Notes:**
8
- - Instance user methods typically require administrative privileges
9
- - These operations affect user accounts across the entire instance
10
- - Role assignments control user access to different areas of the CMS
11
- - User management changes may affect website permissions and access
12
-
13
- ### Function List
14
- - [getUsers](#getusers) - Retrieves all instance users
15
- - [saveUser](#saveuser) - Creates or updates an instance user
16
- - [deleteUser](#deleteuser) - Deletes an instance user by ID
17
-
18
- ---
19
-
20
- ### getUsers
21
-
22
- Retrieves all instance users for the current website.
23
-
24
- | Parameter | Type | Required | Description |
25
- |-----------|------|----------|-------------|
26
- | `guid` | `string` | Yes | Current website GUID |
27
-
28
- **Returns:** `WebsiteUser` - Complete list of users with roles and permissions
29
-
30
- **Usage Example:**
31
- ```typescript
32
- const users = await apiClient.instanceUserMethods.getUsers(guid);
33
- console.log(`User: ${user.firstName} ${user.lastName}`);
34
- console.log(`Email: ${user.emailAddress}`);
35
- console.log(`Role: ${user.roleName}`);
36
- console.log(`Status: ${user.isActive ? 'Active' : 'Inactive'}`);
37
- console.log(`Last Login: ${user.lastLoginDate}`);
38
-
39
- // Check user permissions
40
- if (user.permissions && user.permissions.length > 0) {
41
- console.log('User permissions:');
42
- user.permissions.forEach(permission => {
43
- console.log(` - ${permission}`);
44
- });
45
- } else {
46
- console.log('User has no specific permissions assigned');
47
- }
48
-
49
- // Check if user is an administrator
50
- const isAdmin = user.roleName === 'Administrator' ||
51
- user.roleName === 'Instance Administrator';
52
- console.log(`Is Administrator: ${isAdmin}`);
53
- ```
54
-
55
- **Response Properties:**
56
- The `InstanceUser` object includes:
57
- - `userID`: Unique identifier for the user
58
- - `firstName`: User's first name
59
- - `lastName`: User's last name
60
- - `emailAddress`: User's email address
61
- - `roleName`: The user's role within the instance
62
- - `isActive`: Whether the user account is active
63
- - `lastLoginDate`: Date of the user's last login
64
- - `createdDate`: Date the user account was created
65
- - `permissions`: Array of specific permissions assigned to the user
66
-
67
- **Error Handling:**
68
- - Throws `Exception` when user not found
69
- - Throws `Exception` when insufficient permissions to view user details
70
-
71
- ### saveUser
72
-
73
- Creates a new instance user or updates an existing one.
74
-
75
- | Parameter | Type | Required | Description |
76
- |-----------|------|----------|-------------|
77
- | `emailAddress` | `string` | Yes | User's email address |
78
- | `roles` | `InstanceRole[]` | Yes | Array of roles to assign to user |
79
- | `guid` | `string` | Yes | Current website GUID |
80
- | `firstName` | `string` | No | User's first name |
81
- | `lastName` | `string` | No | User's last name |
82
-
83
- **Returns:** `InstanceUser` - Saved user object with updated metadata
84
-
85
- **Usage Example:**
86
- ```typescript
87
- // Create a new user
88
- const roles = [
89
- { roleID: 1, roleName: 'Editor' },
90
- { roleID: 2, roleName: 'Contributor' }
91
- ];
92
-
93
- const savedUser = await apiClient.instanceUserMethods.saveUser(
94
- 'john.doe@company.com',
95
- roles,
96
- guid,
97
- 'John',
98
- 'Doe'
99
- );
100
- console.log('User created with ID:', savedUser.userID);
101
-
102
- // Update existing user
103
- const existingUser = await apiClient.instanceUserMethods.getInstanceUser(123, guid);
104
- existingUser.firstName = 'Jane';
105
- existingUser.roleName = 'Administrator';
106
- existingUser.isActive = false; // Deactivate user
107
-
108
- const updatedUser = await apiClient.instanceUserMethods.saveInstanceUser(existingUser, guid);
109
- console.log('User updated:', updatedUser.emailAddress);
110
-
111
- // Bulk user role update
112
- const updateUserRole = async (userID, newRole) => {
113
- const user = await apiClient.instanceUserMethods.getInstanceUser(userID, guid);
114
- user.roleName = newRole;
115
- return await apiClient.instanceUserMethods.saveInstanceUser(user, guid);
116
- };
117
-
118
- // Promote user to administrator
119
- await updateUserRole(123, 'Administrator');
120
- ```
121
-
122
- **User Roles:**
123
- Common role names include:
124
- - `Administrator`: Full access to all instance features
125
- - `Instance Administrator`: Instance-level administrative access
126
- - `Editor`: Content creation and editing permissions
127
- - `Publisher`: Content publishing permissions
128
- - `Contributor`: Limited content creation permissions
129
- - `Viewer`: Read-only access
130
-
131
- **Validation Rules:**
132
- - `emailAddress` must be unique within the instance
133
- - `password` is required for new users (not needed for updates)
134
- - `firstName` and `lastName` are required
135
- - `roleName` must be a valid role within the instance
136
-
137
- **Error Handling:**
138
- - Throws `Exception` when validation fails (duplicate email, invalid role, etc.)
139
- - Throws `Exception` when save operation fails
140
- - Throws `Exception` when insufficient permissions to create/update users
141
-
142
- ### deleteUser
143
-
144
- Deletes an instance user by their unique ID.
145
-
146
- | Parameter | Type | Required | Description |
147
- |-----------|------|----------|-------------|
148
- | `userId` | `number` | Yes | The user ID to delete |
149
- | `guid` | `string` | Yes | Current website GUID |
150
-
151
- **Returns:** `string` - Confirmation message of successful deletion
152
-
153
- **Usage Example:**
154
- ```typescript
155
- try {
156
- const result = await apiClient.instanceUserMethods.deleteUser(123, guid);
157
- console.log(result); // "User deleted successfully"
158
- } catch (error) {
159
- if (error.message.includes('owns content')) {
160
- console.log('Cannot delete user: user owns content items');
161
- // Handle by reassigning content or archiving user instead
162
- } else if (error.message.includes('last administrator')) {
163
- console.log('Cannot delete user: last administrator in instance');
164
- } else {
165
- console.error('Failed to delete user:', error.message);
166
- }
167
- }
168
-
169
- // Safe user deletion with checks
170
- const safeDeleteUser = async (userID) => {
171
- try {
172
- // Get user details first
173
- const user = await apiClient.instanceUserMethods.getInstanceUser(userID, guid);
174
- console.log(`Attempting to delete user: ${user.emailAddress}`);
175
-
176
- // Check if user is active
177
- if (user.isActive) {
178
- console.log('Warning: Deleting active user');
179
- }
180
-
181
- // Perform deletion
182
- const result = await apiClient.instanceUserMethods.deleteInstanceUser(userID, guid);
183
- console.log('User deleted successfully');
184
- return result;
185
- } catch (error) {
186
- console.error('Failed to delete user:', error.message);
187
- throw error;
188
- }
189
- };
190
-
191
- // Alternative: Deactivate instead of delete
192
- const deactivateUser = async (userID) => {
193
- const user = await apiClient.instanceUserMethods.getInstanceUser(userID, guid);
194
- user.isActive = false;
195
- return await apiClient.instanceUserMethods.saveInstanceUser(user, guid);
196
- };
197
- ```
198
-
199
- **Deletion Restrictions:**
200
- - Cannot delete a user who owns content items (reassign content first)
201
- - Cannot delete the last administrator in the instance
202
- - Cannot delete your own user account
203
- - Cannot delete users with active sessions (in some cases)
204
-
205
- **Best Practices:**
206
- - Consider deactivating users instead of deleting them to preserve audit trails
207
- - Reassign content ownership before deleting users
208
- - Ensure at least one administrator remains in the instance
209
- - Log user deletions for security auditing
210
-
211
- **Error Handling:**
212
- - Throws `Exception` when user not found
213
- - Throws `Exception` when user cannot be deleted (owns content, last admin, etc.)
214
- - Throws `Exception` when insufficient permissions to delete users
215
-
216
- ---
217
-
218
- ## Navigation
219
- - [← Back to Main Documentation](../README.md)
220
- - [Authentication & Setup](./auth.md)
221
- - [Multi-Instance Operations](./multi-instance-operations.md)
222
- - [AssetMethods](./asset-methods.md)
223
- - [BatchMethods](./batch-methods.md)
224
- - [ContainerMethods](./container-methods.md)
225
- - [ContentMethods](./content-methods.md)
226
- - [InstanceMethods](./instance-methods.md)
227
- - **InstanceUserMethods** *(current)*
228
- - [ModelMethods](./model-methods.md)
229
- - [PageMethods](./page-methods.md)
230
- - [ServerUserMethods](./server-user-methods.md)
1
+ # Agility CMS & Management API TypeScript SDK
2
+
3
+ ## InstanceUserMethods
4
+
5
+ This class provides comprehensive user management operations for Agility CMS instances. These methods allow you to manage user accounts, roles, and permissions within your instance.
6
+
7
+ **Important Notes:**
8
+ - Instance user methods typically require administrative privileges
9
+ - These operations affect user accounts across the entire instance
10
+ - Role assignments control user access to different areas of the CMS
11
+ - User management changes may affect website permissions and access
12
+
13
+ ### Function List
14
+ - [getUsers](#getusers) - Retrieves all instance users
15
+ - [saveUser](#saveuser) - Creates or updates an instance user
16
+ - [deleteUser](#deleteuser) - Deletes an instance user by ID
17
+
18
+ ---
19
+
20
+ ### getUsers
21
+
22
+ Retrieves all instance users for the current website.
23
+
24
+ | Parameter | Type | Required | Description |
25
+ |-----------|------|----------|-------------|
26
+ | `guid` | `string` | Yes | Current website GUID |
27
+
28
+ **Returns:** `WebsiteUser` - Complete list of users with roles and permissions
29
+
30
+ **Usage Example:**
31
+ ```typescript
32
+ const users = await apiClient.instanceUserMethods.getUsers(guid);
33
+ console.log(`User: ${user.firstName} ${user.lastName}`);
34
+ console.log(`Email: ${user.emailAddress}`);
35
+ console.log(`Role: ${user.roleName}`);
36
+ console.log(`Status: ${user.isActive ? 'Active' : 'Inactive'}`);
37
+ console.log(`Last Login: ${user.lastLoginDate}`);
38
+
39
+ // Check user permissions
40
+ if (user.permissions && user.permissions.length > 0) {
41
+ console.log('User permissions:');
42
+ user.permissions.forEach(permission => {
43
+ console.log(` - ${permission}`);
44
+ });
45
+ } else {
46
+ console.log('User has no specific permissions assigned');
47
+ }
48
+
49
+ // Check if user is an administrator
50
+ const isAdmin = user.roleName === 'Administrator' ||
51
+ user.roleName === 'Instance Administrator';
52
+ console.log(`Is Administrator: ${isAdmin}`);
53
+ ```
54
+
55
+ **Response Properties:**
56
+ The `InstanceUser` object includes:
57
+ - `userID`: Unique identifier for the user
58
+ - `firstName`: User's first name
59
+ - `lastName`: User's last name
60
+ - `emailAddress`: User's email address
61
+ - `roleName`: The user's role within the instance
62
+ - `isActive`: Whether the user account is active
63
+ - `lastLoginDate`: Date of the user's last login
64
+ - `createdDate`: Date the user account was created
65
+ - `permissions`: Array of specific permissions assigned to the user
66
+
67
+ **Error Handling:**
68
+ - Throws `Exception` when user not found
69
+ - Throws `Exception` when insufficient permissions to view user details
70
+
71
+ ### saveUser
72
+
73
+ Creates a new instance user or updates an existing one.
74
+
75
+ | Parameter | Type | Required | Description |
76
+ |-----------|------|----------|-------------|
77
+ | `emailAddress` | `string` | Yes | User's email address |
78
+ | `roles` | `InstanceRole[]` | Yes | Array of roles to assign to user |
79
+ | `guid` | `string` | Yes | Current website GUID |
80
+ | `firstName` | `string` | No | User's first name |
81
+ | `lastName` | `string` | No | User's last name |
82
+
83
+ **Returns:** `InstanceUser` - Saved user object with updated metadata
84
+
85
+ **Usage Example:**
86
+ ```typescript
87
+ // Create a new user
88
+ const roles = [
89
+ { roleID: 1, roleName: 'Editor' },
90
+ { roleID: 2, roleName: 'Contributor' }
91
+ ];
92
+
93
+ const savedUser = await apiClient.instanceUserMethods.saveUser(
94
+ 'john.doe@company.com',
95
+ roles,
96
+ guid,
97
+ 'John',
98
+ 'Doe'
99
+ );
100
+ console.log('User created with ID:', savedUser.userID);
101
+
102
+ // Update existing user
103
+ const existingUser = await apiClient.instanceUserMethods.getInstanceUser(123, guid);
104
+ existingUser.firstName = 'Jane';
105
+ existingUser.roleName = 'Administrator';
106
+ existingUser.isActive = false; // Deactivate user
107
+
108
+ const updatedUser = await apiClient.instanceUserMethods.saveInstanceUser(existingUser, guid);
109
+ console.log('User updated:', updatedUser.emailAddress);
110
+
111
+ // Bulk user role update
112
+ const updateUserRole = async (userID, newRole) => {
113
+ const user = await apiClient.instanceUserMethods.getInstanceUser(userID, guid);
114
+ user.roleName = newRole;
115
+ return await apiClient.instanceUserMethods.saveInstanceUser(user, guid);
116
+ };
117
+
118
+ // Promote user to administrator
119
+ await updateUserRole(123, 'Administrator');
120
+ ```
121
+
122
+ **User Roles:**
123
+ Common role names include:
124
+ - `Administrator`: Full access to all instance features
125
+ - `Instance Administrator`: Instance-level administrative access
126
+ - `Editor`: Content creation and editing permissions
127
+ - `Publisher`: Content publishing permissions
128
+ - `Contributor`: Limited content creation permissions
129
+ - `Viewer`: Read-only access
130
+
131
+ **Validation Rules:**
132
+ - `emailAddress` must be unique within the instance
133
+ - `password` is required for new users (not needed for updates)
134
+ - `firstName` and `lastName` are required
135
+ - `roleName` must be a valid role within the instance
136
+
137
+ **Error Handling:**
138
+ - Throws `Exception` when validation fails (duplicate email, invalid role, etc.)
139
+ - Throws `Exception` when save operation fails
140
+ - Throws `Exception` when insufficient permissions to create/update users
141
+
142
+ ### deleteUser
143
+
144
+ Deletes an instance user by their unique ID.
145
+
146
+ | Parameter | Type | Required | Description |
147
+ |-----------|------|----------|-------------|
148
+ | `userId` | `number` | Yes | The user ID to delete |
149
+ | `guid` | `string` | Yes | Current website GUID |
150
+
151
+ **Returns:** `string` - Confirmation message of successful deletion
152
+
153
+ **Usage Example:**
154
+ ```typescript
155
+ try {
156
+ const result = await apiClient.instanceUserMethods.deleteUser(123, guid);
157
+ console.log(result); // "User deleted successfully"
158
+ } catch (error) {
159
+ if (error.message.includes('owns content')) {
160
+ console.log('Cannot delete user: user owns content items');
161
+ // Handle by reassigning content or archiving user instead
162
+ } else if (error.message.includes('last administrator')) {
163
+ console.log('Cannot delete user: last administrator in instance');
164
+ } else {
165
+ console.error('Failed to delete user:', error.message);
166
+ }
167
+ }
168
+
169
+ // Safe user deletion with checks
170
+ const safeDeleteUser = async (userID) => {
171
+ try {
172
+ // Get user details first
173
+ const user = await apiClient.instanceUserMethods.getInstanceUser(userID, guid);
174
+ console.log(`Attempting to delete user: ${user.emailAddress}`);
175
+
176
+ // Check if user is active
177
+ if (user.isActive) {
178
+ console.log('Warning: Deleting active user');
179
+ }
180
+
181
+ // Perform deletion
182
+ const result = await apiClient.instanceUserMethods.deleteInstanceUser(userID, guid);
183
+ console.log('User deleted successfully');
184
+ return result;
185
+ } catch (error) {
186
+ console.error('Failed to delete user:', error.message);
187
+ throw error;
188
+ }
189
+ };
190
+
191
+ // Alternative: Deactivate instead of delete
192
+ const deactivateUser = async (userID) => {
193
+ const user = await apiClient.instanceUserMethods.getInstanceUser(userID, guid);
194
+ user.isActive = false;
195
+ return await apiClient.instanceUserMethods.saveInstanceUser(user, guid);
196
+ };
197
+ ```
198
+
199
+ **Deletion Restrictions:**
200
+ - Cannot delete a user who owns content items (reassign content first)
201
+ - Cannot delete the last administrator in the instance
202
+ - Cannot delete your own user account
203
+ - Cannot delete users with active sessions (in some cases)
204
+
205
+ **Best Practices:**
206
+ - Consider deactivating users instead of deleting them to preserve audit trails
207
+ - Reassign content ownership before deleting users
208
+ - Ensure at least one administrator remains in the instance
209
+ - Log user deletions for security auditing
210
+
211
+ **Error Handling:**
212
+ - Throws `Exception` when user not found
213
+ - Throws `Exception` when user cannot be deleted (owns content, last admin, etc.)
214
+ - Throws `Exception` when insufficient permissions to delete users
215
+
216
+ ---
217
+
218
+ ## Navigation
219
+ - [← Back to Main Documentation](../README.md)
220
+ - [Authentication & Setup](./auth.md)
221
+ - [Multi-Instance Operations](./multi-instance-operations.md)
222
+ - [AssetMethods](./asset-methods.md)
223
+ - [BatchMethods](./batch-methods.md)
224
+ - [ContainerMethods](./container-methods.md)
225
+ - [ContentMethods](./content-methods.md)
226
+ - [InstanceMethods](./instance-methods.md)
227
+ - **InstanceUserMethods** *(current)*
228
+ - [ModelMethods](./model-methods.md)
229
+ - [PageMethods](./page-methods.md)
230
+ - [ServerUserMethods](./server-user-methods.md)
231
231
  - [WebhookMethods](./webhook-methods.md)