@bo-agent/sandbox-windows-acl 0.0.1

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 (50) hide show
  1. package/lib/.tsbuildinfo +1 -0
  2. package/lib/acl.d.ts +83 -0
  3. package/lib/acl.d.ts.map +1 -0
  4. package/lib/acl.js +255 -0
  5. package/lib/acl.js.map +1 -0
  6. package/lib/errors.d.ts +15 -0
  7. package/lib/errors.d.ts.map +1 -0
  8. package/lib/errors.js +20 -0
  9. package/lib/errors.js.map +1 -0
  10. package/lib/ffi.d.ts +252 -0
  11. package/lib/ffi.d.ts.map +1 -0
  12. package/lib/ffi.js +382 -0
  13. package/lib/ffi.js.map +1 -0
  14. package/lib/grant.d.ts +60 -0
  15. package/lib/grant.d.ts.map +1 -0
  16. package/lib/grant.js +102 -0
  17. package/lib/grant.js.map +1 -0
  18. package/lib/index.d.ts +168 -0
  19. package/lib/index.d.ts.map +1 -0
  20. package/lib/index.js +349 -0
  21. package/lib/index.js.map +1 -0
  22. package/lib/invariant.d.ts +15 -0
  23. package/lib/invariant.d.ts.map +1 -0
  24. package/lib/invariant.js +17 -0
  25. package/lib/invariant.js.map +1 -0
  26. package/lib/path-boundary.d.ts +20 -0
  27. package/lib/path-boundary.d.ts.map +1 -0
  28. package/lib/path-boundary.js +37 -0
  29. package/lib/path-boundary.js.map +1 -0
  30. package/lib/runner.d.ts +47 -0
  31. package/lib/runner.d.ts.map +1 -0
  32. package/lib/runner.js +222 -0
  33. package/lib/runner.js.map +1 -0
  34. package/lib/spawn.d.ts +103 -0
  35. package/lib/spawn.d.ts.map +1 -0
  36. package/lib/spawn.js +307 -0
  37. package/lib/spawn.js.map +1 -0
  38. package/lib/token.d.ts +91 -0
  39. package/lib/token.d.ts.map +1 -0
  40. package/lib/token.js +200 -0
  41. package/lib/token.js.map +1 -0
  42. package/lib/win32-abi.d.ts +178 -0
  43. package/lib/win32-abi.d.ts.map +1 -0
  44. package/lib/win32-abi.js +230 -0
  45. package/lib/win32-abi.js.map +1 -0
  46. package/lib/workspace-sid.d.ts +41 -0
  47. package/lib/workspace-sid.d.ts.map +1 -0
  48. package/lib/workspace-sid.js +52 -0
  49. package/lib/workspace-sid.js.map +1 -0
  50. package/package.json +33 -0
@@ -0,0 +1 @@
1
+ {"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2023.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2024.full.d.ts","../../../node_modules/.pnpm/koffi@3.2.1/node_modules/koffi/index.d.ts","../src/errors.ts","../src/win32-abi.ts","../src/ffi.ts","../src/acl.ts","../src/grant.ts","../src/path-boundary.ts","../src/spawn.ts","../src/token.ts","../src/workspace-sid.ts","../src/index.ts","../src/invariant.ts","../src/runner.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.20.2/node_modules/@types/node/index.d.ts"],"fileIdsList":[[94,140,141,143,160,161],[94,142,143,160,161],[143,160,161],[94,143,148,160,161,178],[94,143,144,149,154,160,161,163,175,186],[94,143,144,145,154,160,161,163],[94,143,160,161],[89,90,91,94,143,160,161],[94,143,146,160,161,187],[94,143,147,148,155,160,161,164],[94,143,148,160,161,175,183],[94,143,149,151,154,160,161,163],[94,142,143,150,160,161],[94,143,151,152,160,161],[94,143,153,154,160,161],[94,142,143,154,160,161],[94,143,154,155,156,160,161,175,186],[94,143,154,155,156,160,161,170,175,178],[94,135,143,151,154,157,160,161,163,175,186],[94,143,154,155,157,158,160,161,163,175,183,186],[94,143,157,159,160,161,175,183,186],[92,93,94,95,96,97,98,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[94,143,154,160,161],[94,143,160,161,162,186],[94,143,151,154,160,161,163,175],[94,143,160,161,164],[94,143,160,161,165],[94,142,143,160,161,166],[94,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192],[94,143,160,161,168],[94,143,160,161,169],[94,143,154,160,161,170,171],[94,143,160,161,170,172,187,189],[94,143,155,160,161],[94,143,154,160,161,175,176,178],[94,143,160,161,177,178],[94,143,160,161,175,176],[94,143,160,161,178],[94,143,160,161,179],[94,140,143,160,161,175,180,186],[94,143,154,160,161,181,182],[94,143,160,161,181,182],[94,143,148,160,161,163,175,183],[94,143,160,161,184],[94,143,160,161,163,185],[94,143,157,160,161,169,186],[94,143,148,160,161,187],[94,143,160,161,175,188],[94,143,160,161,162,189],[94,143,160,161,190],[94,135,143,160,161],[94,135,143,154,156,160,161,166,175,178,186,188,189,191],[94,143,160,161,175,192],[94,107,111,143,160,161,186],[94,107,143,160,161,175,186],[94,102,143,160,161],[94,104,107,143,160,161,183,186],[94,143,160,161,163,183],[94,143,160,161,193],[94,102,143,160,161,193],[94,104,107,143,160,161,163,186],[94,99,100,103,106,143,154,160,161,175,186],[94,107,114,143,160,161],[94,99,105,143,160,161],[94,107,128,129,143,160,161],[94,103,107,143,160,161,178,186,193],[94,128,143,160,161,193],[94,101,102,143,160,161,193],[94,107,143,160,161],[94,101,102,103,104,105,106,107,108,109,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,129,130,131,132,133,134,143,160,161],[94,107,122,143,160,161],[94,107,114,115,143,160,161],[94,105,107,115,116,143,160,161],[94,106,143,160,161],[94,99,102,107,143,160,161],[94,107,111,115,116,143,160,161],[94,111,143,160,161],[94,105,107,110,143,160,161,186],[94,99,104,107,114,143,160,161],[94,143,160,161,175],[94,102,107,128,143,160,161,191,193],[78,79,94,143,148,155,160,161,165],[76,77,78,94,143,160,161],[79,80,94,143,160,161],[77,78,79,80,81,82,83,84,85,94,143,155,160,161,165],[94,143,155,160,161,165],[79,85,86,94,143,155,160,161,165],[78,79,94,143,160,161],[78,79,80,94,143,160,161],[94,143,148,160,161]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3e9cef4eed59f8a2249ed834ba4aabe9d0d4e9037d4679487fa17dad99004a3","impliedFormat":1},{"version":"b4f749b16500797d1f0e9ed0f04e08e1b162cfbaf48e3efbacee8f27182b4ad1","impliedFormat":99},{"version":"c6685a0f307f21d88e473dc6d2280ccdff1db6a3c70c475a26376cdca227b855","signature":"a12f2c28fcf2c4702df1f423d87d18dd70f4553a07f86a05d73b9a5ced1e4b5d"},{"version":"28b5fc6dc9bcf8971161edab6b839e6499acd2e3f82f07fd2b0e8924013608db","signature":"6944b6d1ad7d548c7701c1a63320f676b7ba6f0d1faec63cb2d11548aad4a0ec"},{"version":"96df3ce76c2a7a29da944c83448c8c180af579a95e86a3557792d86adcde679b","signature":"ea06a43414e727e635a61d87a117c2a3a086869b911b78bd38d3830c042ed162"},{"version":"aeba833cc236d11f9a45c8cf824c14174a32a274f18d45ea0fc0edc91a37a247","signature":"1842f62cb7349829be2a126c450ed14488a5f5aeafc33a88ab9e61f4cf12ea44"},{"version":"0858f2f4b02ec77a9ecf0762d39fad0bcf5f0d9bc5d1c9f58666347128072c3d","signature":"952f8bc7fe35a291be5883f15c3b4ccbbe7b41c077461e2d587df563b102950c"},{"version":"72fc03b02aab449aaa72a47f52ca8417146ba8eaed816f196446fe98e7fef234","signature":"599a509f3547eb349b35c6761a639493eaa3095e39fde8cdee2ee2264c06f457"},{"version":"29919c38b04bfda108c1e3b16f6f459b17deea3c77c7b69d9b42964233b71303","signature":"3f1bc0c48c0601694ff480d5160992355fd989557f121b30e27eb60e2eb77f3d"},{"version":"bc60b299a3de80a0e418867f8f0b4a3185990755a29158628266972736e01f59","signature":"ddc1f1aefc0053f86c95f0977450090c7dad1d861cc4cf70fc971710cff12f52"},{"version":"e7a0ab56e4a4ed97d62b28248c047eee42673d103dbcb63c9dcd85552cd924ad","signature":"63e8e0876f60c128e25ef0f08ea7cd60327b197297039f903ac7e4efb38b47e6"},{"version":"5883d76881f9ba8abacb1846b2458b6cd59a181f2064be5e24c3b994802d460d","signature":"f18c705ec1dc13d09c68cec1be3329bee7c602c7d6f7f3ee62575647f58e12cf"},{"version":"41f0cbbfa79daf8f7fc87d84a4cdbf096e3ca9209ab248cf4d70a7148b216619","signature":"1431baf58300f71b0ab17cc069cb3e9b2af4af81e04ba28221aa683ef83bd0f9"},{"version":"fed16ce407106ac496d34c1599d983403edf1566b696d6476976087d59a7ee79","signature":"abdd3f2f3bf5decb56b6be0df80060737ed25873af05ec1bb347786ef2b54d9f"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"208a6a0bfb227bdf8fb964799d0a206c75cf03ccd72e63bf5495c9331354c6d6","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1}],"root":[[77,88]],"options":{"allowImportingTsExtensions":true,"composite":true,"declaration":true,"declarationMap":true,"esModuleInterop":true,"exactOptionalPropertyTypes":true,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitOverride":true,"noUncheckedIndexedAccess":true,"noUnusedLocals":false,"noUnusedParameters":false,"outDir":"./","rewriteRelativeImportExtensions":true,"rootDir":"../src","skipLibCheck":true,"sourceMap":true,"strict":true,"target":11,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":false},"referencedMap":[[140,1],[141,1],[142,2],[94,3],[143,4],[144,5],[145,6],[89,7],[92,8],[90,7],[91,7],[146,9],[147,10],[148,11],[149,12],[150,13],[151,14],[152,14],[153,15],[154,16],[155,17],[156,18],[95,7],[93,7],[157,19],[158,20],[159,21],[193,22],[160,23],[161,7],[162,24],[163,25],[164,26],[165,27],[166,28],[167,29],[168,30],[169,31],[170,32],[171,32],[172,33],[173,7],[174,34],[175,35],[177,36],[176,37],[178,38],[179,39],[180,40],[181,41],[182,42],[183,43],[184,44],[185,45],[186,46],[187,47],[188,48],[189,49],[190,50],[96,7],[97,7],[98,7],[136,51],[137,7],[138,7],[139,38],[191,52],[192,53],[76,7],[73,7],[74,7],[14,7],[12,7],[13,7],[18,7],[17,7],[2,7],[19,7],[20,7],[21,7],[22,7],[23,7],[24,7],[25,7],[26,7],[3,7],[27,7],[28,7],[4,7],[29,7],[33,7],[30,7],[31,7],[32,7],[34,7],[35,7],[36,7],[5,7],[37,7],[38,7],[39,7],[40,7],[6,7],[44,7],[41,7],[42,7],[43,7],[45,7],[7,7],[46,7],[51,7],[52,7],[47,7],[48,7],[49,7],[50,7],[8,7],[56,7],[53,7],[54,7],[55,7],[57,7],[9,7],[58,7],[59,7],[60,7],[62,7],[61,7],[63,7],[64,7],[10,7],[65,7],[66,7],[67,7],[11,7],[75,7],[68,7],[69,7],[70,7],[71,7],[72,7],[1,7],[16,7],[15,7],[114,54],[124,55],[113,54],[134,56],[105,57],[104,58],[133,59],[127,60],[132,61],[107,62],[121,63],[106,64],[130,65],[102,66],[101,59],[131,67],[103,68],[108,69],[109,7],[112,69],[99,7],[135,70],[125,71],[116,72],[117,73],[119,74],[115,75],[118,76],[128,59],[110,77],[111,78],[120,79],[100,80],[123,71],[122,69],[126,7],[129,81],[80,82],[77,7],[79,83],[81,84],[86,85],[87,7],[82,86],[88,87],[83,88],[84,89],[78,7],[85,90]],"latestChangedDtsFile":"./workspace-sid.d.ts","version":"5.9.3"}
package/lib/acl.d.ts ADDED
@@ -0,0 +1,83 @@
1
+ /**
2
+ * ACL editing helpers: grant/revoke a capability SID on a directory via
3
+ * SetEntriesInAclW + SetNamedSecurityInfoW (the same calls the POC uses, with
4
+ * the failure handling the POC lacks). Every API call is checked and every
5
+ * failure is reported with the API name, the exact Win32 code, the formatted
6
+ * system text, and the affected path.
7
+ *
8
+ * Concurrency: grants are read-merge-write against the directory's CURRENT
9
+ * DACL, and the whole get-merge-set sequence runs under a per-path exclusive
10
+ * LockFileEx lock (see {@link withPathLock}) so concurrent sandbox instances
11
+ * cannot clobber each other's ACEs.
12
+ * @module @bo-agent/sandbox-windows-acl/acl
13
+ */
14
+ import type { NativePtr, Win32Bindings } from './ffi.ts';
15
+ /**
16
+ * Pack one EXPLICIT_ACCESS_W (48 bytes, layout verified by abi-probe.cpp):
17
+ * perms@0, mode@4, inheritance@8, Trustee@16 { pMultipleTrustee@16,
18
+ * MultipleTrusteeOperation@24, TrusteeForm@28, TrusteeType@32, ptstrName@40 }.
19
+ * `permissions` is the access mask; the POC passes 0 for REVOKE_ACCESS, which
20
+ * removes every ACE for the trustee.
21
+ * @param sidPtr - the trustee SID the entry names.
22
+ * @param mode - the access mode (GRANT_ACCESS or REVOKE_ACCESS).
23
+ * @param permissions - the access mask to grant (0 for REVOKE_ACCESS).
24
+ * @returns the packed entry buffer.
25
+ */
26
+ export declare function buildExplicitAccess(sidPtr: NativePtr, mode: number, permissions: number): Buffer;
27
+ /**
28
+ * One lock file per protected path: `<GetTempPathW()>\dsh-acl-locks\<first 16
29
+ * hex of sha256(lowercased path)>.lock`. The lock root derives from
30
+ * GetTempPathW (never from runner argv or DSH_HOME), and the lowercasing
31
+ * maps Windows's case-insensitive path spellings onto one lock.
32
+ * @param api - the binding table.
33
+ * @param path - the protected directory (absolute).
34
+ * @returns the lock file path for that directory.
35
+ */
36
+ export declare function lockFilePath(api: Win32Bindings, path: string): string;
37
+ /**
38
+ * Run `action` holding the per-path exclusive lock: CreateFileW
39
+ * (OPEN_ALWAYS, shared read/write but NOT delete — a deletable lock file
40
+ * could be removed and recreated under the holder, letting two processes
41
+ * hold "the same" lock), then a one-byte LockFileEx
42
+ * (LOCKFILE_EXCLUSIVE_LOCK, zeroed OVERLAPPED = lock from offset 0 on the
43
+ * synchronous handle — see allocOverlapped for why not NULL), then
44
+ * UnlockFileEx + CloseHandle. Fail-closed: open/lock/unlock/close failures
45
+ * throw like every other Win32 call in this package; an `action` failure
46
+ * still unlocks (best-effort) and rethrows the original error.
47
+ * @param api - the binding table.
48
+ * @param path - the protected directory (absolute).
49
+ * @param action - the get-merge-set sequence to serialize.
50
+ * @returns the action's result.
51
+ */
52
+ export declare function withPathLock<T>(api: Win32Bindings, path: string, action: () => T): T;
53
+ /**
54
+ * Grant `GRANT_MASK` (Write+Delete, displays as "Modify") to the capability SID
55
+ * on `path`, inheriting to subcontainers and objects. Idempotent: when the
56
+ * directory's current explicit DACL already carries the exact ACE (the
57
+ * per-session grant surviving from a previous server lifetime), the
58
+ * SetNamedSecurityInfoW apply is SKIPPED — it would otherwise re-propagate
59
+ * the identical ACE across the whole tree (eager inheritance; minutes on
60
+ * large workspaces). Otherwise read-merge-write: the new ACE merges into the
61
+ * directory's CURRENT explicit DACL (same shape as {@link revokeWrite}), so
62
+ * pre-existing explicit ACEs survive. Runs under the per-path lock. The
63
+ * directory must be owned by the caller (owner implicit WRITE_DAC) — same
64
+ * precondition as the POC.
65
+ * @param api - the binding table.
66
+ * @param path - the directory whose DACL gains the grant (the workspace or temp root).
67
+ * @param sidPtr - the capability SID the ACE names.
68
+ */
69
+ export declare function grantWrite(api: Win32Bindings, path: string, sidPtr: NativePtr): void;
70
+ /**
71
+ * Remove every ACE for the capability SID from the directory DACL (REVOKE_ACCESS
72
+ * merge — other entries are preserved). Returns whether an ACE removal was
73
+ * attempted (false when the directory carries no DACL at all).
74
+ *
75
+ * Runs under the per-path lock (the whole get-merge-set sequence); the
76
+ * descriptor/ACL allocation contract lives on {@link readCurrentDacl}.
77
+ * @param api - the binding table.
78
+ * @param path - the directory whose DACL loses the capability-SID ACEs.
79
+ * @param sidPtr - the capability SID whose ACEs are removed.
80
+ * @returns whether an ACE removal was attempted (false when the directory carries no DACL at all).
81
+ */
82
+ export declare function revokeWrite(api: Win32Bindings, path: string, sidPtr: NativePtr): boolean;
83
+ //# sourceMappingURL=acl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acl.d.ts","sourceRoot":"","sources":["../src/acl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAGxD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAUhG;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGrE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAkCpF;AA0GD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,IAAI,CAapF;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAaxF"}
package/lib/acl.js ADDED
@@ -0,0 +1,255 @@
1
+ /**
2
+ * ACL editing helpers: grant/revoke a capability SID on a directory via
3
+ * SetEntriesInAclW + SetNamedSecurityInfoW (the same calls the POC uses, with
4
+ * the failure handling the POC lacks). Every API call is checked and every
5
+ * failure is reported with the API name, the exact Win32 code, the formatted
6
+ * system text, and the affected path.
7
+ *
8
+ * Concurrency: grants are read-merge-write against the directory's CURRENT
9
+ * DACL, and the whole get-merge-set sequence runs under a per-path exclusive
10
+ * LockFileEx lock (see {@link withPathLock}) so concurrent sandbox instances
11
+ * cannot clobber each other's ACEs.
12
+ * @module @bo-agent/sandbox-windows-acl/acl
13
+ */
14
+ import { createHash } from 'node:crypto';
15
+ import { mkdirSync } from 'node:fs';
16
+ import { dirname, join } from 'node:path';
17
+ import { allocOverlapped, allocPtrSlot, decodePtr, decodeUint8At, decodeUint16At, decodeUint32At, getTempPath, isInvalidHandle, isNullPtr, ptrAddress, sameSidAt, throwLastError, throwWin32 } from "./ffi.js";
18
+ import * as abi from "./win32-abi.js";
19
+ /**
20
+ * Pack one EXPLICIT_ACCESS_W (48 bytes, layout verified by abi-probe.cpp):
21
+ * perms@0, mode@4, inheritance@8, Trustee@16 { pMultipleTrustee@16,
22
+ * MultipleTrusteeOperation@24, TrusteeForm@28, TrusteeType@32, ptstrName@40 }.
23
+ * `permissions` is the access mask; the POC passes 0 for REVOKE_ACCESS, which
24
+ * removes every ACE for the trustee.
25
+ * @param sidPtr - the trustee SID the entry names.
26
+ * @param mode - the access mode (GRANT_ACCESS or REVOKE_ACCESS).
27
+ * @param permissions - the access mask to grant (0 for REVOKE_ACCESS).
28
+ * @returns the packed entry buffer.
29
+ */
30
+ export function buildExplicitAccess(sidPtr, mode, permissions) {
31
+ const entry = Buffer.alloc(abi.EXPLICIT_ACCESS_W_SIZE);
32
+ entry.writeUInt32LE(permissions, 0); // grfAccessPermissions
33
+ entry.writeUInt32LE(mode, 4); // grfAccessMode
34
+ entry.writeUInt32LE(abi.SUB_CONTAINERS_AND_OBJECTS_INHERIT, 8); // grfInheritance: OI|CI
35
+ entry.writeUInt32LE(abi.NO_MULTIPLE_TRUSTEE, 24); // Trustee.MultipleTrusteeOperation
36
+ entry.writeUInt32LE(abi.TRUSTEE_IS_SID, 28); // Trustee.TrusteeForm
37
+ entry.writeUInt32LE(abi.TRUSTEE_IS_UNKNOWN, 32); // Trustee.TrusteeType
38
+ entry.writeBigUInt64LE(ptrAddress(sidPtr), 40); // Trustee.ptstrName = the capability SID
39
+ return entry;
40
+ }
41
+ /**
42
+ * One lock file per protected path: `<GetTempPathW()>\dsh-acl-locks\<first 16
43
+ * hex of sha256(lowercased path)>.lock`. The lock root derives from
44
+ * GetTempPathW (never from runner argv or DSH_HOME), and the lowercasing
45
+ * maps Windows's case-insensitive path spellings onto one lock.
46
+ * @param api - the binding table.
47
+ * @param path - the protected directory (absolute).
48
+ * @returns the lock file path for that directory.
49
+ */
50
+ export function lockFilePath(api, path) {
51
+ const digest = createHash('sha256').update(path.toLowerCase()).digest('hex').slice(0, 16);
52
+ return join(getTempPath(api), 'dsh-acl-locks', `${digest}.lock`);
53
+ }
54
+ /**
55
+ * Run `action` holding the per-path exclusive lock: CreateFileW
56
+ * (OPEN_ALWAYS, shared read/write but NOT delete — a deletable lock file
57
+ * could be removed and recreated under the holder, letting two processes
58
+ * hold "the same" lock), then a one-byte LockFileEx
59
+ * (LOCKFILE_EXCLUSIVE_LOCK, zeroed OVERLAPPED = lock from offset 0 on the
60
+ * synchronous handle — see allocOverlapped for why not NULL), then
61
+ * UnlockFileEx + CloseHandle. Fail-closed: open/lock/unlock/close failures
62
+ * throw like every other Win32 call in this package; an `action` failure
63
+ * still unlocks (best-effort) and rethrows the original error.
64
+ * @param api - the binding table.
65
+ * @param path - the protected directory (absolute).
66
+ * @param action - the get-merge-set sequence to serialize.
67
+ * @returns the action's result.
68
+ */
69
+ export function withPathLock(api, path, action) {
70
+ const lockPath = lockFilePath(api, path);
71
+ mkdirSync(dirname(lockPath), { recursive: true });
72
+ const handle = api.createFileW(lockPath, abi.GENERIC_READ | abi.GENERIC_WRITE, abi.FILE_SHARE_READ | abi.FILE_SHARE_WRITE, null, abi.OPEN_ALWAYS, 0, null);
73
+ if (isInvalidHandle(handle))
74
+ throwLastError(api, 'CreateFileW', lockPath);
75
+ const overlapped = allocOverlapped(); // stays zeroed: offset 0, hEvent NULL
76
+ if (api.lockFileEx(handle, abi.LOCKFILE_EXCLUSIVE_LOCK, 0, 1, 0, overlapped) === 0) {
77
+ const win32Code = api.getLastError();
78
+ api.closeHandle(handle); // best-effort on the lock-failure path
79
+ throwWin32(api, 'LockFileEx', win32Code, lockPath);
80
+ }
81
+ let result;
82
+ try {
83
+ result = action();
84
+ }
85
+ catch (error) {
86
+ // Best-effort release on the action-failure path: cleanup failures must
87
+ // not mask the action's error.
88
+ api.unlockFileEx(handle, 0, 1, 0, overlapped);
89
+ api.closeHandle(handle);
90
+ throw error;
91
+ }
92
+ if (api.unlockFileEx(handle, 0, 1, 0, overlapped) === 0) {
93
+ const win32Code = api.getLastError();
94
+ api.closeHandle(handle); // best-effort on the unlock-failure path
95
+ throwWin32(api, 'UnlockFileEx', win32Code, lockPath);
96
+ }
97
+ if (api.closeHandle(handle) === 0)
98
+ throwLastError(api, 'CloseHandle', `lock file ${lockPath}`);
99
+ return result;
100
+ }
101
+ /**
102
+ * Read the directory's current explicit DACL via GetNamedSecurityInfoW.
103
+ * Allocation contract (the POC's RevokeAccess, minus its missing checks): the
104
+ * returned ACL pointer sits INSIDE the security descriptor allocation — only
105
+ * the descriptor may be LocalFree'd, and it must not be freed before
106
+ * SetEntriesInAclW has consumed the ACL. Freeing the ACL pointer itself
107
+ * corrupts the heap (verified the hard way).
108
+ * @param api - the binding table.
109
+ * @param path - the directory whose DACL is read.
110
+ * @returns the current explicit DACL (null when the directory carries none) and its owning descriptor.
111
+ */
112
+ function readCurrentDacl(api, path) {
113
+ const ownerSlot = allocPtrSlot();
114
+ const groupSlot = allocPtrSlot();
115
+ const daclSlot = allocPtrSlot();
116
+ const saclSlot = allocPtrSlot();
117
+ const descriptorSlot = allocPtrSlot();
118
+ const readResult = api.getNamedSecurityInfoW(path, abi.SE_FILE_OBJECT, abi.DACL_SECURITY_INFORMATION, ownerSlot, groupSlot, daclSlot, saclSlot, descriptorSlot);
119
+ if (readResult !== abi.ERROR_SUCCESS)
120
+ throwWin32(api, 'GetNamedSecurityInfoW', readResult, path);
121
+ return { oldAcl: decodePtr(daclSlot), descriptor: decodePtr(descriptorSlot) };
122
+ }
123
+ /**
124
+ * Shared tail of grantWrite and revokeWrite: merge `entry` into `oldAcl`
125
+ * (null = no explicit DACL yet; SetEntriesInAclW builds one from scratch),
126
+ * free the descriptor before applying the merged ACL, apply it, then free the
127
+ * merged ACL — checking every call and reporting with the caller's label.
128
+ * @param api - the binding table.
129
+ * @param path - the directory the DACL edit applies to.
130
+ * @param entry - the EXPLICIT_ACCESS_W to merge (grant or revoke).
131
+ * @param oldAcl - the current explicit DACL (from {@link readCurrentDacl}).
132
+ * @param descriptor - the descriptor allocation owning `oldAcl`.
133
+ * @param label - the caller's name for error details.
134
+ */
135
+ function mergeAndApply(api, path, entry, oldAcl, descriptor, label) {
136
+ const newAclSlot = allocPtrSlot();
137
+ const mergeResult = api.setEntriesInAclW(1, entry, oldAcl, newAclSlot);
138
+ if (mergeResult !== abi.ERROR_SUCCESS) {
139
+ if (descriptor !== null)
140
+ api.localFree(descriptor); // frees the ACL block too
141
+ throwWin32(api, 'SetEntriesInAclW', mergeResult, `${label}(${path})`);
142
+ }
143
+ const newAcl = decodePtr(newAclSlot);
144
+ if (newAcl === null) {
145
+ if (descriptor !== null)
146
+ api.localFree(descriptor);
147
+ throwWin32(api, 'SetEntriesInAclW', api.getLastError(), `${label}(${path}): null new ACL`);
148
+ }
149
+ // The descriptor block (oldAcl included) is dead after the merge — free it
150
+ // before applying, exactly like the POC.
151
+ const freedDescriptor = descriptor !== null ? api.localFree(descriptor) : null;
152
+ const applyResult = api.setNamedSecurityInfoW(path, abi.SE_FILE_OBJECT, abi.DACL_SECURITY_INFORMATION, null, null, newAcl, null);
153
+ const freedNew = api.localFree(newAcl);
154
+ if (applyResult !== abi.ERROR_SUCCESS)
155
+ throwWin32(api, 'SetNamedSecurityInfoW', applyResult, `${label}(${path})`);
156
+ if (freedDescriptor !== null && !isNullPtr(freedDescriptor))
157
+ throwLastError(api, 'LocalFree', `${label}(${path}) descriptor`);
158
+ if (!isNullPtr(freedNew))
159
+ throwLastError(api, 'LocalFree', `${label}(${path}) new ACL`);
160
+ }
161
+ /**
162
+ * True when the explicit DACL already carries the EXACT write grant this
163
+ * module would add (Allow ACE, OI|CI inheritance, {@link abi.GRANT_MASK}, the
164
+ * capability SID). Every field is read through koffi.decode at pointer offsets —
165
+ * no memcpy, no pointer arithmetic. The ACE's SID is INLINE (embedded in the
166
+ * ACE after the 4-byte mask — there is no pointer to read; reading one
167
+ * yields garbage addresses and crashed EqualSid, verified by gdb), so it is
168
+ * compared field-by-field against the capability SID through bounded offset
169
+ * reads ({@link sameSidAt}). A malformed header reads as "no exact grant"
170
+ * so the caller falls back to the merge-apply path, which owns the robust
171
+ * failure handling.
172
+ * @param oldAcl - the current explicit DACL pointer (from {@link readCurrentDacl}).
173
+ * @param sidPtr - the capability SID to match.
174
+ * @returns whether the exact grant ACE is already present.
175
+ */
176
+ function hasExactGrant(oldAcl, sidPtr) {
177
+ const aclSize = decodeUint16At(oldAcl, 2);
178
+ const aceCount = decodeUint16At(oldAcl, 4);
179
+ if (aclSize < 8 || aclSize > 1_048_576)
180
+ return false; // implausible: fall back to the merge path
181
+ let offset = 8; // the first ACE follows the 8-byte ACL header
182
+ for (let index = 0; index < aceCount; index++) {
183
+ // ACE_HEADER: AceType@0, AceFlags@1, AceSize@2 (WORD);
184
+ // ACCESS_ALLOWED_ACE: Mask@4, inline SID@8.
185
+ const aceSize = decodeUint16At(oldAcl, offset + 2);
186
+ if (aceSize < 8 || offset + aceSize > aclSize)
187
+ return false; // implausible: fall back to the merge path
188
+ const exact = decodeUint8At(oldAcl, offset) === abi.ACCESS_ALLOWED_ACE_TYPE
189
+ && decodeUint8At(oldAcl, offset + 1) === abi.SUB_CONTAINERS_AND_OBJECTS_INHERIT
190
+ && decodeUint32At(oldAcl, offset + 4) === abi.GRANT_MASK;
191
+ if (exact && sameSidAt(oldAcl, offset + 8, sidPtr, 0))
192
+ return true;
193
+ offset += aceSize;
194
+ }
195
+ return false;
196
+ }
197
+ /**
198
+ * Grant `GRANT_MASK` (Write+Delete, displays as "Modify") to the capability SID
199
+ * on `path`, inheriting to subcontainers and objects. Idempotent: when the
200
+ * directory's current explicit DACL already carries the exact ACE (the
201
+ * per-session grant surviving from a previous server lifetime), the
202
+ * SetNamedSecurityInfoW apply is SKIPPED — it would otherwise re-propagate
203
+ * the identical ACE across the whole tree (eager inheritance; minutes on
204
+ * large workspaces). Otherwise read-merge-write: the new ACE merges into the
205
+ * directory's CURRENT explicit DACL (same shape as {@link revokeWrite}), so
206
+ * pre-existing explicit ACEs survive. Runs under the per-path lock. The
207
+ * directory must be owned by the caller (owner implicit WRITE_DAC) — same
208
+ * precondition as the POC.
209
+ * @param api - the binding table.
210
+ * @param path - the directory whose DACL gains the grant (the workspace or temp root).
211
+ * @param sidPtr - the capability SID the ACE names.
212
+ */
213
+ export function grantWrite(api, path, sidPtr) {
214
+ withPathLock(api, path, () => {
215
+ const { oldAcl, descriptor } = readCurrentDacl(api, path);
216
+ if (oldAcl !== null && hasExactGrant(oldAcl, sidPtr)) {
217
+ // The exact ACE stands: releasing the descriptor is the whole operation.
218
+ if (descriptor !== null) {
219
+ const freed = api.localFree(descriptor);
220
+ if (!isNullPtr(freed))
221
+ throwLastError(api, 'LocalFree', `grantWrite(${path}) descriptor`);
222
+ }
223
+ return;
224
+ }
225
+ mergeAndApply(api, path, buildExplicitAccess(sidPtr, abi.GRANT_ACCESS, abi.GRANT_MASK), oldAcl, descriptor, 'grantWrite');
226
+ });
227
+ }
228
+ /**
229
+ * Remove every ACE for the capability SID from the directory DACL (REVOKE_ACCESS
230
+ * merge — other entries are preserved). Returns whether an ACE removal was
231
+ * attempted (false when the directory carries no DACL at all).
232
+ *
233
+ * Runs under the per-path lock (the whole get-merge-set sequence); the
234
+ * descriptor/ACL allocation contract lives on {@link readCurrentDacl}.
235
+ * @param api - the binding table.
236
+ * @param path - the directory whose DACL loses the capability-SID ACEs.
237
+ * @param sidPtr - the capability SID whose ACEs are removed.
238
+ * @returns whether an ACE removal was attempted (false when the directory carries no DACL at all).
239
+ */
240
+ export function revokeWrite(api, path, sidPtr) {
241
+ return withPathLock(api, path, () => {
242
+ const { oldAcl, descriptor } = readCurrentDacl(api, path);
243
+ if (oldAcl === null) {
244
+ if (descriptor !== null) {
245
+ const freed = api.localFree(descriptor);
246
+ if (!isNullPtr(freed))
247
+ throwLastError(api, 'LocalFree', `revokeWrite(${path}) descriptor`);
248
+ }
249
+ return false;
250
+ }
251
+ mergeAndApply(api, path, buildExplicitAccess(sidPtr, abi.REVOKE_ACCESS, 0), oldAcl, descriptor, 'revokeWrite');
252
+ return true;
253
+ });
254
+ }
255
+ //# sourceMappingURL=acl.js.map
package/lib/acl.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acl.js","sourceRoot":"","sources":["../src/acl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Fail-closed Win32 error type. Every backend API failure raises this with the
3
+ * API name and the exact Win32 code; the original POC silently ignored every
4
+ * failed call and would run children UNRESTRICTED (fail-open) — that is the
5
+ * failure mode this class exists to prevent.
6
+ * @module @bo-agent/sandbox-windows-acl/errors
7
+ */
8
+ export declare class Win32Error extends Error {
9
+ /** The failing Win32 API name, e.g. `CreateRestrictedToken`. */
10
+ readonly api: string;
11
+ /** The Win32 error code (`GetLastError` for BOOL APIs, the HRESULT-style return for ACL APIs). */
12
+ readonly win32Code: number;
13
+ constructor(api: string, win32Code: number, detail?: string);
14
+ }
15
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,qBAAa,UAAW,SAAQ,KAAK;IACnC,gEAAgE;IAChE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,kGAAkG;IAClG,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;gBAEd,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAM5D"}
package/lib/errors.js ADDED
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Fail-closed Win32 error type. Every backend API failure raises this with the
3
+ * API name and the exact Win32 code; the original POC silently ignored every
4
+ * failed call and would run children UNRESTRICTED (fail-open) — that is the
5
+ * failure mode this class exists to prevent.
6
+ * @module @bo-agent/sandbox-windows-acl/errors
7
+ */
8
+ export class Win32Error extends Error {
9
+ /** The failing Win32 API name, e.g. `CreateRestrictedToken`. */
10
+ api;
11
+ /** The Win32 error code (`GetLastError` for BOOL APIs, the HRESULT-style return for ACL APIs). */
12
+ win32Code;
13
+ constructor(api, win32Code, detail) {
14
+ super(`${api} failed (Win32 ${win32Code})${detail === undefined ? '' : `: ${detail}`}`);
15
+ this.name = 'Win32Error';
16
+ this.api = api;
17
+ this.win32Code = win32Code;
18
+ }
19
+ }
20
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,gEAAgE;IACvD,GAAG,CAAQ;IACpB,kGAAkG;IACzF,SAAS,CAAQ;IAE1B,YAAY,GAAW,EAAE,SAAiB,EAAE,MAAe;QACzD,KAAK,CAAC,GAAG,GAAG,kBAAkB,SAAS,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,EAAE,CAAC,CAAA;QACvF,IAAI,CAAC,IAAI,GAAG,YAAY,CAAA;QACxB,IAAI,CAAC,GAAG,GAAG,GAAG,CAAA;QACd,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAC5B,CAAC;CACF"}