@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.
Files changed (477) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +184 -0
  3. package/bin/README.md +368 -0
  4. package/bin/lock-object.js +274 -0
  5. package/bin/manage-locks.js +331 -0
  6. package/bin/manage-sessions.js +235 -0
  7. package/bin/unlock-object.js +291 -0
  8. package/bin/unlock-test-objects.js +248 -0
  9. package/dist/clients/CrudClient.d.ts +48 -0
  10. package/dist/clients/CrudClient.d.ts.map +1 -0
  11. package/dist/clients/CrudClient.js +135 -0
  12. package/dist/clients/LockClient.d.ts +28 -0
  13. package/dist/clients/LockClient.d.ts.map +1 -0
  14. package/dist/clients/LockClient.js +141 -0
  15. package/dist/clients/ManagementClient.d.ts +34 -0
  16. package/dist/clients/ManagementClient.d.ts.map +1 -0
  17. package/dist/clients/ManagementClient.js +80 -0
  18. package/dist/clients/ReadOnlyClient.d.ts +70 -0
  19. package/dist/clients/ReadOnlyClient.d.ts.map +1 -0
  20. package/dist/clients/ReadOnlyClient.js +141 -0
  21. package/dist/clients/ValidationClient.d.ts +8 -0
  22. package/dist/clients/ValidationClient.d.ts.map +1 -0
  23. package/dist/clients/ValidationClient.js +14 -0
  24. package/dist/core/class/ClassBuilder.d.ts +140 -0
  25. package/dist/core/class/ClassBuilder.d.ts.map +1 -0
  26. package/dist/core/class/ClassBuilder.js +400 -0
  27. package/dist/core/class/activation.d.ts +11 -0
  28. package/dist/core/class/activation.d.ts.map +1 -0
  29. package/dist/core/class/activation.js +16 -0
  30. package/dist/core/class/check.d.ts +24 -0
  31. package/dist/core/class/check.d.ts.map +1 -0
  32. package/dist/core/class/check.js +73 -0
  33. package/dist/core/class/create.d.ts +30 -0
  34. package/dist/core/class/create.d.ts.map +1 -0
  35. package/dist/core/class/create.js +118 -0
  36. package/dist/core/class/index.d.ts +14 -0
  37. package/dist/core/class/index.d.ts.map +1 -0
  38. package/dist/core/class/index.js +31 -0
  39. package/dist/core/class/lock.d.ts +20 -0
  40. package/dist/core/class/lock.d.ts.map +1 -0
  41. package/dist/core/class/lock.js +49 -0
  42. package/dist/core/class/read.d.ts +34 -0
  43. package/dist/core/class/read.d.ts.map +1 -0
  44. package/dist/core/class/read.js +59 -0
  45. package/dist/core/class/run.d.ts +51 -0
  46. package/dist/core/class/run.d.ts.map +1 -0
  47. package/dist/core/class/run.js +105 -0
  48. package/dist/core/class/unlock.d.ts +11 -0
  49. package/dist/core/class/unlock.d.ts.map +1 -0
  50. package/dist/core/class/unlock.js +16 -0
  51. package/dist/core/class/update.d.ts +11 -0
  52. package/dist/core/class/update.d.ts.map +1 -0
  53. package/dist/core/class/update.js +30 -0
  54. package/dist/core/class/validation.d.ts +28 -0
  55. package/dist/core/class/validation.d.ts.map +1 -0
  56. package/dist/core/class/validation.js +269 -0
  57. package/dist/core/dataElement/DataElementBuilder.d.ts +113 -0
  58. package/dist/core/dataElement/DataElementBuilder.d.ts.map +1 -0
  59. package/dist/core/dataElement/DataElementBuilder.js +449 -0
  60. package/dist/core/dataElement/activation.d.ts +11 -0
  61. package/dist/core/dataElement/activation.d.ts.map +1 -0
  62. package/dist/core/dataElement/activation.js +123 -0
  63. package/dist/core/dataElement/check.d.ts +12 -0
  64. package/dist/core/dataElement/check.d.ts.map +1 -0
  65. package/dist/core/dataElement/check.js +32 -0
  66. package/dist/core/dataElement/create.d.ts +12 -0
  67. package/dist/core/dataElement/create.d.ts.map +1 -0
  68. package/dist/core/dataElement/create.js +259 -0
  69. package/dist/core/dataElement/delete.d.ts +14 -0
  70. package/dist/core/dataElement/delete.d.ts.map +1 -0
  71. package/dist/core/dataElement/delete.js +21 -0
  72. package/dist/core/dataElement/index.d.ts +14 -0
  73. package/dist/core/dataElement/index.d.ts.map +1 -0
  74. package/dist/core/dataElement/index.js +31 -0
  75. package/dist/core/dataElement/lock.d.ts +10 -0
  76. package/dist/core/dataElement/lock.d.ts.map +1 -0
  77. package/dist/core/dataElement/lock.js +31 -0
  78. package/dist/core/dataElement/read.d.ts +17 -0
  79. package/dist/core/dataElement/read.d.ts.map +1 -0
  80. package/dist/core/dataElement/read.js +42 -0
  81. package/dist/core/dataElement/types.d.ts +64 -0
  82. package/dist/core/dataElement/types.d.ts.map +1 -0
  83. package/dist/core/dataElement/types.js +5 -0
  84. package/dist/core/dataElement/unlock.d.ts +11 -0
  85. package/dist/core/dataElement/unlock.d.ts.map +1 -0
  86. package/dist/core/dataElement/unlock.js +17 -0
  87. package/dist/core/dataElement/update.d.ts +29 -0
  88. package/dist/core/dataElement/update.d.ts.map +1 -0
  89. package/dist/core/dataElement/update.js +269 -0
  90. package/dist/core/delete.d.ts +22 -0
  91. package/dist/core/delete.d.ts.map +1 -0
  92. package/dist/core/delete.js +148 -0
  93. package/dist/core/domain/DomainBuilder.d.ts +135 -0
  94. package/dist/core/domain/DomainBuilder.d.ts.map +1 -0
  95. package/dist/core/domain/DomainBuilder.js +430 -0
  96. package/dist/core/domain/activation.d.ts +11 -0
  97. package/dist/core/domain/activation.d.ts.map +1 -0
  98. package/dist/core/domain/activation.js +16 -0
  99. package/dist/core/domain/check.d.ts +16 -0
  100. package/dist/core/domain/check.d.ts.map +1 -0
  101. package/dist/core/domain/check.js +36 -0
  102. package/dist/core/domain/create.d.ts +21 -0
  103. package/dist/core/domain/create.d.ts.map +1 -0
  104. package/dist/core/domain/create.js +172 -0
  105. package/dist/core/domain/delete.d.ts +14 -0
  106. package/dist/core/domain/delete.d.ts.map +1 -0
  107. package/dist/core/domain/delete.js +21 -0
  108. package/dist/core/domain/index.d.ts +14 -0
  109. package/dist/core/domain/index.d.ts.map +1 -0
  110. package/dist/core/domain/index.js +31 -0
  111. package/dist/core/domain/lock.d.ts +15 -0
  112. package/dist/core/domain/lock.d.ts.map +1 -0
  113. package/dist/core/domain/lock.js +61 -0
  114. package/dist/core/domain/read.d.ts +17 -0
  115. package/dist/core/domain/read.d.ts.map +1 -0
  116. package/dist/core/domain/read.js +42 -0
  117. package/dist/core/domain/types.d.ts +38 -0
  118. package/dist/core/domain/types.d.ts.map +1 -0
  119. package/dist/core/domain/types.js +5 -0
  120. package/dist/core/domain/unlock.d.ts +11 -0
  121. package/dist/core/domain/unlock.d.ts.map +1 -0
  122. package/dist/core/domain/unlock.js +17 -0
  123. package/dist/core/domain/update.d.ts +12 -0
  124. package/dist/core/domain/update.d.ts.map +1 -0
  125. package/dist/core/domain/update.js +144 -0
  126. package/dist/core/functionGroup/FunctionGroupBuilder.d.ts +91 -0
  127. package/dist/core/functionGroup/FunctionGroupBuilder.d.ts.map +1 -0
  128. package/dist/core/functionGroup/FunctionGroupBuilder.js +268 -0
  129. package/dist/core/functionGroup/activation.d.ts +10 -0
  130. package/dist/core/functionGroup/activation.d.ts.map +1 -0
  131. package/dist/core/functionGroup/activation.js +30 -0
  132. package/dist/core/functionGroup/check.d.ts +24 -0
  133. package/dist/core/functionGroup/check.d.ts.map +1 -0
  134. package/dist/core/functionGroup/check.js +91 -0
  135. package/dist/core/functionGroup/create.d.ts +12 -0
  136. package/dist/core/functionGroup/create.d.ts.map +1 -0
  137. package/dist/core/functionGroup/create.js +90 -0
  138. package/dist/core/functionGroup/delete.d.ts +14 -0
  139. package/dist/core/functionGroup/delete.d.ts.map +1 -0
  140. package/dist/core/functionGroup/delete.js +21 -0
  141. package/dist/core/functionGroup/index.d.ts +15 -0
  142. package/dist/core/functionGroup/index.d.ts.map +1 -0
  143. package/dist/core/functionGroup/index.js +32 -0
  144. package/dist/core/functionGroup/lock.d.ts +25 -0
  145. package/dist/core/functionGroup/lock.d.ts.map +1 -0
  146. package/dist/core/functionGroup/lock.js +50 -0
  147. package/dist/core/functionGroup/read.d.ts +17 -0
  148. package/dist/core/functionGroup/read.d.ts.map +1 -0
  149. package/dist/core/functionGroup/read.js +42 -0
  150. package/dist/core/functionGroup/types.d.ts +11 -0
  151. package/dist/core/functionGroup/types.d.ts.map +1 -0
  152. package/dist/core/functionGroup/types.js +5 -0
  153. package/dist/core/functionGroup/unlock.d.ts +5 -0
  154. package/dist/core/functionGroup/unlock.d.ts.map +1 -0
  155. package/dist/core/functionGroup/unlock.js +8 -0
  156. package/dist/core/functionGroup/update.d.ts +20 -0
  157. package/dist/core/functionGroup/update.d.ts.map +1 -0
  158. package/dist/core/functionGroup/update.js +119 -0
  159. package/dist/core/functionGroup/validation.d.ts +10 -0
  160. package/dist/core/functionGroup/validation.d.ts.map +1 -0
  161. package/dist/core/functionGroup/validation.js +17 -0
  162. package/dist/core/functionModule/FunctionModuleBuilder.d.ts +101 -0
  163. package/dist/core/functionModule/FunctionModuleBuilder.d.ts.map +1 -0
  164. package/dist/core/functionModule/FunctionModuleBuilder.js +314 -0
  165. package/dist/core/functionModule/activation.d.ts +10 -0
  166. package/dist/core/functionModule/activation.d.ts.map +1 -0
  167. package/dist/core/functionModule/activation.js +17 -0
  168. package/dist/core/functionModule/check.d.ts +23 -0
  169. package/dist/core/functionModule/check.d.ts.map +1 -0
  170. package/dist/core/functionModule/check.js +116 -0
  171. package/dist/core/functionModule/create.d.ts +12 -0
  172. package/dist/core/functionModule/create.d.ts.map +1 -0
  173. package/dist/core/functionModule/create.js +158 -0
  174. package/dist/core/functionModule/delete.d.ts +15 -0
  175. package/dist/core/functionModule/delete.d.ts.map +1 -0
  176. package/dist/core/functionModule/delete.js +25 -0
  177. package/dist/core/functionModule/index.d.ts +15 -0
  178. package/dist/core/functionModule/index.d.ts.map +1 -0
  179. package/dist/core/functionModule/index.js +32 -0
  180. package/dist/core/functionModule/lock.d.ts +18 -0
  181. package/dist/core/functionModule/lock.d.ts.map +1 -0
  182. package/dist/core/functionModule/lock.js +52 -0
  183. package/dist/core/functionModule/read.d.ts +31 -0
  184. package/dist/core/functionModule/read.d.ts.map +1 -0
  185. package/dist/core/functionModule/read.js +57 -0
  186. package/dist/core/functionModule/types.d.ts +19 -0
  187. package/dist/core/functionModule/types.d.ts.map +1 -0
  188. package/dist/core/functionModule/types.js +5 -0
  189. package/dist/core/functionModule/unlock.d.ts +10 -0
  190. package/dist/core/functionModule/unlock.d.ts.map +1 -0
  191. package/dist/core/functionModule/unlock.js +20 -0
  192. package/dist/core/functionModule/update.d.ts +17 -0
  193. package/dist/core/functionModule/update.d.ts.map +1 -0
  194. package/dist/core/functionModule/update.js +103 -0
  195. package/dist/core/functionModule/validation.d.ts +27 -0
  196. package/dist/core/functionModule/validation.d.ts.map +1 -0
  197. package/dist/core/functionModule/validation.js +107 -0
  198. package/dist/core/interface/InterfaceBuilder.d.ts +98 -0
  199. package/dist/core/interface/InterfaceBuilder.d.ts.map +1 -0
  200. package/dist/core/interface/InterfaceBuilder.js +311 -0
  201. package/dist/core/interface/activation.d.ts +11 -0
  202. package/dist/core/interface/activation.d.ts.map +1 -0
  203. package/dist/core/interface/activation.js +16 -0
  204. package/dist/core/interface/check.d.ts +10 -0
  205. package/dist/core/interface/check.d.ts.map +1 -0
  206. package/dist/core/interface/check.js +18 -0
  207. package/dist/core/interface/create.d.ts +12 -0
  208. package/dist/core/interface/create.d.ts.map +1 -0
  209. package/dist/core/interface/create.js +119 -0
  210. package/dist/core/interface/delete.d.ts +20 -0
  211. package/dist/core/interface/delete.d.ts.map +1 -0
  212. package/dist/core/interface/delete.js +47 -0
  213. package/dist/core/interface/index.d.ts +15 -0
  214. package/dist/core/interface/index.d.ts.map +1 -0
  215. package/dist/core/interface/index.js +32 -0
  216. package/dist/core/interface/lock.d.ts +23 -0
  217. package/dist/core/interface/lock.d.ts.map +1 -0
  218. package/dist/core/interface/lock.js +51 -0
  219. package/dist/core/interface/read.d.ts +26 -0
  220. package/dist/core/interface/read.d.ts.map +1 -0
  221. package/dist/core/interface/read.js +51 -0
  222. package/dist/core/interface/types.d.ts +19 -0
  223. package/dist/core/interface/types.d.ts.map +1 -0
  224. package/dist/core/interface/types.js +5 -0
  225. package/dist/core/interface/unlock.d.ts +11 -0
  226. package/dist/core/interface/unlock.d.ts.map +1 -0
  227. package/dist/core/interface/unlock.js +35 -0
  228. package/dist/core/interface/update.d.ts +12 -0
  229. package/dist/core/interface/update.d.ts.map +1 -0
  230. package/dist/core/interface/update.js +82 -0
  231. package/dist/core/interface/validation.d.ts +10 -0
  232. package/dist/core/interface/validation.d.ts.map +1 -0
  233. package/dist/core/interface/validation.js +17 -0
  234. package/dist/core/managementOperations.d.ts +34 -0
  235. package/dist/core/managementOperations.d.ts.map +1 -0
  236. package/dist/core/managementOperations.js +136 -0
  237. package/dist/core/package/PackageBuilder.d.ts +129 -0
  238. package/dist/core/package/PackageBuilder.d.ts.map +1 -0
  239. package/dist/core/package/PackageBuilder.js +386 -0
  240. package/dist/core/package/check.d.ts +9 -0
  241. package/dist/core/package/check.d.ts.map +1 -0
  242. package/dist/core/package/check.js +29 -0
  243. package/dist/core/package/create.d.ts +12 -0
  244. package/dist/core/package/create.d.ts.map +1 -0
  245. package/dist/core/package/create.js +145 -0
  246. package/dist/core/package/delete.d.ts +27 -0
  247. package/dist/core/package/delete.d.ts.map +1 -0
  248. package/dist/core/package/delete.js +138 -0
  249. package/dist/core/package/index.d.ts +15 -0
  250. package/dist/core/package/index.d.ts.map +1 -0
  251. package/dist/core/package/index.js +32 -0
  252. package/dist/core/package/lock.d.ts +10 -0
  253. package/dist/core/package/lock.d.ts.map +1 -0
  254. package/dist/core/package/lock.js +28 -0
  255. package/dist/core/package/read.d.ts +17 -0
  256. package/dist/core/package/read.d.ts.map +1 -0
  257. package/dist/core/package/read.js +42 -0
  258. package/dist/core/package/transportCheck.d.ts +10 -0
  259. package/dist/core/package/transportCheck.d.ts.map +1 -0
  260. package/dist/core/package/transportCheck.js +52 -0
  261. package/dist/core/package/types.d.ts +15 -0
  262. package/dist/core/package/types.d.ts.map +1 -0
  263. package/dist/core/package/types.js +5 -0
  264. package/dist/core/package/unlock.d.ts +11 -0
  265. package/dist/core/package/unlock.d.ts.map +1 -0
  266. package/dist/core/package/unlock.js +16 -0
  267. package/dist/core/package/update.d.ts +19 -0
  268. package/dist/core/package/update.d.ts.map +1 -0
  269. package/dist/core/package/update.js +125 -0
  270. package/dist/core/package/validation.d.ts +14 -0
  271. package/dist/core/package/validation.d.ts.map +1 -0
  272. package/dist/core/package/validation.js +72 -0
  273. package/dist/core/program/ProgramBuilder.d.ts +102 -0
  274. package/dist/core/program/ProgramBuilder.d.ts.map +1 -0
  275. package/dist/core/program/ProgramBuilder.js +321 -0
  276. package/dist/core/program/activation.d.ts +11 -0
  277. package/dist/core/program/activation.d.ts.map +1 -0
  278. package/dist/core/program/activation.js +16 -0
  279. package/dist/core/program/check.d.ts +10 -0
  280. package/dist/core/program/check.d.ts.map +1 -0
  281. package/dist/core/program/check.js +18 -0
  282. package/dist/core/program/create.d.ts +23 -0
  283. package/dist/core/program/create.d.ts.map +1 -0
  284. package/dist/core/program/create.js +159 -0
  285. package/dist/core/program/delete.d.ts +14 -0
  286. package/dist/core/program/delete.d.ts.map +1 -0
  287. package/dist/core/program/delete.js +21 -0
  288. package/dist/core/program/index.d.ts +14 -0
  289. package/dist/core/program/index.d.ts.map +1 -0
  290. package/dist/core/program/index.js +31 -0
  291. package/dist/core/program/lock.d.ts +20 -0
  292. package/dist/core/program/lock.d.ts.map +1 -0
  293. package/dist/core/program/lock.js +49 -0
  294. package/dist/core/program/read.d.ts +26 -0
  295. package/dist/core/program/read.d.ts.map +1 -0
  296. package/dist/core/program/read.js +51 -0
  297. package/dist/core/program/unlock.d.ts +11 -0
  298. package/dist/core/program/unlock.d.ts.map +1 -0
  299. package/dist/core/program/unlock.js +16 -0
  300. package/dist/core/program/update.d.ts +16 -0
  301. package/dist/core/program/update.d.ts.map +1 -0
  302. package/dist/core/program/update.js +82 -0
  303. package/dist/core/program/validation.d.ts +10 -0
  304. package/dist/core/program/validation.d.ts.map +1 -0
  305. package/dist/core/program/validation.js +17 -0
  306. package/dist/core/readOperations.d.ts +63 -0
  307. package/dist/core/readOperations.d.ts.map +1 -0
  308. package/dist/core/readOperations.js +204 -0
  309. package/dist/core/shared/checkRun.d.ts +68 -0
  310. package/dist/core/shared/checkRun.d.ts.map +1 -0
  311. package/dist/core/shared/checkRun.js +292 -0
  312. package/dist/core/shared/readMetadata.d.ts +16 -0
  313. package/dist/core/shared/readMetadata.d.ts.map +1 -0
  314. package/dist/core/shared/readMetadata.js +74 -0
  315. package/dist/core/shared/readSource.d.ts +21 -0
  316. package/dist/core/shared/readSource.d.ts.map +1 -0
  317. package/dist/core/shared/readSource.js +83 -0
  318. package/dist/core/shared/search.d.ts +26 -0
  319. package/dist/core/shared/search.d.ts.map +1 -0
  320. package/dist/core/shared/search.js +32 -0
  321. package/dist/core/shared/sqlQuery.d.ts +22 -0
  322. package/dist/core/shared/sqlQuery.d.ts.map +1 -0
  323. package/dist/core/shared/sqlQuery.js +36 -0
  324. package/dist/core/shared/systemInfo.d.ts +22 -0
  325. package/dist/core/shared/systemInfo.d.ts.map +1 -0
  326. package/dist/core/shared/systemInfo.js +67 -0
  327. package/dist/core/shared/tableContents.d.ts +22 -0
  328. package/dist/core/shared/tableContents.d.ts.map +1 -0
  329. package/dist/core/shared/tableContents.js +89 -0
  330. package/dist/core/shared/validation.d.ts +26 -0
  331. package/dist/core/shared/validation.d.ts.map +1 -0
  332. package/dist/core/shared/validation.js +134 -0
  333. package/dist/core/shared/whereUsed.d.ts +19 -0
  334. package/dist/core/shared/whereUsed.d.ts.map +1 -0
  335. package/dist/core/shared/whereUsed.js +88 -0
  336. package/dist/core/structure/StructureBuilder.d.ts +124 -0
  337. package/dist/core/structure/StructureBuilder.d.ts.map +1 -0
  338. package/dist/core/structure/StructureBuilder.js +357 -0
  339. package/dist/core/structure/activation.d.ts +10 -0
  340. package/dist/core/structure/activation.d.ts.map +1 -0
  341. package/dist/core/structure/activation.js +15 -0
  342. package/dist/core/structure/check.d.ts +12 -0
  343. package/dist/core/structure/check.d.ts.map +1 -0
  344. package/dist/core/structure/check.js +44 -0
  345. package/dist/core/structure/create.d.ts +12 -0
  346. package/dist/core/structure/create.d.ts.map +1 -0
  347. package/dist/core/structure/create.js +136 -0
  348. package/dist/core/structure/delete.d.ts +14 -0
  349. package/dist/core/structure/delete.d.ts.map +1 -0
  350. package/dist/core/structure/delete.js +21 -0
  351. package/dist/core/structure/index.d.ts +15 -0
  352. package/dist/core/structure/index.d.ts.map +1 -0
  353. package/dist/core/structure/index.js +32 -0
  354. package/dist/core/structure/lock.d.ts +10 -0
  355. package/dist/core/structure/lock.d.ts.map +1 -0
  356. package/dist/core/structure/lock.js +28 -0
  357. package/dist/core/structure/read.d.ts +26 -0
  358. package/dist/core/structure/read.d.ts.map +1 -0
  359. package/dist/core/structure/read.js +51 -0
  360. package/dist/core/structure/types.d.ts +33 -0
  361. package/dist/core/structure/types.d.ts.map +1 -0
  362. package/dist/core/structure/types.js +5 -0
  363. package/dist/core/structure/unlock.d.ts +11 -0
  364. package/dist/core/structure/unlock.d.ts.map +1 -0
  365. package/dist/core/structure/unlock.js +16 -0
  366. package/dist/core/structure/update.d.ts +11 -0
  367. package/dist/core/structure/update.d.ts.map +1 -0
  368. package/dist/core/structure/update.js +26 -0
  369. package/dist/core/structure/validation.d.ts +10 -0
  370. package/dist/core/structure/validation.d.ts.map +1 -0
  371. package/dist/core/structure/validation.js +17 -0
  372. package/dist/core/table/TableBuilder.d.ts +115 -0
  373. package/dist/core/table/TableBuilder.d.ts.map +1 -0
  374. package/dist/core/table/TableBuilder.js +328 -0
  375. package/dist/core/table/activation.d.ts +10 -0
  376. package/dist/core/table/activation.d.ts.map +1 -0
  377. package/dist/core/table/activation.js +15 -0
  378. package/dist/core/table/check.d.ts +11 -0
  379. package/dist/core/table/check.d.ts.map +1 -0
  380. package/dist/core/table/check.js +30 -0
  381. package/dist/core/table/create.d.ts +12 -0
  382. package/dist/core/table/create.d.ts.map +1 -0
  383. package/dist/core/table/create.js +182 -0
  384. package/dist/core/table/delete.d.ts +14 -0
  385. package/dist/core/table/delete.d.ts.map +1 -0
  386. package/dist/core/table/delete.js +21 -0
  387. package/dist/core/table/index.d.ts +15 -0
  388. package/dist/core/table/index.d.ts.map +1 -0
  389. package/dist/core/table/index.js +32 -0
  390. package/dist/core/table/lock.d.ts +9 -0
  391. package/dist/core/table/lock.d.ts.map +1 -0
  392. package/dist/core/table/lock.js +29 -0
  393. package/dist/core/table/read.d.ts +26 -0
  394. package/dist/core/table/read.d.ts.map +1 -0
  395. package/dist/core/table/read.js +51 -0
  396. package/dist/core/table/types.d.ts +10 -0
  397. package/dist/core/table/types.d.ts.map +1 -0
  398. package/dist/core/table/types.js +5 -0
  399. package/dist/core/table/unlock.d.ts +15 -0
  400. package/dist/core/table/unlock.d.ts.map +1 -0
  401. package/dist/core/table/unlock.js +32 -0
  402. package/dist/core/table/update.d.ts +16 -0
  403. package/dist/core/table/update.d.ts.map +1 -0
  404. package/dist/core/table/update.js +32 -0
  405. package/dist/core/table/validation.d.ts +10 -0
  406. package/dist/core/table/validation.d.ts.map +1 -0
  407. package/dist/core/table/validation.js +17 -0
  408. package/dist/core/transport/TransportBuilder.d.ts +85 -0
  409. package/dist/core/transport/TransportBuilder.d.ts.map +1 -0
  410. package/dist/core/transport/TransportBuilder.js +154 -0
  411. package/dist/core/transport/create.d.ts +11 -0
  412. package/dist/core/transport/create.d.ts.map +1 -0
  413. package/dist/core/transport/create.js +157 -0
  414. package/dist/core/transport/index.d.ts +8 -0
  415. package/dist/core/transport/index.d.ts.map +1 -0
  416. package/dist/core/transport/index.js +25 -0
  417. package/dist/core/transport/read.d.ts +10 -0
  418. package/dist/core/transport/read.d.ts.map +1 -0
  419. package/dist/core/transport/read.js +22 -0
  420. package/dist/core/transport/types.d.ts +10 -0
  421. package/dist/core/transport/types.d.ts.map +1 -0
  422. package/dist/core/transport/types.js +5 -0
  423. package/dist/core/view/ViewBuilder.d.ts +117 -0
  424. package/dist/core/view/ViewBuilder.d.ts.map +1 -0
  425. package/dist/core/view/ViewBuilder.js +335 -0
  426. package/dist/core/view/activation.d.ts +10 -0
  427. package/dist/core/view/activation.d.ts.map +1 -0
  428. package/dist/core/view/activation.js +15 -0
  429. package/dist/core/view/check.d.ts +7 -0
  430. package/dist/core/view/check.d.ts.map +1 -0
  431. package/dist/core/view/check.js +57 -0
  432. package/dist/core/view/create.d.ts +12 -0
  433. package/dist/core/view/create.d.ts.map +1 -0
  434. package/dist/core/view/create.js +88 -0
  435. package/dist/core/view/delete.d.ts +14 -0
  436. package/dist/core/view/delete.d.ts.map +1 -0
  437. package/dist/core/view/delete.js +21 -0
  438. package/dist/core/view/index.d.ts +15 -0
  439. package/dist/core/view/index.d.ts.map +1 -0
  440. package/dist/core/view/index.js +32 -0
  441. package/dist/core/view/lock.d.ts +18 -0
  442. package/dist/core/view/lock.d.ts.map +1 -0
  443. package/dist/core/view/lock.js +45 -0
  444. package/dist/core/view/read.d.ts +26 -0
  445. package/dist/core/view/read.d.ts.map +1 -0
  446. package/dist/core/view/read.js +51 -0
  447. package/dist/core/view/types.d.ts +19 -0
  448. package/dist/core/view/types.d.ts.map +1 -0
  449. package/dist/core/view/types.js +5 -0
  450. package/dist/core/view/unlock.d.ts +10 -0
  451. package/dist/core/view/unlock.d.ts.map +1 -0
  452. package/dist/core/view/unlock.js +15 -0
  453. package/dist/core/view/update.d.ts +12 -0
  454. package/dist/core/view/update.d.ts.map +1 -0
  455. package/dist/core/view/update.js +89 -0
  456. package/dist/core/view/validation.d.ts +10 -0
  457. package/dist/core/view/validation.d.ts.map +1 -0
  458. package/dist/core/view/validation.js +17 -0
  459. package/dist/core.d.ts +133 -0
  460. package/dist/core.d.ts.map +1 -0
  461. package/dist/core.js +175 -0
  462. package/dist/index.d.ts +38 -0
  463. package/dist/index.d.ts.map +1 -0
  464. package/dist/index.js +60 -0
  465. package/dist/utils/activationUtils.d.ts +44 -0
  466. package/dist/utils/activationUtils.d.ts.map +1 -0
  467. package/dist/utils/activationUtils.js +127 -0
  468. package/dist/utils/internalUtils.d.ts +12 -0
  469. package/dist/utils/internalUtils.d.ts.map +1 -0
  470. package/dist/utils/internalUtils.js +16 -0
  471. package/dist/utils/lockStateManager.d.ts +64 -0
  472. package/dist/utils/lockStateManager.d.ts.map +1 -0
  473. package/dist/utils/lockStateManager.js +172 -0
  474. package/dist/utils/sessionUtils.d.ts +69 -0
  475. package/dist/utils/sessionUtils.d.ts.map +1 -0
  476. package/dist/utils/sessionUtils.js +134 -0
  477. 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
+ });