@agility/management-sdk 0.1.36 → 0.1.37

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 (259) hide show
  1. package/README.md +371 -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/pageMethods.d.ts +12 -0
  9. package/dist/apiMethods/pageMethods.js +88 -34
  10. package/dist/enums/contentViewType.d.ts +6 -0
  11. package/dist/enums/contentViewType.js +10 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +2 -0
  14. package/dist/models/pagedResult.d.ts +4 -0
  15. package/dist/models/pagedResult.js +2 -0
  16. package/docs/asset-methods.md +381 -381
  17. package/docs/auth-component.md +360 -360
  18. package/docs/auth.md +593 -593
  19. package/docs/batch-methods.md +243 -243
  20. package/docs/cicd.md +606 -606
  21. package/docs/container-methods.md +267 -267
  22. package/docs/content-methods.md +491 -422
  23. package/docs/instance-methods.md +104 -104
  24. package/docs/instance-user-methods.md +230 -230
  25. package/docs/model-methods.md +433 -433
  26. package/docs/multi-instance-operations.md +191 -191
  27. package/docs/page-methods.md +737 -670
  28. package/docs/server-user-methods.md +279 -279
  29. package/docs/webhook-methods.md +451 -451
  30. package/license.txt +20 -20
  31. package/package.json +40 -40
  32. package/tsconfig.json +14 -14
  33. package/.cursor/api-coverage.md +0 -217
  34. package/.cursor/api-documentation-manifest.md +0 -275
  35. package/.cursor/api-functions-analysis.md +0 -111
  36. package/.cursor/breakout-manifest.md +0 -278
  37. package/.cursor/docs-final-check.md +0 -269
  38. package/.cursor/github-actions-improvements.md +0 -76
  39. package/.cursor/hardening.md +0 -271
  40. package/.cursor/linting-fix.md +0 -160
  41. package/.cursor/manifest.md +0 -243
  42. package/.cursor/mocks.md +0 -100
  43. package/.cursor/test-coverage.md +0 -841
  44. package/.env +0 -92
  45. package/coverage/base.css +0 -224
  46. package/coverage/block-navigation.js +0 -87
  47. package/coverage/coverage-summary.json +0 -43
  48. package/coverage/favicon.png +0 -0
  49. package/coverage/index.html +0 -161
  50. package/coverage/lcov-report/base.css +0 -224
  51. package/coverage/lcov-report/block-navigation.js +0 -87
  52. package/coverage/lcov-report/favicon.png +0 -0
  53. package/coverage/lcov-report/index.html +0 -161
  54. package/coverage/lcov-report/prettify.css +0 -1
  55. package/coverage/lcov-report/prettify.js +0 -2
  56. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  57. package/coverage/lcov-report/sorter.js +0 -210
  58. package/coverage/lcov-report/src/apiClient.ts.html +0 -199
  59. package/coverage/lcov-report/src/apiMethods/assetMethods.ts.html +0 -682
  60. package/coverage/lcov-report/src/apiMethods/batchMethods.ts.html +0 -736
  61. package/coverage/lcov-report/src/apiMethods/clientInstance.ts.html +0 -403
  62. package/coverage/lcov-report/src/apiMethods/containerMethods.ts.html +0 -460
  63. package/coverage/lcov-report/src/apiMethods/contentMethods.ts.html +0 -1183
  64. package/coverage/lcov-report/src/apiMethods/index.html +0 -266
  65. package/coverage/lcov-report/src/apiMethods/instanceMethods.ts.html +0 -160
  66. package/coverage/lcov-report/src/apiMethods/instanceUserMethods.ts.html +0 -268
  67. package/coverage/lcov-report/src/apiMethods/modelMethods.ts.html +0 -352
  68. package/coverage/lcov-report/src/apiMethods/pageMethods.ts.html +0 -1276
  69. package/coverage/lcov-report/src/apiMethods/serverUserMethods.ts.html +0 -196
  70. package/coverage/lcov-report/src/apiMethods/webhookMethods.ts.html +0 -271
  71. package/coverage/lcov-report/src/enums/batchItemType.ts.html +0 -106
  72. package/coverage/lcov-report/src/enums/batchOperationType.ts.html +0 -142
  73. package/coverage/lcov-report/src/enums/batchState..ts.html +0 -106
  74. package/coverage/lcov-report/src/enums/index.html +0 -161
  75. package/coverage/lcov-report/src/enums/workflowOperationType.ts.html +0 -175
  76. package/coverage/lcov-report/src/index.html +0 -116
  77. package/coverage/lcov-report/src/models/assetContainer.ts.html +0 -106
  78. package/coverage/lcov-report/src/models/assetGalleries.ts.html +0 -103
  79. package/coverage/lcov-report/src/models/assetMediaGrouping.ts.html +0 -136
  80. package/coverage/lcov-report/src/models/assetMediaGroupingMetaData.ts.html +0 -97
  81. package/coverage/lcov-report/src/models/batch.ts.html +0 -178
  82. package/coverage/lcov-report/src/models/batchItem.ts.html +0 -127
  83. package/coverage/lcov-report/src/models/container.ts.html +0 -232
  84. package/coverage/lcov-report/src/models/contentDefinitionTypeID.ts.html +0 -142
  85. package/coverage/lcov-report/src/models/contentItem.ts.html +0 -202
  86. package/coverage/lcov-report/src/models/contentSectionDefaultModule.ts.html +0 -106
  87. package/coverage/lcov-report/src/models/contentSectionDefinition.ts.html +0 -196
  88. package/coverage/lcov-report/src/models/contentViewColumn.ts.html +0 -109
  89. package/coverage/lcov-report/src/models/exception.ts.html +0 -109
  90. package/coverage/lcov-report/src/models/index.html +0 -476
  91. package/coverage/lcov-report/src/models/instanceRole.ts.html +0 -106
  92. package/coverage/lcov-report/src/models/instanceUser.ts.html +0 -130
  93. package/coverage/lcov-report/src/models/locales.ts.html +0 -100
  94. package/coverage/lcov-report/src/models/media.ts.html +0 -178
  95. package/coverage/lcov-report/src/models/model.ts.html +0 -172
  96. package/coverage/lcov-report/src/models/notification.ts.html +0 -124
  97. package/coverage/lcov-report/src/models/options.ts.html +0 -109
  98. package/coverage/lcov-report/src/models/pageItem.ts.html +0 -268
  99. package/coverage/lcov-report/src/models/pageModel.ts.html +0 -130
  100. package/coverage/lcov-report/src/models/sharedModule.ts.html +0 -106
  101. package/coverage/lcov-report/src/models/sitemap.ts.html +0 -148
  102. package/coverage/lcov-report/src/models/websiteUser.ts.html +0 -157
  103. package/coverage/lcov.info +0 -1459
  104. package/coverage/prettify.css +0 -1
  105. package/coverage/prettify.js +0 -2
  106. package/coverage/sort-arrow-sprite.png +0 -0
  107. package/coverage/sorter.js +0 -210
  108. package/coverage/src/apiClient.ts.html +0 -199
  109. package/coverage/src/apiMethods/assetMethods.ts.html +0 -682
  110. package/coverage/src/apiMethods/batchMethods.ts.html +0 -736
  111. package/coverage/src/apiMethods/clientInstance.ts.html +0 -403
  112. package/coverage/src/apiMethods/containerMethods.ts.html +0 -460
  113. package/coverage/src/apiMethods/contentMethods.ts.html +0 -1183
  114. package/coverage/src/apiMethods/index.html +0 -266
  115. package/coverage/src/apiMethods/instanceMethods.ts.html +0 -160
  116. package/coverage/src/apiMethods/instanceUserMethods.ts.html +0 -268
  117. package/coverage/src/apiMethods/modelMethods.ts.html +0 -352
  118. package/coverage/src/apiMethods/pageMethods.ts.html +0 -1276
  119. package/coverage/src/apiMethods/serverUserMethods.ts.html +0 -196
  120. package/coverage/src/apiMethods/webhookMethods.ts.html +0 -271
  121. package/coverage/src/enums/batchItemType.ts.html +0 -106
  122. package/coverage/src/enums/batchOperationType.ts.html +0 -142
  123. package/coverage/src/enums/batchState..ts.html +0 -106
  124. package/coverage/src/enums/index.html +0 -161
  125. package/coverage/src/enums/workflowOperationType.ts.html +0 -175
  126. package/coverage/src/index.html +0 -116
  127. package/coverage/src/models/assetContainer.ts.html +0 -106
  128. package/coverage/src/models/assetGalleries.ts.html +0 -103
  129. package/coverage/src/models/assetMediaGrouping.ts.html +0 -136
  130. package/coverage/src/models/assetMediaGroupingMetaData.ts.html +0 -97
  131. package/coverage/src/models/batch.ts.html +0 -178
  132. package/coverage/src/models/batchItem.ts.html +0 -127
  133. package/coverage/src/models/container.ts.html +0 -232
  134. package/coverage/src/models/contentDefinitionTypeID.ts.html +0 -142
  135. package/coverage/src/models/contentItem.ts.html +0 -202
  136. package/coverage/src/models/contentSectionDefaultModule.ts.html +0 -106
  137. package/coverage/src/models/contentSectionDefinition.ts.html +0 -196
  138. package/coverage/src/models/contentViewColumn.ts.html +0 -109
  139. package/coverage/src/models/exception.ts.html +0 -109
  140. package/coverage/src/models/index.html +0 -476
  141. package/coverage/src/models/instanceRole.ts.html +0 -106
  142. package/coverage/src/models/instanceUser.ts.html +0 -130
  143. package/coverage/src/models/locales.ts.html +0 -100
  144. package/coverage/src/models/media.ts.html +0 -178
  145. package/coverage/src/models/model.ts.html +0 -172
  146. package/coverage/src/models/notification.ts.html +0 -124
  147. package/coverage/src/models/options.ts.html +0 -109
  148. package/coverage/src/models/pageItem.ts.html +0 -268
  149. package/coverage/src/models/pageModel.ts.html +0 -130
  150. package/coverage/src/models/sharedModule.ts.html +0 -106
  151. package/coverage/src/models/sitemap.ts.html +0 -148
  152. package/coverage/src/models/websiteUser.ts.html +0 -157
  153. package/dist/.tsbuildinfo +0 -1
  154. package/dist/apiClient.d.ts.map +0 -1
  155. package/dist/apiClient.js.map +0 -1
  156. package/dist/apiMethods/assetMethods.d.ts.map +0 -1
  157. package/dist/apiMethods/assetMethods.js.map +0 -1
  158. package/dist/apiMethods/batchMethods.d.ts.map +0 -1
  159. package/dist/apiMethods/batchMethods.js.map +0 -1
  160. package/dist/apiMethods/clientInstance.d.ts.map +0 -1
  161. package/dist/apiMethods/clientInstance.js.map +0 -1
  162. package/dist/apiMethods/containerMethods.d.ts.map +0 -1
  163. package/dist/apiMethods/containerMethods.js.map +0 -1
  164. package/dist/apiMethods/contentMethods.d.ts.map +0 -1
  165. package/dist/apiMethods/contentMethods.js.map +0 -1
  166. package/dist/apiMethods/instanceMethods.d.ts.map +0 -1
  167. package/dist/apiMethods/instanceMethods.js.map +0 -1
  168. package/dist/apiMethods/instanceUserMethods.d.ts.map +0 -1
  169. package/dist/apiMethods/instanceUserMethods.js.map +0 -1
  170. package/dist/apiMethods/modelMethods.d.ts.map +0 -1
  171. package/dist/apiMethods/modelMethods.js.map +0 -1
  172. package/dist/apiMethods/pageMethods.d.ts.map +0 -1
  173. package/dist/apiMethods/pageMethods.js.map +0 -1
  174. package/dist/apiMethods/serverUserMethods.d.ts.map +0 -1
  175. package/dist/apiMethods/serverUserMethods.js.map +0 -1
  176. package/dist/apiMethods/webhookMethods.d.ts.map +0 -1
  177. package/dist/apiMethods/webhookMethods.js.map +0 -1
  178. package/dist/enums/assetGroupingType.d.ts.map +0 -1
  179. package/dist/enums/assetGroupingType.js.map +0 -1
  180. package/dist/enums/batchItemType.d.ts.map +0 -1
  181. package/dist/enums/batchItemType.js.map +0 -1
  182. package/dist/enums/batchOperationType.d.ts.map +0 -1
  183. package/dist/enums/batchOperationType.js.map +0 -1
  184. package/dist/enums/batchState..d.ts.map +0 -1
  185. package/dist/enums/batchState..js.map +0 -1
  186. package/dist/enums/pageItemTemplateType.d.ts.map +0 -1
  187. package/dist/enums/pageItemTemplateType.js.map +0 -1
  188. package/dist/enums/workflowOperationType.d.ts.map +0 -1
  189. package/dist/enums/workflowOperationType.js.map +0 -1
  190. package/dist/index.d.ts.map +0 -1
  191. package/dist/index.js.map +0 -1
  192. package/dist/models/assetContainer.d.ts.map +0 -1
  193. package/dist/models/assetContainer.js.map +0 -1
  194. package/dist/models/assetGalleries.d.ts.map +0 -1
  195. package/dist/models/assetGalleries.js.map +0 -1
  196. package/dist/models/assetMediaGrouping.d.ts.map +0 -1
  197. package/dist/models/assetMediaGrouping.js.map +0 -1
  198. package/dist/models/assetMediaGroupingMetaData.d.ts.map +0 -1
  199. package/dist/models/assetMediaGroupingMetaData.js.map +0 -1
  200. package/dist/models/batch.d.ts.map +0 -1
  201. package/dist/models/batch.js.map +0 -1
  202. package/dist/models/batchItem.d.ts.map +0 -1
  203. package/dist/models/batchItem.js.map +0 -1
  204. package/dist/models/batchTypes.d.ts.map +0 -1
  205. package/dist/models/batchTypes.js.map +0 -1
  206. package/dist/models/container.d.ts.map +0 -1
  207. package/dist/models/container.js.map +0 -1
  208. package/dist/models/contentDefinitionTypeID.d.ts.map +0 -1
  209. package/dist/models/contentDefinitionTypeID.js.map +0 -1
  210. package/dist/models/contentItem.d.ts.map +0 -1
  211. package/dist/models/contentItem.js.map +0 -1
  212. package/dist/models/contentItemHistory.d.ts.map +0 -1
  213. package/dist/models/contentItemHistory.js.map +0 -1
  214. package/dist/models/contentListFilterModel.d.ts.map +0 -1
  215. package/dist/models/contentListFilterModel.js.map +0 -1
  216. package/dist/models/contentSectionDefaultModule.d.ts.map +0 -1
  217. package/dist/models/contentSectionDefaultModule.js.map +0 -1
  218. package/dist/models/contentSectionDefinition.d.ts.map +0 -1
  219. package/dist/models/contentSectionDefinition.js.map +0 -1
  220. package/dist/models/contentViewColumn.d.ts.map +0 -1
  221. package/dist/models/contentViewColumn.js.map +0 -1
  222. package/dist/models/exception.d.ts.map +0 -1
  223. package/dist/models/exception.js.map +0 -1
  224. package/dist/models/instanceRole.d.ts.map +0 -1
  225. package/dist/models/instanceRole.js.map +0 -1
  226. package/dist/models/instanceUser.d.ts.map +0 -1
  227. package/dist/models/instanceUser.js.map +0 -1
  228. package/dist/models/itemComments.d.ts.map +0 -1
  229. package/dist/models/itemComments.js.map +0 -1
  230. package/dist/models/listParams.d.ts.map +0 -1
  231. package/dist/models/listParams.js.map +0 -1
  232. package/dist/models/locales.d.ts.map +0 -1
  233. package/dist/models/locales.js.map +0 -1
  234. package/dist/models/media.d.ts.map +0 -1
  235. package/dist/models/media.js.map +0 -1
  236. package/dist/models/model.d.ts.map +0 -1
  237. package/dist/models/model.js.map +0 -1
  238. package/dist/models/notification.d.ts.map +0 -1
  239. package/dist/models/notification.js.map +0 -1
  240. package/dist/models/options.d.ts.map +0 -1
  241. package/dist/models/options.js.map +0 -1
  242. package/dist/models/pageHistory.d.ts.map +0 -1
  243. package/dist/models/pageHistory.js.map +0 -1
  244. package/dist/models/pageItem.d.ts.map +0 -1
  245. package/dist/models/pageItem.js.map +0 -1
  246. package/dist/models/pageModel.d.ts.map +0 -1
  247. package/dist/models/pageModel.js.map +0 -1
  248. package/dist/models/serverUser.d.ts.map +0 -1
  249. package/dist/models/serverUser.js.map +0 -1
  250. package/dist/models/sharedModule.d.ts.map +0 -1
  251. package/dist/models/sharedModule.js.map +0 -1
  252. package/dist/models/sitemap.d.ts.map +0 -1
  253. package/dist/models/sitemap.js.map +0 -1
  254. package/dist/models/webhook.d.ts.map +0 -1
  255. package/dist/models/webhook.js.map +0 -1
  256. package/dist/models/websiteListing.d.ts.map +0 -1
  257. package/dist/models/websiteListing.js.map +0 -1
  258. package/dist/models/websiteUser.d.ts.map +0 -1
  259. package/dist/models/websiteUser.js.map +0 -1
@@ -1,671 +1,738 @@
1
- # Agility CMS & Management API TypeScript SDK
2
-
3
- ## PageMethods
4
-
5
- This class provides comprehensive page management operations for Agility CMS. Pages are the structural foundation of your website, defining the navigation hierarchy and content organization.
6
-
7
- **Important Notes:**
8
- - Pages define the structure and navigation of your website
9
- - Each page has a unique path and can contain multiple content zones
10
- - Pages support workflow states (published, unpublished, approved, etc.)
11
- - Page operations support both immediate return and batch processing
12
- - Page templates define the layout and content zones available
13
- - Pages can be organized in a hierarchical structure with parent-child relationships
14
-
15
- ### Function List
16
- - [getPage](#getpage) - Retrieves a specific page by ID
17
- - [getPageByPath](#getpagebypath) - Retrieves a page by its URL path
18
- - [getPageHistory](#getpagehistory) - Retrieves version history for a page
19
- - [getPageComments](#getpagecomments) - Retrieves comments for a page
20
- - [getPageList](#getpagelist) - Retrieves list of pages with filtering
21
- - [getPageListByPageTemplateID](#getpagelistbypagetemplateid) - Retrieves pages using specific template
22
- - [getPageListByPage](#getpagelistbypage) - Retrieves pages with pagination
23
- - [getPageListByPageAndPageTemplateID](#getpagelistbypageandpagetemplateid) - Retrieves paginated pages by template
24
- - [getPageTree](#getpagetree) - Retrieves complete page hierarchy
25
- - [getPageTemplateList](#getpagetemplatelist) - Retrieves available page templates
26
- - [getPageSecurity](#getpagesecurity) - Retrieves security settings for a page
27
- - [getPageItemTemplateList](#getpageitemtemplatelist) - Retrieves page item templates
28
- - [getPageContentZones](#getpagecontentzones) - Retrieves content zones for a page
29
- - [savePage](#savepage) - Creates or updates a page
30
- - [savePageSecurity](#savepagesecurity) - Updates page security settings
31
- - [movePageItem](#movepageitem) - Moves a page item within the hierarchy
32
- - [deletePage](#deletepage) - Deletes a page by ID
33
-
34
- ---
35
-
36
- ### getPage
37
-
38
- Retrieves a specific page by its unique ID.
39
-
40
- | Parameter | Type | Required | Description |
41
- |-----------|------|----------|-------------|
42
- | `pageID` | `number` | Yes | The page ID to retrieve |
43
- | `guid` | `string` | Yes | Current website GUID |
44
-
45
- **Returns:** `PageItem` - Complete page object with content zones and metadata
46
-
47
- **Usage Example:**
48
- ```typescript
49
- const page = await apiClient.pageMethods.getPage(123, guid);
50
- console.log('Page title:', page.title);
51
- console.log('Page path:', page.path);
52
- console.log('Page template:', page.templateName);
53
- console.log('Last modified:', page.modifiedDate);
54
- console.log('Content zones:', page.contentZones.length);
55
-
56
- // Display content zones
57
- page.contentZones.forEach(zone => {
58
- console.log(`Zone: ${zone.name}`);
59
- console.log(` Items: ${zone.items.length}`);
60
- });
61
- ```
62
-
63
- **Error Handling:**
64
- - Throws `Exception` when page not found
65
-
66
- ### getPageByPath
67
-
68
- Retrieves a page by its URL path.
69
-
70
- | Parameter | Type | Required | Description |
71
- |-----------|------|----------|-------------|
72
- | `path` | `string` | Yes | The URL path of the page (e.g., '/about-us') |
73
- | `guid` | `string` | Yes | Current website GUID |
74
-
75
- **Returns:** `PageItem` - Page object matching the path
76
-
77
- **Usage Example:**
78
- ```typescript
79
- const page = await apiClient.pageMethods.getPageByPath('/about-us', guid);
80
- if (page) {
81
- console.log('Page found:', page.title);
82
- console.log('Page ID:', page.pageID);
83
- console.log('Template:', page.templateName);
84
- } else {
85
- console.log('Page not found at path');
86
- }
87
-
88
- // Validate page paths
89
- const validatePath = async (path) => {
90
- try {
91
- const page = await apiClient.pageMethods.getPageByPath(path, guid);
92
- return page !== null;
93
- } catch (error) {
94
- return false;
95
- }
96
- };
97
-
98
- if (await validatePath('/blog')) {
99
- console.log('Blog page exists');
100
- }
101
- ```
102
-
103
- **Error Handling:**
104
- - Throws `Exception` when page not found or path invalid
105
-
106
- ### getPageHistory
107
-
108
- Retrieves the version history for a specific page.
109
-
110
- | Parameter | Type | Required | Description |
111
- |-----------|------|----------|-------------|
112
- | `pageID` | `number` | Yes | The page ID |
113
- | `guid` | `string` | Yes | Current website GUID |
114
-
115
- **Returns:** `PageHistory[]` - Array of historical versions
116
-
117
- **Usage Example:**
118
- ```typescript
119
- const history = await apiClient.pageMethods.getPageHistory(123, guid);
120
- console.log(`Found ${history.length} historical versions`);
121
-
122
- // Display version details
123
- history.forEach((version, index) => {
124
- console.log(`Version ${index + 1}:`);
125
- console.log(` Date: ${version.modifiedDate}`);
126
- console.log(` User: ${version.modifiedByUser}`);
127
- console.log(` Action: ${version.action}`);
128
- console.log(` Notes: ${version.notes}`);
129
- });
130
-
131
- // Get latest version
132
- const latestVersion = history[0];
133
- console.log('Latest change:', latestVersion.action);
134
- ```
135
-
136
- **Error Handling:**
137
- - Throws `Exception` when page not found
138
-
139
- ### getPageComments
140
-
141
- Retrieves all comments for a specific page.
142
-
143
- | Parameter | Type | Required | Description |
144
- |-----------|------|----------|-------------|
145
- | `pageID` | `number` | Yes | The page ID |
146
- | `guid` | `string` | Yes | Current website GUID |
147
-
148
- **Returns:** `ItemComments[]` - Array of page comments
149
-
150
- **Usage Example:**
151
- ```typescript
152
- const comments = await apiClient.pageMethods.getPageComments(123, guid);
153
- console.log(`Found ${comments.length} comments`);
154
-
155
- // Display comments
156
- comments.forEach(comment => {
157
- console.log(`${comment.userName} (${comment.date}):`);
158
- console.log(` ${comment.comment}`);
159
- console.log(` Status: ${comment.status}`);
160
- });
161
- ```
162
-
163
- **Error Handling:**
164
- - Throws `Exception` when page not found
165
-
166
- ### getPageList
167
-
168
- Retrieves a list of pages with optional filtering and sorting.
169
-
170
- | Parameter | Type | Required | Description |
171
- |-----------|------|----------|-------------|
172
- | `listParams` | `ListParams` | Yes | Filtering and sorting parameters |
173
- | `guid` | `string` | Yes | Current website GUID |
174
-
175
- **Returns:** `PageItem[]` - Array of page items
176
-
177
- **Usage Example:**
178
- ```typescript
179
- // Get all pages
180
- const allPages = await apiClient.pageMethods.getPageList({}, guid);
181
-
182
- // Get pages with filtering
183
- const params = {
184
- filter: 'title contains "blog"',
185
- sort: 'modifiedDate desc',
186
- take: 10,
187
- skip: 0
188
- };
189
- const filteredPages = await apiClient.pageMethods.getPageList(params, guid);
190
-
191
- // Get recently modified pages
192
- const recentPages = await apiClient.pageMethods.getPageList({
193
- sort: 'modifiedDate desc',
194
- take: 5
195
- }, guid);
196
- ```
197
-
198
- **Error Handling:**
199
- - Throws `Exception` when retrieval fails
200
-
201
- ### getPageListByPageTemplateID
202
-
203
- Retrieves pages that use a specific page template.
204
-
205
- | Parameter | Type | Required | Description |
206
- |-----------|------|----------|-------------|
207
- | `pageTemplateID` | `number` | Yes | The page template ID |
208
- | `guid` | `string` | Yes | Current website GUID |
209
-
210
- **Returns:** `PageItem[]` - Array of pages using the template
211
-
212
- **Usage Example:**
213
- ```typescript
214
- const pages = await apiClient.pageMethods.getPageListByPageTemplateID(456, guid);
215
- console.log(`Found ${pages.length} pages using this template`);
216
-
217
- // Group by status
218
- const pagesByStatus = pages.reduce((acc, page) => {
219
- const status = page.state || 'draft';
220
- if (!acc[status]) acc[status] = [];
221
- acc[status].push(page);
222
- return acc;
223
- }, {});
224
-
225
- console.log('Pages by status:', pagesByStatus);
226
- ```
227
-
228
- **Error Handling:**
229
- - Throws `Exception` when template not found
230
-
231
- ### getPageListByPage
232
-
233
- Retrieves pages with pagination support.
234
-
235
- | Parameter | Type | Required | Description |
236
- |-----------|------|----------|-------------|
237
- | `pageSize` | `number` | Yes | Number of pages per page |
238
- | `pageNumber` | `number` | Yes | Page number (1-based) |
239
- | `guid` | `string` | Yes | Current website GUID |
240
-
241
- **Returns:** `PageItem[]` - Array of pages for the specified page
242
-
243
- **Usage Example:**
244
- ```typescript
245
- const pageSize = 20;
246
- const pageNumber = 1;
247
-
248
- const firstPage = await apiClient.pageMethods.getPageListByPage(
249
- pageSize,
250
- pageNumber,
251
- guid
252
- );
253
- console.log(`Page ${pageNumber}: ${firstPage.length} pages`);
254
-
255
- // Paginated processing
256
- let currentPage = 1;
257
- let hasMore = true;
258
- while (hasMore) {
259
- const pageItems = await apiClient.pageMethods.getPageListByPage(
260
- pageSize,
261
- currentPage,
262
- guid
263
- );
264
-
265
- if (pageItems.length === 0) {
266
- hasMore = false;
267
- } else {
268
- console.log(`Processing page ${currentPage} with ${pageItems.length} pages`);
269
- // Process pages...
270
- currentPage++;
271
- }
272
- }
273
- ```
274
-
275
- **Error Handling:**
276
- - Throws `Exception` when retrieval fails
277
-
278
- ### getPageListByPageAndPageTemplateID
279
-
280
- Retrieves paginated pages filtered by template.
281
-
282
- | Parameter | Type | Required | Description |
283
- |-----------|------|----------|-------------|
284
- | `pageTemplateID` | `number` | Yes | The page template ID |
285
- | `pageSize` | `number` | Yes | Number of pages per page |
286
- | `pageNumber` | `number` | Yes | Page number (1-based) |
287
- | `guid` | `string` | Yes | Current website GUID |
288
-
289
- **Returns:** `PageItem[]` - Array of pages for the specified page and template
290
-
291
- **Usage Example:**
292
- ```typescript
293
- const templatePages = await apiClient.pageMethods.getPageListByPageAndPageTemplateID(
294
- 456,
295
- 10,
296
- 1,
297
- guid
298
- );
299
- console.log(`Template pages: ${templatePages.length}`);
300
- ```
301
-
302
- **Error Handling:**
303
- - Throws `Exception` when template not found
304
-
305
- ### getPageTree
306
-
307
- Retrieves the complete page hierarchy as a tree structure.
308
-
309
- | Parameter | Type | Required | Description |
310
- |-----------|------|----------|-------------|
311
- | `guid` | `string` | Yes | Current website GUID |
312
-
313
- **Returns:** `PageItem[]` - Hierarchical array of pages with parent-child relationships
314
-
315
- **Usage Example:**
316
- ```typescript
317
- const pageTree = await apiClient.pageMethods.getPageTree(guid);
318
- console.log(`Root pages: ${pageTree.length}`);
319
-
320
- // Display page hierarchy
321
- const displayPageTree = (pages, level = 0) => {
322
- pages.forEach(page => {
323
- const indent = ' '.repeat(level);
324
- console.log(`${indent}${page.title} (${page.path})`);
325
-
326
- if (page.children && page.children.length > 0) {
327
- displayPageTree(page.children, level + 1);
328
- }
329
- });
330
- };
331
-
332
- displayPageTree(pageTree);
333
-
334
- // Find page by path in tree
335
- const findPageInTree = (pages, targetPath) => {
336
- for (const page of pages) {
337
- if (page.path === targetPath) {
338
- return page;
339
- }
340
- if (page.children) {
341
- const found = findPageInTree(page.children, targetPath);
342
- if (found) return found;
343
- }
344
- }
345
- return null;
346
- };
347
-
348
- const aboutPage = findPageInTree(pageTree, '/about-us');
349
- ```
350
-
351
- **Error Handling:**
352
- - Throws `Exception` when retrieval fails
353
-
354
- ### getPageTemplateList
355
-
356
- Retrieves all available page templates.
357
-
358
- | Parameter | Type | Required | Description |
359
- |-----------|------|----------|-------------|
360
- | `guid` | `string` | Yes | Current website GUID |
361
-
362
- **Returns:** `PageTemplate[]` - Array of available page templates
363
-
364
- **Usage Example:**
365
- ```typescript
366
- const templates = await apiClient.pageMethods.getPageTemplateList(guid);
367
- console.log(`Available templates: ${templates.length}`);
368
-
369
- // Display template information
370
- templates.forEach(template => {
371
- console.log(`Template: ${template.name}`);
372
- console.log(` Description: ${template.description}`);
373
- console.log(` Content Zones: ${template.contentZones.length}`);
374
- console.log(` Template File: ${template.templateFile}`);
375
- });
376
-
377
- // Create template dropdown options
378
- const templateOptions = templates.map(template => ({
379
- value: template.id,
380
- label: template.name,
381
- description: template.description
382
- }));
383
- ```
384
-
385
- **Error Handling:**
386
- - Throws `Exception` when retrieval fails
387
-
388
- ### getPageSecurity
389
-
390
- Retrieves security settings for a specific page.
391
-
392
- | Parameter | Type | Required | Description |
393
- |-----------|------|----------|-------------|
394
- | `pageID` | `number` | Yes | The page ID |
395
- | `guid` | `string` | Yes | Current website GUID |
396
-
397
- **Returns:** `PageSecurity` - Page security configuration
398
-
399
- **Usage Example:**
400
- ```typescript
401
- const security = await apiClient.pageMethods.getPageSecurity(123, guid);
402
- console.log('Page security settings:', security);
403
-
404
- // Check if page is public
405
- if (security.isPublic) {
406
- console.log('Page is publicly accessible');
407
- } else {
408
- console.log('Page has restricted access');
409
- console.log('Allowed roles:', security.allowedRoles);
410
- }
411
- ```
412
-
413
- **Error Handling:**
414
- - Throws `Exception` when page not found
415
-
416
- ### getPageItemTemplateList
417
-
418
- Retrieves available page item templates.
419
-
420
- | Parameter | Type | Required | Description |
421
- |-----------|------|----------|-------------|
422
- | `guid` | `string` | Yes | Current website GUID |
423
-
424
- **Returns:** `PageItemTemplate[]` - Array of page item templates
425
-
426
- **Usage Example:**
427
- ```typescript
428
- const itemTemplates = await apiClient.pageMethods.getPageItemTemplateList(guid);
429
- console.log(`Available item templates: ${itemTemplates.length}`);
430
-
431
- // Display template types
432
- itemTemplates.forEach(template => {
433
- console.log(`Template: ${template.name}`);
434
- console.log(` Type: ${template.type}`);
435
- console.log(` Description: ${template.description}`);
436
- });
437
- ```
438
-
439
- **Error Handling:**
440
- - Throws `Exception` when retrieval fails
441
-
442
- ### getPageContentZones
443
-
444
- Retrieves content zones for a specific page.
445
-
446
- | Parameter | Type | Required | Description |
447
- |-----------|------|----------|-------------|
448
- | `pageID` | `number` | Yes | The page ID |
449
- | `guid` | `string` | Yes | Current website GUID |
450
-
451
- **Returns:** `ContentZone[]` - Array of content zones
452
-
453
- **Usage Example:**
454
- ```typescript
455
- const zones = await apiClient.pageMethods.getPageContentZones(123, guid);
456
- console.log(`Page has ${zones.length} content zones`);
457
-
458
- // Display zone information
459
- zones.forEach(zone => {
460
- console.log(`Zone: ${zone.name}`);
461
- console.log(` Items: ${zone.items.length}`);
462
- console.log(` Template: ${zone.templateName}`);
463
-
464
- // Display zone items
465
- zone.items.forEach(item => {
466
- console.log(` Item: ${item.title} (${item.type})`);
467
- });
468
- });
469
- ```
470
-
471
- **Error Handling:**
472
- - Throws `Exception` when page not found
473
-
474
- ### savePage
475
-
476
- Creates a new page or updates an existing one.
477
-
478
- | Parameter | Type | Required | Description |
479
- |-----------|------|----------|-------------|
480
- | `page` | `PageItem` | Yes | Page object to save |
481
- | `guid` | `string` | Yes | Current website GUID |
482
- | `returnBatchId` | `boolean` | No | If `true`, returns batch ID immediately. If `false` (default), waits for completion |
483
-
484
- **Returns:** `PageItem | number` - Saved page (if `returnBatchId` is false) or batch ID (if true)
485
-
486
- **Usage Example:**
487
- ```typescript
488
- // Create a new page
489
- const newPage = {
490
- title: 'New About Page',
491
- path: '/about-us',
492
- templateName: 'About Template',
493
- parentPageID: null, // Root level page
494
- menuText: 'About Us',
495
- isVisible: true,
496
- contentZones: [
497
- {
498
- name: 'MainContent',
499
- items: [
500
- {
501
- type: 'content',
502
- contentID: 456,
503
- title: 'About Us Content'
504
- }
505
- ]
506
- }
507
- ]
508
- };
509
-
510
- const savedPage = await apiClient.pageMethods.savePage(newPage, guid);
511
- console.log('Page created with ID:', savedPage.pageID);
512
-
513
- // Update existing page
514
- const existingPage = await apiClient.pageMethods.getPage(123, guid);
515
- existingPage.title = 'Updated Page Title';
516
- existingPage.menuText = 'Updated Menu';
517
- const updatedPage = await apiClient.pageMethods.savePage(existingPage, guid);
518
-
519
- // Save with batch processing
520
- const batchId = await apiClient.pageMethods.savePage(newPage, guid, true);
521
- console.log('Batch created with ID:', batchId);
522
- ```
523
-
524
- **Error Handling:**
525
- - Throws `Exception` when validation fails or save operation fails
526
-
527
- ### savePageSecurity
528
-
529
- Updates security settings for a specific page.
530
-
531
- | Parameter | Type | Required | Description |
532
- |-----------|------|----------|-------------|
533
- | `pageID` | `number` | Yes | The page ID |
534
- | `security` | `PageSecurity` | Yes | Security configuration to apply |
535
- | `guid` | `string` | Yes | Current website GUID |
536
-
537
- **Returns:** `PageSecurity` - Updated security configuration
538
-
539
- **Usage Example:**
540
- ```typescript
541
- // Make page public
542
- const publicSecurity = {
543
- isPublic: true,
544
- allowedRoles: [],
545
- requiresAuthentication: false
546
- };
547
-
548
- const updatedSecurity = await apiClient.pageMethods.savePageSecurity(
549
- 123,
550
- publicSecurity,
551
- guid
552
- );
553
-
554
- // Restrict page to specific roles
555
- const restrictedSecurity = {
556
- isPublic: false,
557
- allowedRoles: ['Administrator', 'Editor'],
558
- requiresAuthentication: true
559
- };
560
-
561
- await apiClient.pageMethods.savePageSecurity(123, restrictedSecurity, guid);
562
- ```
563
-
564
- **Error Handling:**
565
- - Throws `Exception` when page not found or security update fails
566
-
567
- ### movePageItem
568
-
569
- Moves a page item within the page hierarchy.
570
-
571
- | Parameter | Type | Required | Description |
572
- |-----------|------|----------|-------------|
573
- | `pageID` | `number` | Yes | The page ID to move |
574
- | `parentPageID` | `number` | Yes | The new parent page ID (0 for root level) |
575
- | `sortOrder` | `number` | Yes | The sort order within the parent |
576
- | `guid` | `string` | Yes | Current website GUID |
577
-
578
- **Returns:** `PageItem` - Updated page object
579
-
580
- **Usage Example:**
581
- ```typescript
582
- // Move page to root level
583
- const movedPage = await apiClient.pageMethods.movePageItem(123, 0, 1, guid);
584
-
585
- // Move page under another page
586
- const childPage = await apiClient.pageMethods.movePageItem(123, 456, 2, guid);
587
-
588
- // Reorder pages
589
- const reorderPages = async (parentID, pageIDs) => {
590
- for (let i = 0; i < pageIDs.length; i++) {
591
- await apiClient.pageMethods.movePageItem(
592
- pageIDs[i],
593
- parentID,
594
- i + 1,
595
- guid
596
- );
597
- }
598
- };
599
- ```
600
-
601
- **Error Handling:**
602
- - Throws `Exception` when page not found or move operation fails
603
-
604
- ### deletePage
605
-
606
- Deletes a page by its ID.
607
-
608
- | Parameter | Type | Required | Description |
609
- |-----------|------|----------|-------------|
610
- | `pageID` | `number` | Yes | The page ID to delete |
611
- | `guid` | `string` | Yes | Current website GUID |
612
-
613
- **Returns:** `string` - Confirmation message of successful deletion
614
-
615
- **Usage Example:**
616
- ```typescript
617
- try {
618
- const result = await apiClient.pageMethods.deletePage(123, guid);
619
- console.log(result); // "Page deleted successfully"
620
- } catch (error) {
621
- if (error.message.includes('has children')) {
622
- console.log('Cannot delete page: has child pages');
623
- } else if (error.message.includes('referenced')) {
624
- console.log('Cannot delete page: referenced by other content');
625
- } else {
626
- console.error('Failed to delete page:', error.message);
627
- }
628
- }
629
-
630
- // Safe page deletion with checks
631
- const safeDeletePage = async (pageID) => {
632
- try {
633
- const page = await apiClient.pageMethods.getPage(pageID, guid);
634
-
635
- // Check if page has children
636
- if (page.children && page.children.length > 0) {
637
- console.log(`Cannot delete page "${page.title}": has child pages`);
638
- return false;
639
- }
640
-
641
- // Perform deletion
642
- await apiClient.pageMethods.deletePage(pageID, guid);
643
- console.log('Page deleted successfully');
644
- return true;
645
- } catch (error) {
646
- console.error('Failed to delete page:', error.message);
647
- return false;
648
- }
649
- };
650
- ```
651
-
652
- **Error Handling:**
653
- - Throws `Exception` when page not found, has children, or deletion fails
654
-
655
- **Note:** Pages cannot be deleted if they have child pages or are referenced by other content.
656
-
657
- ---
658
-
659
- ## Navigation
660
- - [← Back to Main Documentation](../README.md)
661
- - [Authentication & Setup](./auth.md)
662
- - [AssetMethods](./asset-methods.md)
663
- - [BatchMethods](./batch-methods.md)
664
- - [ContainerMethods](./container-methods.md)
665
- - [ContentMethods](./content-methods.md)
666
- - [InstanceMethods](./instance-methods.md)
667
- - [InstanceUserMethods](./instance-user-methods.md)
668
- - [ModelMethods](./model-methods.md)
669
- - [ServerUserMethods](./server-user-methods.md)
670
- - [WebhookMethods](./webhook-methods.md)
1
+ # Agility CMS & Management API TypeScript SDK
2
+
3
+ ## PageMethods
4
+
5
+ This class provides comprehensive page management operations for Agility CMS. Pages are the structural foundation of your website, defining the navigation hierarchy and content organization.
6
+
7
+ **Important Notes:**
8
+ - Pages define the structure and navigation of your website
9
+ - Each page has a unique path and can contain multiple content zones
10
+ - Pages support workflow states (published, unpublished, approved, etc.)
11
+ - Page operations support both immediate return and batch processing
12
+ - Page templates define the layout and content zones available
13
+ - Pages can be organized in a hierarchical structure with parent-child relationships
14
+
15
+ ### Function List
16
+ - [getPage](#getpage) - Retrieves a specific page by ID
17
+ - [getPageByPath](#getpagebypath) - Retrieves a page by its URL path
18
+ - [getPageHistory](#getpagehistory) - Retrieves version history for a page
19
+ - [getPageComments](#getpagecomments) - Retrieves comments for a page
20
+ - [getPageList](#getpagelist) - Retrieves list of pages with filtering
21
+ - [getPageListByPageTemplateID](#getpagelistbypagetemplateid) - Retrieves pages using specific template
22
+ - [getPageListByPage](#getpagelistbypage) - Retrieves pages with pagination
23
+ - [getPageListByPageAndPageTemplateID](#getpagelistbypageandpagetemplateid) - Retrieves paginated pages by template
24
+ - [getPageTree](#getpagetree) - Retrieves complete page hierarchy
25
+ - [getPageTemplateList](#getpagetemplatelist) - Retrieves available page templates
26
+ - [getPageSecurity](#getpagesecurity) - Retrieves security settings for a page
27
+ - [getPageItemTemplateList](#getpageitemtemplatelist) - Retrieves page item templates
28
+ - [getPageContentZones](#getpagecontentzones) - Retrieves content zones for a page
29
+ - [savePage](#savepage) - Creates or updates a page
30
+ - [savePageSecurity](#savepagesecurity) - Updates page security settings
31
+ - [movePageItem](#movepageitem) - Moves a page item within the hierarchy
32
+ - [deletePage](#deletepage) - Deletes a page by ID
33
+ - [batchWorkflowPages](#batchworkflowpages) - Batch workflow operation on multiple pages
34
+
35
+ ---
36
+
37
+ ### getPage
38
+
39
+ Retrieves a specific page by its unique ID.
40
+
41
+ | Parameter | Type | Required | Description |
42
+ |-----------|------|----------|-------------|
43
+ | `pageID` | `number` | Yes | The page ID to retrieve |
44
+ | `guid` | `string` | Yes | Current website GUID |
45
+
46
+ **Returns:** `PageItem` - Complete page object with content zones and metadata
47
+
48
+ **Usage Example:**
49
+ ```typescript
50
+ const page = await apiClient.pageMethods.getPage(123, guid);
51
+ console.log('Page title:', page.title);
52
+ console.log('Page path:', page.path);
53
+ console.log('Page template:', page.templateName);
54
+ console.log('Last modified:', page.modifiedDate);
55
+ console.log('Content zones:', page.contentZones.length);
56
+
57
+ // Display content zones
58
+ page.contentZones.forEach(zone => {
59
+ console.log(`Zone: ${zone.name}`);
60
+ console.log(` Items: ${zone.items.length}`);
61
+ });
62
+ ```
63
+
64
+ **Error Handling:**
65
+ - Throws `Exception` when page not found
66
+
67
+ ### getPageByPath
68
+
69
+ Retrieves a page by its URL path.
70
+
71
+ | Parameter | Type | Required | Description |
72
+ |-----------|------|----------|-------------|
73
+ | `path` | `string` | Yes | The URL path of the page (e.g., '/about-us') |
74
+ | `guid` | `string` | Yes | Current website GUID |
75
+
76
+ **Returns:** `PageItem` - Page object matching the path
77
+
78
+ **Usage Example:**
79
+ ```typescript
80
+ const page = await apiClient.pageMethods.getPageByPath('/about-us', guid);
81
+ if (page) {
82
+ console.log('Page found:', page.title);
83
+ console.log('Page ID:', page.pageID);
84
+ console.log('Template:', page.templateName);
85
+ } else {
86
+ console.log('Page not found at path');
87
+ }
88
+
89
+ // Validate page paths
90
+ const validatePath = async (path) => {
91
+ try {
92
+ const page = await apiClient.pageMethods.getPageByPath(path, guid);
93
+ return page !== null;
94
+ } catch (error) {
95
+ return false;
96
+ }
97
+ };
98
+
99
+ if (await validatePath('/blog')) {
100
+ console.log('Blog page exists');
101
+ }
102
+ ```
103
+
104
+ **Error Handling:**
105
+ - Throws `Exception` when page not found or path invalid
106
+
107
+ ### getPageHistory
108
+
109
+ Retrieves the version history for a specific page.
110
+
111
+ | Parameter | Type | Required | Description |
112
+ |-----------|------|----------|-------------|
113
+ | `pageID` | `number` | Yes | The page ID |
114
+ | `guid` | `string` | Yes | Current website GUID |
115
+
116
+ **Returns:** `PageHistory[]` - Array of historical versions
117
+
118
+ **Usage Example:**
119
+ ```typescript
120
+ const history = await apiClient.pageMethods.getPageHistory(123, guid);
121
+ console.log(`Found ${history.length} historical versions`);
122
+
123
+ // Display version details
124
+ history.forEach((version, index) => {
125
+ console.log(`Version ${index + 1}:`);
126
+ console.log(` Date: ${version.modifiedDate}`);
127
+ console.log(` User: ${version.modifiedByUser}`);
128
+ console.log(` Action: ${version.action}`);
129
+ console.log(` Notes: ${version.notes}`);
130
+ });
131
+
132
+ // Get latest version
133
+ const latestVersion = history[0];
134
+ console.log('Latest change:', latestVersion.action);
135
+ ```
136
+
137
+ **Error Handling:**
138
+ - Throws `Exception` when page not found
139
+
140
+ ### getPageComments
141
+
142
+ Retrieves all comments for a specific page.
143
+
144
+ | Parameter | Type | Required | Description |
145
+ |-----------|------|----------|-------------|
146
+ | `pageID` | `number` | Yes | The page ID |
147
+ | `guid` | `string` | Yes | Current website GUID |
148
+
149
+ **Returns:** `ItemComments[]` - Array of page comments
150
+
151
+ **Usage Example:**
152
+ ```typescript
153
+ const comments = await apiClient.pageMethods.getPageComments(123, guid);
154
+ console.log(`Found ${comments.length} comments`);
155
+
156
+ // Display comments
157
+ comments.forEach(comment => {
158
+ console.log(`${comment.userName} (${comment.date}):`);
159
+ console.log(` ${comment.comment}`);
160
+ console.log(` Status: ${comment.status}`);
161
+ });
162
+ ```
163
+
164
+ **Error Handling:**
165
+ - Throws `Exception` when page not found
166
+
167
+ ### getPageList
168
+
169
+ Retrieves a list of pages with optional filtering and sorting.
170
+
171
+ | Parameter | Type | Required | Description |
172
+ |-----------|------|----------|-------------|
173
+ | `listParams` | `ListParams` | Yes | Filtering and sorting parameters |
174
+ | `guid` | `string` | Yes | Current website GUID |
175
+
176
+ **Returns:** `PageItem[]` - Array of page items
177
+
178
+ **Usage Example:**
179
+ ```typescript
180
+ // Get all pages
181
+ const allPages = await apiClient.pageMethods.getPageList({}, guid);
182
+
183
+ // Get pages with filtering
184
+ const params = {
185
+ filter: 'title contains "blog"',
186
+ sort: 'modifiedDate desc',
187
+ take: 10,
188
+ skip: 0
189
+ };
190
+ const filteredPages = await apiClient.pageMethods.getPageList(params, guid);
191
+
192
+ // Get recently modified pages
193
+ const recentPages = await apiClient.pageMethods.getPageList({
194
+ sort: 'modifiedDate desc',
195
+ take: 5
196
+ }, guid);
197
+ ```
198
+
199
+ **Error Handling:**
200
+ - Throws `Exception` when retrieval fails
201
+
202
+ ### getPageListByPageTemplateID
203
+
204
+ Retrieves pages that use a specific page template.
205
+
206
+ | Parameter | Type | Required | Description |
207
+ |-----------|------|----------|-------------|
208
+ | `pageTemplateID` | `number` | Yes | The page template ID |
209
+ | `guid` | `string` | Yes | Current website GUID |
210
+
211
+ **Returns:** `PageItem[]` - Array of pages using the template
212
+
213
+ **Usage Example:**
214
+ ```typescript
215
+ const pages = await apiClient.pageMethods.getPageListByPageTemplateID(456, guid);
216
+ console.log(`Found ${pages.length} pages using this template`);
217
+
218
+ // Group by status
219
+ const pagesByStatus = pages.reduce((acc, page) => {
220
+ const status = page.state || 'draft';
221
+ if (!acc[status]) acc[status] = [];
222
+ acc[status].push(page);
223
+ return acc;
224
+ }, {});
225
+
226
+ console.log('Pages by status:', pagesByStatus);
227
+ ```
228
+
229
+ **Error Handling:**
230
+ - Throws `Exception` when template not found
231
+
232
+ ### getPageListByPage
233
+
234
+ Retrieves pages with pagination support.
235
+
236
+ | Parameter | Type | Required | Description |
237
+ |-----------|------|----------|-------------|
238
+ | `pageSize` | `number` | Yes | Number of pages per page |
239
+ | `pageNumber` | `number` | Yes | Page number (1-based) |
240
+ | `guid` | `string` | Yes | Current website GUID |
241
+
242
+ **Returns:** `PageItem[]` - Array of pages for the specified page
243
+
244
+ **Usage Example:**
245
+ ```typescript
246
+ const pageSize = 20;
247
+ const pageNumber = 1;
248
+
249
+ const firstPage = await apiClient.pageMethods.getPageListByPage(
250
+ pageSize,
251
+ pageNumber,
252
+ guid
253
+ );
254
+ console.log(`Page ${pageNumber}: ${firstPage.length} pages`);
255
+
256
+ // Paginated processing
257
+ let currentPage = 1;
258
+ let hasMore = true;
259
+ while (hasMore) {
260
+ const pageItems = await apiClient.pageMethods.getPageListByPage(
261
+ pageSize,
262
+ currentPage,
263
+ guid
264
+ );
265
+
266
+ if (pageItems.length === 0) {
267
+ hasMore = false;
268
+ } else {
269
+ console.log(`Processing page ${currentPage} with ${pageItems.length} pages`);
270
+ // Process pages...
271
+ currentPage++;
272
+ }
273
+ }
274
+ ```
275
+
276
+ **Error Handling:**
277
+ - Throws `Exception` when retrieval fails
278
+
279
+ ### getPageListByPageAndPageTemplateID
280
+
281
+ Retrieves paginated pages filtered by template.
282
+
283
+ | Parameter | Type | Required | Description |
284
+ |-----------|------|----------|-------------|
285
+ | `pageTemplateID` | `number` | Yes | The page template ID |
286
+ | `pageSize` | `number` | Yes | Number of pages per page |
287
+ | `pageNumber` | `number` | Yes | Page number (1-based) |
288
+ | `guid` | `string` | Yes | Current website GUID |
289
+
290
+ **Returns:** `PageItem[]` - Array of pages for the specified page and template
291
+
292
+ **Usage Example:**
293
+ ```typescript
294
+ const templatePages = await apiClient.pageMethods.getPageListByPageAndPageTemplateID(
295
+ 456,
296
+ 10,
297
+ 1,
298
+ guid
299
+ );
300
+ console.log(`Template pages: ${templatePages.length}`);
301
+ ```
302
+
303
+ **Error Handling:**
304
+ - Throws `Exception` when template not found
305
+
306
+ ### getPageTree
307
+
308
+ Retrieves the complete page hierarchy as a tree structure.
309
+
310
+ | Parameter | Type | Required | Description |
311
+ |-----------|------|----------|-------------|
312
+ | `guid` | `string` | Yes | Current website GUID |
313
+
314
+ **Returns:** `PageItem[]` - Hierarchical array of pages with parent-child relationships
315
+
316
+ **Usage Example:**
317
+ ```typescript
318
+ const pageTree = await apiClient.pageMethods.getPageTree(guid);
319
+ console.log(`Root pages: ${pageTree.length}`);
320
+
321
+ // Display page hierarchy
322
+ const displayPageTree = (pages, level = 0) => {
323
+ pages.forEach(page => {
324
+ const indent = ' '.repeat(level);
325
+ console.log(`${indent}${page.title} (${page.path})`);
326
+
327
+ if (page.children && page.children.length > 0) {
328
+ displayPageTree(page.children, level + 1);
329
+ }
330
+ });
331
+ };
332
+
333
+ displayPageTree(pageTree);
334
+
335
+ // Find page by path in tree
336
+ const findPageInTree = (pages, targetPath) => {
337
+ for (const page of pages) {
338
+ if (page.path === targetPath) {
339
+ return page;
340
+ }
341
+ if (page.children) {
342
+ const found = findPageInTree(page.children, targetPath);
343
+ if (found) return found;
344
+ }
345
+ }
346
+ return null;
347
+ };
348
+
349
+ const aboutPage = findPageInTree(pageTree, '/about-us');
350
+ ```
351
+
352
+ **Error Handling:**
353
+ - Throws `Exception` when retrieval fails
354
+
355
+ ### getPageTemplateList
356
+
357
+ Retrieves all available page templates.
358
+
359
+ | Parameter | Type | Required | Description |
360
+ |-----------|------|----------|-------------|
361
+ | `guid` | `string` | Yes | Current website GUID |
362
+
363
+ **Returns:** `PageTemplate[]` - Array of available page templates
364
+
365
+ **Usage Example:**
366
+ ```typescript
367
+ const templates = await apiClient.pageMethods.getPageTemplateList(guid);
368
+ console.log(`Available templates: ${templates.length}`);
369
+
370
+ // Display template information
371
+ templates.forEach(template => {
372
+ console.log(`Template: ${template.name}`);
373
+ console.log(` Description: ${template.description}`);
374
+ console.log(` Content Zones: ${template.contentZones.length}`);
375
+ console.log(` Template File: ${template.templateFile}`);
376
+ });
377
+
378
+ // Create template dropdown options
379
+ const templateOptions = templates.map(template => ({
380
+ value: template.id,
381
+ label: template.name,
382
+ description: template.description
383
+ }));
384
+ ```
385
+
386
+ **Error Handling:**
387
+ - Throws `Exception` when retrieval fails
388
+
389
+ ### getPageSecurity
390
+
391
+ Retrieves security settings for a specific page.
392
+
393
+ | Parameter | Type | Required | Description |
394
+ |-----------|------|----------|-------------|
395
+ | `pageID` | `number` | Yes | The page ID |
396
+ | `guid` | `string` | Yes | Current website GUID |
397
+
398
+ **Returns:** `PageSecurity` - Page security configuration
399
+
400
+ **Usage Example:**
401
+ ```typescript
402
+ const security = await apiClient.pageMethods.getPageSecurity(123, guid);
403
+ console.log('Page security settings:', security);
404
+
405
+ // Check if page is public
406
+ if (security.isPublic) {
407
+ console.log('Page is publicly accessible');
408
+ } else {
409
+ console.log('Page has restricted access');
410
+ console.log('Allowed roles:', security.allowedRoles);
411
+ }
412
+ ```
413
+
414
+ **Error Handling:**
415
+ - Throws `Exception` when page not found
416
+
417
+ ### getPageItemTemplateList
418
+
419
+ Retrieves available page item templates.
420
+
421
+ | Parameter | Type | Required | Description |
422
+ |-----------|------|----------|-------------|
423
+ | `guid` | `string` | Yes | Current website GUID |
424
+
425
+ **Returns:** `PageItemTemplate[]` - Array of page item templates
426
+
427
+ **Usage Example:**
428
+ ```typescript
429
+ const itemTemplates = await apiClient.pageMethods.getPageItemTemplateList(guid);
430
+ console.log(`Available item templates: ${itemTemplates.length}`);
431
+
432
+ // Display template types
433
+ itemTemplates.forEach(template => {
434
+ console.log(`Template: ${template.name}`);
435
+ console.log(` Type: ${template.type}`);
436
+ console.log(` Description: ${template.description}`);
437
+ });
438
+ ```
439
+
440
+ **Error Handling:**
441
+ - Throws `Exception` when retrieval fails
442
+
443
+ ### getPageContentZones
444
+
445
+ Retrieves content zones for a specific page.
446
+
447
+ | Parameter | Type | Required | Description |
448
+ |-----------|------|----------|-------------|
449
+ | `pageID` | `number` | Yes | The page ID |
450
+ | `guid` | `string` | Yes | Current website GUID |
451
+
452
+ **Returns:** `ContentZone[]` - Array of content zones
453
+
454
+ **Usage Example:**
455
+ ```typescript
456
+ const zones = await apiClient.pageMethods.getPageContentZones(123, guid);
457
+ console.log(`Page has ${zones.length} content zones`);
458
+
459
+ // Display zone information
460
+ zones.forEach(zone => {
461
+ console.log(`Zone: ${zone.name}`);
462
+ console.log(` Items: ${zone.items.length}`);
463
+ console.log(` Template: ${zone.templateName}`);
464
+
465
+ // Display zone items
466
+ zone.items.forEach(item => {
467
+ console.log(` Item: ${item.title} (${item.type})`);
468
+ });
469
+ });
470
+ ```
471
+
472
+ **Error Handling:**
473
+ - Throws `Exception` when page not found
474
+
475
+ ### savePage
476
+
477
+ Creates a new page or updates an existing one.
478
+
479
+ | Parameter | Type | Required | Description |
480
+ |-----------|------|----------|-------------|
481
+ | `page` | `PageItem` | Yes | Page object to save |
482
+ | `guid` | `string` | Yes | Current website GUID |
483
+ | `returnBatchId` | `boolean` | No | If `true`, returns batch ID immediately. If `false` (default), waits for completion |
484
+
485
+ **Returns:** `PageItem | number` - Saved page (if `returnBatchId` is false) or batch ID (if true)
486
+
487
+ **Usage Example:**
488
+ ```typescript
489
+ // Create a new page
490
+ const newPage = {
491
+ title: 'New About Page',
492
+ path: '/about-us',
493
+ templateName: 'About Template',
494
+ parentPageID: null, // Root level page
495
+ menuText: 'About Us',
496
+ isVisible: true,
497
+ contentZones: [
498
+ {
499
+ name: 'MainContent',
500
+ items: [
501
+ {
502
+ type: 'content',
503
+ contentID: 456,
504
+ title: 'About Us Content'
505
+ }
506
+ ]
507
+ }
508
+ ]
509
+ };
510
+
511
+ const savedPage = await apiClient.pageMethods.savePage(newPage, guid);
512
+ console.log('Page created with ID:', savedPage.pageID);
513
+
514
+ // Update existing page
515
+ const existingPage = await apiClient.pageMethods.getPage(123, guid);
516
+ existingPage.title = 'Updated Page Title';
517
+ existingPage.menuText = 'Updated Menu';
518
+ const updatedPage = await apiClient.pageMethods.savePage(existingPage, guid);
519
+
520
+ // Save with batch processing
521
+ const batchId = await apiClient.pageMethods.savePage(newPage, guid, true);
522
+ console.log('Batch created with ID:', batchId);
523
+ ```
524
+
525
+ **Error Handling:**
526
+ - Throws `Exception` when validation fails or save operation fails
527
+
528
+ ### savePageSecurity
529
+
530
+ Updates security settings for a specific page.
531
+
532
+ | Parameter | Type | Required | Description |
533
+ |-----------|------|----------|-------------|
534
+ | `pageID` | `number` | Yes | The page ID |
535
+ | `security` | `PageSecurity` | Yes | Security configuration to apply |
536
+ | `guid` | `string` | Yes | Current website GUID |
537
+
538
+ **Returns:** `PageSecurity` - Updated security configuration
539
+
540
+ **Usage Example:**
541
+ ```typescript
542
+ // Make page public
543
+ const publicSecurity = {
544
+ isPublic: true,
545
+ allowedRoles: [],
546
+ requiresAuthentication: false
547
+ };
548
+
549
+ const updatedSecurity = await apiClient.pageMethods.savePageSecurity(
550
+ 123,
551
+ publicSecurity,
552
+ guid
553
+ );
554
+
555
+ // Restrict page to specific roles
556
+ const restrictedSecurity = {
557
+ isPublic: false,
558
+ allowedRoles: ['Administrator', 'Editor'],
559
+ requiresAuthentication: true
560
+ };
561
+
562
+ await apiClient.pageMethods.savePageSecurity(123, restrictedSecurity, guid);
563
+ ```
564
+
565
+ **Error Handling:**
566
+ - Throws `Exception` when page not found or security update fails
567
+
568
+ ### movePageItem
569
+
570
+ Moves a page item within the page hierarchy.
571
+
572
+ | Parameter | Type | Required | Description |
573
+ |-----------|------|----------|-------------|
574
+ | `pageID` | `number` | Yes | The page ID to move |
575
+ | `parentPageID` | `number` | Yes | The new parent page ID (0 for root level) |
576
+ | `sortOrder` | `number` | Yes | The sort order within the parent |
577
+ | `guid` | `string` | Yes | Current website GUID |
578
+
579
+ **Returns:** `PageItem` - Updated page object
580
+
581
+ **Usage Example:**
582
+ ```typescript
583
+ // Move page to root level
584
+ const movedPage = await apiClient.pageMethods.movePageItem(123, 0, 1, guid);
585
+
586
+ // Move page under another page
587
+ const childPage = await apiClient.pageMethods.movePageItem(123, 456, 2, guid);
588
+
589
+ // Reorder pages
590
+ const reorderPages = async (parentID, pageIDs) => {
591
+ for (let i = 0; i < pageIDs.length; i++) {
592
+ await apiClient.pageMethods.movePageItem(
593
+ pageIDs[i],
594
+ parentID,
595
+ i + 1,
596
+ guid
597
+ );
598
+ }
599
+ };
600
+ ```
601
+
602
+ **Error Handling:**
603
+ - Throws `Exception` when page not found or move operation fails
604
+
605
+ ### deletePage
606
+
607
+ Deletes a page by its ID.
608
+
609
+ | Parameter | Type | Required | Description |
610
+ |-----------|------|----------|-------------|
611
+ | `pageID` | `number` | Yes | The page ID to delete |
612
+ | `guid` | `string` | Yes | Current website GUID |
613
+
614
+ **Returns:** `string` - Confirmation message of successful deletion
615
+
616
+ **Usage Example:**
617
+ ```typescript
618
+ try {
619
+ const result = await apiClient.pageMethods.deletePage(123, guid);
620
+ console.log(result); // "Page deleted successfully"
621
+ } catch (error) {
622
+ if (error.message.includes('has children')) {
623
+ console.log('Cannot delete page: has child pages');
624
+ } else if (error.message.includes('referenced')) {
625
+ console.log('Cannot delete page: referenced by other content');
626
+ } else {
627
+ console.error('Failed to delete page:', error.message);
628
+ }
629
+ }
630
+
631
+ // Safe page deletion with checks
632
+ const safeDeletePage = async (pageID) => {
633
+ try {
634
+ const page = await apiClient.pageMethods.getPage(pageID, guid);
635
+
636
+ // Check if page has children
637
+ if (page.children && page.children.length > 0) {
638
+ console.log(`Cannot delete page "${page.title}": has child pages`);
639
+ return false;
640
+ }
641
+
642
+ // Perform deletion
643
+ await apiClient.pageMethods.deletePage(pageID, guid);
644
+ console.log('Page deleted successfully');
645
+ return true;
646
+ } catch (error) {
647
+ console.error('Failed to delete page:', error.message);
648
+ return false;
649
+ }
650
+ };
651
+ ```
652
+
653
+ **Error Handling:**
654
+ - Throws `Exception` when page not found, has children, or deletion fails
655
+
656
+ **Note:** Pages cannot be deleted if they have child pages or are referenced by other content.
657
+
658
+ ---
659
+
660
+ ### batchWorkflowPages
661
+
662
+ Performs a batch workflow operation on multiple pages. Supports Publish, Unpublish, Approve, Decline, and RequestApproval operations.
663
+
664
+ | Parameter | Type | Required | Description |
665
+ |-----------|------|----------|-------------|
666
+ | `pageIDs` | `number[]` | Yes | Array of page IDs to process |
667
+ | `guid` | `string` | Yes | Current website GUID |
668
+ | `locale` | `string` | Yes | The locale code |
669
+ | `operation` | `WorkflowOperationType` | Yes | The workflow operation (Publish, Unpublish, Approve, Decline, RequestApproval) |
670
+ | `returnBatchId` | `boolean` | No | If `true`, returns batch ID immediately without waiting |
671
+
672
+ **Returns:** `Promise<number[]>` - Array of page IDs that were processed
673
+
674
+ **Usage Example:**
675
+ ```typescript
676
+ import { WorkflowOperationType } from '@agility/management-sdk';
677
+
678
+ // Publish multiple pages
679
+ const pageIDs = [201, 202, 203];
680
+ const publishedPageIDs = await client.pageMethods.batchWorkflowPages(
681
+ pageIDs,
682
+ 'your-guid',
683
+ 'en-us',
684
+ WorkflowOperationType.Publish
685
+ );
686
+ console.log('Published page IDs:', publishedPageIDs);
687
+
688
+ // Unpublish multiple pages
689
+ const unpublishedPageIDs = await client.pageMethods.batchWorkflowPages(
690
+ pageIDs,
691
+ 'your-guid',
692
+ 'en-us',
693
+ WorkflowOperationType.Unpublish
694
+ );
695
+
696
+ // Request approval for multiple pages
697
+ const approvalRequestedPageIDs = await client.pageMethods.batchWorkflowPages(
698
+ pageIDs,
699
+ 'your-guid',
700
+ 'en-us',
701
+ WorkflowOperationType.RequestApproval
702
+ );
703
+
704
+ // Approve multiple pages
705
+ const approvedPageIDs = await client.pageMethods.batchWorkflowPages(
706
+ pageIDs,
707
+ 'your-guid',
708
+ 'en-us',
709
+ WorkflowOperationType.Approve
710
+ );
711
+
712
+ // Decline multiple pages
713
+ const declinedPageIDs = await client.pageMethods.batchWorkflowPages(
714
+ pageIDs,
715
+ 'your-guid',
716
+ 'en-us',
717
+ WorkflowOperationType.Decline
718
+ );
719
+ ```
720
+
721
+ **Error Handling:**
722
+ - Throws `Exception` when batch operation fails
723
+
724
+ ---
725
+
726
+ ## Navigation
727
+ - [← Back to Main Documentation](../README.md)
728
+ - [Authentication & Setup](./auth.md)
729
+ - [AssetMethods](./asset-methods.md)
730
+ - [BatchMethods](./batch-methods.md)
731
+ - [ContainerMethods](./container-methods.md)
732
+ - [ContentMethods](./content-methods.md)
733
+ - [InstanceMethods](./instance-methods.md)
734
+ - [InstanceUserMethods](./instance-user-methods.md)
735
+ - [ModelMethods](./model-methods.md)
736
+ - [ServerUserMethods](./server-user-methods.md)
737
+ - [WebhookMethods](./webhook-methods.md)
671
738
  - [Multi-Instance Operations](./multi-instance-operations.md)