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.
- package/.env.example +16 -0
- package/.eslintrc.js +28 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +36 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/.github/ISSUE_TEMPLATE/question.md +24 -0
- package/.github/workflows/publish-npm.yml +53 -0
- package/.github/workflows/test-on-tag.yml +172 -0
- package/DEVELOPMENT_GUIDE.md +587 -0
- package/LICENSE +21 -0
- package/README.md +580 -0
- package/jest.ci.config.js +83 -0
- package/jest.config.js +68 -0
- package/lib/exceptions/TM1Exception.d.ts +17 -0
- package/lib/exceptions/TM1Exception.d.ts.map +1 -0
- package/lib/exceptions/TM1Exception.js +36 -0
- package/lib/exceptions/TM1RestException.d.ts +10 -0
- package/lib/exceptions/TM1RestException.d.ts.map +1 -0
- package/lib/exceptions/TM1RestException.js +17 -0
- package/lib/exceptions/TM1TimeoutException.d.ts +9 -0
- package/lib/exceptions/TM1TimeoutException.d.ts.map +1 -0
- package/lib/exceptions/TM1TimeoutException.js +16 -0
- package/lib/index.d.ts +41 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +132 -0
- package/lib/objects/Annotation.d.ts +36 -0
- package/lib/objects/Annotation.d.ts.map +1 -0
- package/lib/objects/Annotation.js +134 -0
- package/lib/objects/Application.d.ts +67 -0
- package/lib/objects/Application.d.ts.map +1 -0
- package/lib/objects/Application.js +125 -0
- package/lib/objects/Axis.d.ts +36 -0
- package/lib/objects/Axis.d.ts.map +1 -0
- package/lib/objects/Axis.js +103 -0
- package/lib/objects/Chore.d.ts +43 -0
- package/lib/objects/Chore.d.ts.map +1 -0
- package/lib/objects/Chore.js +129 -0
- package/lib/objects/ChoreFrequency.d.ts +23 -0
- package/lib/objects/ChoreFrequency.d.ts.map +1 -0
- package/lib/objects/ChoreFrequency.js +61 -0
- package/lib/objects/ChoreStartTime.d.ts +15 -0
- package/lib/objects/ChoreStartTime.d.ts.map +1 -0
- package/lib/objects/ChoreStartTime.js +85 -0
- package/lib/objects/ChoreTask.d.ts +28 -0
- package/lib/objects/ChoreTask.d.ts.map +1 -0
- package/lib/objects/ChoreTask.js +66 -0
- package/lib/objects/Cube.d.ts +26 -0
- package/lib/objects/Cube.d.ts.map +1 -0
- package/lib/objects/Cube.js +109 -0
- package/lib/objects/Dimension.d.ts +26 -0
- package/lib/objects/Dimension.d.ts.map +1 -0
- package/lib/objects/Dimension.js +86 -0
- package/lib/objects/Element.d.ts +35 -0
- package/lib/objects/Element.d.ts.map +1 -0
- package/lib/objects/Element.js +115 -0
- package/lib/objects/ElementAttribute.d.ts +28 -0
- package/lib/objects/ElementAttribute.d.ts.map +1 -0
- package/lib/objects/ElementAttribute.js +97 -0
- package/lib/objects/Git.d.ts +21 -0
- package/lib/objects/Git.d.ts.map +1 -0
- package/lib/objects/Git.js +49 -0
- package/lib/objects/GitCommit.d.ts +12 -0
- package/lib/objects/GitCommit.d.ts.map +1 -0
- package/lib/objects/GitCommit.js +26 -0
- package/lib/objects/GitPlan.d.ts +35 -0
- package/lib/objects/GitPlan.d.ts.map +1 -0
- package/lib/objects/GitPlan.js +78 -0
- package/lib/objects/GitRemote.d.ts +12 -0
- package/lib/objects/GitRemote.d.ts.map +1 -0
- package/lib/objects/GitRemote.js +26 -0
- package/lib/objects/Hierarchy.d.ts +47 -0
- package/lib/objects/Hierarchy.d.ts.map +1 -0
- package/lib/objects/Hierarchy.js +165 -0
- package/lib/objects/MDXView.d.ts +19 -0
- package/lib/objects/MDXView.d.ts.map +1 -0
- package/lib/objects/MDXView.js +67 -0
- package/lib/objects/NativeView.d.ts +39 -0
- package/lib/objects/NativeView.d.ts.map +1 -0
- package/lib/objects/NativeView.js +209 -0
- package/lib/objects/Process.d.ts +70 -0
- package/lib/objects/Process.d.ts.map +1 -0
- package/lib/objects/Process.js +210 -0
- package/lib/objects/ProcessDebugBreakpoint.d.ts +60 -0
- package/lib/objects/ProcessDebugBreakpoint.d.ts.map +1 -0
- package/lib/objects/ProcessDebugBreakpoint.js +168 -0
- package/lib/objects/ProcessParameter.d.ts +23 -0
- package/lib/objects/ProcessParameter.d.ts.map +1 -0
- package/lib/objects/ProcessParameter.js +55 -0
- package/lib/objects/ProcessVariable.d.ts +26 -0
- package/lib/objects/ProcessVariable.d.ts.map +1 -0
- package/lib/objects/ProcessVariable.js +63 -0
- package/lib/objects/Rules.d.ts +30 -0
- package/lib/objects/Rules.d.ts.map +1 -0
- package/lib/objects/Rules.js +103 -0
- package/lib/objects/Sandbox.d.ts +21 -0
- package/lib/objects/Sandbox.d.ts.map +1 -0
- package/lib/objects/Sandbox.js +64 -0
- package/lib/objects/Server.d.ts +27 -0
- package/lib/objects/Server.d.ts.map +1 -0
- package/lib/objects/Server.js +26 -0
- package/lib/objects/Subset.d.ts +44 -0
- package/lib/objects/Subset.d.ts.map +1 -0
- package/lib/objects/Subset.js +222 -0
- package/lib/objects/TM1Object.d.ts +8 -0
- package/lib/objects/TM1Object.d.ts.map +1 -0
- package/lib/objects/TM1Object.js +17 -0
- package/lib/objects/TM1Project.d.ts +74 -0
- package/lib/objects/TM1Project.d.ts.map +1 -0
- package/lib/objects/TM1Project.js +409 -0
- package/lib/objects/User.d.ts +42 -0
- package/lib/objects/User.d.ts.map +1 -0
- package/lib/objects/User.js +157 -0
- package/lib/objects/View.d.ts +19 -0
- package/lib/objects/View.d.ts.map +1 -0
- package/lib/objects/View.js +33 -0
- package/lib/objects/index.d.ts +30 -0
- package/lib/objects/index.d.ts.map +1 -0
- package/lib/objects/index.js +68 -0
- package/lib/services/AnnotationService.d.ts +17 -0
- package/lib/services/AnnotationService.d.ts.map +1 -0
- package/lib/services/AnnotationService.js +91 -0
- package/lib/services/ApplicationService.d.ts +21 -0
- package/lib/services/ApplicationService.d.ts.map +1 -0
- package/lib/services/ApplicationService.js +227 -0
- package/lib/services/AuditLogService.d.ts +15 -0
- package/lib/services/AuditLogService.d.ts.map +1 -0
- package/lib/services/AuditLogService.js +153 -0
- package/lib/services/CellService.d.ts +191 -0
- package/lib/services/CellService.d.ts.map +1 -0
- package/lib/services/CellService.js +597 -0
- package/lib/services/ChoreService.d.ts +24 -0
- package/lib/services/ChoreService.d.ts.map +1 -0
- package/lib/services/ChoreService.js +219 -0
- package/lib/services/ConfigurationService.d.ts +18 -0
- package/lib/services/ConfigurationService.d.ts.map +1 -0
- package/lib/services/ConfigurationService.js +60 -0
- package/lib/services/CubeService.d.ts +43 -0
- package/lib/services/CubeService.d.ts.map +1 -0
- package/lib/services/CubeService.js +296 -0
- package/lib/services/DimensionService.d.ts +21 -0
- package/lib/services/DimensionService.d.ts.map +1 -0
- package/lib/services/DimensionService.js +146 -0
- package/lib/services/ElementService.d.ts +132 -0
- package/lib/services/ElementService.d.ts.map +1 -0
- package/lib/services/ElementService.js +579 -0
- package/lib/services/FileService.d.ts +14 -0
- package/lib/services/FileService.d.ts.map +1 -0
- package/lib/services/FileService.js +65 -0
- package/lib/services/GitService.d.ts +23 -0
- package/lib/services/GitService.d.ts.map +1 -0
- package/lib/services/GitService.js +225 -0
- package/lib/services/HierarchyService.d.ts +32 -0
- package/lib/services/HierarchyService.d.ts.map +1 -0
- package/lib/services/HierarchyService.js +235 -0
- package/lib/services/JobService.d.ts +13 -0
- package/lib/services/JobService.d.ts.map +1 -0
- package/lib/services/JobService.js +83 -0
- package/lib/services/LoggerService.d.ts +16 -0
- package/lib/services/LoggerService.d.ts.map +1 -0
- package/lib/services/LoggerService.js +101 -0
- package/lib/services/ManageService.d.ts +47 -0
- package/lib/services/ManageService.d.ts.map +1 -0
- package/lib/services/ManageService.js +221 -0
- package/lib/services/MessageLogService.d.ts +13 -0
- package/lib/services/MessageLogService.d.ts.map +1 -0
- package/lib/services/MessageLogService.js +175 -0
- package/lib/services/MonitoringService.d.ts +29 -0
- package/lib/services/MonitoringService.d.ts.map +1 -0
- package/lib/services/MonitoringService.js +86 -0
- package/lib/services/ObjectService.d.ts +8 -0
- package/lib/services/ObjectService.d.ts.map +1 -0
- package/lib/services/ObjectService.js +20 -0
- package/lib/services/PowerBiService.d.ts +13 -0
- package/lib/services/PowerBiService.d.ts.map +1 -0
- package/lib/services/PowerBiService.js +52 -0
- package/lib/services/ProcessService.d.ts +57 -0
- package/lib/services/ProcessService.d.ts.map +1 -0
- package/lib/services/ProcessService.js +499 -0
- package/lib/services/RestService.d.ts +68 -0
- package/lib/services/RestService.d.ts.map +1 -0
- package/lib/services/RestService.js +166 -0
- package/lib/services/SandboxService.d.ts +28 -0
- package/lib/services/SandboxService.d.ts.map +1 -0
- package/lib/services/SandboxService.js +197 -0
- package/lib/services/SecurityService.d.ts +33 -0
- package/lib/services/SecurityService.d.ts.map +1 -0
- package/lib/services/SecurityService.js +249 -0
- package/lib/services/ServerService.d.ts +55 -0
- package/lib/services/ServerService.d.ts.map +1 -0
- package/lib/services/ServerService.js +247 -0
- package/lib/services/SessionService.d.ts +15 -0
- package/lib/services/SessionService.d.ts.map +1 -0
- package/lib/services/SessionService.js +68 -0
- package/lib/services/SubsetService.d.ts +13 -0
- package/lib/services/SubsetService.d.ts.map +1 -0
- package/lib/services/SubsetService.js +46 -0
- package/lib/services/TM1Service.d.ts +39 -0
- package/lib/services/TM1Service.d.ts.map +1 -0
- package/lib/services/TM1Service.js +94 -0
- package/lib/services/ThreadService.d.ts +15 -0
- package/lib/services/ThreadService.d.ts.map +1 -0
- package/lib/services/ThreadService.js +104 -0
- package/lib/services/TransactionLogService.d.ts +11 -0
- package/lib/services/TransactionLogService.d.ts.map +1 -0
- package/lib/services/TransactionLogService.js +124 -0
- package/lib/services/UserService.d.ts +14 -0
- package/lib/services/UserService.d.ts.map +1 -0
- package/lib/services/UserService.js +103 -0
- package/lib/services/ViewService.d.ts +30 -0
- package/lib/services/ViewService.d.ts.map +1 -0
- package/lib/services/ViewService.js +331 -0
- package/lib/services/index.d.ts +26 -0
- package/lib/services/index.d.ts.map +1 -0
- package/lib/services/index.js +56 -0
- package/lib/tests/100PercentParityCheck.test.d.ts +6 -0
- package/lib/tests/100PercentParityCheck.test.d.ts.map +1 -0
- package/lib/tests/100PercentParityCheck.test.js +143 -0
- package/lib/tests/basic.test.d.ts +6 -0
- package/lib/tests/basic.test.d.ts.map +1 -0
- package/lib/tests/basic.test.js +52 -0
- package/lib/tests/cellService.test.d.ts +6 -0
- package/lib/tests/cellService.test.d.ts.map +1 -0
- package/lib/tests/cellService.test.js +311 -0
- package/lib/tests/ciSetup.d.ts +6 -0
- package/lib/tests/ciSetup.d.ts.map +1 -0
- package/lib/tests/ciSetup.js +23 -0
- package/lib/tests/comprehensive.service.test.d.ts +6 -0
- package/lib/tests/comprehensive.service.test.d.ts.map +1 -0
- package/lib/tests/comprehensive.service.test.js +507 -0
- package/lib/tests/connection.test.d.ts +6 -0
- package/lib/tests/connection.test.d.ts.map +1 -0
- package/lib/tests/connection.test.js +89 -0
- package/lib/tests/cubeService.test.d.ts +6 -0
- package/lib/tests/cubeService.test.d.ts.map +1 -0
- package/lib/tests/cubeService.test.js +368 -0
- package/lib/tests/dimensionService.comprehensive.test.d.ts +7 -0
- package/lib/tests/dimensionService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/dimensionService.comprehensive.test.js +614 -0
- package/lib/tests/dimensionService.test.d.ts +6 -0
- package/lib/tests/dimensionService.test.d.ts.map +1 -0
- package/lib/tests/dimensionService.test.js +293 -0
- package/lib/tests/edgeCases.test.d.ts +6 -0
- package/lib/tests/edgeCases.test.d.ts.map +1 -0
- package/lib/tests/edgeCases.test.js +301 -0
- package/lib/tests/elementService.comprehensive.test.d.ts +7 -0
- package/lib/tests/elementService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/elementService.comprehensive.test.js +846 -0
- package/lib/tests/elementService.test.d.ts +6 -0
- package/lib/tests/elementService.test.d.ts.map +1 -0
- package/lib/tests/elementService.test.js +350 -0
- package/lib/tests/enhancedCellService.test.d.ts +2 -0
- package/lib/tests/enhancedCellService.test.d.ts.map +1 -0
- package/lib/tests/enhancedCellService.test.js +152 -0
- package/lib/tests/enhancedCubeService.test.d.ts +2 -0
- package/lib/tests/enhancedCubeService.test.d.ts.map +1 -0
- package/lib/tests/enhancedCubeService.test.js +246 -0
- package/lib/tests/enhancedElementService.test.d.ts +2 -0
- package/lib/tests/enhancedElementService.test.d.ts.map +1 -0
- package/lib/tests/enhancedElementService.test.js +199 -0
- package/lib/tests/enhancedViewService.test.d.ts +2 -0
- package/lib/tests/enhancedViewService.test.d.ts.map +1 -0
- package/lib/tests/enhancedViewService.test.js +260 -0
- package/lib/tests/errorHandling.test.d.ts +6 -0
- package/lib/tests/errorHandling.test.d.ts.map +1 -0
- package/lib/tests/errorHandling.test.js +227 -0
- package/lib/tests/exceptions.test.d.ts +7 -0
- package/lib/tests/exceptions.test.d.ts.map +1 -0
- package/lib/tests/exceptions.test.js +257 -0
- package/lib/tests/hierarchyService.test.d.ts +6 -0
- package/lib/tests/hierarchyService.test.d.ts.map +1 -0
- package/lib/tests/hierarchyService.test.js +294 -0
- package/lib/tests/index.test.d.ts +6 -0
- package/lib/tests/index.test.d.ts.map +1 -0
- package/lib/tests/index.test.js +346 -0
- package/lib/tests/integration.test.d.ts +6 -0
- package/lib/tests/integration.test.d.ts.map +1 -0
- package/lib/tests/integration.test.js +302 -0
- package/lib/tests/integrationTests.test.d.ts +2 -0
- package/lib/tests/integrationTests.test.d.ts.map +1 -0
- package/lib/tests/integrationTests.test.js +252 -0
- package/lib/tests/mdx.advanced.test.d.ts +6 -0
- package/lib/tests/mdx.advanced.test.d.ts.map +1 -0
- package/lib/tests/mdx.advanced.test.js +437 -0
- package/lib/tests/objects.improved.test.d.ts +7 -0
- package/lib/tests/objects.improved.test.d.ts.map +1 -0
- package/lib/tests/objects.improved.test.js +302 -0
- package/lib/tests/performance.test.d.ts +6 -0
- package/lib/tests/performance.test.d.ts.map +1 -0
- package/lib/tests/performance.test.js +264 -0
- package/lib/tests/processService.comprehensive.test.d.ts +7 -0
- package/lib/tests/processService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/processService.comprehensive.test.js +656 -0
- package/lib/tests/processService.test.d.ts +6 -0
- package/lib/tests/processService.test.d.ts.map +1 -0
- package/lib/tests/processService.test.js +322 -0
- package/lib/tests/restService.test.d.ts +6 -0
- package/lib/tests/restService.test.d.ts.map +1 -0
- package/lib/tests/restService.test.js +177 -0
- package/lib/tests/security.advanced.test.d.ts +6 -0
- package/lib/tests/security.advanced.test.d.ts.map +1 -0
- package/lib/tests/security.advanced.test.js +407 -0
- package/lib/tests/security.test.d.ts +6 -0
- package/lib/tests/security.test.d.ts.map +1 -0
- package/lib/tests/security.test.js +204 -0
- package/lib/tests/securityService.comprehensive.test.d.ts +7 -0
- package/lib/tests/securityService.comprehensive.test.d.ts.map +1 -0
- package/lib/tests/securityService.comprehensive.test.js +457 -0
- package/lib/tests/setup.d.ts +4 -0
- package/lib/tests/setup.d.ts.map +1 -0
- package/lib/tests/setup.js +40 -0
- package/lib/tests/simpleCoverage.test.d.ts +6 -0
- package/lib/tests/simpleCoverage.test.d.ts.map +1 -0
- package/lib/tests/simpleCoverage.test.js +236 -0
- package/lib/tests/stress.performance.test.d.ts +6 -0
- package/lib/tests/stress.performance.test.d.ts.map +1 -0
- package/lib/tests/stress.performance.test.js +423 -0
- package/lib/tests/subsetService.test.d.ts +6 -0
- package/lib/tests/subsetService.test.d.ts.map +1 -0
- package/lib/tests/subsetService.test.js +271 -0
- package/lib/tests/testConfig.d.ts +18 -0
- package/lib/tests/testConfig.d.ts.map +1 -0
- package/lib/tests/testConfig.js +38 -0
- package/lib/tests/testUtils.d.ts +9 -0
- package/lib/tests/testUtils.d.ts.map +1 -0
- package/lib/tests/testUtils.js +100 -0
- package/lib/tests/tm1Service.test.d.ts +7 -0
- package/lib/tests/tm1Service.test.d.ts.map +1 -0
- package/lib/tests/tm1Service.test.js +290 -0
- package/lib/tests/viewService.test.d.ts +6 -0
- package/lib/tests/viewService.test.d.ts.map +1 -0
- package/lib/tests/viewService.test.js +240 -0
- package/lib/utils/Utils.d.ts +90 -0
- package/lib/utils/Utils.d.ts.map +1 -0
- package/lib/utils/Utils.js +379 -0
- package/package.json +81 -0
- package/run-all-tests.js +296 -0
- package/src/exceptions/TM1Exception.ts +38 -0
- package/src/exceptions/TM1RestException.ts +17 -0
- package/src/exceptions/TM1TimeoutException.ts +15 -0
- package/src/index.ts +94 -0
- package/src/objects/Annotation.ts +194 -0
- package/src/objects/Application.ts +146 -0
- package/src/objects/Axis.ts +149 -0
- package/src/objects/Chore.ts +174 -0
- package/src/objects/ChoreFrequency.ts +83 -0
- package/src/objects/ChoreStartTime.ts +111 -0
- package/src/objects/ChoreTask.ts +92 -0
- package/src/objects/Cube.ts +125 -0
- package/src/objects/Dimension.ts +107 -0
- package/src/objects/Element.ts +153 -0
- package/src/objects/ElementAttribute.ts +115 -0
- package/src/objects/Git.ts +86 -0
- package/src/objects/GitCommit.ts +31 -0
- package/src/objects/GitPlan.ts +121 -0
- package/src/objects/GitRemote.ts +31 -0
- package/src/objects/Hierarchy.ts +229 -0
- package/src/objects/MDXView.ts +91 -0
- package/src/objects/NativeView.ts +268 -0
- package/src/objects/Process.ts +320 -0
- package/src/objects/ProcessDebugBreakpoint.ts +239 -0
- package/src/objects/ProcessParameter.ts +76 -0
- package/src/objects/ProcessVariable.ts +89 -0
- package/src/objects/Rules.ts +117 -0
- package/src/objects/Sandbox.ts +90 -0
- package/src/objects/Server.ts +45 -0
- package/src/objects/Subset.ts +323 -0
- package/src/objects/TM1Object.ts +17 -0
- package/src/objects/TM1Project.ts +587 -0
- package/src/objects/User.ts +198 -0
- package/src/objects/View.ts +43 -0
- package/src/objects/index.ts +36 -0
- package/src/services/AnnotationService.ts +107 -0
- package/src/services/ApplicationService.ts +279 -0
- package/src/services/AuditLogService.ts +172 -0
- package/src/services/CellService.ts +814 -0
- package/src/services/ChoreService.ts +219 -0
- package/src/services/ConfigurationService.ts +69 -0
- package/src/services/CubeService.ts +338 -0
- package/src/services/DimensionService.ts +168 -0
- package/src/services/ElementService.ts +966 -0
- package/src/services/FileService.ts +67 -0
- package/src/services/GitService.ts +324 -0
- package/src/services/HierarchyService.ts +284 -0
- package/src/services/JobService.ts +59 -0
- package/src/services/LoggerService.ts +118 -0
- package/src/services/ManageService.ts +322 -0
- package/src/services/MessageLogService.ts +211 -0
- package/src/services/MonitoringService.ts +105 -0
- package/src/services/ObjectService.ts +21 -0
- package/src/services/PowerBiService.ts +85 -0
- package/src/services/ProcessService.ts +589 -0
- package/src/services/RestService.ts +224 -0
- package/src/services/SandboxService.ts +217 -0
- package/src/services/SecurityService.ts +284 -0
- package/src/services/ServerService.ts +313 -0
- package/src/services/SessionService.ts +81 -0
- package/src/services/SubsetService.ts +52 -0
- package/src/services/TM1Service.ts +133 -0
- package/src/services/ThreadService.ts +83 -0
- package/src/services/TransactionLogService.ts +148 -0
- package/src/services/UserService.ts +77 -0
- package/src/services/ViewService.ts +398 -0
- package/src/services/index.ts +28 -0
- package/src/tests/100PercentParityCheck.test.ts +166 -0
- package/src/tests/basic.test.ts +59 -0
- package/src/tests/cellService.test.ts +405 -0
- package/src/tests/ciSetup.ts +26 -0
- package/src/tests/comprehensive.service.test.ts +653 -0
- package/src/tests/config.ini.template +23 -0
- package/src/tests/connection.test.ts +90 -0
- package/src/tests/cubeService.test.ts +458 -0
- package/src/tests/dimensionService.comprehensive.test.ts +786 -0
- package/src/tests/dimensionService.test.ts +373 -0
- package/src/tests/edgeCases.test.ts +358 -0
- package/src/tests/elementService.comprehensive.test.ts +1190 -0
- package/src/tests/elementService.test.ts +472 -0
- package/src/tests/enhancedCellService.test.ts +237 -0
- package/src/tests/enhancedCubeService.test.ts +384 -0
- package/src/tests/enhancedElementService.test.ts +301 -0
- package/src/tests/enhancedViewService.test.ts +373 -0
- package/src/tests/errorHandling.test.ts +264 -0
- package/src/tests/exceptions.test.ts +313 -0
- package/src/tests/hierarchyService.test.ts +386 -0
- package/src/tests/index.test.ts +376 -0
- package/src/tests/integration.test.ts +333 -0
- package/src/tests/integrationTests.test.ts +302 -0
- package/src/tests/mdx.advanced.test.ts +513 -0
- package/src/tests/objects.improved.test.ts +385 -0
- package/src/tests/performance.test.ts +314 -0
- package/src/tests/processService.comprehensive.test.ts +933 -0
- package/src/tests/processService.test.ts +409 -0
- package/src/tests/restService.test.ts +218 -0
- package/src/tests/security.advanced.test.ts +464 -0
- package/src/tests/security.test.ts +233 -0
- package/src/tests/securityService.comprehensive.test.ts +582 -0
- package/src/tests/setup.ts +42 -0
- package/src/tests/simpleCoverage.test.ts +287 -0
- package/src/tests/stress.performance.test.ts +531 -0
- package/src/tests/subsetService.test.ts +350 -0
- package/src/tests/testConfig.ts +53 -0
- package/src/tests/testUtils.ts +94 -0
- package/src/tests/tm1Service.test.ts +361 -0
- package/src/tests/viewService.test.ts +324 -0
- package/src/utils/Utils.ts +395 -0
- package/tests/README.md +57 -0
- package/tests/connection/test-connection.ts +86 -0
- package/tests/edge-cases/edge-cases-test.ts +244 -0
- package/tests/integration/working-test.ts +193 -0
- package/tests/performance/performance-test.ts +133 -0
- package/tests/run-all-tests.sh +106 -0
- package/tests/security/security-test.ts +103 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import axios, { AxiosInstance, AxiosResponse, AxiosRequestConfig } from 'axios';
|
|
2
|
+
import { TM1RestException, TM1TimeoutException } from '../exceptions/TM1Exception';
|
|
3
|
+
|
|
4
|
+
export enum AuthenticationMode {
|
|
5
|
+
BASIC = 1,
|
|
6
|
+
WIA = 2,
|
|
7
|
+
CAM = 3,
|
|
8
|
+
CAM_SSO = 4,
|
|
9
|
+
IBM_CLOUD_API_KEY = 5,
|
|
10
|
+
SERVICE_TO_SERVICE = 6,
|
|
11
|
+
PA_PROXY = 7,
|
|
12
|
+
BASIC_API_KEY = 8,
|
|
13
|
+
ACCESS_TOKEN = 9
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface RestServiceConfig {
|
|
17
|
+
address?: string;
|
|
18
|
+
port?: number;
|
|
19
|
+
ssl?: boolean;
|
|
20
|
+
baseUrl?: string;
|
|
21
|
+
user?: string;
|
|
22
|
+
password?: string;
|
|
23
|
+
decodeB64?: boolean;
|
|
24
|
+
namespace?: string;
|
|
25
|
+
sessionId?: string;
|
|
26
|
+
sessionContext?: string;
|
|
27
|
+
verify?: boolean | string;
|
|
28
|
+
timeout?: number;
|
|
29
|
+
cancelAtTimeout?: boolean;
|
|
30
|
+
asyncRequestsMode?: boolean;
|
|
31
|
+
connectionPoolSize?: number;
|
|
32
|
+
poolConnections?: number;
|
|
33
|
+
instance?: string;
|
|
34
|
+
database?: string;
|
|
35
|
+
authUrl?: string;
|
|
36
|
+
camPassport?: string;
|
|
37
|
+
applicationClientId?: string;
|
|
38
|
+
applicationClientSecret?: string;
|
|
39
|
+
apiKey?: string;
|
|
40
|
+
accessToken?: string;
|
|
41
|
+
tenant?: string;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export class RestService {
|
|
45
|
+
private static readonly HEADERS = {
|
|
46
|
+
'Connection': 'keep-alive',
|
|
47
|
+
'User-Agent': 'tm1npm',
|
|
48
|
+
'Content-Type': 'application/json; odata.streaming=true; charset=utf-8',
|
|
49
|
+
'Accept': 'application/json;odata.metadata=none,text/plain',
|
|
50
|
+
'TM1-SessionContext': 'tm1npm'
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
private static readonly DEFAULT_CONNECTION_POOL_SIZE = 10;
|
|
54
|
+
private static readonly DEFAULT_POOL_CONNECTIONS = 1;
|
|
55
|
+
|
|
56
|
+
private axiosInstance!: AxiosInstance;
|
|
57
|
+
private config: RestServiceConfig;
|
|
58
|
+
private sessionId?: string;
|
|
59
|
+
private sandboxName?: string;
|
|
60
|
+
private isConnected: boolean = false;
|
|
61
|
+
public version?: string;
|
|
62
|
+
|
|
63
|
+
constructor(config: RestServiceConfig) {
|
|
64
|
+
this.config = { ...config };
|
|
65
|
+
this.setupAxiosInstance();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
private setupAxiosInstance(): void {
|
|
69
|
+
const baseURL = this.buildBaseUrl();
|
|
70
|
+
|
|
71
|
+
this.axiosInstance = axios.create({
|
|
72
|
+
baseURL,
|
|
73
|
+
timeout: (this.config.timeout || 60) * 1000,
|
|
74
|
+
headers: {
|
|
75
|
+
...RestService.HEADERS,
|
|
76
|
+
...(this.config.sessionContext && { 'TM1-SessionContext': this.config.sessionContext })
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
this.setupInterceptors();
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private buildBaseUrl(): string {
|
|
84
|
+
if (this.config.baseUrl) {
|
|
85
|
+
return this.config.baseUrl;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
const protocol = this.config.ssl ? 'https' : 'http';
|
|
89
|
+
const address = this.config.address || 'localhost';
|
|
90
|
+
const port = this.config.port || 8001;
|
|
91
|
+
|
|
92
|
+
return `${protocol}://${address}:${port}/api/v1`;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
private setupInterceptors(): void {
|
|
96
|
+
// Request interceptor
|
|
97
|
+
this.axiosInstance.interceptors.request.use(
|
|
98
|
+
(config) => {
|
|
99
|
+
if (this.sessionId) {
|
|
100
|
+
config.headers['TM1SessionId'] = this.sessionId;
|
|
101
|
+
}
|
|
102
|
+
if (this.sandboxName) {
|
|
103
|
+
config.headers['TM1-Sandbox'] = this.sandboxName;
|
|
104
|
+
}
|
|
105
|
+
return config;
|
|
106
|
+
},
|
|
107
|
+
(error) => Promise.reject(error)
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
// Response interceptor
|
|
111
|
+
this.axiosInstance.interceptors.response.use(
|
|
112
|
+
(response) => response,
|
|
113
|
+
(error) => {
|
|
114
|
+
if (error.code === 'ECONNABORTED' || error.message.includes('timeout')) {
|
|
115
|
+
throw new TM1TimeoutException(`Request timeout: ${error.message}`);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const response = error.response;
|
|
119
|
+
if (response) {
|
|
120
|
+
const message = this.extractErrorMessage(response);
|
|
121
|
+
throw new TM1RestException(message, response);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
throw new TM1RestException(error.message);
|
|
125
|
+
}
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
private extractErrorMessage(response: AxiosResponse): string {
|
|
130
|
+
try {
|
|
131
|
+
if (response.data && response.data.error) {
|
|
132
|
+
if (response.data.error.message) {
|
|
133
|
+
return response.data.error.message;
|
|
134
|
+
}
|
|
135
|
+
return JSON.stringify(response.data.error);
|
|
136
|
+
}
|
|
137
|
+
return `HTTP ${response.status}: ${response.statusText}`;
|
|
138
|
+
} catch {
|
|
139
|
+
return `HTTP ${response.status}: ${response.statusText}`;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
public async connect(): Promise<void> {
|
|
144
|
+
try {
|
|
145
|
+
// Basic authentication
|
|
146
|
+
if (this.config.user && this.config.password) {
|
|
147
|
+
const credentials = Buffer.from(`${this.config.user}:${this.config.password}`).toString('base64');
|
|
148
|
+
this.axiosInstance.defaults.headers.common['Authorization'] = `Basic ${credentials}`;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// Test connection
|
|
152
|
+
const response = await this.axiosInstance.get('/Configuration/ServerName');
|
|
153
|
+
|
|
154
|
+
// Extract session ID from response headers
|
|
155
|
+
const setCookie = response.headers['set-cookie'];
|
|
156
|
+
if (setCookie) {
|
|
157
|
+
for (const cookie of setCookie) {
|
|
158
|
+
const match = cookie.match(/TM1SessionId=([^;]+)/);
|
|
159
|
+
if (match) {
|
|
160
|
+
this.sessionId = match[1];
|
|
161
|
+
break;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
this.isConnected = true;
|
|
167
|
+
} catch (error) {
|
|
168
|
+
throw new TM1RestException(`Failed to connect to TM1: ${error}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
public async disconnect(): Promise<void> {
|
|
173
|
+
if (this.isConnected && this.sessionId) {
|
|
174
|
+
try {
|
|
175
|
+
await this.axiosInstance.post('/ActiveSession/tm1.Close', {});
|
|
176
|
+
} catch (error) {
|
|
177
|
+
// Ignore errors during disconnect
|
|
178
|
+
}
|
|
179
|
+
this.isConnected = false;
|
|
180
|
+
this.sessionId = undefined;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
public async get(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse> {
|
|
185
|
+
return this.axiosInstance.get(url, config);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
public async post(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse> {
|
|
189
|
+
return this.axiosInstance.post(url, data, config);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
public async patch(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse> {
|
|
193
|
+
return this.axiosInstance.patch(url, data, config);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
public async put(url: string, data?: any, config?: AxiosRequestConfig): Promise<AxiosResponse> {
|
|
197
|
+
return this.axiosInstance.put(url, data, config);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
public async delete(url: string, config?: AxiosRequestConfig): Promise<AxiosResponse> {
|
|
201
|
+
return this.axiosInstance.delete(url, config);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
public getSessionId(): string | undefined {
|
|
205
|
+
return this.sessionId;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
public setSandbox(sandboxName?: string): void {
|
|
209
|
+
this.sandboxName = sandboxName;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
public getSandbox(): string | undefined {
|
|
213
|
+
return this.sandboxName;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
public isLoggedIn(): boolean {
|
|
217
|
+
return this.isConnected && !!this.sessionId;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
public async getApiMetadata(): Promise<any> {
|
|
221
|
+
const response = await this.get("/$metadata");
|
|
222
|
+
return response.data;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import { AxiosResponse } from 'axios';
|
|
2
|
+
import { RestService } from './RestService';
|
|
3
|
+
import { ObjectService } from './ObjectService';
|
|
4
|
+
import { Sandbox } from '../objects/Sandbox';
|
|
5
|
+
import { TM1RestException } from '../exceptions/TM1Exception';
|
|
6
|
+
import { formatUrl } from '../utils/Utils';
|
|
7
|
+
|
|
8
|
+
export class SandboxService extends ObjectService {
|
|
9
|
+
/** Service to handle sandboxes in TM1
|
|
10
|
+
*
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
constructor(rest: RestService) {
|
|
14
|
+
super(rest);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
public async get(sandboxName: string): Promise<Sandbox> {
|
|
18
|
+
/** get a sandbox from TM1 Server
|
|
19
|
+
*
|
|
20
|
+
* :param sandbox_name: str
|
|
21
|
+
* :return: instance of .Sandbox
|
|
22
|
+
*/
|
|
23
|
+
const url = formatUrl("/Sandboxes('{}')", sandboxName);
|
|
24
|
+
const response = await this.rest.get(url);
|
|
25
|
+
const sandbox = Sandbox.fromJSON(JSON.stringify(response.data));
|
|
26
|
+
return sandbox;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public async getAll(): Promise<Sandbox[]> {
|
|
30
|
+
/** get all sandboxes from TM1 Server
|
|
31
|
+
*
|
|
32
|
+
* :return: List of .Sandbox instances
|
|
33
|
+
*/
|
|
34
|
+
const url = "/Sandboxes?$select=Name,IncludeInSandboxDimension,IsLoaded,IsActive,IsQueued";
|
|
35
|
+
const response = await this.rest.get(url);
|
|
36
|
+
const sandboxes = response.data.value.map((sandboxAsDict: any) =>
|
|
37
|
+
Sandbox.fromDict(sandboxAsDict)
|
|
38
|
+
);
|
|
39
|
+
return sandboxes;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
public async getAllNames(): Promise<string[]> {
|
|
43
|
+
/** get all sandbox names
|
|
44
|
+
*
|
|
45
|
+
* :param kwargs:
|
|
46
|
+
* :return:
|
|
47
|
+
*/
|
|
48
|
+
const url = "/Sandboxes?$select=Name";
|
|
49
|
+
const response = await this.rest.get(url);
|
|
50
|
+
return response.data.value.map((entry: any) => entry.Name);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
public async create(sandbox: Sandbox): Promise<AxiosResponse> {
|
|
54
|
+
/** create a new sandbox in TM1 Server
|
|
55
|
+
*
|
|
56
|
+
* :param sandbox: Sandbox
|
|
57
|
+
* :return: response
|
|
58
|
+
*/
|
|
59
|
+
const url = "/Sandboxes";
|
|
60
|
+
return await this.rest.post(url, sandbox.body);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
public async update(sandbox: Sandbox): Promise<AxiosResponse> {
|
|
64
|
+
/** update a sandbox in TM1
|
|
65
|
+
*
|
|
66
|
+
* :param sandbox:
|
|
67
|
+
* :return: response
|
|
68
|
+
*/
|
|
69
|
+
const url = formatUrl("/Sandboxes('{}')", sandbox.name);
|
|
70
|
+
return await this.rest.patch(url, sandbox.body);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
public async delete(sandboxName: string): Promise<AxiosResponse> {
|
|
74
|
+
/** delete a sandbox in TM1
|
|
75
|
+
*
|
|
76
|
+
* :param sandbox_name:
|
|
77
|
+
* :return: response
|
|
78
|
+
*/
|
|
79
|
+
const url = formatUrl("/Sandboxes('{}')", sandboxName);
|
|
80
|
+
return await this.rest.delete(url);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
public async publish(sandboxName: string): Promise<AxiosResponse> {
|
|
84
|
+
/** publish existing sandbox to base
|
|
85
|
+
*
|
|
86
|
+
* :param sandbox_name: str
|
|
87
|
+
* :return: response
|
|
88
|
+
*/
|
|
89
|
+
const url = formatUrl("/Sandboxes('{}')/tm1.Publish", sandboxName);
|
|
90
|
+
return await this.rest.post(url, "{}");
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
public async reset(sandboxName: string): Promise<AxiosResponse> {
|
|
94
|
+
/** reset all changes in specified sandbox
|
|
95
|
+
*
|
|
96
|
+
* :param sandbox_name: str
|
|
97
|
+
* :return: response
|
|
98
|
+
*/
|
|
99
|
+
const url = formatUrl("/Sandboxes('{}')/tm1.DiscardChanges", sandboxName);
|
|
100
|
+
return await this.rest.post(url, "{}");
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public async merge(sourceSandboxName: string, targetSandboxName: string): Promise<AxiosResponse> {
|
|
104
|
+
/** merge changes from source sandbox into target sandbox
|
|
105
|
+
*
|
|
106
|
+
* :param source_sandbox_name: str
|
|
107
|
+
* :param target_sandbox_name: str
|
|
108
|
+
* :return: response
|
|
109
|
+
*/
|
|
110
|
+
const url = formatUrl("/Sandboxes('{}')/tm1.Merge", targetSandboxName);
|
|
111
|
+
const body = {
|
|
112
|
+
"Source@odata.bind": `Sandboxes('${sourceSandboxName}')`
|
|
113
|
+
};
|
|
114
|
+
return await this.rest.post(url, JSON.stringify(body));
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
public async exists(sandboxName: string): Promise<boolean> {
|
|
118
|
+
/** check if sandbox exists
|
|
119
|
+
*
|
|
120
|
+
* :param sandbox_name: str
|
|
121
|
+
* :return: boolean
|
|
122
|
+
*/
|
|
123
|
+
try {
|
|
124
|
+
await this.get(sandboxName);
|
|
125
|
+
return true;
|
|
126
|
+
} catch (error) {
|
|
127
|
+
if (error instanceof TM1RestException && error.statusCode === 404) {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
public async getChanges(sandboxName: string): Promise<any> {
|
|
135
|
+
/** get all changes in a sandbox
|
|
136
|
+
*
|
|
137
|
+
* :param sandbox_name: str
|
|
138
|
+
* :return: dict of changes
|
|
139
|
+
*/
|
|
140
|
+
const url = formatUrl("/Sandboxes('{}')/Changes", sandboxName);
|
|
141
|
+
const response = await this.rest.get(url);
|
|
142
|
+
return response.data;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
public async isEmpty(sandboxName: string): Promise<boolean> {
|
|
146
|
+
/** check if sandbox is empty (has no changes)
|
|
147
|
+
*
|
|
148
|
+
* :param sandbox_name: str
|
|
149
|
+
* :return: boolean
|
|
150
|
+
*/
|
|
151
|
+
try {
|
|
152
|
+
const changes = await this.getChanges(sandboxName);
|
|
153
|
+
return !changes || !changes.value || changes.value.length === 0;
|
|
154
|
+
} catch {
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
public async load(sandboxName: string): Promise<AxiosResponse> {
|
|
160
|
+
/** load sandbox into memory
|
|
161
|
+
*
|
|
162
|
+
* :param sandbox_name: str
|
|
163
|
+
* :return: response
|
|
164
|
+
*/
|
|
165
|
+
const url = formatUrl("/Sandboxes('{}')/tm1.Load", sandboxName);
|
|
166
|
+
return await this.rest.post(url, "{}");
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
public async unload(sandboxName: string): Promise<AxiosResponse> {
|
|
170
|
+
/** unload sandbox from memory
|
|
171
|
+
*
|
|
172
|
+
* :param sandbox_name: str
|
|
173
|
+
* :return: response
|
|
174
|
+
*/
|
|
175
|
+
const url = formatUrl("/Sandboxes('{}')/tm1.Unload", sandboxName);
|
|
176
|
+
return await this.rest.post(url, "{}");
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
public async getSandboxDimensionMembers(): Promise<string[]> {
|
|
180
|
+
/** get all members of the }Sandboxes dimension
|
|
181
|
+
*
|
|
182
|
+
* :return: list of sandbox names
|
|
183
|
+
*/
|
|
184
|
+
const url = "/Dimensions('}Sandboxes')/Hierarchies('}Sandboxes')/Elements?$select=Name";
|
|
185
|
+
const response = await this.rest.get(url);
|
|
186
|
+
return response.data.value.map((element: any) => element.Name);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
public async createIfNotExists(sandbox: Sandbox): Promise<AxiosResponse | null> {
|
|
190
|
+
/** create sandbox if it doesn't exist
|
|
191
|
+
*
|
|
192
|
+
* :param sandbox: Sandbox instance
|
|
193
|
+
* :return: response or null if already exists
|
|
194
|
+
*/
|
|
195
|
+
if (await this.exists(sandbox.name)) {
|
|
196
|
+
return null;
|
|
197
|
+
}
|
|
198
|
+
return await this.create(sandbox);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
public async cloneSandbox(sourceSandboxName: string, targetSandboxName: string): Promise<AxiosResponse> {
|
|
202
|
+
/** clone a sandbox
|
|
203
|
+
*
|
|
204
|
+
* :param source_sandbox_name: str
|
|
205
|
+
* :param target_sandbox_name: str
|
|
206
|
+
* :return: response
|
|
207
|
+
*/
|
|
208
|
+
const sourceSandbox = await this.get(sourceSandboxName);
|
|
209
|
+
const targetSandbox = new Sandbox(
|
|
210
|
+
targetSandboxName,
|
|
211
|
+
sourceSandbox.includeInSandboxDimension
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
await this.create(targetSandbox);
|
|
215
|
+
return await this.merge(sourceSandboxName, targetSandboxName);
|
|
216
|
+
}
|
|
217
|
+
}
|