{"_id":"@abapify/adt-locks","_rev":"5-1fbfa041b68a46c07f7ffbb2779b66ef","name":"@abapify/adt-locks","dist-tags":{"latest":"0.4.1"},"versions":{"0.0.0":{"name":"@abapify/adt-locks","version":"0.0.0","_id":"@abapify/adt-locks@0.0.0","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"dist":{"shasum":"cda6877f6ca18dad070206defee33bc1298e064c","tarball":"https://registry.npmjs.org/@abapify/adt-locks/-/adt-locks-0.0.0.tgz","fileCount":2,"integrity":"sha512-Ne85I/4QME7uM0vq+6RJ9qXi3O+ok74SNVaEjXUr+uhhhv/9rZHPlvVQJ6F2z09qbwDxd3wboz+yYDacS4YNFA==","signatures":[{"sig":"MEUCIQCp7vN61maa02/o9gd8Kt+jJAioEQwtWWISvK7dW6JP3AIgdItEoyGny/aNCcQWg3hcUwSu3xb6zCp9cu86ODDym44=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159},"_npmUser":{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"},"_npmVersion":"11.12.1","description":"Placeholder — real package is published via CI/CD (trusted publishing).","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-locks_0.0.0_1776719375227_0.9644191734178651","host":"s3://npm-registry-packages-npm-production"}},"0.3.5":{"name":"@abapify/adt-locks","version":"0.3.5","license":"MIT","_id":"@abapify/adt-locks@0.3.5","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-locks#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"57010a3b76e66f324be3017ae9d8941dbbca7f5e","tarball":"https://registry.npmjs.org/@abapify/adt-locks/-/adt-locks-0.3.5.tgz","fileCount":1,"integrity":"sha512-TRAc3Jg7kYZY+YfRzBPc1OZbXkV7J+h6NI6uDOqn5MWkMrEPgmsSzPx9+NsKZ+Cy6yVzN5PXFbw08SD6Eom22Q==","signatures":[{"sig":"MEYCIQD0OrqB4dDm5JM8lqsQt+sszLsEplBej1uojICBRhyPzAIhAKuAgh8a+6icQ+fxIuWI8xGD54DoJVcI6PL4Jzq6bGv8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-locks@0.3.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":743},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"185666fe6ccb304e7b08529eb376ec2493131a7a","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9280b59c-8a73-4010-9c64-b5970aea339b"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-locks"},"_npmVersion":"11.12.1","description":"ADT lock/unlock operations and lock store management","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@abapify/adt-client":"0.3.5"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-locks_0.3.5_1776723660043_0.08515557583214517","host":"s3://npm-registry-packages-npm-production"}},"0.3.6":{"name":"@abapify/adt-locks","version":"0.3.6","license":"MIT","_id":"@abapify/adt-locks@0.3.6","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-locks#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"92c56a65013858070062ccfb49c6582244d62dfa","tarball":"https://registry.npmjs.org/@abapify/adt-locks/-/adt-locks-0.3.6.tgz","fileCount":2,"integrity":"sha512-VZHaptmpGXhsa0SOaOfM3bN0GB+xG2KOy/QCMnGn3bDMPLk1lKBegfIzT/WlMoHRLbpRR2oxAjmbIr27CwxRNg==","signatures":[{"sig":"MEUCIC8EWDp2RM28Co1KjWcGmtZRgHsyRRnD2l1riHeX3FCwAiEAxxRwf27r0iXbp3MmSZpeiUmAMxynJ53X5b7AYCeEw9o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-locks@0.3.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2839},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"489b2b4ad7c2ea972f323d4c356997ac5962ba9e","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9280b59c-8a73-4010-9c64-b5970aea339b"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-locks"},"_npmVersion":"11.11.0","description":"ADT lock/unlock operations and lock store management","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@abapify/adt-client":"0.3.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-locks_0.3.6_1776744806011_0.10112773213869786","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@abapify/adt-locks","version":"0.4.0","license":"MIT","_id":"@abapify/adt-locks@0.4.0","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-locks#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"dist":{"shasum":"2bac75d1a4573265d59292158d206b8c1388a7a8","tarball":"https://registry.npmjs.org/@abapify/adt-locks/-/adt-locks-0.4.0.tgz","fileCount":2,"integrity":"sha512-vAYNC4OOxcDS/SRkAoDKbJGckXAM/T4G5eW71OvrEM2e3MDjz2+BmlfHkHeBWjva19qYSaof6lEU9jfS5vPH/g==","signatures":[{"sig":"MEUCIQCAAKwdCCaRnBC2dmnx9WSpw9H/4rZ1l0Tss5+fhclEgAIgZv9Om6IYred+fnRTvscfCtRvOxDPikQvlFD9/RW93fU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-locks@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":2839},"type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"gitHead":"81dc9eea47fe419e41d246f0ec212fa78570a489","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9280b59c-8a73-4010-9c64-b5970aea339b"}},"repository":{"url":"git+https://github.com/abapify/adt-cli.git","type":"git","directory":"packages/adt-locks"},"_npmVersion":"11.13.0","description":"ADT lock/unlock operations and lock store management","directories":{},"_nodeVersion":"24.16.0","dependencies":{"@abapify/adt-client":"0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/adt-locks_0.4.0_1780072647632_0.5047042248368592","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@abapify/adt-locks","version":"0.4.1","description":"ADT lock/unlock operations and lock store management","license":"MIT","type":"module","types":"./dist/index.d.mts","exports":{".":"./dist/index.mjs","./package.json":"./package.json"},"dependencies":{"@abapify/adt-client":"0.4.1"},"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/abapify/adt-cli.git","directory":"packages/adt-locks"},"homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-locks#readme","bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"gitHead":"9d3b996a5c760a8db67e28c4df3c30098bd29e4a","_id":"@abapify/adt-locks@0.4.1","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-iVR2ec8atth6L3OWygNDF9/Op+JxIy2dsDfl1TnuzqV+ZsF0e/v6nuE194vog3T0rl5YUQAfUeXhgXdicueEnQ==","shasum":"b17a4463f94651fb9497ee89c1ab23f15406e7c4","tarball":"https://registry.npmjs.org/@abapify/adt-locks/-/adt-locks-0.4.1.tgz","fileCount":6,"unpackedSize":35711,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@abapify%2fadt-locks@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIG33vOlPuxup0zXsBBKgEYDOTQ1gr0XdFtI5HDKJNwOrAiEAvydcKRX1ufiVF+PP/mq7n5cS4srNzm1JHzq9AYGan44="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9280b59c-8a73-4010-9c64-b5970aea339b"}},"directories":{},"maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/adt-locks_0.4.1_1780074930990_0.33479427018311947"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-20T21:09:35.156Z","modified":"2026-05-29T17:15:31.563Z","0.0.0":"2026-04-20T21:09:35.475Z","0.3.5":"2026-04-20T22:21:00.191Z","0.3.6":"2026-04-21T04:13:26.134Z","0.4.0":"2026-05-29T16:37:27.766Z","0.4.1":"2026-05-29T17:15:31.247Z"},"bugs":{"url":"https://github.com/abapify/adt-cli/issues"},"license":"MIT","homepage":"https://github.com/abapify/adt-cli/tree/main/packages/adt-locks#readme","repository":{"type":"git","url":"git+https://github.com/abapify/adt-cli.git","directory":"packages/adt-locks"},"description":"ADT lock/unlock operations and lock store management","maintainers":[{"name":"theplenkov-npm","email":"petr.plenkov@gmail.com"}],"readme":"# @abapify/adt-locks\n\nADT lock/unlock operations and lock-store management. This is the single\nlock implementation used across the `abapify/adt-cli` monorepo: it wraps the\nSAP ADT lock/unlock REST endpoints, parses their XML responses, and persists\nlock handles in a pluggable store so multi-object operations can release\nlocks reliably on failure.\n\n[![npm](https://img.shields.io/npm/v/%40abapify%2Fadt-locks.svg)](https://www.npmjs.com/package/@abapify/adt-locks)\n\n## Install\n\n```bash\nnpm i @abapify/adt-locks\n# or\nbun add @abapify/adt-locks\n```\n\n## Usage\n\nSingle lock / unlock via the service, backed by a file-based lock store:\n\n```ts\nimport { createLockService, FileLockStore } from '@abapify/adt-locks';\n\nconst locks = createLockService(client, { store: new FileLockStore() });\n\nconst handle = await locks.lock('/sap/bc/adt/oo/classes/zcl_test');\ntry {\n  // ... make changes via the ADT client ...\n} finally {\n  await locks.unlock('/sap/bc/adt/oo/classes/zcl_test', {\n    lockHandle: handle.handle,\n  });\n}\n```\n\nBatch session for N objects with best-effort rollback on failure:\n\n```ts\nimport { createBatchLockSession } from '@abapify/adt-locks';\n\nconst session = createBatchLockSession(locks, {\n  targets: [\n    { uri: '/sap/bc/adt/oo/classes/zcl_a' },\n    { uri: '/sap/bc/adt/oo/classes/zcl_b' },\n  ],\n});\n\nconst acquired = await session.acquireAll();\n// ... do work ...\nawait session.releaseAll();\n```\n\n## Role in the monorepo\n\n- Single source of truth for ADT locks. `@abapify/adk` (save flow),\n  `@abapify/adt-export`, and CLI commands all delegate to `LockService`\n  rather than reimplementing lock/unlock.\n- Depends only on `@abapify/adt-client` for transport; it does not know\n  about specific object types, which keeps it reusable across plugins.\n- Lock handles are bound to the client's security session; see the\n  monorepo `AGENTS.md` for the 3-step CSRF / security-session protocol\n  that must be in place before any call here will succeed.\n\n## Related\n\n- [abapify/adt-cli monorepo](https://github.com/abapify/adt-cli)\n- [Full docs](https://adt-cli.netlify.app)\n\n## License\n\nMIT\n","readmeFilename":"README.md"}