tm1npm 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/.env.example +16 -0
  2. package/.eslintrc.js +28 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
  5. package/.github/ISSUE_TEMPLATE/question.md +24 -0
  6. package/.github/workflows/publish-npm.yml +53 -0
  7. package/.github/workflows/test-on-tag.yml +172 -0
  8. package/DEVELOPMENT_GUIDE.md +587 -0
  9. package/LICENSE +21 -0
  10. package/README.md +580 -0
  11. package/jest.ci.config.js +83 -0
  12. package/jest.config.js +68 -0
  13. package/lib/exceptions/TM1Exception.d.ts +17 -0
  14. package/lib/exceptions/TM1Exception.d.ts.map +1 -0
  15. package/lib/exceptions/TM1Exception.js +36 -0
  16. package/lib/exceptions/TM1RestException.d.ts +10 -0
  17. package/lib/exceptions/TM1RestException.d.ts.map +1 -0
  18. package/lib/exceptions/TM1RestException.js +17 -0
  19. package/lib/exceptions/TM1TimeoutException.d.ts +9 -0
  20. package/lib/exceptions/TM1TimeoutException.d.ts.map +1 -0
  21. package/lib/exceptions/TM1TimeoutException.js +16 -0
  22. package/lib/index.d.ts +41 -0
  23. package/lib/index.d.ts.map +1 -0
  24. package/lib/index.js +132 -0
  25. package/lib/objects/Annotation.d.ts +36 -0
  26. package/lib/objects/Annotation.d.ts.map +1 -0
  27. package/lib/objects/Annotation.js +134 -0
  28. package/lib/objects/Application.d.ts +67 -0
  29. package/lib/objects/Application.d.ts.map +1 -0
  30. package/lib/objects/Application.js +125 -0
  31. package/lib/objects/Axis.d.ts +36 -0
  32. package/lib/objects/Axis.d.ts.map +1 -0
  33. package/lib/objects/Axis.js +103 -0
  34. package/lib/objects/Chore.d.ts +43 -0
  35. package/lib/objects/Chore.d.ts.map +1 -0
  36. package/lib/objects/Chore.js +129 -0
  37. package/lib/objects/ChoreFrequency.d.ts +23 -0
  38. package/lib/objects/ChoreFrequency.d.ts.map +1 -0
  39. package/lib/objects/ChoreFrequency.js +61 -0
  40. package/lib/objects/ChoreStartTime.d.ts +15 -0
  41. package/lib/objects/ChoreStartTime.d.ts.map +1 -0
  42. package/lib/objects/ChoreStartTime.js +85 -0
  43. package/lib/objects/ChoreTask.d.ts +28 -0
  44. package/lib/objects/ChoreTask.d.ts.map +1 -0
  45. package/lib/objects/ChoreTask.js +66 -0
  46. package/lib/objects/Cube.d.ts +26 -0
  47. package/lib/objects/Cube.d.ts.map +1 -0
  48. package/lib/objects/Cube.js +109 -0
  49. package/lib/objects/Dimension.d.ts +26 -0
  50. package/lib/objects/Dimension.d.ts.map +1 -0
  51. package/lib/objects/Dimension.js +86 -0
  52. package/lib/objects/Element.d.ts +35 -0
  53. package/lib/objects/Element.d.ts.map +1 -0
  54. package/lib/objects/Element.js +115 -0
  55. package/lib/objects/ElementAttribute.d.ts +28 -0
  56. package/lib/objects/ElementAttribute.d.ts.map +1 -0
  57. package/lib/objects/ElementAttribute.js +97 -0
  58. package/lib/objects/Git.d.ts +21 -0
  59. package/lib/objects/Git.d.ts.map +1 -0
  60. package/lib/objects/Git.js +49 -0
  61. package/lib/objects/GitCommit.d.ts +12 -0
  62. package/lib/objects/GitCommit.d.ts.map +1 -0
  63. package/lib/objects/GitCommit.js +26 -0
  64. package/lib/objects/GitPlan.d.ts +35 -0
  65. package/lib/objects/GitPlan.d.ts.map +1 -0
  66. package/lib/objects/GitPlan.js +78 -0
  67. package/lib/objects/GitRemote.d.ts +12 -0
  68. package/lib/objects/GitRemote.d.ts.map +1 -0
  69. package/lib/objects/GitRemote.js +26 -0
  70. package/lib/objects/Hierarchy.d.ts +47 -0
  71. package/lib/objects/Hierarchy.d.ts.map +1 -0
  72. package/lib/objects/Hierarchy.js +165 -0
  73. package/lib/objects/MDXView.d.ts +19 -0
  74. package/lib/objects/MDXView.d.ts.map +1 -0
  75. package/lib/objects/MDXView.js +67 -0
  76. package/lib/objects/NativeView.d.ts +39 -0
  77. package/lib/objects/NativeView.d.ts.map +1 -0
  78. package/lib/objects/NativeView.js +209 -0
  79. package/lib/objects/Process.d.ts +70 -0
  80. package/lib/objects/Process.d.ts.map +1 -0
  81. package/lib/objects/Process.js +210 -0
  82. package/lib/objects/ProcessDebugBreakpoint.d.ts +60 -0
  83. package/lib/objects/ProcessDebugBreakpoint.d.ts.map +1 -0
  84. package/lib/objects/ProcessDebugBreakpoint.js +168 -0
  85. package/lib/objects/ProcessParameter.d.ts +23 -0
  86. package/lib/objects/ProcessParameter.d.ts.map +1 -0
  87. package/lib/objects/ProcessParameter.js +55 -0
  88. package/lib/objects/ProcessVariable.d.ts +26 -0
  89. package/lib/objects/ProcessVariable.d.ts.map +1 -0
  90. package/lib/objects/ProcessVariable.js +63 -0
  91. package/lib/objects/Rules.d.ts +30 -0
  92. package/lib/objects/Rules.d.ts.map +1 -0
  93. package/lib/objects/Rules.js +103 -0
  94. package/lib/objects/Sandbox.d.ts +21 -0
  95. package/lib/objects/Sandbox.d.ts.map +1 -0
  96. package/lib/objects/Sandbox.js +64 -0
  97. package/lib/objects/Server.d.ts +27 -0
  98. package/lib/objects/Server.d.ts.map +1 -0
  99. package/lib/objects/Server.js +26 -0
  100. package/lib/objects/Subset.d.ts +44 -0
  101. package/lib/objects/Subset.d.ts.map +1 -0
  102. package/lib/objects/Subset.js +222 -0
  103. package/lib/objects/TM1Object.d.ts +8 -0
  104. package/lib/objects/TM1Object.d.ts.map +1 -0
  105. package/lib/objects/TM1Object.js +17 -0
  106. package/lib/objects/TM1Project.d.ts +74 -0
  107. package/lib/objects/TM1Project.d.ts.map +1 -0
  108. package/lib/objects/TM1Project.js +409 -0
  109. package/lib/objects/User.d.ts +42 -0
  110. package/lib/objects/User.d.ts.map +1 -0
  111. package/lib/objects/User.js +157 -0
  112. package/lib/objects/View.d.ts +19 -0
  113. package/lib/objects/View.d.ts.map +1 -0
  114. package/lib/objects/View.js +33 -0
  115. package/lib/objects/index.d.ts +30 -0
  116. package/lib/objects/index.d.ts.map +1 -0
  117. package/lib/objects/index.js +68 -0
  118. package/lib/services/AnnotationService.d.ts +17 -0
  119. package/lib/services/AnnotationService.d.ts.map +1 -0
  120. package/lib/services/AnnotationService.js +91 -0
  121. package/lib/services/ApplicationService.d.ts +21 -0
  122. package/lib/services/ApplicationService.d.ts.map +1 -0
  123. package/lib/services/ApplicationService.js +227 -0
  124. package/lib/services/AuditLogService.d.ts +15 -0
  125. package/lib/services/AuditLogService.d.ts.map +1 -0
  126. package/lib/services/AuditLogService.js +153 -0
  127. package/lib/services/CellService.d.ts +191 -0
  128. package/lib/services/CellService.d.ts.map +1 -0
  129. package/lib/services/CellService.js +597 -0
  130. package/lib/services/ChoreService.d.ts +24 -0
  131. package/lib/services/ChoreService.d.ts.map +1 -0
  132. package/lib/services/ChoreService.js +219 -0
  133. package/lib/services/ConfigurationService.d.ts +18 -0
  134. package/lib/services/ConfigurationService.d.ts.map +1 -0
  135. package/lib/services/ConfigurationService.js +60 -0
  136. package/lib/services/CubeService.d.ts +43 -0
  137. package/lib/services/CubeService.d.ts.map +1 -0
  138. package/lib/services/CubeService.js +296 -0
  139. package/lib/services/DimensionService.d.ts +21 -0
  140. package/lib/services/DimensionService.d.ts.map +1 -0
  141. package/lib/services/DimensionService.js +146 -0
  142. package/lib/services/ElementService.d.ts +132 -0
  143. package/lib/services/ElementService.d.ts.map +1 -0
  144. package/lib/services/ElementService.js +579 -0
  145. package/lib/services/FileService.d.ts +14 -0
  146. package/lib/services/FileService.d.ts.map +1 -0
  147. package/lib/services/FileService.js +65 -0
  148. package/lib/services/GitService.d.ts +23 -0
  149. package/lib/services/GitService.d.ts.map +1 -0
  150. package/lib/services/GitService.js +225 -0
  151. package/lib/services/HierarchyService.d.ts +32 -0
  152. package/lib/services/HierarchyService.d.ts.map +1 -0
  153. package/lib/services/HierarchyService.js +235 -0
  154. package/lib/services/JobService.d.ts +13 -0
  155. package/lib/services/JobService.d.ts.map +1 -0
  156. package/lib/services/JobService.js +83 -0
  157. package/lib/services/LoggerService.d.ts +16 -0
  158. package/lib/services/LoggerService.d.ts.map +1 -0
  159. package/lib/services/LoggerService.js +101 -0
  160. package/lib/services/ManageService.d.ts +47 -0
  161. package/lib/services/ManageService.d.ts.map +1 -0
  162. package/lib/services/ManageService.js +221 -0
  163. package/lib/services/MessageLogService.d.ts +13 -0
  164. package/lib/services/MessageLogService.d.ts.map +1 -0
  165. package/lib/services/MessageLogService.js +175 -0
  166. package/lib/services/MonitoringService.d.ts +29 -0
  167. package/lib/services/MonitoringService.d.ts.map +1 -0
  168. package/lib/services/MonitoringService.js +86 -0
  169. package/lib/services/ObjectService.d.ts +8 -0
  170. package/lib/services/ObjectService.d.ts.map +1 -0
  171. package/lib/services/ObjectService.js +20 -0
  172. package/lib/services/PowerBiService.d.ts +13 -0
  173. package/lib/services/PowerBiService.d.ts.map +1 -0
  174. package/lib/services/PowerBiService.js +52 -0
  175. package/lib/services/ProcessService.d.ts +57 -0
  176. package/lib/services/ProcessService.d.ts.map +1 -0
  177. package/lib/services/ProcessService.js +499 -0
  178. package/lib/services/RestService.d.ts +68 -0
  179. package/lib/services/RestService.d.ts.map +1 -0
  180. package/lib/services/RestService.js +166 -0
  181. package/lib/services/SandboxService.d.ts +28 -0
  182. package/lib/services/SandboxService.d.ts.map +1 -0
  183. package/lib/services/SandboxService.js +197 -0
  184. package/lib/services/SecurityService.d.ts +33 -0
  185. package/lib/services/SecurityService.d.ts.map +1 -0
  186. package/lib/services/SecurityService.js +249 -0
  187. package/lib/services/ServerService.d.ts +55 -0
  188. package/lib/services/ServerService.d.ts.map +1 -0
  189. package/lib/services/ServerService.js +247 -0
  190. package/lib/services/SessionService.d.ts +15 -0
  191. package/lib/services/SessionService.d.ts.map +1 -0
  192. package/lib/services/SessionService.js +68 -0
  193. package/lib/services/SubsetService.d.ts +13 -0
  194. package/lib/services/SubsetService.d.ts.map +1 -0
  195. package/lib/services/SubsetService.js +46 -0
  196. package/lib/services/TM1Service.d.ts +39 -0
  197. package/lib/services/TM1Service.d.ts.map +1 -0
  198. package/lib/services/TM1Service.js +94 -0
  199. package/lib/services/ThreadService.d.ts +15 -0
  200. package/lib/services/ThreadService.d.ts.map +1 -0
  201. package/lib/services/ThreadService.js +104 -0
  202. package/lib/services/TransactionLogService.d.ts +11 -0
  203. package/lib/services/TransactionLogService.d.ts.map +1 -0
  204. package/lib/services/TransactionLogService.js +124 -0
  205. package/lib/services/UserService.d.ts +14 -0
  206. package/lib/services/UserService.d.ts.map +1 -0
  207. package/lib/services/UserService.js +103 -0
  208. package/lib/services/ViewService.d.ts +30 -0
  209. package/lib/services/ViewService.d.ts.map +1 -0
  210. package/lib/services/ViewService.js +331 -0
  211. package/lib/services/index.d.ts +26 -0
  212. package/lib/services/index.d.ts.map +1 -0
  213. package/lib/services/index.js +56 -0
  214. package/lib/tests/100PercentParityCheck.test.d.ts +6 -0
  215. package/lib/tests/100PercentParityCheck.test.d.ts.map +1 -0
  216. package/lib/tests/100PercentParityCheck.test.js +143 -0
  217. package/lib/tests/basic.test.d.ts +6 -0
  218. package/lib/tests/basic.test.d.ts.map +1 -0
  219. package/lib/tests/basic.test.js +52 -0
  220. package/lib/tests/cellService.test.d.ts +6 -0
  221. package/lib/tests/cellService.test.d.ts.map +1 -0
  222. package/lib/tests/cellService.test.js +311 -0
  223. package/lib/tests/ciSetup.d.ts +6 -0
  224. package/lib/tests/ciSetup.d.ts.map +1 -0
  225. package/lib/tests/ciSetup.js +23 -0
  226. package/lib/tests/comprehensive.service.test.d.ts +6 -0
  227. package/lib/tests/comprehensive.service.test.d.ts.map +1 -0
  228. package/lib/tests/comprehensive.service.test.js +507 -0
  229. package/lib/tests/connection.test.d.ts +6 -0
  230. package/lib/tests/connection.test.d.ts.map +1 -0
  231. package/lib/tests/connection.test.js +89 -0
  232. package/lib/tests/cubeService.test.d.ts +6 -0
  233. package/lib/tests/cubeService.test.d.ts.map +1 -0
  234. package/lib/tests/cubeService.test.js +368 -0
  235. package/lib/tests/dimensionService.comprehensive.test.d.ts +7 -0
  236. package/lib/tests/dimensionService.comprehensive.test.d.ts.map +1 -0
  237. package/lib/tests/dimensionService.comprehensive.test.js +614 -0
  238. package/lib/tests/dimensionService.test.d.ts +6 -0
  239. package/lib/tests/dimensionService.test.d.ts.map +1 -0
  240. package/lib/tests/dimensionService.test.js +293 -0
  241. package/lib/tests/edgeCases.test.d.ts +6 -0
  242. package/lib/tests/edgeCases.test.d.ts.map +1 -0
  243. package/lib/tests/edgeCases.test.js +301 -0
  244. package/lib/tests/elementService.comprehensive.test.d.ts +7 -0
  245. package/lib/tests/elementService.comprehensive.test.d.ts.map +1 -0
  246. package/lib/tests/elementService.comprehensive.test.js +846 -0
  247. package/lib/tests/elementService.test.d.ts +6 -0
  248. package/lib/tests/elementService.test.d.ts.map +1 -0
  249. package/lib/tests/elementService.test.js +350 -0
  250. package/lib/tests/enhancedCellService.test.d.ts +2 -0
  251. package/lib/tests/enhancedCellService.test.d.ts.map +1 -0
  252. package/lib/tests/enhancedCellService.test.js +152 -0
  253. package/lib/tests/enhancedCubeService.test.d.ts +2 -0
  254. package/lib/tests/enhancedCubeService.test.d.ts.map +1 -0
  255. package/lib/tests/enhancedCubeService.test.js +246 -0
  256. package/lib/tests/enhancedElementService.test.d.ts +2 -0
  257. package/lib/tests/enhancedElementService.test.d.ts.map +1 -0
  258. package/lib/tests/enhancedElementService.test.js +199 -0
  259. package/lib/tests/enhancedViewService.test.d.ts +2 -0
  260. package/lib/tests/enhancedViewService.test.d.ts.map +1 -0
  261. package/lib/tests/enhancedViewService.test.js +260 -0
  262. package/lib/tests/errorHandling.test.d.ts +6 -0
  263. package/lib/tests/errorHandling.test.d.ts.map +1 -0
  264. package/lib/tests/errorHandling.test.js +227 -0
  265. package/lib/tests/exceptions.test.d.ts +7 -0
  266. package/lib/tests/exceptions.test.d.ts.map +1 -0
  267. package/lib/tests/exceptions.test.js +257 -0
  268. package/lib/tests/hierarchyService.test.d.ts +6 -0
  269. package/lib/tests/hierarchyService.test.d.ts.map +1 -0
  270. package/lib/tests/hierarchyService.test.js +294 -0
  271. package/lib/tests/index.test.d.ts +6 -0
  272. package/lib/tests/index.test.d.ts.map +1 -0
  273. package/lib/tests/index.test.js +346 -0
  274. package/lib/tests/integration.test.d.ts +6 -0
  275. package/lib/tests/integration.test.d.ts.map +1 -0
  276. package/lib/tests/integration.test.js +302 -0
  277. package/lib/tests/integrationTests.test.d.ts +2 -0
  278. package/lib/tests/integrationTests.test.d.ts.map +1 -0
  279. package/lib/tests/integrationTests.test.js +252 -0
  280. package/lib/tests/mdx.advanced.test.d.ts +6 -0
  281. package/lib/tests/mdx.advanced.test.d.ts.map +1 -0
  282. package/lib/tests/mdx.advanced.test.js +437 -0
  283. package/lib/tests/objects.improved.test.d.ts +7 -0
  284. package/lib/tests/objects.improved.test.d.ts.map +1 -0
  285. package/lib/tests/objects.improved.test.js +302 -0
  286. package/lib/tests/performance.test.d.ts +6 -0
  287. package/lib/tests/performance.test.d.ts.map +1 -0
  288. package/lib/tests/performance.test.js +264 -0
  289. package/lib/tests/processService.comprehensive.test.d.ts +7 -0
  290. package/lib/tests/processService.comprehensive.test.d.ts.map +1 -0
  291. package/lib/tests/processService.comprehensive.test.js +656 -0
  292. package/lib/tests/processService.test.d.ts +6 -0
  293. package/lib/tests/processService.test.d.ts.map +1 -0
  294. package/lib/tests/processService.test.js +322 -0
  295. package/lib/tests/restService.test.d.ts +6 -0
  296. package/lib/tests/restService.test.d.ts.map +1 -0
  297. package/lib/tests/restService.test.js +177 -0
  298. package/lib/tests/security.advanced.test.d.ts +6 -0
  299. package/lib/tests/security.advanced.test.d.ts.map +1 -0
  300. package/lib/tests/security.advanced.test.js +407 -0
  301. package/lib/tests/security.test.d.ts +6 -0
  302. package/lib/tests/security.test.d.ts.map +1 -0
  303. package/lib/tests/security.test.js +204 -0
  304. package/lib/tests/securityService.comprehensive.test.d.ts +7 -0
  305. package/lib/tests/securityService.comprehensive.test.d.ts.map +1 -0
  306. package/lib/tests/securityService.comprehensive.test.js +457 -0
  307. package/lib/tests/setup.d.ts +4 -0
  308. package/lib/tests/setup.d.ts.map +1 -0
  309. package/lib/tests/setup.js +40 -0
  310. package/lib/tests/simpleCoverage.test.d.ts +6 -0
  311. package/lib/tests/simpleCoverage.test.d.ts.map +1 -0
  312. package/lib/tests/simpleCoverage.test.js +236 -0
  313. package/lib/tests/stress.performance.test.d.ts +6 -0
  314. package/lib/tests/stress.performance.test.d.ts.map +1 -0
  315. package/lib/tests/stress.performance.test.js +423 -0
  316. package/lib/tests/subsetService.test.d.ts +6 -0
  317. package/lib/tests/subsetService.test.d.ts.map +1 -0
  318. package/lib/tests/subsetService.test.js +271 -0
  319. package/lib/tests/testConfig.d.ts +18 -0
  320. package/lib/tests/testConfig.d.ts.map +1 -0
  321. package/lib/tests/testConfig.js +38 -0
  322. package/lib/tests/testUtils.d.ts +9 -0
  323. package/lib/tests/testUtils.d.ts.map +1 -0
  324. package/lib/tests/testUtils.js +100 -0
  325. package/lib/tests/tm1Service.test.d.ts +7 -0
  326. package/lib/tests/tm1Service.test.d.ts.map +1 -0
  327. package/lib/tests/tm1Service.test.js +290 -0
  328. package/lib/tests/viewService.test.d.ts +6 -0
  329. package/lib/tests/viewService.test.d.ts.map +1 -0
  330. package/lib/tests/viewService.test.js +240 -0
  331. package/lib/utils/Utils.d.ts +90 -0
  332. package/lib/utils/Utils.d.ts.map +1 -0
  333. package/lib/utils/Utils.js +379 -0
  334. package/package.json +81 -0
  335. package/run-all-tests.js +296 -0
  336. package/src/exceptions/TM1Exception.ts +38 -0
  337. package/src/exceptions/TM1RestException.ts +17 -0
  338. package/src/exceptions/TM1TimeoutException.ts +15 -0
  339. package/src/index.ts +94 -0
  340. package/src/objects/Annotation.ts +194 -0
  341. package/src/objects/Application.ts +146 -0
  342. package/src/objects/Axis.ts +149 -0
  343. package/src/objects/Chore.ts +174 -0
  344. package/src/objects/ChoreFrequency.ts +83 -0
  345. package/src/objects/ChoreStartTime.ts +111 -0
  346. package/src/objects/ChoreTask.ts +92 -0
  347. package/src/objects/Cube.ts +125 -0
  348. package/src/objects/Dimension.ts +107 -0
  349. package/src/objects/Element.ts +153 -0
  350. package/src/objects/ElementAttribute.ts +115 -0
  351. package/src/objects/Git.ts +86 -0
  352. package/src/objects/GitCommit.ts +31 -0
  353. package/src/objects/GitPlan.ts +121 -0
  354. package/src/objects/GitRemote.ts +31 -0
  355. package/src/objects/Hierarchy.ts +229 -0
  356. package/src/objects/MDXView.ts +91 -0
  357. package/src/objects/NativeView.ts +268 -0
  358. package/src/objects/Process.ts +320 -0
  359. package/src/objects/ProcessDebugBreakpoint.ts +239 -0
  360. package/src/objects/ProcessParameter.ts +76 -0
  361. package/src/objects/ProcessVariable.ts +89 -0
  362. package/src/objects/Rules.ts +117 -0
  363. package/src/objects/Sandbox.ts +90 -0
  364. package/src/objects/Server.ts +45 -0
  365. package/src/objects/Subset.ts +323 -0
  366. package/src/objects/TM1Object.ts +17 -0
  367. package/src/objects/TM1Project.ts +587 -0
  368. package/src/objects/User.ts +198 -0
  369. package/src/objects/View.ts +43 -0
  370. package/src/objects/index.ts +36 -0
  371. package/src/services/AnnotationService.ts +107 -0
  372. package/src/services/ApplicationService.ts +279 -0
  373. package/src/services/AuditLogService.ts +172 -0
  374. package/src/services/CellService.ts +814 -0
  375. package/src/services/ChoreService.ts +219 -0
  376. package/src/services/ConfigurationService.ts +69 -0
  377. package/src/services/CubeService.ts +338 -0
  378. package/src/services/DimensionService.ts +168 -0
  379. package/src/services/ElementService.ts +966 -0
  380. package/src/services/FileService.ts +67 -0
  381. package/src/services/GitService.ts +324 -0
  382. package/src/services/HierarchyService.ts +284 -0
  383. package/src/services/JobService.ts +59 -0
  384. package/src/services/LoggerService.ts +118 -0
  385. package/src/services/ManageService.ts +322 -0
  386. package/src/services/MessageLogService.ts +211 -0
  387. package/src/services/MonitoringService.ts +105 -0
  388. package/src/services/ObjectService.ts +21 -0
  389. package/src/services/PowerBiService.ts +85 -0
  390. package/src/services/ProcessService.ts +589 -0
  391. package/src/services/RestService.ts +224 -0
  392. package/src/services/SandboxService.ts +217 -0
  393. package/src/services/SecurityService.ts +284 -0
  394. package/src/services/ServerService.ts +313 -0
  395. package/src/services/SessionService.ts +81 -0
  396. package/src/services/SubsetService.ts +52 -0
  397. package/src/services/TM1Service.ts +133 -0
  398. package/src/services/ThreadService.ts +83 -0
  399. package/src/services/TransactionLogService.ts +148 -0
  400. package/src/services/UserService.ts +77 -0
  401. package/src/services/ViewService.ts +398 -0
  402. package/src/services/index.ts +28 -0
  403. package/src/tests/100PercentParityCheck.test.ts +166 -0
  404. package/src/tests/basic.test.ts +59 -0
  405. package/src/tests/cellService.test.ts +405 -0
  406. package/src/tests/ciSetup.ts +26 -0
  407. package/src/tests/comprehensive.service.test.ts +653 -0
  408. package/src/tests/config.ini.template +23 -0
  409. package/src/tests/connection.test.ts +90 -0
  410. package/src/tests/cubeService.test.ts +458 -0
  411. package/src/tests/dimensionService.comprehensive.test.ts +786 -0
  412. package/src/tests/dimensionService.test.ts +373 -0
  413. package/src/tests/edgeCases.test.ts +358 -0
  414. package/src/tests/elementService.comprehensive.test.ts +1190 -0
  415. package/src/tests/elementService.test.ts +472 -0
  416. package/src/tests/enhancedCellService.test.ts +237 -0
  417. package/src/tests/enhancedCubeService.test.ts +384 -0
  418. package/src/tests/enhancedElementService.test.ts +301 -0
  419. package/src/tests/enhancedViewService.test.ts +373 -0
  420. package/src/tests/errorHandling.test.ts +264 -0
  421. package/src/tests/exceptions.test.ts +313 -0
  422. package/src/tests/hierarchyService.test.ts +386 -0
  423. package/src/tests/index.test.ts +376 -0
  424. package/src/tests/integration.test.ts +333 -0
  425. package/src/tests/integrationTests.test.ts +302 -0
  426. package/src/tests/mdx.advanced.test.ts +513 -0
  427. package/src/tests/objects.improved.test.ts +385 -0
  428. package/src/tests/performance.test.ts +314 -0
  429. package/src/tests/processService.comprehensive.test.ts +933 -0
  430. package/src/tests/processService.test.ts +409 -0
  431. package/src/tests/restService.test.ts +218 -0
  432. package/src/tests/security.advanced.test.ts +464 -0
  433. package/src/tests/security.test.ts +233 -0
  434. package/src/tests/securityService.comprehensive.test.ts +582 -0
  435. package/src/tests/setup.ts +42 -0
  436. package/src/tests/simpleCoverage.test.ts +287 -0
  437. package/src/tests/stress.performance.test.ts +531 -0
  438. package/src/tests/subsetService.test.ts +350 -0
  439. package/src/tests/testConfig.ts +53 -0
  440. package/src/tests/testUtils.ts +94 -0
  441. package/src/tests/tm1Service.test.ts +361 -0
  442. package/src/tests/viewService.test.ts +324 -0
  443. package/src/utils/Utils.ts +395 -0
  444. package/tests/README.md +57 -0
  445. package/tests/connection/test-connection.ts +86 -0
  446. package/tests/edge-cases/edge-cases-test.ts +244 -0
  447. package/tests/integration/working-test.ts +193 -0
  448. package/tests/performance/performance-test.ts +133 -0
  449. package/tests/run-all-tests.sh +106 -0
  450. package/tests/security/security-test.ts +103 -0
  451. package/tsconfig.json +20 -0
@@ -0,0 +1,284 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { RestService } from './RestService';
3
+ import { ObjectService } from './ObjectService';
4
+ import { User } from '../objects/User';
5
+ import { formatUrl, CaseAndSpaceInsensitiveSet, requireSecurityAdmin, requireAdmin } from '../utils/Utils';
6
+
7
+ export class SecurityService extends ObjectService {
8
+ /** Service to handle Security stuff
9
+ *
10
+ */
11
+
12
+ constructor(rest: RestService) {
13
+ super(rest);
14
+ }
15
+
16
+ public async determineActualUserName(userName: string): Promise<string> {
17
+ return await this.determineActualObjectName("Users", userName);
18
+ }
19
+
20
+ public async determineActualGroupName(groupName: string): Promise<string> {
21
+ return await this.determineActualObjectName("Groups", groupName);
22
+ }
23
+
24
+
25
+ public async createUser(user: User): Promise<AxiosResponse> {
26
+ /** Create a user on TM1 Server
27
+ *
28
+ * :param user: instance of .User
29
+ * :return: response
30
+ */
31
+ const url = '/Users';
32
+ return await this.rest.post(url, user.body);
33
+ }
34
+
35
+
36
+ public async createGroup(groupName: string): Promise<AxiosResponse> {
37
+ /** Create a Security group in the TM1 Server
38
+ *
39
+ * :param group_name:
40
+ * :return:
41
+ */
42
+ const url = '/Groups';
43
+ return await this.rest.post(url, JSON.stringify({ Name: groupName }));
44
+ }
45
+
46
+ public async getUser(userName: string): Promise<User> {
47
+ /** Get user from TM1 Server
48
+ *
49
+ * :param user_name:
50
+ * :return: instance of .User
51
+ */
52
+ const actualUserName = await this.determineActualUserName(userName);
53
+ const url = formatUrl(
54
+ "/Users('{}')?$select=Name,FriendlyName,Password,Type,Enabled&$expand=Groups",
55
+ actualUserName);
56
+ const response = await this.rest.get(url);
57
+ return User.fromDict(response.data);
58
+ }
59
+
60
+ public async getCurrentUser(): Promise<User> {
61
+ /** Get user and group assignments of this session
62
+ *
63
+ * :return: instance of .User
64
+ */
65
+ const url = "/ActiveUser?$select=Name,FriendlyName,Password,Type,Enabled&$expand=Groups";
66
+ const response = await this.rest.get(url);
67
+ return User.fromDict(response.data);
68
+ }
69
+
70
+
71
+ public async updateUser(user: User): Promise<AxiosResponse> {
72
+ /** Update user on TM1 Server
73
+ *
74
+ * :param user: instance of .User
75
+ * :return: response
76
+ */
77
+ user.name = await this.determineActualUserName(user.name);
78
+ const currentGroups = await this.getGroups(user.name);
79
+
80
+ for (const currentGroup of currentGroups) {
81
+ if (!user.groups.includes(currentGroup)) {
82
+ await this.removeUserFromGroup(currentGroup, user.name);
83
+ }
84
+ }
85
+
86
+ const url = formatUrl("/Users('{}')", user.name);
87
+ return await this.rest.patch(url, user.body);
88
+ }
89
+
90
+ public async updateUserPassword(userName: string, password: string): Promise<AxiosResponse> {
91
+ const url = formatUrl("/Users('{}')", userName);
92
+ const body = { Password: password };
93
+ return await this.rest.patch(url, JSON.stringify(body));
94
+ }
95
+
96
+
97
+ public async deleteUser(userName: string): Promise<AxiosResponse> {
98
+ /** Delete user on TM1 Server
99
+ *
100
+ * :param user_name:
101
+ * :return: response
102
+ */
103
+ const actualUserName = await this.determineActualUserName(userName);
104
+ const url = formatUrl("/Users('{}')", actualUserName);
105
+ return await this.rest.delete(url);
106
+ }
107
+
108
+
109
+ public async deleteGroup(groupName: string): Promise<AxiosResponse> {
110
+ /** Delete a Security group in the TM1 Server
111
+ *
112
+ * :param group_name:
113
+ * :return: response
114
+ */
115
+ const actualGroupName = await this.determineActualGroupName(groupName);
116
+ const url = formatUrl("/Groups('{}')", actualGroupName);
117
+ return await this.rest.delete(url);
118
+ }
119
+
120
+ public async getUserNames(): Promise<string[]> {
121
+ /** Get all user names
122
+ *
123
+ * :return: List of user names
124
+ */
125
+ const url = "/Users?$select=Name";
126
+ const response = await this.rest.get(url);
127
+ return response.data.value.map((user: any) => user.Name);
128
+ }
129
+
130
+ public async getGroupNames(): Promise<string[]> {
131
+ /** Get all group names
132
+ *
133
+ * :return: List of group names
134
+ */
135
+ const url = "/Groups?$select=Name";
136
+ const response = await this.rest.get(url);
137
+ return response.data.value.map((group: any) => group.Name);
138
+ }
139
+
140
+ public async getAllUsers(): Promise<User[]> {
141
+ /** Get all users
142
+ *
143
+ * :return: List of User instances
144
+ */
145
+ const url = "/Users?$select=Name,FriendlyName,Password,Type,Enabled&$expand=Groups";
146
+ const response = await this.rest.get(url);
147
+ return response.data.value.map((userDict: any) => User.fromDict(userDict));
148
+ }
149
+
150
+ public async getGroups(userName?: string): Promise<string[]> {
151
+ /** Get groups for a user or all groups
152
+ *
153
+ * :param user_name: Optional user name
154
+ * :return: List of group names
155
+ */
156
+ if (userName) {
157
+ const actualUserName = await this.determineActualUserName(userName);
158
+ const url = formatUrl("/Users('{}')/Groups?$select=Name", actualUserName);
159
+ const response = await this.rest.get(url);
160
+ return response.data.value.map((group: any) => group.Name);
161
+ } else {
162
+ return await this.getGroupNames();
163
+ }
164
+ }
165
+
166
+ public async getUsersFromGroup(groupName: string): Promise<string[]> {
167
+ /** Get users that belong to a group
168
+ *
169
+ * :param group_name: name of the group
170
+ * :return: List of user names
171
+ */
172
+ const actualGroupName = await this.determineActualGroupName(groupName);
173
+ const url = formatUrl("/Groups('{}')/Users?$select=Name", actualGroupName);
174
+ const response = await this.rest.get(url);
175
+ return response.data.value.map((user: any) => user.Name);
176
+ }
177
+
178
+
179
+ public async addUserToGroups(userName: string, groupNames: string[]): Promise<AxiosResponse[]> {
180
+ /** Add user to multiple groups
181
+ *
182
+ * :param user_name: name of the user
183
+ * :param group_names: list of group names
184
+ * :return: list of responses
185
+ */
186
+ const responses: AxiosResponse[] = [];
187
+ for (const groupName of groupNames) {
188
+ const response = await this.addUserToGroup(groupName, userName);
189
+ responses.push(response);
190
+ }
191
+ return responses;
192
+ }
193
+
194
+
195
+ public async addUserToGroup(groupName: string, userName: string): Promise<AxiosResponse> {
196
+ /** Add user to a group
197
+ *
198
+ * :param group_name: name of the group
199
+ * :param user_name: name of the user
200
+ * :return: response
201
+ */
202
+ const actualGroupName = await this.determineActualGroupName(groupName);
203
+ const actualUserName = await this.determineActualUserName(userName);
204
+
205
+ const url = formatUrl("/Groups('{}')/Users", actualGroupName);
206
+ const body = {
207
+ '@odata.id': `Users('${actualUserName}')`
208
+ };
209
+ return await this.rest.post(url, JSON.stringify(body));
210
+ }
211
+
212
+
213
+ public async removeUserFromGroup(groupName: string, userName: string): Promise<AxiosResponse> {
214
+ /** Remove user from a group
215
+ *
216
+ * :param group_name: name of the group
217
+ * :param user_name: name of the user
218
+ * :return: response
219
+ */
220
+ const actualGroupName = await this.determineActualGroupName(groupName);
221
+ const actualUserName = await this.determineActualUserName(userName);
222
+
223
+ const url = formatUrl("/Groups('{}')/Users('{}')", actualGroupName, actualUserName);
224
+ return await this.rest.delete(url);
225
+ }
226
+
227
+
228
+ public async getSecurityRefreshTime(): Promise<number> {
229
+ /** Get security refresh time in seconds
230
+ *
231
+ * :return: security refresh time
232
+ */
233
+ const url = "/StaticConfiguration/ServerSettings('SecurityRefreshTime')";
234
+ const response = await this.rest.get(url);
235
+ return parseInt(response.data.Value);
236
+ }
237
+
238
+ public async userExists(userName: string): Promise<boolean> {
239
+ /** Check if user exists
240
+ *
241
+ * :param user_name: name of the user
242
+ * :return: True if user exists
243
+ */
244
+ try {
245
+ await this.getUser(userName);
246
+ return true;
247
+ } catch {
248
+ return false;
249
+ }
250
+ }
251
+
252
+ public async groupExists(groupName: string): Promise<boolean> {
253
+ /** Check if group exists
254
+ *
255
+ * :param group_name: name of the group
256
+ * :return: True if group exists
257
+ */
258
+ try {
259
+ const actualGroupName = await this.determineActualGroupName(groupName);
260
+ const url = formatUrl("/Groups('{}')", actualGroupName);
261
+ await this.rest.get(url);
262
+ return true;
263
+ } catch {
264
+ return false;
265
+ }
266
+ }
267
+
268
+ private async determineActualObjectName(objectClass: string, objectName: string): Promise<string> {
269
+ /** Determine the actual object name (case-sensitive) from TM1 Server
270
+ *
271
+ * :param object_class: 'Users' or 'Groups'
272
+ * :param object_name: name to look for
273
+ * :return: actual object name
274
+ */
275
+ const url = `/${objectClass}?$select=Name&$filter=tolower(Name) eq '${objectName.toLowerCase()}'`;
276
+ const response = await this.rest.get(url);
277
+
278
+ if (response.data.value && response.data.value.length > 0) {
279
+ return response.data.value[0].Name;
280
+ }
281
+
282
+ return objectName; // fallback to original name
283
+ }
284
+ }
@@ -0,0 +1,313 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { RestService } from './RestService';
3
+ import { ObjectService } from './ObjectService';
4
+ import { TransactionLogService } from './TransactionLogService';
5
+ import { MessageLogService } from './MessageLogService';
6
+ import { AuditLogService } from './AuditLogService';
7
+ import { LoggerService } from './LoggerService';
8
+ import { ConfigurationService } from './ConfigurationService';
9
+ import { ProcessService } from './ProcessService';
10
+ import {
11
+ requireAdmin,
12
+ requireVersion,
13
+ deprecatedInVersion,
14
+ requireDataAdmin,
15
+ requireOpsAdmin
16
+ } from '../utils/Utils';
17
+
18
+ export enum LogLevel {
19
+ FATAL = "fatal",
20
+ ERROR = "error",
21
+ WARNING = "warning",
22
+ INFO = "info",
23
+ DEBUG = "debug",
24
+ OFF = "off"
25
+ }
26
+
27
+ export class ServerService extends ObjectService {
28
+ /** Service to query common information from the TM1 Server
29
+ */
30
+
31
+ public transactionLogs: TransactionLogService;
32
+ public messageLogs: MessageLogService;
33
+ public configuration: ConfigurationService;
34
+ public auditLogs: AuditLogService;
35
+ public loggers: LoggerService;
36
+
37
+ constructor(rest: RestService) {
38
+ super(rest);
39
+ console.warn("Server Service will be moved to a new location in a future version");
40
+ this.transactionLogs = new TransactionLogService(rest);
41
+ this.messageLogs = new MessageLogService(rest);
42
+ this.configuration = new ConfigurationService(rest);
43
+ this.auditLogs = new AuditLogService(rest);
44
+ this.loggers = new LoggerService(rest);
45
+ }
46
+
47
+ public async initializeTransactionLogDeltaRequests(filter?: string): Promise<void> {
48
+ return await this.transactionLogs.initializeDeltaRequests(filter);
49
+ }
50
+
51
+ public async executeTransactionLogDeltaRequest(): Promise<any[]> {
52
+ return await this.transactionLogs.executeDeltaRequest();
53
+ }
54
+
55
+ public async initializeAuditLogDeltaRequests(filter?: string): Promise<void> {
56
+ return await this.auditLogs.initializeDeltaRequests(filter);
57
+ }
58
+
59
+ public async executeAuditLogDeltaRequest(): Promise<any[]> {
60
+ return await this.auditLogs.executeDeltaRequest();
61
+ }
62
+
63
+ public async initializeMessageLogDeltaRequests(filter?: string): Promise<void> {
64
+ return await this.messageLogs.initializeDeltaRequests(filter);
65
+ }
66
+
67
+ public async executeMessageLogDeltaRequest(): Promise<any[]> {
68
+ return await this.messageLogs.executeDeltaRequest();
69
+ }
70
+
71
+ @deprecatedInVersion("12.0.0")
72
+
73
+ public async getMessageLogEntries(
74
+ reverse: boolean = true,
75
+ since?: Date,
76
+ until?: Date,
77
+ top?: number,
78
+ logger?: string,
79
+ level?: string,
80
+ msgContains?: string | string[],
81
+ msgContainsOperator: string = 'and'
82
+ ): Promise<any[]> {
83
+ /**
84
+ * :param reverse: Boolean
85
+ * :param since: of type datetime. If it doesn't have tz information, UTC is assumed.
86
+ * :param until: of type datetime. If it doesn't have tz information, UTC is assumed.
87
+ * :param top: Integer
88
+ * :param logger: string, eg TM1.Server, TM1.Chore, TM1.Mdx.Interface, TM1.Process
89
+ * :param level: string, ERROR, WARNING, INFO, DEBUG, UNKNOWN
90
+ * :param msg_contains: iterable, find substring in log message; list of substrings will be queried as AND statement
91
+ * :param msg_contains_operator: 'and' or 'or'
92
+ *
93
+ * :return: Dict of server log
94
+ */
95
+
96
+ return await this.messageLogs.getEntries(
97
+ reverse,
98
+ since,
99
+ until,
100
+ top,
101
+ logger,
102
+ level,
103
+ msgContains,
104
+ msgContainsOperator
105
+ );
106
+ }
107
+
108
+
109
+ public async writeToMessageLog(level: string, message: string): Promise<void> {
110
+ /**
111
+ * :param level: string, FATAL, ERROR, WARN, INFO, DEBUG
112
+ * :param message: string
113
+ * :return:
114
+ */
115
+
116
+ return await this.messageLogs.createEntry(level, message);
117
+ }
118
+
119
+ @deprecatedInVersion("12.0.0")
120
+
121
+ public async getTransactionLogEntries(
122
+ reverse: boolean = true,
123
+ user?: string,
124
+ cube?: string,
125
+ since?: Date,
126
+ until?: Date,
127
+ top?: number,
128
+ elementTupleFilter?: Record<string, string>,
129
+ elementPositionFilter?: Record<number, Record<string, string>>
130
+ ): Promise<any[]> {
131
+ /**
132
+ * :param reverse: Boolean
133
+ * :param user: UserName
134
+ * :param cube: CubeName
135
+ * :param since: of type datetime. If it doesn't have tz information, UTC is assumed.
136
+ * :param until: of type datetime. If it doesn't have tz information, UTC is assumed.
137
+ * :param top: int
138
+ * :param element_tuple_filter: of type dict. Element name as key and comparison operator as value
139
+ * :param element_position_filter: not yet implemented
140
+ * tuple={'Actual':'eq','2020': 'ge'}
141
+ * :return:
142
+ */
143
+ return await this.transactionLogs.getEntries(
144
+ reverse,
145
+ user,
146
+ cube,
147
+ since,
148
+ until,
149
+ top,
150
+ elementTupleFilter,
151
+ elementPositionFilter
152
+ );
153
+ }
154
+
155
+
156
+ @deprecatedInVersion("12.0.0")
157
+ @requireVersion("11.6")
158
+ public async getAuditLogEntries(
159
+ user?: string,
160
+ objectType?: string,
161
+ objectName?: string,
162
+ since?: Date,
163
+ until?: Date,
164
+ top?: number
165
+ ): Promise<any[]> {
166
+ /**
167
+ * :param user: UserName
168
+ * :param object_type: ObjectType
169
+ * :param object_name: ObjectName
170
+ * :param since: of type datetime. If it doesn't have tz information, UTC is assumed.
171
+ * :param until: of type datetime. If it doesn't have tz information, UTC is assumed.
172
+ * :param top: int
173
+ * :return:
174
+ */
175
+ return await this.auditLogs.getEntries(
176
+ user,
177
+ objectType,
178
+ objectName,
179
+ since,
180
+ until,
181
+ top
182
+ );
183
+ }
184
+
185
+
186
+ @deprecatedInVersion("12.0.0")
187
+ public async getLastProcessMessageFromMessageLog(processName: string): Promise<string | null> {
188
+ /** Get the latest message log entry for a process
189
+ *
190
+ * :param process_name: name of the process
191
+ * :return: String - the message, for instance: "Ausführung normal beendet, verstrichene Zeit 0.03 Sekunden"
192
+ */
193
+ return await this.messageLogs.getLastProcessMessage(processName);
194
+ }
195
+
196
+ public async getServerName(): Promise<string> {
197
+ /** Ask TM1 Server for its name
198
+ *
199
+ * :Returns:
200
+ * String, the server name
201
+ */
202
+ return await this.configuration.getServerName();
203
+ }
204
+
205
+ public async getProductVersion(): Promise<string> {
206
+ /** Ask TM1 Server for its version
207
+ *
208
+ * :Returns:
209
+ * String, the version
210
+ */
211
+ return await this.configuration.getProductVersion();
212
+ }
213
+
214
+ public async getAdminHost(): Promise<string> {
215
+ return await this.configuration.getAdminHost();
216
+ }
217
+
218
+ public async getDataDirectory(): Promise<string> {
219
+ return await this.configuration.getDataDirectory();
220
+ }
221
+
222
+ public async getConfiguration(): Promise<Record<string, any>> {
223
+ return await this.configuration.getAll();
224
+ }
225
+
226
+ public async getStaticConfiguration(): Promise<Record<string, any>> {
227
+ return await this.configuration.getStatic();
228
+ }
229
+
230
+ public async getActiveConfiguration(): Promise<Record<string, any>> {
231
+ /** Read effective(!) TM1 config settings as dictionary from TM1 Server
232
+ *
233
+ * :return: config as dictionary
234
+ */
235
+ return await this.configuration.getActive();
236
+ }
237
+
238
+ public async getApiMetadata(): Promise<Record<string, any>> {
239
+ /** Read effective(!) TM1 config settings as dictionary from TM1 Server
240
+ *
241
+ * :return: config as dictionary
242
+ */
243
+ return await this.rest.getApiMetadata();
244
+ }
245
+
246
+ public async updateStaticConfiguration(configuration: Record<string, any>): Promise<AxiosResponse> {
247
+ /** Update the .cfg file and triggers TM1 to re-read the file.
248
+ *
249
+ * :param configuration:
250
+ * :return: Response
251
+ */
252
+ return await this.configuration.updateStatic(configuration);
253
+ }
254
+
255
+ @deprecatedInVersion("12.0.0")
256
+
257
+ public async saveData(): Promise<AxiosResponse> {
258
+ const ti = "SaveDataAll;";
259
+ const processService = new ProcessService(this.rest);
260
+ return await processService.executeTiCode([ti]);
261
+ }
262
+
263
+
264
+ public async deletePersistentFeeders(): Promise<AxiosResponse> {
265
+ const ti = "DeleteAllPersistentFeeders;";
266
+ const processService = new ProcessService(this.rest);
267
+ return await processService.executeTiCode([ti]);
268
+ }
269
+
270
+ public async startPerformanceMonitor(): Promise<AxiosResponse> {
271
+ const config = {
272
+ "Administration": {"PerformanceMonitorOn": true}
273
+ };
274
+ return await this.configuration.updateStatic(config);
275
+ }
276
+
277
+ public async stopPerformanceMonitor(): Promise<AxiosResponse> {
278
+ const config = {
279
+ "Administration": {"PerformanceMonitorOn": false}
280
+ };
281
+ return await this.configuration.updateStatic(config);
282
+ }
283
+
284
+ public async activateAuditLog(): Promise<void> {
285
+ await this.auditLogs.activate();
286
+ }
287
+
288
+
289
+ public async deactivateAuditLog(): Promise<AxiosResponse> {
290
+ const config = {'Administration': {'AuditLog': {'Enable': false}}};
291
+ return await this.updateStaticConfiguration(config);
292
+ }
293
+
294
+
295
+ public async updateMessageLoggerLevel(logger: string, level: string): Promise<AxiosResponse> {
296
+ /**
297
+ * Updates tm1 message log levels
298
+ * :param logger:
299
+ * :param level:
300
+ * :return:
301
+ */
302
+ return await this.loggers.setLevel(logger, level);
303
+ }
304
+
305
+
306
+ public async getAllMessageLoggerLevel(): Promise<any[]> {
307
+ /**
308
+ * Get tm1 message log levels
309
+ * :return:
310
+ */
311
+ return await this.loggers.getAll();
312
+ }
313
+ }
@@ -0,0 +1,81 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { RestService } from './RestService';
3
+ import { ObjectService } from './ObjectService';
4
+ import { UserService } from './UserService';
5
+ import { formatUrl, caseAndSpaceInsensitiveEquals, requireAdmin } from '../utils/Utils';
6
+
7
+ export class SessionService extends ObjectService {
8
+ /** Service to Query and Cancel Threads in TM1
9
+ */
10
+
11
+ private users: UserService;
12
+
13
+ constructor(rest: RestService) {
14
+ super(rest);
15
+ this.users = new UserService(rest);
16
+ }
17
+
18
+ public async getAll(includeUser: boolean = true, includeThreads: boolean = true): Promise<any[]> {
19
+ let url = "/Sessions";
20
+
21
+ if (includeUser || includeThreads) {
22
+ const expands: string[] = [];
23
+ if (includeUser) {
24
+ expands.push("User");
25
+ }
26
+ if (includeThreads) {
27
+ expands.push("Threads");
28
+ }
29
+ url += "?$expand=" + expands.join(",");
30
+ }
31
+
32
+ const response = await this.rest.get(url);
33
+ return response.data.value;
34
+ }
35
+
36
+ public async getCurrent(): Promise<any[]> {
37
+ const url = "/ActiveSession";
38
+ const response = await this.rest.get(url);
39
+ return response.data.value;
40
+ }
41
+
42
+ public async getThreadsForCurrent(excludeIdle: boolean = true): Promise<any[]> {
43
+ let url = "/ActiveSession/Threads?$filter=Function ne 'GET /ActiveSession/Threads'";
44
+ if (excludeIdle) {
45
+ url += " and State ne 'Idle'";
46
+ }
47
+
48
+ const response = await this.rest.get(url);
49
+ return response.data.value;
50
+ }
51
+
52
+ public async close(sessionId: string): Promise<AxiosResponse> {
53
+ const url = formatUrl("/Sessions('{}')/tm1.Close", sessionId);
54
+ return await this.rest.post(url);
55
+ }
56
+
57
+
58
+ public async closeAll(): Promise<any[]> {
59
+ const currentUser = await this.users.getCurrent();
60
+ const sessions = await this.getAll();
61
+ const closedSessions: any[] = [];
62
+
63
+ for (const session of sessions) {
64
+ if (!("User" in session)) {
65
+ continue;
66
+ }
67
+ if (session["User"] === null) {
68
+ continue;
69
+ }
70
+ if (!("Name" in session["User"])) {
71
+ continue;
72
+ }
73
+ if (caseAndSpaceInsensitiveEquals(currentUser.name, session["User"]["Name"])) {
74
+ continue;
75
+ }
76
+ await this.close(session['ID']);
77
+ closedSessions.push(session);
78
+ }
79
+ return closedSessions;
80
+ }
81
+ }