@mcp-abap-adt/adt-clients 0.1.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/LICENSE +22 -0
- package/README.md +184 -0
- package/bin/README.md +368 -0
- package/bin/lock-object.js +274 -0
- package/bin/manage-locks.js +331 -0
- package/bin/manage-sessions.js +235 -0
- package/bin/unlock-object.js +291 -0
- package/bin/unlock-test-objects.js +248 -0
- package/dist/clients/CrudClient.d.ts +48 -0
- package/dist/clients/CrudClient.d.ts.map +1 -0
- package/dist/clients/CrudClient.js +135 -0
- package/dist/clients/LockClient.d.ts +28 -0
- package/dist/clients/LockClient.d.ts.map +1 -0
- package/dist/clients/LockClient.js +141 -0
- package/dist/clients/ManagementClient.d.ts +34 -0
- package/dist/clients/ManagementClient.d.ts.map +1 -0
- package/dist/clients/ManagementClient.js +80 -0
- package/dist/clients/ReadOnlyClient.d.ts +70 -0
- package/dist/clients/ReadOnlyClient.d.ts.map +1 -0
- package/dist/clients/ReadOnlyClient.js +141 -0
- package/dist/clients/ValidationClient.d.ts +8 -0
- package/dist/clients/ValidationClient.d.ts.map +1 -0
- package/dist/clients/ValidationClient.js +14 -0
- package/dist/core/class/ClassBuilder.d.ts +140 -0
- package/dist/core/class/ClassBuilder.d.ts.map +1 -0
- package/dist/core/class/ClassBuilder.js +400 -0
- package/dist/core/class/activation.d.ts +11 -0
- package/dist/core/class/activation.d.ts.map +1 -0
- package/dist/core/class/activation.js +16 -0
- package/dist/core/class/check.d.ts +24 -0
- package/dist/core/class/check.d.ts.map +1 -0
- package/dist/core/class/check.js +73 -0
- package/dist/core/class/create.d.ts +30 -0
- package/dist/core/class/create.d.ts.map +1 -0
- package/dist/core/class/create.js +118 -0
- package/dist/core/class/index.d.ts +14 -0
- package/dist/core/class/index.d.ts.map +1 -0
- package/dist/core/class/index.js +31 -0
- package/dist/core/class/lock.d.ts +20 -0
- package/dist/core/class/lock.d.ts.map +1 -0
- package/dist/core/class/lock.js +49 -0
- package/dist/core/class/read.d.ts +34 -0
- package/dist/core/class/read.d.ts.map +1 -0
- package/dist/core/class/read.js +59 -0
- package/dist/core/class/run.d.ts +51 -0
- package/dist/core/class/run.d.ts.map +1 -0
- package/dist/core/class/run.js +105 -0
- package/dist/core/class/unlock.d.ts +11 -0
- package/dist/core/class/unlock.d.ts.map +1 -0
- package/dist/core/class/unlock.js +16 -0
- package/dist/core/class/update.d.ts +11 -0
- package/dist/core/class/update.d.ts.map +1 -0
- package/dist/core/class/update.js +30 -0
- package/dist/core/class/validation.d.ts +28 -0
- package/dist/core/class/validation.d.ts.map +1 -0
- package/dist/core/class/validation.js +269 -0
- package/dist/core/dataElement/DataElementBuilder.d.ts +113 -0
- package/dist/core/dataElement/DataElementBuilder.d.ts.map +1 -0
- package/dist/core/dataElement/DataElementBuilder.js +449 -0
- package/dist/core/dataElement/activation.d.ts +11 -0
- package/dist/core/dataElement/activation.d.ts.map +1 -0
- package/dist/core/dataElement/activation.js +123 -0
- package/dist/core/dataElement/check.d.ts +12 -0
- package/dist/core/dataElement/check.d.ts.map +1 -0
- package/dist/core/dataElement/check.js +32 -0
- package/dist/core/dataElement/create.d.ts +12 -0
- package/dist/core/dataElement/create.d.ts.map +1 -0
- package/dist/core/dataElement/create.js +259 -0
- package/dist/core/dataElement/delete.d.ts +14 -0
- package/dist/core/dataElement/delete.d.ts.map +1 -0
- package/dist/core/dataElement/delete.js +21 -0
- package/dist/core/dataElement/index.d.ts +14 -0
- package/dist/core/dataElement/index.d.ts.map +1 -0
- package/dist/core/dataElement/index.js +31 -0
- package/dist/core/dataElement/lock.d.ts +10 -0
- package/dist/core/dataElement/lock.d.ts.map +1 -0
- package/dist/core/dataElement/lock.js +31 -0
- package/dist/core/dataElement/read.d.ts +17 -0
- package/dist/core/dataElement/read.d.ts.map +1 -0
- package/dist/core/dataElement/read.js +42 -0
- package/dist/core/dataElement/types.d.ts +64 -0
- package/dist/core/dataElement/types.d.ts.map +1 -0
- package/dist/core/dataElement/types.js +5 -0
- package/dist/core/dataElement/unlock.d.ts +11 -0
- package/dist/core/dataElement/unlock.d.ts.map +1 -0
- package/dist/core/dataElement/unlock.js +17 -0
- package/dist/core/dataElement/update.d.ts +29 -0
- package/dist/core/dataElement/update.d.ts.map +1 -0
- package/dist/core/dataElement/update.js +269 -0
- package/dist/core/delete.d.ts +22 -0
- package/dist/core/delete.d.ts.map +1 -0
- package/dist/core/delete.js +148 -0
- package/dist/core/domain/DomainBuilder.d.ts +135 -0
- package/dist/core/domain/DomainBuilder.d.ts.map +1 -0
- package/dist/core/domain/DomainBuilder.js +430 -0
- package/dist/core/domain/activation.d.ts +11 -0
- package/dist/core/domain/activation.d.ts.map +1 -0
- package/dist/core/domain/activation.js +16 -0
- package/dist/core/domain/check.d.ts +16 -0
- package/dist/core/domain/check.d.ts.map +1 -0
- package/dist/core/domain/check.js +36 -0
- package/dist/core/domain/create.d.ts +21 -0
- package/dist/core/domain/create.d.ts.map +1 -0
- package/dist/core/domain/create.js +172 -0
- package/dist/core/domain/delete.d.ts +14 -0
- package/dist/core/domain/delete.d.ts.map +1 -0
- package/dist/core/domain/delete.js +21 -0
- package/dist/core/domain/index.d.ts +14 -0
- package/dist/core/domain/index.d.ts.map +1 -0
- package/dist/core/domain/index.js +31 -0
- package/dist/core/domain/lock.d.ts +15 -0
- package/dist/core/domain/lock.d.ts.map +1 -0
- package/dist/core/domain/lock.js +61 -0
- package/dist/core/domain/read.d.ts +17 -0
- package/dist/core/domain/read.d.ts.map +1 -0
- package/dist/core/domain/read.js +42 -0
- package/dist/core/domain/types.d.ts +38 -0
- package/dist/core/domain/types.d.ts.map +1 -0
- package/dist/core/domain/types.js +5 -0
- package/dist/core/domain/unlock.d.ts +11 -0
- package/dist/core/domain/unlock.d.ts.map +1 -0
- package/dist/core/domain/unlock.js +17 -0
- package/dist/core/domain/update.d.ts +12 -0
- package/dist/core/domain/update.d.ts.map +1 -0
- package/dist/core/domain/update.js +144 -0
- package/dist/core/functionGroup/FunctionGroupBuilder.d.ts +91 -0
- package/dist/core/functionGroup/FunctionGroupBuilder.d.ts.map +1 -0
- package/dist/core/functionGroup/FunctionGroupBuilder.js +268 -0
- package/dist/core/functionGroup/activation.d.ts +10 -0
- package/dist/core/functionGroup/activation.d.ts.map +1 -0
- package/dist/core/functionGroup/activation.js +30 -0
- package/dist/core/functionGroup/check.d.ts +24 -0
- package/dist/core/functionGroup/check.d.ts.map +1 -0
- package/dist/core/functionGroup/check.js +91 -0
- package/dist/core/functionGroup/create.d.ts +12 -0
- package/dist/core/functionGroup/create.d.ts.map +1 -0
- package/dist/core/functionGroup/create.js +90 -0
- package/dist/core/functionGroup/delete.d.ts +14 -0
- package/dist/core/functionGroup/delete.d.ts.map +1 -0
- package/dist/core/functionGroup/delete.js +21 -0
- package/dist/core/functionGroup/index.d.ts +15 -0
- package/dist/core/functionGroup/index.d.ts.map +1 -0
- package/dist/core/functionGroup/index.js +32 -0
- package/dist/core/functionGroup/lock.d.ts +25 -0
- package/dist/core/functionGroup/lock.d.ts.map +1 -0
- package/dist/core/functionGroup/lock.js +50 -0
- package/dist/core/functionGroup/read.d.ts +17 -0
- package/dist/core/functionGroup/read.d.ts.map +1 -0
- package/dist/core/functionGroup/read.js +42 -0
- package/dist/core/functionGroup/types.d.ts +11 -0
- package/dist/core/functionGroup/types.d.ts.map +1 -0
- package/dist/core/functionGroup/types.js +5 -0
- package/dist/core/functionGroup/unlock.d.ts +5 -0
- package/dist/core/functionGroup/unlock.d.ts.map +1 -0
- package/dist/core/functionGroup/unlock.js +8 -0
- package/dist/core/functionGroup/update.d.ts +20 -0
- package/dist/core/functionGroup/update.d.ts.map +1 -0
- package/dist/core/functionGroup/update.js +119 -0
- package/dist/core/functionGroup/validation.d.ts +10 -0
- package/dist/core/functionGroup/validation.d.ts.map +1 -0
- package/dist/core/functionGroup/validation.js +17 -0
- package/dist/core/functionModule/FunctionModuleBuilder.d.ts +101 -0
- package/dist/core/functionModule/FunctionModuleBuilder.d.ts.map +1 -0
- package/dist/core/functionModule/FunctionModuleBuilder.js +314 -0
- package/dist/core/functionModule/activation.d.ts +10 -0
- package/dist/core/functionModule/activation.d.ts.map +1 -0
- package/dist/core/functionModule/activation.js +17 -0
- package/dist/core/functionModule/check.d.ts +23 -0
- package/dist/core/functionModule/check.d.ts.map +1 -0
- package/dist/core/functionModule/check.js +116 -0
- package/dist/core/functionModule/create.d.ts +12 -0
- package/dist/core/functionModule/create.d.ts.map +1 -0
- package/dist/core/functionModule/create.js +158 -0
- package/dist/core/functionModule/delete.d.ts +15 -0
- package/dist/core/functionModule/delete.d.ts.map +1 -0
- package/dist/core/functionModule/delete.js +25 -0
- package/dist/core/functionModule/index.d.ts +15 -0
- package/dist/core/functionModule/index.d.ts.map +1 -0
- package/dist/core/functionModule/index.js +32 -0
- package/dist/core/functionModule/lock.d.ts +18 -0
- package/dist/core/functionModule/lock.d.ts.map +1 -0
- package/dist/core/functionModule/lock.js +52 -0
- package/dist/core/functionModule/read.d.ts +31 -0
- package/dist/core/functionModule/read.d.ts.map +1 -0
- package/dist/core/functionModule/read.js +57 -0
- package/dist/core/functionModule/types.d.ts +19 -0
- package/dist/core/functionModule/types.d.ts.map +1 -0
- package/dist/core/functionModule/types.js +5 -0
- package/dist/core/functionModule/unlock.d.ts +10 -0
- package/dist/core/functionModule/unlock.d.ts.map +1 -0
- package/dist/core/functionModule/unlock.js +20 -0
- package/dist/core/functionModule/update.d.ts +17 -0
- package/dist/core/functionModule/update.d.ts.map +1 -0
- package/dist/core/functionModule/update.js +103 -0
- package/dist/core/functionModule/validation.d.ts +27 -0
- package/dist/core/functionModule/validation.d.ts.map +1 -0
- package/dist/core/functionModule/validation.js +107 -0
- package/dist/core/interface/InterfaceBuilder.d.ts +98 -0
- package/dist/core/interface/InterfaceBuilder.d.ts.map +1 -0
- package/dist/core/interface/InterfaceBuilder.js +311 -0
- package/dist/core/interface/activation.d.ts +11 -0
- package/dist/core/interface/activation.d.ts.map +1 -0
- package/dist/core/interface/activation.js +16 -0
- package/dist/core/interface/check.d.ts +10 -0
- package/dist/core/interface/check.d.ts.map +1 -0
- package/dist/core/interface/check.js +18 -0
- package/dist/core/interface/create.d.ts +12 -0
- package/dist/core/interface/create.d.ts.map +1 -0
- package/dist/core/interface/create.js +119 -0
- package/dist/core/interface/delete.d.ts +20 -0
- package/dist/core/interface/delete.d.ts.map +1 -0
- package/dist/core/interface/delete.js +47 -0
- package/dist/core/interface/index.d.ts +15 -0
- package/dist/core/interface/index.d.ts.map +1 -0
- package/dist/core/interface/index.js +32 -0
- package/dist/core/interface/lock.d.ts +23 -0
- package/dist/core/interface/lock.d.ts.map +1 -0
- package/dist/core/interface/lock.js +51 -0
- package/dist/core/interface/read.d.ts +26 -0
- package/dist/core/interface/read.d.ts.map +1 -0
- package/dist/core/interface/read.js +51 -0
- package/dist/core/interface/types.d.ts +19 -0
- package/dist/core/interface/types.d.ts.map +1 -0
- package/dist/core/interface/types.js +5 -0
- package/dist/core/interface/unlock.d.ts +11 -0
- package/dist/core/interface/unlock.d.ts.map +1 -0
- package/dist/core/interface/unlock.js +35 -0
- package/dist/core/interface/update.d.ts +12 -0
- package/dist/core/interface/update.d.ts.map +1 -0
- package/dist/core/interface/update.js +82 -0
- package/dist/core/interface/validation.d.ts +10 -0
- package/dist/core/interface/validation.d.ts.map +1 -0
- package/dist/core/interface/validation.js +17 -0
- package/dist/core/managementOperations.d.ts +34 -0
- package/dist/core/managementOperations.d.ts.map +1 -0
- package/dist/core/managementOperations.js +136 -0
- package/dist/core/package/PackageBuilder.d.ts +129 -0
- package/dist/core/package/PackageBuilder.d.ts.map +1 -0
- package/dist/core/package/PackageBuilder.js +386 -0
- package/dist/core/package/check.d.ts +9 -0
- package/dist/core/package/check.d.ts.map +1 -0
- package/dist/core/package/check.js +29 -0
- package/dist/core/package/create.d.ts +12 -0
- package/dist/core/package/create.d.ts.map +1 -0
- package/dist/core/package/create.js +145 -0
- package/dist/core/package/delete.d.ts +27 -0
- package/dist/core/package/delete.d.ts.map +1 -0
- package/dist/core/package/delete.js +138 -0
- package/dist/core/package/index.d.ts +15 -0
- package/dist/core/package/index.d.ts.map +1 -0
- package/dist/core/package/index.js +32 -0
- package/dist/core/package/lock.d.ts +10 -0
- package/dist/core/package/lock.d.ts.map +1 -0
- package/dist/core/package/lock.js +28 -0
- package/dist/core/package/read.d.ts +17 -0
- package/dist/core/package/read.d.ts.map +1 -0
- package/dist/core/package/read.js +42 -0
- package/dist/core/package/transportCheck.d.ts +10 -0
- package/dist/core/package/transportCheck.d.ts.map +1 -0
- package/dist/core/package/transportCheck.js +52 -0
- package/dist/core/package/types.d.ts +15 -0
- package/dist/core/package/types.d.ts.map +1 -0
- package/dist/core/package/types.js +5 -0
- package/dist/core/package/unlock.d.ts +11 -0
- package/dist/core/package/unlock.d.ts.map +1 -0
- package/dist/core/package/unlock.js +16 -0
- package/dist/core/package/update.d.ts +19 -0
- package/dist/core/package/update.d.ts.map +1 -0
- package/dist/core/package/update.js +125 -0
- package/dist/core/package/validation.d.ts +14 -0
- package/dist/core/package/validation.d.ts.map +1 -0
- package/dist/core/package/validation.js +72 -0
- package/dist/core/program/ProgramBuilder.d.ts +102 -0
- package/dist/core/program/ProgramBuilder.d.ts.map +1 -0
- package/dist/core/program/ProgramBuilder.js +321 -0
- package/dist/core/program/activation.d.ts +11 -0
- package/dist/core/program/activation.d.ts.map +1 -0
- package/dist/core/program/activation.js +16 -0
- package/dist/core/program/check.d.ts +10 -0
- package/dist/core/program/check.d.ts.map +1 -0
- package/dist/core/program/check.js +18 -0
- package/dist/core/program/create.d.ts +23 -0
- package/dist/core/program/create.d.ts.map +1 -0
- package/dist/core/program/create.js +159 -0
- package/dist/core/program/delete.d.ts +14 -0
- package/dist/core/program/delete.d.ts.map +1 -0
- package/dist/core/program/delete.js +21 -0
- package/dist/core/program/index.d.ts +14 -0
- package/dist/core/program/index.d.ts.map +1 -0
- package/dist/core/program/index.js +31 -0
- package/dist/core/program/lock.d.ts +20 -0
- package/dist/core/program/lock.d.ts.map +1 -0
- package/dist/core/program/lock.js +49 -0
- package/dist/core/program/read.d.ts +26 -0
- package/dist/core/program/read.d.ts.map +1 -0
- package/dist/core/program/read.js +51 -0
- package/dist/core/program/unlock.d.ts +11 -0
- package/dist/core/program/unlock.d.ts.map +1 -0
- package/dist/core/program/unlock.js +16 -0
- package/dist/core/program/update.d.ts +16 -0
- package/dist/core/program/update.d.ts.map +1 -0
- package/dist/core/program/update.js +82 -0
- package/dist/core/program/validation.d.ts +10 -0
- package/dist/core/program/validation.d.ts.map +1 -0
- package/dist/core/program/validation.js +17 -0
- package/dist/core/readOperations.d.ts +63 -0
- package/dist/core/readOperations.d.ts.map +1 -0
- package/dist/core/readOperations.js +204 -0
- package/dist/core/shared/checkRun.d.ts +68 -0
- package/dist/core/shared/checkRun.d.ts.map +1 -0
- package/dist/core/shared/checkRun.js +292 -0
- package/dist/core/shared/readMetadata.d.ts +16 -0
- package/dist/core/shared/readMetadata.d.ts.map +1 -0
- package/dist/core/shared/readMetadata.js +74 -0
- package/dist/core/shared/readSource.d.ts +21 -0
- package/dist/core/shared/readSource.d.ts.map +1 -0
- package/dist/core/shared/readSource.js +83 -0
- package/dist/core/shared/search.d.ts +26 -0
- package/dist/core/shared/search.d.ts.map +1 -0
- package/dist/core/shared/search.js +32 -0
- package/dist/core/shared/sqlQuery.d.ts +22 -0
- package/dist/core/shared/sqlQuery.d.ts.map +1 -0
- package/dist/core/shared/sqlQuery.js +36 -0
- package/dist/core/shared/systemInfo.d.ts +22 -0
- package/dist/core/shared/systemInfo.d.ts.map +1 -0
- package/dist/core/shared/systemInfo.js +67 -0
- package/dist/core/shared/tableContents.d.ts +22 -0
- package/dist/core/shared/tableContents.d.ts.map +1 -0
- package/dist/core/shared/tableContents.js +89 -0
- package/dist/core/shared/validation.d.ts +26 -0
- package/dist/core/shared/validation.d.ts.map +1 -0
- package/dist/core/shared/validation.js +134 -0
- package/dist/core/shared/whereUsed.d.ts +19 -0
- package/dist/core/shared/whereUsed.d.ts.map +1 -0
- package/dist/core/shared/whereUsed.js +88 -0
- package/dist/core/structure/StructureBuilder.d.ts +124 -0
- package/dist/core/structure/StructureBuilder.d.ts.map +1 -0
- package/dist/core/structure/StructureBuilder.js +357 -0
- package/dist/core/structure/activation.d.ts +10 -0
- package/dist/core/structure/activation.d.ts.map +1 -0
- package/dist/core/structure/activation.js +15 -0
- package/dist/core/structure/check.d.ts +12 -0
- package/dist/core/structure/check.d.ts.map +1 -0
- package/dist/core/structure/check.js +44 -0
- package/dist/core/structure/create.d.ts +12 -0
- package/dist/core/structure/create.d.ts.map +1 -0
- package/dist/core/structure/create.js +136 -0
- package/dist/core/structure/delete.d.ts +14 -0
- package/dist/core/structure/delete.d.ts.map +1 -0
- package/dist/core/structure/delete.js +21 -0
- package/dist/core/structure/index.d.ts +15 -0
- package/dist/core/structure/index.d.ts.map +1 -0
- package/dist/core/structure/index.js +32 -0
- package/dist/core/structure/lock.d.ts +10 -0
- package/dist/core/structure/lock.d.ts.map +1 -0
- package/dist/core/structure/lock.js +28 -0
- package/dist/core/structure/read.d.ts +26 -0
- package/dist/core/structure/read.d.ts.map +1 -0
- package/dist/core/structure/read.js +51 -0
- package/dist/core/structure/types.d.ts +33 -0
- package/dist/core/structure/types.d.ts.map +1 -0
- package/dist/core/structure/types.js +5 -0
- package/dist/core/structure/unlock.d.ts +11 -0
- package/dist/core/structure/unlock.d.ts.map +1 -0
- package/dist/core/structure/unlock.js +16 -0
- package/dist/core/structure/update.d.ts +11 -0
- package/dist/core/structure/update.d.ts.map +1 -0
- package/dist/core/structure/update.js +26 -0
- package/dist/core/structure/validation.d.ts +10 -0
- package/dist/core/structure/validation.d.ts.map +1 -0
- package/dist/core/structure/validation.js +17 -0
- package/dist/core/table/TableBuilder.d.ts +115 -0
- package/dist/core/table/TableBuilder.d.ts.map +1 -0
- package/dist/core/table/TableBuilder.js +328 -0
- package/dist/core/table/activation.d.ts +10 -0
- package/dist/core/table/activation.d.ts.map +1 -0
- package/dist/core/table/activation.js +15 -0
- package/dist/core/table/check.d.ts +11 -0
- package/dist/core/table/check.d.ts.map +1 -0
- package/dist/core/table/check.js +30 -0
- package/dist/core/table/create.d.ts +12 -0
- package/dist/core/table/create.d.ts.map +1 -0
- package/dist/core/table/create.js +182 -0
- package/dist/core/table/delete.d.ts +14 -0
- package/dist/core/table/delete.d.ts.map +1 -0
- package/dist/core/table/delete.js +21 -0
- package/dist/core/table/index.d.ts +15 -0
- package/dist/core/table/index.d.ts.map +1 -0
- package/dist/core/table/index.js +32 -0
- package/dist/core/table/lock.d.ts +9 -0
- package/dist/core/table/lock.d.ts.map +1 -0
- package/dist/core/table/lock.js +29 -0
- package/dist/core/table/read.d.ts +26 -0
- package/dist/core/table/read.d.ts.map +1 -0
- package/dist/core/table/read.js +51 -0
- package/dist/core/table/types.d.ts +10 -0
- package/dist/core/table/types.d.ts.map +1 -0
- package/dist/core/table/types.js +5 -0
- package/dist/core/table/unlock.d.ts +15 -0
- package/dist/core/table/unlock.d.ts.map +1 -0
- package/dist/core/table/unlock.js +32 -0
- package/dist/core/table/update.d.ts +16 -0
- package/dist/core/table/update.d.ts.map +1 -0
- package/dist/core/table/update.js +32 -0
- package/dist/core/table/validation.d.ts +10 -0
- package/dist/core/table/validation.d.ts.map +1 -0
- package/dist/core/table/validation.js +17 -0
- package/dist/core/transport/TransportBuilder.d.ts +85 -0
- package/dist/core/transport/TransportBuilder.d.ts.map +1 -0
- package/dist/core/transport/TransportBuilder.js +154 -0
- package/dist/core/transport/create.d.ts +11 -0
- package/dist/core/transport/create.d.ts.map +1 -0
- package/dist/core/transport/create.js +157 -0
- package/dist/core/transport/index.d.ts +8 -0
- package/dist/core/transport/index.d.ts.map +1 -0
- package/dist/core/transport/index.js +25 -0
- package/dist/core/transport/read.d.ts +10 -0
- package/dist/core/transport/read.d.ts.map +1 -0
- package/dist/core/transport/read.js +22 -0
- package/dist/core/transport/types.d.ts +10 -0
- package/dist/core/transport/types.d.ts.map +1 -0
- package/dist/core/transport/types.js +5 -0
- package/dist/core/view/ViewBuilder.d.ts +117 -0
- package/dist/core/view/ViewBuilder.d.ts.map +1 -0
- package/dist/core/view/ViewBuilder.js +335 -0
- package/dist/core/view/activation.d.ts +10 -0
- package/dist/core/view/activation.d.ts.map +1 -0
- package/dist/core/view/activation.js +15 -0
- package/dist/core/view/check.d.ts +7 -0
- package/dist/core/view/check.d.ts.map +1 -0
- package/dist/core/view/check.js +57 -0
- package/dist/core/view/create.d.ts +12 -0
- package/dist/core/view/create.d.ts.map +1 -0
- package/dist/core/view/create.js +88 -0
- package/dist/core/view/delete.d.ts +14 -0
- package/dist/core/view/delete.d.ts.map +1 -0
- package/dist/core/view/delete.js +21 -0
- package/dist/core/view/index.d.ts +15 -0
- package/dist/core/view/index.d.ts.map +1 -0
- package/dist/core/view/index.js +32 -0
- package/dist/core/view/lock.d.ts +18 -0
- package/dist/core/view/lock.d.ts.map +1 -0
- package/dist/core/view/lock.js +45 -0
- package/dist/core/view/read.d.ts +26 -0
- package/dist/core/view/read.d.ts.map +1 -0
- package/dist/core/view/read.js +51 -0
- package/dist/core/view/types.d.ts +19 -0
- package/dist/core/view/types.d.ts.map +1 -0
- package/dist/core/view/types.js +5 -0
- package/dist/core/view/unlock.d.ts +10 -0
- package/dist/core/view/unlock.d.ts.map +1 -0
- package/dist/core/view/unlock.js +15 -0
- package/dist/core/view/update.d.ts +12 -0
- package/dist/core/view/update.d.ts.map +1 -0
- package/dist/core/view/update.js +89 -0
- package/dist/core/view/validation.d.ts +10 -0
- package/dist/core/view/validation.d.ts.map +1 -0
- package/dist/core/view/validation.js +17 -0
- package/dist/core.d.ts +133 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +175 -0
- package/dist/index.d.ts +38 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +60 -0
- package/dist/utils/activationUtils.d.ts +44 -0
- package/dist/utils/activationUtils.d.ts.map +1 -0
- package/dist/utils/activationUtils.js +127 -0
- package/dist/utils/internalUtils.d.ts +12 -0
- package/dist/utils/internalUtils.d.ts.map +1 -0
- package/dist/utils/internalUtils.js +16 -0
- package/dist/utils/lockStateManager.d.ts +64 -0
- package/dist/utils/lockStateManager.d.ts.map +1 -0
- package/dist/utils/lockStateManager.js +172 -0
- package/dist/utils/sessionUtils.d.ts +69 -0
- package/dist/utils/sessionUtils.d.ts.map +1 -0
- package/dist/utils/sessionUtils.js +134 -0
- package/package.json +75 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Lock Object CLI - Lock an SAP object and save session/lock handle
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* adt-lock-object <type> <name> [options]
|
|
7
|
+
*
|
|
8
|
+
* Examples:
|
|
9
|
+
* adt-lock-object class ZCL_MY_CLASS
|
|
10
|
+
* adt-lock-object program Z_MY_PROGRAM --session-id my_session
|
|
11
|
+
* adt-lock-object fm MY_FUNCTION_MODULE --function-group Z_MY_FUGR
|
|
12
|
+
* adt-lock-object class ZCL_TEST --sessions-dir /custom/path/.sessions
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
const path = require('path');
|
|
16
|
+
const fs = require('fs');
|
|
17
|
+
|
|
18
|
+
// Color codes for terminal output
|
|
19
|
+
const colors = {
|
|
20
|
+
reset: '\x1b[0m',
|
|
21
|
+
bright: '\x1b[1m',
|
|
22
|
+
green: '\x1b[32m',
|
|
23
|
+
red: '\x1b[31m',
|
|
24
|
+
yellow: '\x1b[33m',
|
|
25
|
+
blue: '\x1b[34m',
|
|
26
|
+
cyan: '\x1b[36m',
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
function showHelp() {
|
|
30
|
+
console.log(`
|
|
31
|
+
${colors.bright}Lock Object CLI${colors.reset} - Lock an SAP object and save session/lock handle
|
|
32
|
+
|
|
33
|
+
${colors.bright}USAGE:${colors.reset}
|
|
34
|
+
adt-lock-object <type> <name> [options]
|
|
35
|
+
|
|
36
|
+
${colors.bright}ARGUMENTS:${colors.reset}
|
|
37
|
+
type Object type: class, program, interface, fm, domain, dataelement
|
|
38
|
+
name Object name (e.g., ZCL_MY_CLASS, Z_MY_PROGRAM)
|
|
39
|
+
|
|
40
|
+
${colors.bright}OPTIONS:${colors.reset}
|
|
41
|
+
--function-group <name> Function group name (required for fm type)
|
|
42
|
+
--session-id <id> Custom session ID (default: auto-generated)
|
|
43
|
+
--sessions-dir <path> Sessions directory (default: .sessions)
|
|
44
|
+
--locks-dir <path> Locks directory (default: .locks)
|
|
45
|
+
--env <path> Path to .env file (default: .env)
|
|
46
|
+
--help, -h Show this help message
|
|
47
|
+
|
|
48
|
+
${colors.bright}EXAMPLES:${colors.reset}
|
|
49
|
+
# Lock a class
|
|
50
|
+
adt-lock-object class ZCL_MY_CLASS
|
|
51
|
+
|
|
52
|
+
# Lock a program with custom session ID
|
|
53
|
+
adt-lock-object program Z_MY_PROGRAM --session-id my_work_session
|
|
54
|
+
|
|
55
|
+
# Lock a function module
|
|
56
|
+
adt-lock-object fm MY_FUNCTION_MODULE --function-group Z_MY_FUGR
|
|
57
|
+
|
|
58
|
+
# Lock with custom directories
|
|
59
|
+
adt-lock-object class ZCL_TEST --sessions-dir /tmp/sessions --locks-dir /tmp/locks
|
|
60
|
+
|
|
61
|
+
${colors.bright}NOTES:${colors.reset}
|
|
62
|
+
- Session state (cookies, CSRF token) saved to <sessions-dir>/<session-id>.json
|
|
63
|
+
- Lock handle saved to <locks-dir>/active-locks.json
|
|
64
|
+
- Use 'adt-unlock-object' with same session-id to unlock later
|
|
65
|
+
- Requires SAP_URL, SAP_USERNAME, SAP_PASSWORD in .env file
|
|
66
|
+
`);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async function main() {
|
|
70
|
+
const args = process.argv.slice(2);
|
|
71
|
+
|
|
72
|
+
// Show help
|
|
73
|
+
if (args.length === 0 || args.includes('--help') || args.includes('-h')) {
|
|
74
|
+
showHelp();
|
|
75
|
+
process.exit(0);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Parse arguments
|
|
79
|
+
const objectType = args[0];
|
|
80
|
+
const objectName = args[1];
|
|
81
|
+
|
|
82
|
+
if (!objectType || !objectName) {
|
|
83
|
+
console.error(`${colors.red}Error: Object type and name are required${colors.reset}`);
|
|
84
|
+
console.log(`Run with --help for usage information`);
|
|
85
|
+
process.exit(1);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Parse options
|
|
89
|
+
let functionGroup;
|
|
90
|
+
let sessionId;
|
|
91
|
+
let sessionsDir = '.sessions';
|
|
92
|
+
let locksDir = '.locks';
|
|
93
|
+
let envPath = '.env';
|
|
94
|
+
|
|
95
|
+
for (let i = 2; i < args.length; i++) {
|
|
96
|
+
if (args[i] === '--function-group' && args[i + 1]) {
|
|
97
|
+
functionGroup = args[++i];
|
|
98
|
+
} else if (args[i] === '--session-id' && args[i + 1]) {
|
|
99
|
+
sessionId = args[++i];
|
|
100
|
+
} else if (args[i] === '--sessions-dir' && args[i + 1]) {
|
|
101
|
+
sessionsDir = args[++i];
|
|
102
|
+
} else if (args[i] === '--locks-dir' && args[i + 1]) {
|
|
103
|
+
locksDir = args[++i];
|
|
104
|
+
} else if (args[i] === '--env' && args[i + 1]) {
|
|
105
|
+
envPath = args[++i];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Validate function group for FM
|
|
110
|
+
if (objectType === 'fm' && !functionGroup) {
|
|
111
|
+
console.error(`${colors.red}Error: --function-group is required for function modules${colors.reset}`);
|
|
112
|
+
process.exit(1);
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// Load environment
|
|
116
|
+
require('dotenv').config({ path: envPath });
|
|
117
|
+
|
|
118
|
+
const sapUrl = process.env.SAP_URL;
|
|
119
|
+
const sapUsername = process.env.SAP_USERNAME;
|
|
120
|
+
const sapPassword = process.env.SAP_PASSWORD;
|
|
121
|
+
const sapJwtToken = process.env.SAP_JWT_TOKEN;
|
|
122
|
+
|
|
123
|
+
if (!sapUrl) {
|
|
124
|
+
console.error(`${colors.red}Error: SAP_URL must be set in ${envPath}${colors.reset}`);
|
|
125
|
+
process.exit(1);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Auto-detect auth type based on what's available
|
|
129
|
+
let sapAuthType;
|
|
130
|
+
if (sapJwtToken) {
|
|
131
|
+
sapAuthType = 'jwt';
|
|
132
|
+
} else if (sapUsername && sapPassword) {
|
|
133
|
+
sapAuthType = 'basic';
|
|
134
|
+
} else {
|
|
135
|
+
console.error(`${colors.red}Error: Either SAP_JWT_TOKEN or (SAP_USERNAME and SAP_PASSWORD) must be set in ${envPath}${colors.reset}`);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
console.log(`${colors.cyan}๐ Locking ${objectType}: ${objectName}${colors.reset}`);
|
|
140
|
+
if (functionGroup) {
|
|
141
|
+
console.log(`${colors.cyan} Function Group: ${functionGroup}${colors.reset}`);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
try {
|
|
145
|
+
// Dynamic imports
|
|
146
|
+
const { createAbapConnection, FileSessionStorage } = require('@mcp-abap-adt/connection');
|
|
147
|
+
const { LockStateManager } = require('../dist/utils/lockStateManager.js');
|
|
148
|
+
|
|
149
|
+
// Map object type to lock function
|
|
150
|
+
let lockFunction;
|
|
151
|
+
let adtObjectType;
|
|
152
|
+
|
|
153
|
+
switch (objectType.toLowerCase()) {
|
|
154
|
+
case 'class':
|
|
155
|
+
lockFunction = require('../dist/core/class/lock.js').lockClass;
|
|
156
|
+
adtObjectType = 'class';
|
|
157
|
+
break;
|
|
158
|
+
case 'program':
|
|
159
|
+
lockFunction = require('../dist/core/program/lock.js').lockProgram;
|
|
160
|
+
adtObjectType = 'program';
|
|
161
|
+
break;
|
|
162
|
+
case 'interface':
|
|
163
|
+
lockFunction = require('../dist/core/interface/lock.js').lockInterface;
|
|
164
|
+
adtObjectType = 'interface';
|
|
165
|
+
break;
|
|
166
|
+
case 'fugr':
|
|
167
|
+
lockFunction = require('../dist/core/functionGroup/lock.js').lockFunctionGroup;
|
|
168
|
+
adtObjectType = 'fugr';
|
|
169
|
+
break;
|
|
170
|
+
case 'fm':
|
|
171
|
+
lockFunction = require('../dist/core/functionModule/lock.js').lockFunctionModule;
|
|
172
|
+
adtObjectType = 'fm';
|
|
173
|
+
break;
|
|
174
|
+
case 'domain':
|
|
175
|
+
lockFunction = require('../dist/core/domain/lock.js').lockDomain;
|
|
176
|
+
adtObjectType = 'domain';
|
|
177
|
+
break;
|
|
178
|
+
case 'dataelement':
|
|
179
|
+
lockFunction = require('../dist/core/dataElement/lock.js').lockDataElement;
|
|
180
|
+
adtObjectType = 'dataElement';
|
|
181
|
+
break;
|
|
182
|
+
default:
|
|
183
|
+
console.error(`${colors.red}Error: Unsupported object type: ${objectType}${colors.reset}`);
|
|
184
|
+
console.log('Supported types: class, program, interface, fugr, fm, domain, dataelement');
|
|
185
|
+
process.exit(1);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
// Generate session ID if not provided
|
|
189
|
+
if (!sessionId) {
|
|
190
|
+
sessionId = `lock_${objectType}_${objectName}_${Date.now()}`;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
// Create connection config based on auth type
|
|
194
|
+
const config = {
|
|
195
|
+
url: sapUrl,
|
|
196
|
+
authType: sapAuthType,
|
|
197
|
+
};
|
|
198
|
+
|
|
199
|
+
if (sapAuthType === 'jwt') {
|
|
200
|
+
config.jwtToken = sapJwtToken;
|
|
201
|
+
} else {
|
|
202
|
+
config.username = sapUsername;
|
|
203
|
+
config.password = sapPassword;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
const logger = {
|
|
207
|
+
debug: () => {},
|
|
208
|
+
info: console.log,
|
|
209
|
+
warn: console.warn,
|
|
210
|
+
error: console.error,
|
|
211
|
+
csrfToken: () => {},
|
|
212
|
+
};
|
|
213
|
+
|
|
214
|
+
const connection = createAbapConnection(config, logger);
|
|
215
|
+
|
|
216
|
+
// Setup session storage
|
|
217
|
+
const sessionStorage = new FileSessionStorage({
|
|
218
|
+
sessionDir: sessionsDir,
|
|
219
|
+
prettyPrint: true
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
// Enable stateful session on connection
|
|
223
|
+
await connection.enableStatefulSession(sessionId, sessionStorage);
|
|
224
|
+
|
|
225
|
+
console.log(`${colors.yellow}๐ก Connecting to SAP...${colors.reset}`);
|
|
226
|
+
|
|
227
|
+
// Lock the object
|
|
228
|
+
let lockHandle;
|
|
229
|
+
let lockResponse;
|
|
230
|
+
if (objectType.toLowerCase() === 'fm') {
|
|
231
|
+
lockHandle = await lockFunction(connection, functionGroup, objectName, sessionId);
|
|
232
|
+
} else if (objectType.toLowerCase() === 'fugr') {
|
|
233
|
+
lockHandle = await lockFunction(connection, objectName, sessionId);
|
|
234
|
+
} else {
|
|
235
|
+
lockHandle = await lockFunction(connection, objectName, sessionId);
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
console.log(`${colors.green}โ Object locked successfully${colors.reset}`);
|
|
239
|
+
console.log(` Lock Handle: ${colors.bright}${lockHandle}${colors.reset}`);
|
|
240
|
+
|
|
241
|
+
// Session state is automatically saved by connection.saveSessionState()
|
|
242
|
+
// after each request in stateful mode
|
|
243
|
+
console.log(`${colors.green}โ Session saved${colors.reset}`);
|
|
244
|
+
console.log(` Session ID: ${colors.bright}${sessionId}${colors.reset}`);
|
|
245
|
+
console.log(` Session File: ${path.join(sessionsDir, sessionId + '.json')}`);
|
|
246
|
+
|
|
247
|
+
// Register lock in lock manager
|
|
248
|
+
const lockManager = new LockStateManager(locksDir);
|
|
249
|
+
lockManager.registerLock({
|
|
250
|
+
sessionId,
|
|
251
|
+
lockHandle,
|
|
252
|
+
objectType: adtObjectType,
|
|
253
|
+
objectName,
|
|
254
|
+
functionGroupName: functionGroup,
|
|
255
|
+
testFile: 'CLI',
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
console.log(`${colors.green}โ Lock registered${colors.reset}`);
|
|
259
|
+
console.log(` Lock File: ${path.join(locksDir, 'active-locks.json')}`);
|
|
260
|
+
|
|
261
|
+
console.log(`\n${colors.bright}${colors.green}SUCCESS!${colors.reset} Object locked and session saved.`);
|
|
262
|
+
console.log(`\nTo unlock later, run:`);
|
|
263
|
+
console.log(` ${colors.cyan}adt-unlock-object ${objectType} ${objectName} --session-id ${sessionId}${functionGroup ? ` --function-group ${functionGroup}` : ''}${colors.reset}`);
|
|
264
|
+
|
|
265
|
+
} catch (error) {
|
|
266
|
+
console.error(`\n${colors.red}Error: ${error.message}${colors.reset}`);
|
|
267
|
+
if (error.response) {
|
|
268
|
+
console.error(`HTTP ${error.response.status}: ${error.response.statusText}`);
|
|
269
|
+
}
|
|
270
|
+
process.exit(1);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
main();
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* CLI utility to manage persistent locks
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* adt-manage-locks [options] <command>
|
|
7
|
+
*
|
|
8
|
+
* Commands:
|
|
9
|
+
* list Show all active locks
|
|
10
|
+
* cleanup Remove stale locks from registry
|
|
11
|
+
* unlock <type> <name> [group] Unlock object on SAP server
|
|
12
|
+
* clear Clear all locks from registry
|
|
13
|
+
* help Show this help message
|
|
14
|
+
*
|
|
15
|
+
* Options:
|
|
16
|
+
* --locks-dir <path> Directory with lock files (default: .locks)
|
|
17
|
+
* --env <path> Path to .env file (default: .env)
|
|
18
|
+
* --help, -h Show help
|
|
19
|
+
*
|
|
20
|
+
* Examples:
|
|
21
|
+
* adt-manage-locks list
|
|
22
|
+
* adt-manage-locks --locks-dir /custom/path list
|
|
23
|
+
* adt-manage-locks unlock class ZCL_TEST
|
|
24
|
+
* adt-manage-locks unlock fm ZOK_TEST_FM_01 ZOK_TEST_FG_01
|
|
25
|
+
*
|
|
26
|
+
* Environment variables (from .env):
|
|
27
|
+
* SAP_URL SAP system URL
|
|
28
|
+
* SAP_CLIENT SAP client number
|
|
29
|
+
* SAP_USERNAME Username for basic auth
|
|
30
|
+
* SAP_PASSWORD Password for basic auth
|
|
31
|
+
* SAP_AUTH_TYPE Auth type: basic or jwt (default: basic)
|
|
32
|
+
* SAP_JWT_TOKEN JWT token (for jwt auth)
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
const path = require('path');
|
|
36
|
+
const fs = require('fs');
|
|
37
|
+
const dotenv = require('dotenv');
|
|
38
|
+
|
|
39
|
+
// Parse command line arguments
|
|
40
|
+
function parseArgs() {
|
|
41
|
+
const args = process.argv.slice(2);
|
|
42
|
+
const options = {
|
|
43
|
+
locksDir: '.locks',
|
|
44
|
+
envPath: '.env',
|
|
45
|
+
command: null,
|
|
46
|
+
commandArgs: []
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
for (let i = 0; i < args.length; i++) {
|
|
50
|
+
const arg = args[i];
|
|
51
|
+
|
|
52
|
+
if (arg === '--locks-dir' && i + 1 < args.length) {
|
|
53
|
+
options.locksDir = args[++i];
|
|
54
|
+
} else if (arg === '--env' && i + 1 < args.length) {
|
|
55
|
+
options.envPath = args[++i];
|
|
56
|
+
} else if (arg === '--help' || arg === '-h' || arg === 'help') {
|
|
57
|
+
return { ...options, command: 'help' };
|
|
58
|
+
} else if (!options.command) {
|
|
59
|
+
options.command = arg;
|
|
60
|
+
} else {
|
|
61
|
+
options.commandArgs.push(arg);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return options;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
function showHelp() {
|
|
69
|
+
console.log(`
|
|
70
|
+
adt-manage-locks - Manage persistent lock handles for ABAP objects
|
|
71
|
+
|
|
72
|
+
USAGE:
|
|
73
|
+
adt-manage-locks [options] <command>
|
|
74
|
+
|
|
75
|
+
COMMANDS:
|
|
76
|
+
list Show all active locks with details
|
|
77
|
+
cleanup Remove stale locks (>30 min or from dead processes)
|
|
78
|
+
unlock <type> <name> [group]
|
|
79
|
+
Unlock specific object on SAP server
|
|
80
|
+
Types: class, interface, program, fm, domain, dataElement, view
|
|
81
|
+
clear Clear all locks from registry (doesn't unlock on SAP!)
|
|
82
|
+
help Show this help message
|
|
83
|
+
|
|
84
|
+
OPTIONS:
|
|
85
|
+
--locks-dir <path> Directory with lock files (default: .locks)
|
|
86
|
+
--env <path> Path to .env file (default: .env)
|
|
87
|
+
--help, -h Show this help
|
|
88
|
+
|
|
89
|
+
EXAMPLES:
|
|
90
|
+
# List all locks
|
|
91
|
+
adt-manage-locks list
|
|
92
|
+
|
|
93
|
+
# Use custom locks directory
|
|
94
|
+
adt-manage-locks --locks-dir /custom/.locks list
|
|
95
|
+
|
|
96
|
+
# Unlock class
|
|
97
|
+
adt-manage-locks unlock class ZCL_TEST
|
|
98
|
+
|
|
99
|
+
# Unlock function module (requires group name)
|
|
100
|
+
adt-manage-locks unlock fm ZOK_TEST_FM_01 ZOK_TEST_FG_01
|
|
101
|
+
|
|
102
|
+
# Clean up stale locks
|
|
103
|
+
adt-manage-locks cleanup
|
|
104
|
+
|
|
105
|
+
# Use custom .env file
|
|
106
|
+
adt-manage-locks --env /path/to/.env unlock class ZCL_TEST
|
|
107
|
+
|
|
108
|
+
ENVIRONMENT:
|
|
109
|
+
Requires .env file with SAP connection details:
|
|
110
|
+
SAP_URL https://your-sap-system.com:443
|
|
111
|
+
SAP_CLIENT 100
|
|
112
|
+
SAP_USERNAME your-username (for basic auth)
|
|
113
|
+
SAP_PASSWORD your-password (for basic auth)
|
|
114
|
+
SAP_AUTH_TYPE basic or jwt (default: basic)
|
|
115
|
+
SAP_JWT_TOKEN your-token (for jwt auth)
|
|
116
|
+
|
|
117
|
+
FILES:
|
|
118
|
+
.locks/active-locks.json Lock registry with handles and session IDs
|
|
119
|
+
|
|
120
|
+
For more info: https://github.com/fr0ster/mcp-abap-adt-clients
|
|
121
|
+
`);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
const options = parseArgs();
|
|
125
|
+
|
|
126
|
+
// Show help
|
|
127
|
+
if (!options.command || options.command === 'help') {
|
|
128
|
+
showHelp();
|
|
129
|
+
process.exit(0);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
// Load environment from specified path
|
|
133
|
+
const envPath = process.env.MCP_ENV_PATH || path.resolve(process.cwd(), options.envPath);
|
|
134
|
+
if (fs.existsSync(envPath)) {
|
|
135
|
+
dotenv.config({ path: envPath });
|
|
136
|
+
} else if (options.command === 'unlock') {
|
|
137
|
+
console.warn(`โ ๏ธ Warning: .env file not found at ${envPath}`);
|
|
138
|
+
console.warn(' Unlock command requires SAP credentials from .env file');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
const { getLockStateManager } = require('../dist/utils/lockStateManager');
|
|
142
|
+
const { createAbapConnection } = require('@mcp-abap-adt/connection');
|
|
143
|
+
const { unlockClass } = require('../dist/core/class/unlock');
|
|
144
|
+
const { unlockInterface } = require('../dist/core/interface/unlock');
|
|
145
|
+
const { unlockProgram } = require('../dist/core/program/unlock');
|
|
146
|
+
const { unlockFunctionModule } = require('../dist/core/functionModule/unlock');
|
|
147
|
+
const { unlockDomain } = require('../dist/core/domain/unlock');
|
|
148
|
+
const { unlockDataElement } = require('../dist/core/dataElement/unlock');
|
|
149
|
+
const { unlockDDLS } = require('../dist/core/view/unlock');
|
|
150
|
+
|
|
151
|
+
function getConfig() {
|
|
152
|
+
const rawUrl = process.env.SAP_URL;
|
|
153
|
+
const url = rawUrl ? rawUrl.split('#')[0].trim() : rawUrl;
|
|
154
|
+
const rawClient = process.env.SAP_CLIENT;
|
|
155
|
+
const client = rawClient ? rawClient.split('#')[0].trim() : rawClient;
|
|
156
|
+
const rawAuthType = process.env.SAP_AUTH_TYPE || 'basic';
|
|
157
|
+
const authType = rawAuthType.split('#')[0].trim();
|
|
158
|
+
|
|
159
|
+
if (!url || !/^https?:\/\//.test(url)) {
|
|
160
|
+
throw new Error(`Missing or invalid SAP_URL: ${url}`);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const config = {
|
|
164
|
+
url,
|
|
165
|
+
authType: authType === 'xsuaa' ? 'jwt' : authType,
|
|
166
|
+
};
|
|
167
|
+
|
|
168
|
+
if (client) {
|
|
169
|
+
config.client = client;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (authType === 'jwt' || authType === 'xsuaa') {
|
|
173
|
+
const jwtToken = process.env.SAP_JWT_TOKEN;
|
|
174
|
+
if (!jwtToken) {
|
|
175
|
+
throw new Error('Missing SAP_JWT_TOKEN for JWT authentication');
|
|
176
|
+
}
|
|
177
|
+
config.jwtToken = jwtToken;
|
|
178
|
+
} else {
|
|
179
|
+
const username = process.env.SAP_USERNAME;
|
|
180
|
+
const password = process.env.SAP_PASSWORD;
|
|
181
|
+
if (!username || !password) {
|
|
182
|
+
throw new Error('Missing SAP_USERNAME or SAP_PASSWORD for basic authentication');
|
|
183
|
+
}
|
|
184
|
+
config.username = username;
|
|
185
|
+
config.password = password;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return config;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
async function unlockObject(connection, lock) {
|
|
192
|
+
const { objectType, objectName, functionGroupName, lockHandle, sessionId } = lock;
|
|
193
|
+
|
|
194
|
+
switch (objectType) {
|
|
195
|
+
case 'class':
|
|
196
|
+
return await unlockClass(connection, objectName, lockHandle, sessionId);
|
|
197
|
+
case 'interface':
|
|
198
|
+
return await unlockInterface(connection, objectName, lockHandle, sessionId);
|
|
199
|
+
case 'program':
|
|
200
|
+
return await unlockProgram(connection, objectName, lockHandle, sessionId);
|
|
201
|
+
case 'fm':
|
|
202
|
+
if (!functionGroupName) throw new Error('Function group name required for FM');
|
|
203
|
+
return await unlockFunctionModule(connection, functionGroupName, objectName, lockHandle, sessionId);
|
|
204
|
+
case 'domain':
|
|
205
|
+
return await unlockDomain(connection, objectName, lockHandle, sessionId);
|
|
206
|
+
case 'dataElement':
|
|
207
|
+
return await unlockDataElement(connection, objectName, lockHandle, sessionId);
|
|
208
|
+
case 'view':
|
|
209
|
+
return await unlockDDLS(connection, objectName, lockHandle, sessionId);
|
|
210
|
+
default:
|
|
211
|
+
throw new Error(`Unknown object type: ${objectType}`);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function formatLock(lock, index) {
|
|
216
|
+
const age = Math.floor((Date.now() - lock.timestamp) / 1000 / 60);
|
|
217
|
+
const processStatus = (() => {
|
|
218
|
+
try {
|
|
219
|
+
process.kill(lock.pid, 0);
|
|
220
|
+
return '๐ข Running';
|
|
221
|
+
} catch {
|
|
222
|
+
return '๐ด Dead';
|
|
223
|
+
}
|
|
224
|
+
})();
|
|
225
|
+
|
|
226
|
+
const objectId = lock.functionGroupName
|
|
227
|
+
? `${lock.functionGroupName}/${lock.objectName}`
|
|
228
|
+
: lock.objectName;
|
|
229
|
+
|
|
230
|
+
return `
|
|
231
|
+
${index + 1}. ${lock.objectType.toUpperCase()}: ${objectId}
|
|
232
|
+
Session: ${lock.sessionId}
|
|
233
|
+
Lock Handle: ${lock.lockHandle}
|
|
234
|
+
Age: ${age} minutes
|
|
235
|
+
Process: ${lock.pid} ${processStatus}
|
|
236
|
+
Test File: ${lock.testFile || 'N/A'}
|
|
237
|
+
Timestamp: ${new Date(lock.timestamp).toISOString()}`;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
async function main() {
|
|
241
|
+
const lockManager = getLockStateManager(options.locksDir);
|
|
242
|
+
|
|
243
|
+
if (options.command === 'list') {
|
|
244
|
+
// List all locks
|
|
245
|
+
const locks = lockManager.getAllLocks();
|
|
246
|
+
if (locks.length === 0) {
|
|
247
|
+
console.log('โ
No active locks found');
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
console.log(`\n๐ Active Locks (${locks.length}):\n`);
|
|
252
|
+
locks.forEach((lock, i) => console.log(formatLock(lock, i)));
|
|
253
|
+
console.log();
|
|
254
|
+
|
|
255
|
+
// Show stale locks
|
|
256
|
+
const staleLocks = lockManager.getStaleLocks();
|
|
257
|
+
if (staleLocks.length > 0) {
|
|
258
|
+
console.log(`โ ๏ธ ${staleLocks.length} stale lock(s) (>30 min)`);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const deadLocks = lockManager.getDeadProcessLocks();
|
|
262
|
+
if (deadLocks.length > 0) {
|
|
263
|
+
console.log(`๐ด ${deadLocks.length} lock(s) from dead processes`);
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
} else if (options.command === 'cleanup') {
|
|
267
|
+
// Remove stale locks from registry
|
|
268
|
+
const cleaned = lockManager.cleanupStaleLocks();
|
|
269
|
+
if (cleaned.length === 0) {
|
|
270
|
+
console.log('โ
No stale locks to cleanup');
|
|
271
|
+
} else {
|
|
272
|
+
console.log(`๐งน Cleaned up ${cleaned.length} stale lock(s):`);
|
|
273
|
+
cleaned.forEach((lock, i) => console.log(formatLock(lock, i)));
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
} else if (options.command === 'unlock') {
|
|
277
|
+
// Unlock specific object on SAP server
|
|
278
|
+
const objectType = options.commandArgs[0];
|
|
279
|
+
const objectName = options.commandArgs[1];
|
|
280
|
+
const functionGroupName = options.commandArgs[2];
|
|
281
|
+
|
|
282
|
+
if (!objectType || !objectName) {
|
|
283
|
+
console.error('โ Usage: manage-locks unlock <type> <name> [group]');
|
|
284
|
+
console.error(' Examples:');
|
|
285
|
+
console.error(' manage-locks unlock class ZCL_TEST');
|
|
286
|
+
console.error(' manage-locks unlock fm ZOK_TEST_FM_01 ZOK_TEST_FG_01');
|
|
287
|
+
process.exit(1);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
const lock = lockManager.getLock(objectType, objectName, functionGroupName);
|
|
291
|
+
if (!lock) {
|
|
292
|
+
console.error(`โ No lock found for ${objectType} ${objectName}`);
|
|
293
|
+
process.exit(1);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
console.log(`๐ Unlocking ${objectType} ${objectName}...`);
|
|
297
|
+
console.log(` Session: ${lock.sessionId}`);
|
|
298
|
+
console.log(` Lock Handle: ${lock.lockHandle}`);
|
|
299
|
+
|
|
300
|
+
try {
|
|
301
|
+
const config = getConfig();
|
|
302
|
+
const connection = createAbapConnection(config, console);
|
|
303
|
+
await unlockObject(connection, lock);
|
|
304
|
+
|
|
305
|
+
lockManager.removeLock(objectType, objectName, functionGroupName);
|
|
306
|
+
console.log(`โ
Successfully unlocked ${objectType} ${objectName}`);
|
|
307
|
+
} catch (error) {
|
|
308
|
+
console.error(`โ Failed to unlock: ${error.message}`);
|
|
309
|
+
console.error(' Lock may have already expired on SAP server');
|
|
310
|
+
console.error(' Use "cleanup" command to remove from registry');
|
|
311
|
+
process.exit(1);
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
} else if (options.command === 'clear') {
|
|
315
|
+
// Clear all locks from registry (doesn't unlock on SAP!)
|
|
316
|
+
const locks = lockManager.getAllLocks();
|
|
317
|
+
lockManager.clearAll();
|
|
318
|
+
console.log(`๐งน Cleared ${locks.length} lock(s) from registry`);
|
|
319
|
+
console.log('โ ๏ธ Note: This does NOT unlock objects on SAP server!');
|
|
320
|
+
|
|
321
|
+
} else {
|
|
322
|
+
console.error(`โ Unknown command: ${options.command}`);
|
|
323
|
+
console.error('Run "adt-manage-locks help" for usage information');
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
main().catch(error => {
|
|
329
|
+
console.error('โ Error:', error.message);
|
|
330
|
+
process.exit(1);
|
|
331
|
+
});
|