{"versions":{"1.2.0":{"name":"@ster5/global-mutex","version":"1.2.0","description":"File based mutex","main":"dist/source/index.js","types":"dist/source/index.d.ts","scripts":{"build":"tsc -b","test":"npm run build && mocha","nyc":"nyc npm run test","release":"release-it"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","devDependencies":{"@types/async":"^3.2.10","@types/mocha":"^9.0.0","@types/node":"^16.11.11","async":"^3.2.2","mocha":"^9.1.3","nyc":"^15.1.0","release-it":"^14.11.8","should":"^13.2.3","source-map-support":"^0.5.21","ts-node":"^10.4.0","typescript":"^4.5.2"},"release-it":{"hooks":{"before:init":["npm run build","npm test"],"after:bump":"npm run build","after:git:release":"echo After git push, before github release","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"gitHead":"75c7a79088967881fcfd4b11d1792b8fb2a1dacd","_id":"@ster5/global-mutex@1.2.0","_nodeVersion":"16.13.0","_npmVersion":"8.1.1","dist":{"integrity":"sha512-UmLDijFT0oif4HNuHkXGEolwQe3Eb5x1WX+1fxEMrO92BojeDycn4gjQnZm8d6nZPizzbWrt6SLQgDU+bFALyw==","shasum":"fd3ff4e8ceb21f6c1a4d86d536e294157d7e8093","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-1.2.0.tgz","fileCount":10,"unpackedSize":21462,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhrMgiCRA9TVsSAnZWagAAFAwP/3Maq02awmdgF/nmiwPC\n5KsTe8/aaiGl44o8hB6hW2ZdTOg97Jz8kUZpkxC7o7Ab10AAk1te6lX2j08n\ndA5bYeKUQ6zKa7M06Jl2retF7Y79iG/6LgQ5TPY+sF1QePeFIgYtzaqGudow\nktNyAPNY6heA87AOXTgjq8NaUil9uG+xNlPFKmCdHtxnWN/nODkkO9WxnrOH\n/VCSuxJwvQKOjMs1nlxGVbVTJVUnrIz1cu3FQBurVo/XVmywbi8fEsfjgmvP\ncphaYkEWbsdASyBshziWh+mlxD/z5B0qQZZkDVAK5nNtLqzM7ZOuWf/RqBMZ\npG/+Vu9Si3aMZRMkKRkBguRU5WT7G8AdGFvvTRMmBqdppjXbradGaHzWhYkn\nLrDPEm0ZdKfMH/Ec6MU9XCksPJT/HoRZjN0wATf/02WFa71UJFDKSWLtNZfM\ntCW/li+rZzoo6jFMdBWJCb+d/B7DqO3zz3oRKlyVtHBB2BapCUfl9f8c2uvy\nlP7wwGfH2CY40yNXjdNJ9UmzlafkZg5mLqrOsm3Cd8boQ8tiqmw4YQCTAZzG\nc99asuqFxqLAF/l7CuprNAFL+PIHifa+DOZSNAMMBWe7hxBImHBeaHvA/TBr\nZx/r8S5fbEJ3irXbTclOzTOKl+EApkzZz337M6mBTkRf8x1ghH/PE+R5DtTu\nCakb\r\n=WL0i\r\n-----END PGP SIGNATURE-----\r\n","size":4803,"noattachment":false},"_npmUser":{"name":"anonymous","email":"etienne.rossignon@gadz.org"},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@gadz.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/global-mutex_1.2.0_1638713377850_0.4338238854202259"},"_hasShrinkwrap":false,"publish_time":1638713378039,"_cnpm_publish_time":1638713378039,"_cnpmcore_publish_time":"2021-12-18T11:41:36.100Z","contributors":[]},"1.1.1":{"name":"@ster5/global-mutex","version":"1.1.1","description":"File based mutex","main":"dist/source/index.js","types":"dist/source/index.d.ts","scripts":{"build":"tsc -b","test":"npm run build && mocha","nyc":"nyc npm run test","release":"release-it"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","devDependencies":{"@types/async":"^3.2.5","@types/mocha":"^8.2.2","@types/node":"^14.14.37","async":"^3.2.0","mocha":"^8.3.2","nyc":"^15.1.0","release-it":"^14.5.1","should":"^13.2.3","source-map-support":"^0.5.19","ts-node":"^9.1.1","typescript":"^4.2.3"},"release-it":{"hooks":{"before:init":["npm run build","npm test"],"after:bump":"npm run build","after:git:release":"echo After git push, before github release","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"gitHead":"3c3279589f0589955b1201fc68f6fdfb73c722d2","_id":"@ster5/global-mutex@1.1.1","_nodeVersion":"14.16.0","_npmVersion":"7.8.0","dist":{"shasum":"50c42202aae625043736bc5a3feb4da8e1e0e601","size":4613,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-1.1.1.tgz","integrity":"sha512-dyz2Itai4tbpijvia7OnlSoWV0pAXBKBZH2p2+nq2K26lP+84PvbMZG5SBx30mFIWQLWJQPEs6ECK6IZlIAaJQ=="},"_npmUser":{"name":"anonymous","email":"etienne.rossignon@gadz.org"},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@gadz.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/global-mutex_1.1.1_1617525030818_0.9125802158234955"},"_hasShrinkwrap":false,"publish_time":1617525031097,"_cnpm_publish_time":1617525031097,"_cnpmcore_publish_time":"2021-12-18T11:41:36.472Z","contributors":[]},"1.1.0":{"name":"@ster5/global-mutex","version":"1.1.0","description":"File based mutex","main":"dist/source/index.js","types":"dist/source/index.d.ts","scripts":{"build":"tsc -b","test":"npm run build && mocha","nyc":"nyc npm run test","release":"release-it"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","devDependencies":{"@types/async":"^3.2.5","@types/mocha":"^8.2.2","@types/node":"^14.14.37","async":"^3.2.0","mocha":"^8.3.2","nyc":"^15.1.0","release-it":"^14.5.1","should":"^13.2.3","source-map-support":"^0.5.19","ts-node":"^9.1.1","typescript":"^4.2.3"},"release-it":{"hooks":{"before:init":["npm run build","npm test"],"after:bump":"npm run build","after:git:release":"echo After git push, before github release","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"gitHead":"b24f990e485c200ec31700ec0cb02458f6d9c356","_id":"@ster5/global-mutex@1.1.0","_nodeVersion":"14.16.0","_npmVersion":"7.8.0","dist":{"shasum":"04f0c57ea2434fbf45d9487e964d324d89e8453b","size":4074,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-1.1.0.tgz","integrity":"sha512-iVMBpYUpi8Az15NLv3VSLZLLp074rWjxDNe9rlr4QDvS/VlWinxrJ0/KgD/nSCIn5IE8IvzRxtAV3V7oL3QjOQ=="},"_npmUser":{"name":"anonymous","email":"etienne.rossignon@gadz.org"},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@gadz.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/global-mutex_1.1.0_1617457988278_0.8626625279983826"},"_hasShrinkwrap":false,"publish_time":1617457988425,"_cnpm_publish_time":1617457988425,"_cnpmcore_publish_time":"2021-12-18T11:41:36.861Z","contributors":[]},"1.0.0":{"name":"@ster5/global-mutex","version":"1.0.0","description":"File based mutex","main":"dist/source/index.js","types":"dist/source/index.d.ts","scripts":{"build":"tsc -b","test":"npm run build && mocha","nyc":"nyc npm run test"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","devDependencies":{"@types/mocha":"^8.2.2","@types/node":"^14.14.37","mocha":"^8.3.2","nyc":"^15.1.0","release-it":"^14.5.1","should":"^13.2.3","source-map-support":"^0.5.19","ts-node":"^9.1.1","typescript":"^4.2.3"},"gitHead":"ddd628824132f8eacefe7eb15d2296d6dbe47632","_id":"@ster5/global-mutex@1.0.0","_nodeVersion":"14.16.0","_npmVersion":"6.14.11","dist":{"shasum":"546062390f03183c065f0d0659ec3b054b368949","size":3875,"noattachment":false,"tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-1.0.0.tgz","integrity":"sha512-QR/UQE2Tz0f+ANcoJgIN48+4By+O7PgNxN/K++THHbSe99qrdejvxTn6vWjERPVsLbDKaYi16rBoCOj3IXTfzQ=="},"_npmUser":{"name":"anonymous","email":"etienne.rossignon@gadz.org"},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@gadz.org"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/global-mutex_1.0.0_1617379852455_0.1564595217464262"},"_hasShrinkwrap":false,"publish_time":1617379852600,"_cnpm_publish_time":1617379852600,"_cnpmcore_publish_time":"2021-12-18T11:41:37.105Z","contributors":[]},"1.3.0":{"name":"@ster5/global-mutex","version":"1.3.0","description":"File based mutex","main":"dist/source/index.js","types":"dist/source/index.d.ts","scripts":{"build":"tsc -b","test":"npm run build && mocha","nyc":"nyc npm run test","ncu":"npx npm-check-updates -u","release":"release-it"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","devDependencies":{"@types/async":"^3.2.20","@types/mocha":"^10.0.1","@types/node":"^20.2.5","async":"^3.2.4","mocha":"^10.2.0","nyc":"^15.1.0","release-it":"^15.10.3","should":"^13.2.3","source-map-support":"^0.5.21","ts-node":"^10.9.1","typescript":"^5.0.4"},"release-it":{"hooks":{"before:init":["npm run build","npm test"],"after:bump":"npm run build","after:git:release":"echo After git push, before github release","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"gitHead":"92f3cbd7a60ae19f4122616dc782d2aeb23e984b","_id":"@ster5/global-mutex@1.3.0","_nodeVersion":"20.2.0","_npmVersion":"9.6.6","dist":{"integrity":"sha512-YDOLvN/G2bHQj7UGpwHI+f2PwxTKYL93Zzs5M7wCehY0HGUcAceOMQAK/n1xJjCVTbkE9zKHkT5baOEoOio/7A==","shasum":"c8ac58444e1f08c15b1265b8f61fbbb09a6dc019","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-1.3.0.tgz","fileCount":7,"unpackedSize":13065,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGsW0cJbgYvb0yrvjlQ6rMFdfC22SX+Fc2Mvh1TdS6Q8AiEA5Q9H7CD7QL8MCOjObLr4/HH/Pu/mNCY/5sIgLBJRpAs="}]},"_npmUser":{"name":"anonymous","email":"etienne.rossignon@sterfive.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/global-mutex_1.3.0_1685561145296_0.8280036898629433"},"_hasShrinkwrap":false,"contributors":[]},"2.0.0":{"name":"@ster5/global-mutex","version":"2.0.0","description":"File based mutex","main":"dist/source/index.js","types":"dist/source/index.d.ts","scripts":{"build":"tsc -b","test":"npm run build && mocha","nyc":"nyc npm run test","ncu":"npx npm-check-updates -u","release":"release-it"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","devDependencies":{"@types/async":"^3.2.20","@types/mocha":"^10.0.1","@types/node":"^20.2.5","async":"^3.2.4","mocha":"^10.2.0","nyc":"^15.1.0","release-it":"^15.10.3","should":"^13.2.3","source-map-support":"^0.5.21","ts-node":"^10.9.1","typescript":"^5.0.4"},"release-it":{"hooks":{"before:init":["npm run build","npm test"],"after:bump":"npm run build","after:git:release":"echo After git push, before github release","after:release":"echo Successfully released ${name} v${version} to ${repo.repository}."}},"dependencies":{"@types/proper-lockfile":"^4.1.2","proper-lockfile":"^4.1.2"},"gitHead":"5657d6f210d4ee47b6739bcda31934b42565a735","_id":"@ster5/global-mutex@2.0.0","_nodeVersion":"20.2.0","_npmVersion":"9.6.6","dist":{"integrity":"sha512-nlp5BM4E7ybkGt6ouZsohSnliWtXgRoUWHMl8uzi64gKwZSONsssEstfBGnQ0OpdQlE0HBP0qq9RDxP0JTW57w==","shasum":"874d1eda2a295adff81da48c76f214edf95ec803","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-2.0.0.tgz","fileCount":10,"unpackedSize":9109,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQD1e0Z9j1IMy1MiD+cTeq9ZPqbgMBwTMihz7BzCLM4oqAIhAO9RpHvAM+OBk9LL6pOVvFpxxokhu76meYfT/dRAfc0a"}]},"_npmUser":{"name":"anonymous","email":"etienne.rossignon@sterfive.com"},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/global-mutex_2.0.0_1685623384719_0.6628700183701721"},"_hasShrinkwrap":false,"contributors":[]},"3.1.0":{"name":"@ster5/global-mutex","version":"3.1.0","description":"File based mutex","type":"commonjs","engines":{"node":">=20"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","test":"vitest run","test:watch":"vitest","lint":"biome lint","format":"biome format --write","ncu":"npx npm-check-updates -u","prepare":"husky"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/node-opcua/global-mutex.git"},"bugs":{"url":"https://github.com/node-opcua/global-mutex/issues"},"devDependencies":{"@biomejs/biome":"^2.4.4","@types/async":"^3.2.25","@types/node":"^25.3.1","async":"^3.2.6","husky":"^9.1.7","lint-staged":"^16.2.7","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^3.1.4"},"lint-staged":{"*.{ts,js}":["biome format --write","biome check --write"]},"gitHead":"ff07260e690557024af91f33e87e94f82f55c814","_id":"@ster5/global-mutex@3.1.0","homepage":"https://github.com/node-opcua/global-mutex#readme","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-wCS0yuz7e13NYr6Rmp7iCUiRieLGGbK031u+VcafYJL++al8E95/h8L1jX44kfHq6LqP1i7FKItA8oan0Ch5HQ==","shasum":"0fb11bbcd28f47d7d9a83d2012b935df3cdb4863","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-3.1.0.tgz","fileCount":9,"unpackedSize":48107,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ster5%2fglobal-mutex@3.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHasAJ6ArOW2rfi1bLtTDQ5+Zo32AoO8uvaPva7e+tefAiEA7PeKNgpNp8xXkY0Yo3OG1G+xsI2HpW8X9M3iFdZHZVs="}],"size":9702},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f4e03846-d96e-4816-95a0-c723f9ad33b5"}},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/global-mutex_3.1.0_1772145576686_0.9045257431162697"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-02-26T22:39:36.833Z","publish_time":1772145576833,"_source_registry_name":"default","contributors":[]},"3.1.1":{"name":"@ster5/global-mutex","version":"3.1.1","description":"File based mutex","type":"commonjs","engines":{"node":">=20"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","test":"vitest run","test:watch":"vitest","lint":"biome lint","format":"biome format --write","ncu":"npx npm-check-updates -u","prepare":"husky"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/node-opcua/global-mutex.git"},"bugs":{"url":"https://github.com/node-opcua/global-mutex/issues"},"devDependencies":{"@biomejs/biome":"^2.4.4","@types/async":"^3.2.25","@types/node":"^25.3.1","async":"^3.2.6","husky":"^9.1.7","lint-staged":"^16.2.7","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^3.1.4"},"lint-staged":{"*.{ts,js}":["biome format --write","biome check --write"]},"gitHead":"e7719b29f3a725479965d09ef9389533cd5fe1ce","_id":"@ster5/global-mutex@3.1.1","homepage":"https://github.com/node-opcua/global-mutex#readme","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-V+e4oe14/EIaMecvtTTeeZFOoQ3Hr2kdqBd6nfsaASNrrfmnC/zIrI3oZs5e2fP4lSKkQdeXMt+5QhAANrQtTw==","shasum":"476f875262e4786bad62dc6532f1b8e297e8434d","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-3.1.1.tgz","fileCount":9,"unpackedSize":50619,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ster5%2fglobal-mutex@3.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCsG3NyGiAcpMXsliH216A9rnFmu76A4LW+8mvB6WEpyAIgXIPWc5RREWVl3UWXQK3QirB/IVKTt4tq2YMkCGgXzsY="}],"size":10124},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f4e03846-d96e-4816-95a0-c723f9ad33b5"}},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/global-mutex_3.1.1_1772228803205_0.9722156080407784"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-02-27T21:46:43.345Z","publish_time":1772228803345,"_source_registry_name":"default","contributors":[]},"3.1.2":{"name":"@ster5/global-mutex","version":"3.1.2","description":"File based mutex","type":"commonjs","engines":{"node":">=20"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","test":"vitest run","test:watch":"vitest","lint":"biome lint","format":"biome format --write","ncu":"npx npm-check-updates -u","prepare":"husky"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/node-opcua/global-mutex.git"},"bugs":{"url":"https://github.com/node-opcua/global-mutex/issues"},"devDependencies":{"@biomejs/biome":"^2.4.4","@types/async":"^3.2.25","@types/node":"^25.3.1","async":"^3.2.6","husky":"^9.1.7","lint-staged":"^16.2.7","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^3.1.4"},"lint-staged":{"*.{ts,js}":["biome format --write","biome check --write"]},"gitHead":"e1a560544c891f2dcd73a4e38591a02609d93a0c","_id":"@ster5/global-mutex@3.1.2","homepage":"https://github.com/node-opcua/global-mutex#readme","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-+tzhrovmgH+GqWv+nd2xq5wziDO5leJNAttjhzxaTHbOmZ9QgEA3CiKvTzP9YI7x8Wp8INIKywcWX8vWrUgaYg==","shasum":"06eab167943b374085dc07a35d570735489028ff","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-3.1.2.tgz","fileCount":9,"unpackedSize":55098,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ster5%2fglobal-mutex@3.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGnartMxTfvsHmAolvK9mURKXu8AGK/YU4+pVIu3AJkaAiBu0KRbynlSq5TIeoMYDcxPGEZo7INSWcJUOxq1TNgIhQ=="}],"size":10874},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f4e03846-d96e-4816-95a0-c723f9ad33b5"}},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/global-mutex_3.1.2_1772450060789_0.6849299186504241"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-02T11:14:20.927Z","publish_time":1772450060927,"_source_registry_name":"default","contributors":[]},"3.2.0":{"name":"@ster5/global-mutex","version":"3.2.0","description":"File based mutex","type":"commonjs","engines":{"node":">=20"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","install-proper-lockfile":"npm install proper-lockfile --no-save","uninstall-proper-lockfile":"npm remove proper-lockfile","test":"vitest run","test:watch":"vitest","lint":"biome lint","format":"biome format --write","ncu":"npx npm-check-updates -u","prepare":"husky"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/node-opcua/global-mutex.git"},"bugs":{"url":"https://github.com/node-opcua/global-mutex/issues"},"devDependencies":{"@biomejs/biome":"^2.4.4","@types/async":"^3.2.25","@types/node":"^25.3.1","@types/proper-lockfile":"^4.1.4","async":"^3.2.6","husky":"^9.1.7","lint-staged":"^16.2.7","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^3.1.4"},"lint-staged":{"*.{ts,js}":["biome format --write","biome check --write"]},"peerDependenciesMeta":{"proper-lockfile":{"optional":true}},"gitHead":"45c4681b673e4b117137878dbab80d7d0d5cc7a8","_id":"@ster5/global-mutex@3.2.0","homepage":"https://github.com/node-opcua/global-mutex#readme","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-F8E4nSdDgonjiid3jSuddQqeEB0u1Tx232HcDHgoKnFBmi5J79YT0BdmWHeBy+xVtKdpILH08snscOyKu0xPNQ==","shasum":"313d905fb4463eacae133bd01e4cda66343aa4e9","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-3.2.0.tgz","fileCount":9,"unpackedSize":78694,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ster5%2fglobal-mutex@3.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDbF/PfsX9hvLwvaMtYWfy7ijCbQGINMrU0Vg06DC1BQgIhAJpRlyUsd5s7N8ukGOGImsAyYsvre571a5tiWWC2/J3S"}],"size":14363},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f4e03846-d96e-4816-95a0-c723f9ad33b5"}},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/global-mutex_3.2.0_1772542272185_0.9939083724388125"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-03T12:51:12.339Z","publish_time":1772542272339,"_source_registry_name":"default","contributors":[]},"3.2.1":{"name":"@ster5/global-mutex","version":"3.2.1","description":"File based mutex","type":"commonjs","engines":{"node":">=20"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","install-proper-lockfile":"npm install proper-lockfile --no-save","uninstall-proper-lockfile":"npm remove proper-lockfile","test":"vitest run","test:watch":"vitest","lint":"biome lint","format":"biome format --write","ncu":"npx npm-check-updates -u","prepare":"husky"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/node-opcua/global-mutex.git"},"bugs":{"url":"https://github.com/node-opcua/global-mutex/issues"},"devDependencies":{"@biomejs/biome":"^2.4.4","@types/async":"^3.2.25","@types/node":"^25.3.1","@types/proper-lockfile":"^4.1.4","async":"^3.2.6","husky":"^9.1.7","lint-staged":"^16.2.7","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^3.1.4"},"lint-staged":{"*.{ts,js}":["biome format --write","biome check --write"]},"peerDependenciesMeta":{"proper-lockfile":{"optional":true}},"gitHead":"90368d55b6e2afd271846b87369e58648c61c4f1","_id":"@ster5/global-mutex@3.2.1","homepage":"https://github.com/node-opcua/global-mutex#readme","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-Z06CZMGn3zL2Fpg5XDFdVdM0dY+R2JnB/Wk+VF1ME/iHJjZuQ8VbTuteboUq7M+sB23aHi3TPNXuvo6QUF1YtA==","shasum":"cd86920a4426325e5a35dd946b54cf26c35bc01e","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-3.2.1.tgz","fileCount":9,"unpackedSize":78391,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ster5%2fglobal-mutex@3.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIADIh+Nq4ZZP5BLO/dXt/LM/4373i2i78qUDD38nznCnAiEAyAktN/6d4boBeEJF4DtvfVRw7HlMRzL+5AWIP6YqtUU="}],"size":14375},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f4e03846-d96e-4816-95a0-c723f9ad33b5"}},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/global-mutex_3.2.1_1772884336914_0.768285743158706"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-07T11:52:17.066Z","publish_time":1772884337066,"_source_registry_name":"default","contributors":[]},"3.2.2":{"name":"@ster5/global-mutex","version":"3.2.2","description":"File based mutex","type":"commonjs","engines":{"node":">=20"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","install-proper-lockfile":"npm install proper-lockfile --no-save","uninstall-proper-lockfile":"npm remove proper-lockfile","test":"vitest run","test:watch":"vitest","lint":"biome lint","format":"biome format --write","ncu":"npx npm-check-updates -u","prepare":"husky"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/node-opcua/global-mutex.git"},"bugs":{"url":"https://github.com/node-opcua/global-mutex/issues"},"devDependencies":{"@biomejs/biome":"^2.4.4","@types/async":"^3.2.25","@types/node":"^25.3.1","@types/proper-lockfile":"^4.1.4","async":"^3.2.6","husky":"^9.1.7","lint-staged":"^16.2.7","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^3.1.4"},"lint-staged":{"*.{ts,js}":["biome format --write","biome check --write"]},"peerDependenciesMeta":{"proper-lockfile":{"optional":true}},"gitHead":"e001b597947a49ec509482b1135db0c21ebb4c7f","_id":"@ster5/global-mutex@3.2.2","homepage":"https://github.com/node-opcua/global-mutex#readme","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-GNJRtVkCdCLl/iZuDAjwI49OffgZnQEbh5+SUVnj9Qv1IvAdSpB7WfbWR30CesehZdcqKgUPNfHISHUPQLiGXg==","shasum":"936799737bf18add664efb84a01785c48f066ab9","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-3.2.2.tgz","fileCount":9,"unpackedSize":79205,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ster5%2fglobal-mutex@3.2.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC8u5+rf/rerSQbEHllro6M3ezSuuQXyi9vXlWU5uU1ywIhAMj9gD3+BOmdrYTv178owfkmHDFXtmoG8REvU+SvUBZp"}],"size":14457},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f4e03846-d96e-4816-95a0-c723f9ad33b5"}},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/global-mutex_3.2.2_1772989808266_0.5617683540937086"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-08T17:10:08.409Z","publish_time":1772989808409,"_source_registry_name":"default","contributors":[]},"3.3.0":{"name":"@ster5/global-mutex","version":"3.3.0","description":"File based mutex","type":"commonjs","engines":{"node":">=20"},"main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup","install-proper-lockfile":"npm install proper-lockfile --no-save","uninstall-proper-lockfile":"npm remove proper-lockfile","test":"vitest run","test:watch":"vitest","lint":"biome lint","format":"biome format --write","ncu":"npx npm-check-updates -u","prepare":"husky"},"keywords":["mutex","lock","locking","filelock","cross-process"],"author":{"name":"Etienne Rossignon","url":"etienne.rossignon@gadz.org"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/node-opcua/global-mutex.git"},"bugs":{"url":"https://github.com/node-opcua/global-mutex/issues"},"devDependencies":{"@biomejs/biome":"^2.4.4","@types/async":"^3.2.25","@types/node":"^25.3.1","@types/proper-lockfile":"^4.1.4","async":"^3.2.6","husky":"^9.1.7","lint-staged":"^16.2.7","tsup":"^8.5.1","typescript":"^5.9.3","vitest":"^3.1.4"},"lint-staged":{"*.{ts,js}":["biome format --write","biome check --write"]},"peerDependenciesMeta":{"proper-lockfile":{"optional":true}},"gitHead":"ab800861278897fc744bca12d09686b473ca09ff","_id":"@ster5/global-mutex@3.3.0","homepage":"https://github.com/node-opcua/global-mutex#readme","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-uiGJTiE0ZiQ6z9VMOHVT3RNrErCi3pZh1bGbfb27GAXCAsvCyLz61pLfBYq8uzsf6Y2qdybhoTwHy7UGtK6MYw==","shasum":"483f89f59f207092f0e7b5b85285b0219479c053","tarball":"http://123.232.10.234:8212/nexus/content/groups/npm-public/@ster5/global-mutex/-/global-mutex-3.3.0.tgz","fileCount":9,"unpackedSize":78413,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ster5%2fglobal-mutex@3.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCf6vYpRA/6yDdq7QnRIuBZ2G+bRMPnxk2EA92DJPnzMAIgE25KDBX0Dc0kq92uidq2Ot9e7nQGfmtBQjL77Ja+5mQ="}],"size":14255},"_npmUser":{"name":"anonymous","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f4e03846-d96e-4816-95a0-c723f9ad33b5"}},"directories":{},"maintainers":[{"name":"anonymous","email":"etienne.rossignon@sterfive.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/global-mutex_3.3.0_1773929915484_0.8918632032296832"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2026-03-19T14:18:35.635Z","publish_time":1773929915635,"_source_registry_name":"default","contributors":[]}},"dist-tags":{"latest":"3.3.0"},"name":"@ster5/global-mutex","time":{"created":"2022-01-26T23:02:40.491Z","modified":"2026-03-19T14:18:58.450Z","1.2.0":"2021-12-05T14:09:38.039Z","1.1.1":"2021-04-04T08:30:31.097Z","1.1.0":"2021-04-03T13:53:08.425Z","1.0.0":"2021-04-02T16:10:52.600Z","1.3.0":"2023-05-31T19:25:45.485Z","2.0.0":"2023-06-01T12:43:04.869Z","3.1.0":"2026-02-26T22:39:36.833Z","3.1.1":"2026-02-27T21:46:43.345Z","3.1.2":"2026-03-02T11:14:20.927Z","3.2.0":"2026-03-03T12:51:12.339Z","3.2.1":"2026-03-07T11:52:17.066Z","3.2.2":"2026-03-08T17:10:08.409Z","3.3.0":"2026-03-19T14:18:35.635Z"},"readme":"# @ster5/global-mutex\n\n[![CI](https://github.com/node-opcua/global-mutex/actions/workflows/ci.yml/badge.svg)](https://github.com/node-opcua/global-mutex/actions/workflows/ci.yml)\n[![NPM Version](https://img.shields.io/npm/v/@ster5/global-mutex.svg)](https://www.npmjs.com/package/@ster5/global-mutex)\n[![NPM Downloads](https://img.shields.io/npm/dt/@ster5/global-mutex.svg)](https://www.npmjs.com/package/@ster5/global-mutex)\n[![NPM Monthly Downloads](https://img.shields.io/npm/dm/@ster5/global-mutex.svg)](https://www.npmjs.com/package/@ster5/global-mutex)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Node.js](https://img.shields.io/badge/node-%3E%3D20-brightgreen.svg)](https://nodejs.org/)\n[![Dependency graph](https://img.shields.io/badge/dependency-graph-blue)](https://npmgraph.js.org/?q=@ster5/global-mutex#sizing=&color=moduleType&zoom=w)\n\nA file-based mutex for Node.js — coordinate access to shared\nresources across multiple processes.\n\n`@ster5/global-mutex` provides a simple, promise-based API for\ncross-process locking with automatic stale-lock detection and retry\nsupport. It supports an optional robust engine using\n[proper-lockfile](https://github.com/moxystudio/node-proper-lockfile) or falls back to a zero-dependency native `fs.mkdir` locking mechanism.\n\n## Features\n\n- **Cross-process locking** — synchronize work across independent\n  Node.js processes using the filesystem.\n- **Automatic stale-lock recovery** — stale locks are automatically\n  detected and removed (default: 2 minutes).\n- **Configurable retries** — built-in retry logic with exponential\n  back-off and jitter (retries forever by default).\n- **Promise-based API** — clean `async`/`await` interface with a\n  `withLock` scoped-lock pattern.\n- **Dual ESM / CJS** — ships both ES module (`.mjs`) and CommonJS\n  (`.js`) builds with full TypeScript declarations.\n- **Zero runtime dependencies** — pure Node.js\n  implementation using `mkdir` as an atomic lock\n  primitive.\n\n## Installation\n\n```bash\nnpm install @ster5/global-mutex\n```\n\nTo enable the robust lockfile engine (highly recommended to prevent race conditions on Windows), install `proper-lockfile` as a peer dependency:\n\n```bash\nnpm install proper-lockfile\n```\n\nBy default, the package will automatically use `proper-lockfile` if it is installed, and fall back to the native `fs.mkdir` technique if it is missing.\n\nYou can explicitly force a specific provider using the `GLOBAL_MUTEX_PROVIDER` environment variable:\n\n```bash\nGLOBAL_MUTEX_PROVIDER=native node my-app.js\n# or\nGLOBAL_MUTEX_PROVIDER=proper-lockfile node my-app.js\n```\n\n## Usage\n\n### `withLock(options, action)`\n\nAcquires a file-based lock, executes the provided `action`, and\nreleases the lock when the action completes — even if it throws.\n\n```typescript\nimport { withLock } from \"@ster5/global-mutex\";\n\nconst result = await withLock({ fileToLock: \"/tmp/my-app.lock\" }, async () => {\n    // critical section — only one process at a time\n    return await doExclusiveWork();\n});\n```\n\n#### Options\n\n| Option       | Type     | Default                                                                 | Description                                                                                               |\n| ------------ | -------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- |\n| `fileToLock` | `string` | _(required)_                                                            | Path to the lock file. The file is created automatically if it does not exist.                            |\n| `stale`      | `number` | `120000` (2 min)                                                        | Duration in ms after which a lock is considered stale and can be reclaimed.                               |\n| `retries`    | `object` | `{ forever: true, minTimeout: 100, maxTimeout: 2000, randomize: true }` | Retry configuration passed to [proper-lockfile](https://github.com/moxystudio/node-proper-lockfile#lock). |\n| `fs`         | `object` | Node.js `fs`                                                            | Optional custom filesystem implementation.                                                                |\n\nAll additional options from\n[proper-lockfile `LockOptions`](https://github.com/moxystudio/node-proper-lockfile#lockfile-options)\nare also accepted.\n\n### `isLocked(fileToLock, options?)`\n\nCheck whether a file is currently locked.\n\n```typescript\nimport { isLocked } from \"@ster5/global-mutex\";\n\nif (await isLocked(\"/tmp/my-app.lock\")) {\n    console.log(\"Another process holds the lock\");\n}\n```\n\n### `defaultStaleDuration`\n\nThe default stale duration constant (`120000` ms / 2 minutes).\n\n```typescript\nimport { defaultStaleDuration } from \"@ster5/global-mutex\";\n```\n\n## Examples\n\n### Serialize parallel tasks\n\n```typescript\nimport { withLock } from \"@ster5/global-mutex\";\n\nconst tasks = Array.from({ length: 10 }, (_, i) =>\n    withLock({ fileToLock: \"/tmp/app.lock\" }, async () => {\n        console.log(`Task ${i} running exclusively`);\n        await doWork(i);\n    }),\n);\n\nawait Promise.all(tasks);\n// All 10 tasks ran one at a time\n```\n\n### Nested locks on different files\n\n```typescript\nimport { withLock } from \"@ster5/global-mutex\";\n\nawait withLock({ fileToLock: \"/tmp/lock-a\" }, async () => {\n    // holds lock A\n    await withLock({ fileToLock: \"/tmp/lock-b\" }, async () => {\n        // holds both lock A and lock B\n        await doWork();\n    });\n});\n```\n\n## Development\n\n### Prerequisites\n\n- Node.js ≥ 20\n\n### Setup\n\n```bash\ngit clone git@github.com:node-opcua/global-mutex.git\ncd global-mutex\nnpm install\n```\n\n### Scripts\n\n| Command              | Description                                                                                      |\n| -------------------- | ------------------------------------------------------------------------------------------------ |\n| `npm run build`      | Build the package with [tsup](https://tsup.egoist.dev/) (outputs ESM + CJS + `.d.ts` to `dist/`) |\n| `npm test`           | Run the test suite with [Vitest](https://vitest.dev/)                                            |\n| `npm run test:watch` | Run tests in watch mode                                                                          |\n| `npm run lint`       | Lint with [Biome](https://biomejs.dev/)                                                          |\n| `npm run format`     | Format with [Biome](https://biomejs.dev/)                                                        |\n\n### CI / CD\n\n- **CI** — runs on every push to `master` and on pull requests.\n  Tests against Node.js 20, 22, and 24 on Ubuntu, macOS, and\n  Windows.\n- **Publish** — triggered by pushing a `v*` tag or via manual\n  workflow dispatch. Builds, tests, and publishes to\n  [npmjs](https://www.npmjs.com/package/@ster5/global-mutex) with\n  provenance.\n\n## License\n\n[MIT](./LICENSE) © 2021 Etienne Rossignon, 2022–2026 Sterfive SAS","users":{}}