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,166 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.RestService = exports.AuthenticationMode = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const TM1Exception_1 = require("../exceptions/TM1Exception");
9
+ var AuthenticationMode;
10
+ (function (AuthenticationMode) {
11
+ AuthenticationMode[AuthenticationMode["BASIC"] = 1] = "BASIC";
12
+ AuthenticationMode[AuthenticationMode["WIA"] = 2] = "WIA";
13
+ AuthenticationMode[AuthenticationMode["CAM"] = 3] = "CAM";
14
+ AuthenticationMode[AuthenticationMode["CAM_SSO"] = 4] = "CAM_SSO";
15
+ AuthenticationMode[AuthenticationMode["IBM_CLOUD_API_KEY"] = 5] = "IBM_CLOUD_API_KEY";
16
+ AuthenticationMode[AuthenticationMode["SERVICE_TO_SERVICE"] = 6] = "SERVICE_TO_SERVICE";
17
+ AuthenticationMode[AuthenticationMode["PA_PROXY"] = 7] = "PA_PROXY";
18
+ AuthenticationMode[AuthenticationMode["BASIC_API_KEY"] = 8] = "BASIC_API_KEY";
19
+ AuthenticationMode[AuthenticationMode["ACCESS_TOKEN"] = 9] = "ACCESS_TOKEN";
20
+ })(AuthenticationMode || (exports.AuthenticationMode = AuthenticationMode = {}));
21
+ class RestService {
22
+ constructor(config) {
23
+ this.isConnected = false;
24
+ this.config = { ...config };
25
+ this.setupAxiosInstance();
26
+ }
27
+ setupAxiosInstance() {
28
+ const baseURL = this.buildBaseUrl();
29
+ this.axiosInstance = axios_1.default.create({
30
+ baseURL,
31
+ timeout: (this.config.timeout || 60) * 1000,
32
+ headers: {
33
+ ...RestService.HEADERS,
34
+ ...(this.config.sessionContext && { 'TM1-SessionContext': this.config.sessionContext })
35
+ }
36
+ });
37
+ this.setupInterceptors();
38
+ }
39
+ buildBaseUrl() {
40
+ if (this.config.baseUrl) {
41
+ return this.config.baseUrl;
42
+ }
43
+ const protocol = this.config.ssl ? 'https' : 'http';
44
+ const address = this.config.address || 'localhost';
45
+ const port = this.config.port || 8001;
46
+ return `${protocol}://${address}:${port}/api/v1`;
47
+ }
48
+ setupInterceptors() {
49
+ // Request interceptor
50
+ this.axiosInstance.interceptors.request.use((config) => {
51
+ if (this.sessionId) {
52
+ config.headers['TM1SessionId'] = this.sessionId;
53
+ }
54
+ if (this.sandboxName) {
55
+ config.headers['TM1-Sandbox'] = this.sandboxName;
56
+ }
57
+ return config;
58
+ }, (error) => Promise.reject(error));
59
+ // Response interceptor
60
+ this.axiosInstance.interceptors.response.use((response) => response, (error) => {
61
+ if (error.code === 'ECONNABORTED' || error.message.includes('timeout')) {
62
+ throw new TM1Exception_1.TM1TimeoutException(`Request timeout: ${error.message}`);
63
+ }
64
+ const response = error.response;
65
+ if (response) {
66
+ const message = this.extractErrorMessage(response);
67
+ throw new TM1Exception_1.TM1RestException(message, response);
68
+ }
69
+ throw new TM1Exception_1.TM1RestException(error.message);
70
+ });
71
+ }
72
+ extractErrorMessage(response) {
73
+ try {
74
+ if (response.data && response.data.error) {
75
+ if (response.data.error.message) {
76
+ return response.data.error.message;
77
+ }
78
+ return JSON.stringify(response.data.error);
79
+ }
80
+ return `HTTP ${response.status}: ${response.statusText}`;
81
+ }
82
+ catch (_a) {
83
+ return `HTTP ${response.status}: ${response.statusText}`;
84
+ }
85
+ }
86
+ async connect() {
87
+ try {
88
+ // Basic authentication
89
+ if (this.config.user && this.config.password) {
90
+ const credentials = Buffer.from(`${this.config.user}:${this.config.password}`).toString('base64');
91
+ this.axiosInstance.defaults.headers.common['Authorization'] = `Basic ${credentials}`;
92
+ }
93
+ // Test connection
94
+ const response = await this.axiosInstance.get('/Configuration/ServerName');
95
+ // Extract session ID from response headers
96
+ const setCookie = response.headers['set-cookie'];
97
+ if (setCookie) {
98
+ for (const cookie of setCookie) {
99
+ const match = cookie.match(/TM1SessionId=([^;]+)/);
100
+ if (match) {
101
+ this.sessionId = match[1];
102
+ break;
103
+ }
104
+ }
105
+ }
106
+ this.isConnected = true;
107
+ }
108
+ catch (error) {
109
+ throw new TM1Exception_1.TM1RestException(`Failed to connect to TM1: ${error}`);
110
+ }
111
+ }
112
+ async disconnect() {
113
+ if (this.isConnected && this.sessionId) {
114
+ try {
115
+ await this.axiosInstance.post('/ActiveSession/tm1.Close', {});
116
+ }
117
+ catch (error) {
118
+ // Ignore errors during disconnect
119
+ }
120
+ this.isConnected = false;
121
+ this.sessionId = undefined;
122
+ }
123
+ }
124
+ async get(url, config) {
125
+ return this.axiosInstance.get(url, config);
126
+ }
127
+ async post(url, data, config) {
128
+ return this.axiosInstance.post(url, data, config);
129
+ }
130
+ async patch(url, data, config) {
131
+ return this.axiosInstance.patch(url, data, config);
132
+ }
133
+ async put(url, data, config) {
134
+ return this.axiosInstance.put(url, data, config);
135
+ }
136
+ async delete(url, config) {
137
+ return this.axiosInstance.delete(url, config);
138
+ }
139
+ getSessionId() {
140
+ return this.sessionId;
141
+ }
142
+ setSandbox(sandboxName) {
143
+ this.sandboxName = sandboxName;
144
+ }
145
+ getSandbox() {
146
+ return this.sandboxName;
147
+ }
148
+ isLoggedIn() {
149
+ return this.isConnected && !!this.sessionId;
150
+ }
151
+ async getApiMetadata() {
152
+ const response = await this.get("/$metadata");
153
+ return response.data;
154
+ }
155
+ }
156
+ exports.RestService = RestService;
157
+ RestService.HEADERS = {
158
+ 'Connection': 'keep-alive',
159
+ 'User-Agent': 'tm1npm',
160
+ 'Content-Type': 'application/json; odata.streaming=true; charset=utf-8',
161
+ 'Accept': 'application/json;odata.metadata=none,text/plain',
162
+ 'TM1-SessionContext': 'tm1npm'
163
+ };
164
+ RestService.DEFAULT_CONNECTION_POOL_SIZE = 10;
165
+ RestService.DEFAULT_POOL_CONNECTIONS = 1;
166
+ //# sourceMappingURL=RestService.js.map
@@ -0,0 +1,28 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { RestService } from './RestService';
3
+ import { ObjectService } from './ObjectService';
4
+ import { Sandbox } from '../objects/Sandbox';
5
+ export declare class SandboxService extends ObjectService {
6
+ /** Service to handle sandboxes in TM1
7
+ *
8
+ */
9
+ constructor(rest: RestService);
10
+ get(sandboxName: string): Promise<Sandbox>;
11
+ getAll(): Promise<Sandbox[]>;
12
+ getAllNames(): Promise<string[]>;
13
+ create(sandbox: Sandbox): Promise<AxiosResponse>;
14
+ update(sandbox: Sandbox): Promise<AxiosResponse>;
15
+ delete(sandboxName: string): Promise<AxiosResponse>;
16
+ publish(sandboxName: string): Promise<AxiosResponse>;
17
+ reset(sandboxName: string): Promise<AxiosResponse>;
18
+ merge(sourceSandboxName: string, targetSandboxName: string): Promise<AxiosResponse>;
19
+ exists(sandboxName: string): Promise<boolean>;
20
+ getChanges(sandboxName: string): Promise<any>;
21
+ isEmpty(sandboxName: string): Promise<boolean>;
22
+ load(sandboxName: string): Promise<AxiosResponse>;
23
+ unload(sandboxName: string): Promise<AxiosResponse>;
24
+ getSandboxDimensionMembers(): Promise<string[]>;
25
+ createIfNotExists(sandbox: Sandbox): Promise<AxiosResponse | null>;
26
+ cloneSandbox(sourceSandboxName: string, targetSandboxName: string): Promise<AxiosResponse>;
27
+ }
28
+ //# sourceMappingURL=SandboxService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SandboxService.d.ts","sourceRoot":"","sources":["../../src/services/SandboxService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAI7C,qBAAa,cAAe,SAAQ,aAAa;IAC7C;;OAEG;gBAES,IAAI,EAAE,WAAW;IAIhB,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY1C,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAa5B,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAWhC,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAUhD,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAUhD,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUnD,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUpD,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUlD,KAAK,CAAC,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAcnF,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAiB7C,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAW7C,OAAO,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc9C,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUjD,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUnD,0BAA0B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU/C,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAYlE,YAAY,CAAC,iBAAiB,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;CAgB1G"}
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SandboxService = void 0;
4
+ const ObjectService_1 = require("./ObjectService");
5
+ const Sandbox_1 = require("../objects/Sandbox");
6
+ const TM1Exception_1 = require("../exceptions/TM1Exception");
7
+ const Utils_1 = require("../utils/Utils");
8
+ class SandboxService extends ObjectService_1.ObjectService {
9
+ /** Service to handle sandboxes in TM1
10
+ *
11
+ */
12
+ constructor(rest) {
13
+ super(rest);
14
+ }
15
+ async get(sandboxName) {
16
+ /** get a sandbox from TM1 Server
17
+ *
18
+ * :param sandbox_name: str
19
+ * :return: instance of .Sandbox
20
+ */
21
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')", sandboxName);
22
+ const response = await this.rest.get(url);
23
+ const sandbox = Sandbox_1.Sandbox.fromJSON(JSON.stringify(response.data));
24
+ return sandbox;
25
+ }
26
+ async getAll() {
27
+ /** get all sandboxes from TM1 Server
28
+ *
29
+ * :return: List of .Sandbox instances
30
+ */
31
+ const url = "/Sandboxes?$select=Name,IncludeInSandboxDimension,IsLoaded,IsActive,IsQueued";
32
+ const response = await this.rest.get(url);
33
+ const sandboxes = response.data.value.map((sandboxAsDict) => Sandbox_1.Sandbox.fromDict(sandboxAsDict));
34
+ return sandboxes;
35
+ }
36
+ async getAllNames() {
37
+ /** get all sandbox names
38
+ *
39
+ * :param kwargs:
40
+ * :return:
41
+ */
42
+ const url = "/Sandboxes?$select=Name";
43
+ const response = await this.rest.get(url);
44
+ return response.data.value.map((entry) => entry.Name);
45
+ }
46
+ async create(sandbox) {
47
+ /** create a new sandbox in TM1 Server
48
+ *
49
+ * :param sandbox: Sandbox
50
+ * :return: response
51
+ */
52
+ const url = "/Sandboxes";
53
+ return await this.rest.post(url, sandbox.body);
54
+ }
55
+ async update(sandbox) {
56
+ /** update a sandbox in TM1
57
+ *
58
+ * :param sandbox:
59
+ * :return: response
60
+ */
61
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')", sandbox.name);
62
+ return await this.rest.patch(url, sandbox.body);
63
+ }
64
+ async delete(sandboxName) {
65
+ /** delete a sandbox in TM1
66
+ *
67
+ * :param sandbox_name:
68
+ * :return: response
69
+ */
70
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')", sandboxName);
71
+ return await this.rest.delete(url);
72
+ }
73
+ async publish(sandboxName) {
74
+ /** publish existing sandbox to base
75
+ *
76
+ * :param sandbox_name: str
77
+ * :return: response
78
+ */
79
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')/tm1.Publish", sandboxName);
80
+ return await this.rest.post(url, "{}");
81
+ }
82
+ async reset(sandboxName) {
83
+ /** reset all changes in specified sandbox
84
+ *
85
+ * :param sandbox_name: str
86
+ * :return: response
87
+ */
88
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')/tm1.DiscardChanges", sandboxName);
89
+ return await this.rest.post(url, "{}");
90
+ }
91
+ async merge(sourceSandboxName, targetSandboxName) {
92
+ /** merge changes from source sandbox into target sandbox
93
+ *
94
+ * :param source_sandbox_name: str
95
+ * :param target_sandbox_name: str
96
+ * :return: response
97
+ */
98
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')/tm1.Merge", targetSandboxName);
99
+ const body = {
100
+ "Source@odata.bind": `Sandboxes('${sourceSandboxName}')`
101
+ };
102
+ return await this.rest.post(url, JSON.stringify(body));
103
+ }
104
+ async exists(sandboxName) {
105
+ /** check if sandbox exists
106
+ *
107
+ * :param sandbox_name: str
108
+ * :return: boolean
109
+ */
110
+ try {
111
+ await this.get(sandboxName);
112
+ return true;
113
+ }
114
+ catch (error) {
115
+ if (error instanceof TM1Exception_1.TM1RestException && error.statusCode === 404) {
116
+ return false;
117
+ }
118
+ throw error;
119
+ }
120
+ }
121
+ async getChanges(sandboxName) {
122
+ /** get all changes in a sandbox
123
+ *
124
+ * :param sandbox_name: str
125
+ * :return: dict of changes
126
+ */
127
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')/Changes", sandboxName);
128
+ const response = await this.rest.get(url);
129
+ return response.data;
130
+ }
131
+ async isEmpty(sandboxName) {
132
+ /** check if sandbox is empty (has no changes)
133
+ *
134
+ * :param sandbox_name: str
135
+ * :return: boolean
136
+ */
137
+ try {
138
+ const changes = await this.getChanges(sandboxName);
139
+ return !changes || !changes.value || changes.value.length === 0;
140
+ }
141
+ catch (_a) {
142
+ return true;
143
+ }
144
+ }
145
+ async load(sandboxName) {
146
+ /** load sandbox into memory
147
+ *
148
+ * :param sandbox_name: str
149
+ * :return: response
150
+ */
151
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')/tm1.Load", sandboxName);
152
+ return await this.rest.post(url, "{}");
153
+ }
154
+ async unload(sandboxName) {
155
+ /** unload sandbox from memory
156
+ *
157
+ * :param sandbox_name: str
158
+ * :return: response
159
+ */
160
+ const url = (0, Utils_1.formatUrl)("/Sandboxes('{}')/tm1.Unload", sandboxName);
161
+ return await this.rest.post(url, "{}");
162
+ }
163
+ async getSandboxDimensionMembers() {
164
+ /** get all members of the }Sandboxes dimension
165
+ *
166
+ * :return: list of sandbox names
167
+ */
168
+ const url = "/Dimensions('}Sandboxes')/Hierarchies('}Sandboxes')/Elements?$select=Name";
169
+ const response = await this.rest.get(url);
170
+ return response.data.value.map((element) => element.Name);
171
+ }
172
+ async createIfNotExists(sandbox) {
173
+ /** create sandbox if it doesn't exist
174
+ *
175
+ * :param sandbox: Sandbox instance
176
+ * :return: response or null if already exists
177
+ */
178
+ if (await this.exists(sandbox.name)) {
179
+ return null;
180
+ }
181
+ return await this.create(sandbox);
182
+ }
183
+ async cloneSandbox(sourceSandboxName, targetSandboxName) {
184
+ /** clone a sandbox
185
+ *
186
+ * :param source_sandbox_name: str
187
+ * :param target_sandbox_name: str
188
+ * :return: response
189
+ */
190
+ const sourceSandbox = await this.get(sourceSandboxName);
191
+ const targetSandbox = new Sandbox_1.Sandbox(targetSandboxName, sourceSandbox.includeInSandboxDimension);
192
+ await this.create(targetSandbox);
193
+ return await this.merge(sourceSandboxName, targetSandboxName);
194
+ }
195
+ }
196
+ exports.SandboxService = SandboxService;
197
+ //# sourceMappingURL=SandboxService.js.map
@@ -0,0 +1,33 @@
1
+ import { AxiosResponse } from 'axios';
2
+ import { RestService } from './RestService';
3
+ import { ObjectService } from './ObjectService';
4
+ import { User } from '../objects/User';
5
+ export declare class SecurityService extends ObjectService {
6
+ /** Service to handle Security stuff
7
+ *
8
+ */
9
+ constructor(rest: RestService);
10
+ determineActualUserName(userName: string): Promise<string>;
11
+ determineActualGroupName(groupName: string): Promise<string>;
12
+ createUser(user: User): Promise<AxiosResponse>;
13
+ createGroup(groupName: string): Promise<AxiosResponse>;
14
+ getUser(userName: string): Promise<User>;
15
+ getCurrentUser(): Promise<User>;
16
+ updateUser(user: User): Promise<AxiosResponse>;
17
+ updateUserPassword(userName: string, password: string): Promise<AxiosResponse>;
18
+ deleteUser(userName: string): Promise<AxiosResponse>;
19
+ deleteGroup(groupName: string): Promise<AxiosResponse>;
20
+ getUserNames(): Promise<string[]>;
21
+ getGroupNames(): Promise<string[]>;
22
+ getAllUsers(): Promise<User[]>;
23
+ getGroups(userName?: string): Promise<string[]>;
24
+ getUsersFromGroup(groupName: string): Promise<string[]>;
25
+ addUserToGroups(userName: string, groupNames: string[]): Promise<AxiosResponse[]>;
26
+ addUserToGroup(groupName: string, userName: string): Promise<AxiosResponse>;
27
+ removeUserFromGroup(groupName: string, userName: string): Promise<AxiosResponse>;
28
+ getSecurityRefreshTime(): Promise<number>;
29
+ userExists(userName: string): Promise<boolean>;
30
+ groupExists(groupName: string): Promise<boolean>;
31
+ private determineActualObjectName;
32
+ }
33
+ //# sourceMappingURL=SecurityService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SecurityService.d.ts","sourceRoot":"","sources":["../../src/services/SecurityService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAGvC,qBAAa,eAAgB,SAAQ,aAAa;IAC9C;;OAEG;gBAES,IAAI,EAAE,WAAW;IAIhB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI1D,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAK5D,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAW9C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAUtD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcxC,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAW/B,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IAmB9C,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAO9E,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAYpD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAWtD,YAAY,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAUjC,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAUlC,WAAW,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;IAU9B,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAgB/C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAavD,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAgBjF,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkB3E,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAehF,sBAAsB,IAAI,OAAO,CAAC,MAAM,CAAC;IAUzC,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAc9C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;YAgB/C,yBAAyB;CAgB1C"}
@@ -0,0 +1,249 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SecurityService = void 0;
4
+ const ObjectService_1 = require("./ObjectService");
5
+ const User_1 = require("../objects/User");
6
+ const Utils_1 = require("../utils/Utils");
7
+ class SecurityService extends ObjectService_1.ObjectService {
8
+ /** Service to handle Security stuff
9
+ *
10
+ */
11
+ constructor(rest) {
12
+ super(rest);
13
+ }
14
+ async determineActualUserName(userName) {
15
+ return await this.determineActualObjectName("Users", userName);
16
+ }
17
+ async determineActualGroupName(groupName) {
18
+ return await this.determineActualObjectName("Groups", groupName);
19
+ }
20
+ async createUser(user) {
21
+ /** Create a user on TM1 Server
22
+ *
23
+ * :param user: instance of .User
24
+ * :return: response
25
+ */
26
+ const url = '/Users';
27
+ return await this.rest.post(url, user.body);
28
+ }
29
+ async createGroup(groupName) {
30
+ /** Create a Security group in the TM1 Server
31
+ *
32
+ * :param group_name:
33
+ * :return:
34
+ */
35
+ const url = '/Groups';
36
+ return await this.rest.post(url, JSON.stringify({ Name: groupName }));
37
+ }
38
+ async getUser(userName) {
39
+ /** Get user from TM1 Server
40
+ *
41
+ * :param user_name:
42
+ * :return: instance of .User
43
+ */
44
+ const actualUserName = await this.determineActualUserName(userName);
45
+ const url = (0, Utils_1.formatUrl)("/Users('{}')?$select=Name,FriendlyName,Password,Type,Enabled&$expand=Groups", actualUserName);
46
+ const response = await this.rest.get(url);
47
+ return User_1.User.fromDict(response.data);
48
+ }
49
+ async getCurrentUser() {
50
+ /** Get user and group assignments of this session
51
+ *
52
+ * :return: instance of .User
53
+ */
54
+ const url = "/ActiveUser?$select=Name,FriendlyName,Password,Type,Enabled&$expand=Groups";
55
+ const response = await this.rest.get(url);
56
+ return User_1.User.fromDict(response.data);
57
+ }
58
+ async updateUser(user) {
59
+ /** Update user on TM1 Server
60
+ *
61
+ * :param user: instance of .User
62
+ * :return: response
63
+ */
64
+ user.name = await this.determineActualUserName(user.name);
65
+ const currentGroups = await this.getGroups(user.name);
66
+ for (const currentGroup of currentGroups) {
67
+ if (!user.groups.includes(currentGroup)) {
68
+ await this.removeUserFromGroup(currentGroup, user.name);
69
+ }
70
+ }
71
+ const url = (0, Utils_1.formatUrl)("/Users('{}')", user.name);
72
+ return await this.rest.patch(url, user.body);
73
+ }
74
+ async updateUserPassword(userName, password) {
75
+ const url = (0, Utils_1.formatUrl)("/Users('{}')", userName);
76
+ const body = { Password: password };
77
+ return await this.rest.patch(url, JSON.stringify(body));
78
+ }
79
+ async deleteUser(userName) {
80
+ /** Delete user on TM1 Server
81
+ *
82
+ * :param user_name:
83
+ * :return: response
84
+ */
85
+ const actualUserName = await this.determineActualUserName(userName);
86
+ const url = (0, Utils_1.formatUrl)("/Users('{}')", actualUserName);
87
+ return await this.rest.delete(url);
88
+ }
89
+ async deleteGroup(groupName) {
90
+ /** Delete a Security group in the TM1 Server
91
+ *
92
+ * :param group_name:
93
+ * :return: response
94
+ */
95
+ const actualGroupName = await this.determineActualGroupName(groupName);
96
+ const url = (0, Utils_1.formatUrl)("/Groups('{}')", actualGroupName);
97
+ return await this.rest.delete(url);
98
+ }
99
+ async getUserNames() {
100
+ /** Get all user names
101
+ *
102
+ * :return: List of user names
103
+ */
104
+ const url = "/Users?$select=Name";
105
+ const response = await this.rest.get(url);
106
+ return response.data.value.map((user) => user.Name);
107
+ }
108
+ async getGroupNames() {
109
+ /** Get all group names
110
+ *
111
+ * :return: List of group names
112
+ */
113
+ const url = "/Groups?$select=Name";
114
+ const response = await this.rest.get(url);
115
+ return response.data.value.map((group) => group.Name);
116
+ }
117
+ async getAllUsers() {
118
+ /** Get all users
119
+ *
120
+ * :return: List of User instances
121
+ */
122
+ const url = "/Users?$select=Name,FriendlyName,Password,Type,Enabled&$expand=Groups";
123
+ const response = await this.rest.get(url);
124
+ return response.data.value.map((userDict) => User_1.User.fromDict(userDict));
125
+ }
126
+ async getGroups(userName) {
127
+ /** Get groups for a user or all groups
128
+ *
129
+ * :param user_name: Optional user name
130
+ * :return: List of group names
131
+ */
132
+ if (userName) {
133
+ const actualUserName = await this.determineActualUserName(userName);
134
+ const url = (0, Utils_1.formatUrl)("/Users('{}')/Groups?$select=Name", actualUserName);
135
+ const response = await this.rest.get(url);
136
+ return response.data.value.map((group) => group.Name);
137
+ }
138
+ else {
139
+ return await this.getGroupNames();
140
+ }
141
+ }
142
+ async getUsersFromGroup(groupName) {
143
+ /** Get users that belong to a group
144
+ *
145
+ * :param group_name: name of the group
146
+ * :return: List of user names
147
+ */
148
+ const actualGroupName = await this.determineActualGroupName(groupName);
149
+ const url = (0, Utils_1.formatUrl)("/Groups('{}')/Users?$select=Name", actualGroupName);
150
+ const response = await this.rest.get(url);
151
+ return response.data.value.map((user) => user.Name);
152
+ }
153
+ async addUserToGroups(userName, groupNames) {
154
+ /** Add user to multiple groups
155
+ *
156
+ * :param user_name: name of the user
157
+ * :param group_names: list of group names
158
+ * :return: list of responses
159
+ */
160
+ const responses = [];
161
+ for (const groupName of groupNames) {
162
+ const response = await this.addUserToGroup(groupName, userName);
163
+ responses.push(response);
164
+ }
165
+ return responses;
166
+ }
167
+ async addUserToGroup(groupName, userName) {
168
+ /** Add user to a group
169
+ *
170
+ * :param group_name: name of the group
171
+ * :param user_name: name of the user
172
+ * :return: response
173
+ */
174
+ const actualGroupName = await this.determineActualGroupName(groupName);
175
+ const actualUserName = await this.determineActualUserName(userName);
176
+ const url = (0, Utils_1.formatUrl)("/Groups('{}')/Users", actualGroupName);
177
+ const body = {
178
+ '@odata.id': `Users('${actualUserName}')`
179
+ };
180
+ return await this.rest.post(url, JSON.stringify(body));
181
+ }
182
+ async removeUserFromGroup(groupName, userName) {
183
+ /** Remove user from a group
184
+ *
185
+ * :param group_name: name of the group
186
+ * :param user_name: name of the user
187
+ * :return: response
188
+ */
189
+ const actualGroupName = await this.determineActualGroupName(groupName);
190
+ const actualUserName = await this.determineActualUserName(userName);
191
+ const url = (0, Utils_1.formatUrl)("/Groups('{}')/Users('{}')", actualGroupName, actualUserName);
192
+ return await this.rest.delete(url);
193
+ }
194
+ async getSecurityRefreshTime() {
195
+ /** Get security refresh time in seconds
196
+ *
197
+ * :return: security refresh time
198
+ */
199
+ const url = "/StaticConfiguration/ServerSettings('SecurityRefreshTime')";
200
+ const response = await this.rest.get(url);
201
+ return parseInt(response.data.Value);
202
+ }
203
+ async userExists(userName) {
204
+ /** Check if user exists
205
+ *
206
+ * :param user_name: name of the user
207
+ * :return: True if user exists
208
+ */
209
+ try {
210
+ await this.getUser(userName);
211
+ return true;
212
+ }
213
+ catch (_a) {
214
+ return false;
215
+ }
216
+ }
217
+ async groupExists(groupName) {
218
+ /** Check if group exists
219
+ *
220
+ * :param group_name: name of the group
221
+ * :return: True if group exists
222
+ */
223
+ try {
224
+ const actualGroupName = await this.determineActualGroupName(groupName);
225
+ const url = (0, Utils_1.formatUrl)("/Groups('{}')", actualGroupName);
226
+ await this.rest.get(url);
227
+ return true;
228
+ }
229
+ catch (_a) {
230
+ return false;
231
+ }
232
+ }
233
+ async determineActualObjectName(objectClass, objectName) {
234
+ /** Determine the actual object name (case-sensitive) from TM1 Server
235
+ *
236
+ * :param object_class: 'Users' or 'Groups'
237
+ * :param object_name: name to look for
238
+ * :return: actual object name
239
+ */
240
+ const url = `/${objectClass}?$select=Name&$filter=tolower(Name) eq '${objectName.toLowerCase()}'`;
241
+ const response = await this.rest.get(url);
242
+ if (response.data.value && response.data.value.length > 0) {
243
+ return response.data.value[0].Name;
244
+ }
245
+ return objectName; // fallback to original name
246
+ }
247
+ }
248
+ exports.SecurityService = SecurityService;
249
+ //# sourceMappingURL=SecurityService.js.map