@openclaw/fs-safe 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -0
- package/dist/absolute-path.d.ts +0 -1
- package/dist/advanced.d.ts +0 -1
- package/dist/archive-crc32.d.ts +0 -1
- package/dist/archive-deadline.d.ts +0 -1
- package/dist/archive-durability.d.ts +0 -1
- package/dist/archive-entry.d.ts +0 -1
- package/dist/archive-errors.d.ts +0 -1
- package/dist/archive-gzip-tail.d.ts +0 -1
- package/dist/archive-input.d.ts +0 -1
- package/dist/archive-kind.d.ts +0 -1
- package/dist/archive-limits.d.ts +0 -1
- package/dist/archive-merge.d.ts +2 -4
- package/dist/archive-merge.js +14 -4
- package/dist/archive-native.d.ts +3 -15
- package/dist/archive-native.js +46 -71
- package/dist/archive-options.d.ts +7 -2
- package/dist/archive-parser-errors.d.ts +0 -1
- package/dist/archive-plan.d.ts +10 -1
- package/dist/archive-plan.js +31 -21
- package/dist/archive-policy.d.ts +0 -1
- package/dist/archive-read.d.ts +0 -1
- package/dist/archive-staging.d.ts +0 -1
- package/dist/archive-tar-inspect.d.ts +0 -1
- package/dist/archive-tar-stream.d.ts +0 -1
- package/dist/archive-tar-wasm.d.ts +0 -1
- package/dist/archive-tar.d.ts +0 -1
- package/dist/archive-zip-admission.d.ts +0 -1
- package/dist/archive-zip-count.d.ts +0 -1
- package/dist/archive-zip-directory.d.ts +0 -1
- package/dist/archive-zip-entry.d.ts +0 -1
- package/dist/archive-zip-integrity.d.ts +0 -1
- package/dist/archive-zip-loader.d.ts +0 -1
- package/dist/archive-zip-manifest.d.ts +0 -1
- package/dist/archive-zip-names.d.ts +0 -1
- package/dist/archive-zip-preflight.d.ts +0 -1
- package/dist/archive.d.ts +0 -1
- package/dist/archive.js +87 -164
- package/dist/async-lock.d.ts +0 -1
- package/dist/atomic.d.ts +0 -1
- package/dist/bounded-read-stream.d.ts +0 -1
- package/dist/bounded-read.d.ts +0 -1
- package/dist/byte-budget.d.ts +0 -1
- package/dist/byte-view.d.ts +0 -1
- package/dist/clone-metadata.d.ts +0 -1
- package/dist/config.d.ts +0 -1
- package/dist/containment.d.ts +0 -1
- package/dist/copy-file-input.d.ts +0 -1
- package/dist/copy-policy.d.ts +0 -1
- package/dist/copy-publication.d.ts +0 -1
- package/dist/copy-tree-portable.d.ts +0 -1
- package/dist/copy-tree-portable.js +9 -6
- package/dist/copy.d.ts +0 -1
- package/dist/copy.js +5 -5
- package/dist/create-directory.d.ts +0 -2
- package/dist/create-directory.js +3 -22
- package/dist/create-file-async.d.ts +0 -1
- package/dist/create-file.d.ts +0 -1
- package/dist/create-file.js +3 -14
- package/dist/create-owned-file.d.ts +0 -1
- package/dist/create.d.ts +1 -2
- package/dist/create.js +1 -1
- package/dist/creation-darwin.d.ts +0 -1
- package/dist/creation-file-state.d.ts +0 -1
- package/dist/creation-path.d.ts +2 -1
- package/dist/creation-path.js +12 -0
- package/dist/creation-permissions.d.ts +0 -1
- package/dist/creation-permissions.js +28 -38
- package/dist/deny-mutations.d.ts +2 -3
- package/dist/deny-mutations.js +55 -35
- package/dist/device-path.d.ts +0 -1
- package/dist/directory-durability.d.ts +0 -1
- package/dist/directory-entry-path.d.ts +0 -1
- package/dist/directory-guard.d.ts +2 -7
- package/dist/directory-guard.js +25 -56
- package/dist/directory-mode-node.d.ts +0 -1
- package/dist/directory-mode-owner.d.ts +0 -1
- package/dist/directory-receipt.d.ts +0 -1
- package/dist/durability.d.ts +0 -1
- package/dist/effective-uid.d.ts +0 -1
- package/dist/error-detail.d.ts +0 -1
- package/dist/errors.d.ts +0 -1
- package/dist/file-cleanup.d.ts +0 -1
- package/dist/file-contents.d.ts +0 -1
- package/dist/file-handle-transfer.d.ts +0 -1
- package/dist/file-hash.d.ts +0 -1
- package/dist/file-hash.js +170 -66
- package/dist/file-identity.d.ts +0 -1
- package/dist/file-lock-sync-acquisition.d.ts +22 -0
- package/dist/file-lock-sync-acquisition.js +98 -0
- package/dist/file-lock-sync-admission.d.ts +0 -2
- package/dist/file-lock-sync-admission.js +9 -48
- package/dist/file-lock-sync-root-acquire.d.ts +0 -1
- package/dist/file-lock-sync-root-acquire.js +32 -98
- package/dist/file-lock-sync-root-arbitration.d.ts +0 -1
- package/dist/file-lock-sync-root-held.d.ts +0 -1
- package/dist/file-lock-sync-root-io.d.ts +0 -1
- package/dist/file-lock-sync-root-mutation.d.ts +4 -5
- package/dist/file-lock-sync-root-mutation.js +7 -9
- package/dist/file-lock-sync-root-options.d.ts +0 -1
- package/dist/file-lock-sync-root-registration.d.ts +0 -1
- package/dist/file-lock-sync-root.d.ts +1 -2
- package/dist/file-lock-sync-root.js +14 -87
- package/dist/file-lock-sync-stale-admission.d.ts +2 -7
- package/dist/file-lock-sync-stale-admission.js +21 -23
- package/dist/file-lock-sync.d.ts +0 -1
- package/dist/file-lock-sync.js +38 -117
- package/dist/file-lock.d.ts +0 -1
- package/dist/file-observation.d.ts +0 -1
- package/dist/file-store-boundary.d.ts +0 -2
- package/dist/file-store-boundary.js +6 -26
- package/dist/file-store-copy-source.d.ts +1 -2
- package/dist/file-store-copy-source.js +1 -1
- package/dist/file-store-limit.d.ts +1 -2
- package/dist/file-store-limit.js +2 -3
- package/dist/file-store-path.d.ts +0 -1
- package/dist/file-store-prune.d.ts +0 -1
- package/dist/file-store-sync-directory.d.ts +0 -1
- package/dist/file-store-sync-directory.js +194 -231
- package/dist/file-store-sync-write.d.ts +0 -1
- package/dist/file-store-sync-write.js +16 -26
- package/dist/file-store.d.ts +0 -1
- package/dist/file-store.js +3 -4
- package/dist/file-sync.d.ts +0 -1
- package/dist/filename.d.ts +0 -1
- package/dist/filename.js +1 -7
- package/dist/fs.d.ts +0 -1
- package/dist/guarded-mkdir.d.ts +0 -1
- package/dist/guarded-mutation.d.ts +0 -7
- package/dist/guarded-mutation.js +6 -11
- package/dist/guest-dispatch-python.d.ts +0 -1
- package/dist/guest-dispatch-python.js +41 -90
- package/dist/guest-native-python.d.ts +0 -1
- package/dist/guest.d.ts +0 -1
- package/dist/home-dir.d.ts +0 -1
- package/dist/index.d.ts +0 -1
- package/dist/install-path.d.ts +0 -1
- package/dist/json-document-store.d.ts +0 -1
- package/dist/json-durable-queue-directory.d.ts +13 -1
- package/dist/json-durable-queue-directory.js +134 -0
- package/dist/json-durable-queue-ownership.d.ts +0 -1
- package/dist/json-durable-queue-ownership.js +42 -61
- package/dist/json-durable-queue-read.d.ts +0 -1
- package/dist/json-durable-queue-read.js +6 -6
- package/dist/json-durable-queue.d.ts +0 -1
- package/dist/json-durable-queue.js +7 -130
- package/dist/json-store.d.ts +0 -1
- package/dist/json-stringify.d.ts +0 -1
- package/dist/json.d.ts +0 -1
- package/dist/json.js +6 -15
- package/dist/local-file-access.d.ts +0 -1
- package/dist/local-file-access.js +3 -10
- package/dist/local-file-descriptor.d.ts +0 -1
- package/dist/local-roots.d.ts +0 -1
- package/dist/lock-config.d.ts +0 -1
- package/dist/move-path-cleanup.d.ts +0 -1
- package/dist/move-path-stage.d.ts +0 -1
- package/dist/move-path.d.ts +0 -1
- package/dist/mutation-authority.d.ts +0 -1
- package/dist/native-binding.d.ts +0 -1
- package/dist/native-config.d.ts +0 -1
- package/dist/native-directory-observation.d.ts +0 -1
- package/dist/native-fallback-warning.d.ts +0 -1
- package/dist/native-operations.d.ts +1 -5
- package/dist/native-operations.js +2 -6
- package/dist/native-parent-admission.d.ts +0 -1
- package/dist/native-pinned-write-windows.d.ts +0 -1
- package/dist/native-pinned-write.d.ts +0 -1
- package/dist/native-pinned-write.js +4 -10
- package/dist/native-policy-directory-observation.d.ts +0 -1
- package/dist/native-policy-parent-windows.d.ts +0 -1
- package/dist/native-rename-outcome.d.ts +0 -1
- package/dist/native-staged-file.d.ts +15 -3
- package/dist/native-staged-file.js +55 -63
- package/dist/native.d.ts +0 -1
- package/dist/opened-file-failure.d.ts +0 -1
- package/dist/opened-realpath.d.ts +0 -1
- package/dist/output.d.ts +0 -1
- package/dist/overwrite-file-handle.d.ts +0 -1
- package/dist/owner-dacl.d.ts +0 -1
- package/dist/path-case.d.ts +0 -1
- package/dist/path-policy.d.ts +0 -1
- package/dist/path-prefix.d.ts +0 -1
- package/dist/path-scope-lexical.d.ts +0 -1
- package/dist/path-segment-route.d.ts +0 -1
- package/dist/path-suffix-aliases.d.ts +0 -1
- package/dist/path.d.ts +0 -1
- package/dist/permission-exec.d.ts +0 -1
- package/dist/permission-exec.js +19 -25
- package/dist/permissions-public.d.ts +0 -1
- package/dist/permissions-windows.d.ts +2 -10
- package/dist/permissions-windows.js +10 -30
- package/dist/permissions.d.ts +0 -1
- package/dist/permissions.js +8 -16
- package/dist/pinned-mutation-admission.d.ts +0 -1
- package/dist/pinned-mutation-observation.d.ts +0 -1
- package/dist/pinned-mutation-shared-route.d.ts +0 -1
- package/dist/pinned-open.d.ts +1 -1
- package/dist/pinned-open.js +1 -1
- package/dist/pinned-operation.d.ts +0 -1
- package/dist/pinned-write-input.d.ts +0 -1
- package/dist/pinned-write-mode.d.ts +0 -1
- package/dist/pinned-write-staged.d.ts +0 -1
- package/dist/pinned-write-types.d.ts +9 -21
- package/dist/pinned-write.d.ts +0 -1
- package/dist/positional-read.d.ts +0 -1
- package/dist/private-directory.d.ts +0 -1
- package/dist/private-producer-handoff-sync.d.ts +0 -1
- package/dist/private-producer-handoff-sync.js +9 -51
- package/dist/private-producer-handoff.d.ts +20 -1
- package/dist/private-producer-handoff.js +69 -46
- package/dist/private-temp-workspace.d.ts +0 -1
- package/dist/private-temp-workspace.js +11 -36
- package/dist/publish-copy-stage.d.ts +0 -1
- package/dist/publish-file-failure.d.ts +0 -1
- package/dist/publish-file.d.ts +0 -1
- package/dist/read-open-flags.d.ts +0 -1
- package/dist/read-opened-file.d.ts +0 -1
- package/dist/realpath.d.ts +0 -1
- package/dist/recursive-mkdir-path.d.ts +0 -1
- package/dist/regular-file.d.ts +0 -1
- package/dist/regular-file.js +77 -139
- package/dist/replace-directory.d.ts +0 -1
- package/dist/replace-file-copy-fallback.d.ts +0 -1
- package/dist/replace-file-copy-fallback.js +14 -3
- package/dist/replace-file-copy-source.d.ts +0 -1
- package/dist/replace-file-copy-source.js +6 -1
- package/dist/replace-file-descriptor.d.ts +0 -1
- package/dist/replace-file-descriptor.js +6 -1
- package/dist/replace-file-mode.d.ts +0 -1
- package/dist/replace-file-rename-policy.d.ts +0 -1
- package/dist/replace-file-temp-owner.d.ts +12 -13
- package/dist/replace-file-temp-owner.js +66 -85
- package/dist/replace-file.d.ts +0 -1
- package/dist/retained-directory-replacement.d.ts +0 -1
- package/dist/root-boundary.d.ts +0 -1
- package/dist/root-context.d.ts +0 -1
- package/dist/root-create-input.d.ts +0 -1
- package/dist/root-directory-creation.d.ts +0 -1
- package/dist/root-directory-list.d.ts +0 -1
- package/dist/root-directory.d.ts +0 -1
- package/dist/root-entries.d.ts +0 -1
- package/dist/root-errors.d.ts +0 -1
- package/dist/root-file-final-admission.d.ts +0 -1
- package/dist/root-file.d.ts +0 -1
- package/dist/root-impl.d.ts +2 -10
- package/dist/root-impl.js +114 -91
- package/dist/root-move-noreplace.d.ts +0 -1
- package/dist/root-move-preflight.d.ts +0 -1
- package/dist/root-observed-path.d.ts +0 -1
- package/dist/root-options.d.ts +0 -1
- package/dist/root-path-errors.d.ts +0 -1
- package/dist/root-path-existing.d.ts +3 -1
- package/dist/root-path-existing.js +39 -18
- package/dist/root-path-observation.d.ts +0 -1
- package/dist/root-path-stat.d.ts +0 -1
- package/dist/root-path.d.ts +0 -1
- package/dist/root-path.js +60 -188
- package/dist/root-paths-lexical.d.ts +0 -1
- package/dist/root-paths.d.ts +0 -1
- package/dist/root-read-admission.d.ts +0 -1
- package/dist/root-read-admission.js +31 -44
- package/dist/root-remove-identity.d.ts +0 -1
- package/dist/root-remove-receipt.d.ts +0 -1
- package/dist/root-remove.d.ts +0 -1
- package/dist/root-symlink-policy.d.ts +0 -1
- package/dist/root-walk.d.ts +0 -1
- package/dist/root-write-admission.d.ts +0 -1
- package/dist/root-write-compatibility.d.ts +0 -1
- package/dist/root-write-complete-parent.d.ts +0 -1
- package/dist/root-write-lock-binding.d.ts +0 -1
- package/dist/root-write-mode.d.ts +0 -1
- package/dist/root-write-publication.d.ts +0 -1
- package/dist/root-write-verification.d.ts +0 -1
- package/dist/root.d.ts +0 -1
- package/dist/safe-path-segment.d.ts +1 -2
- package/dist/safe-path-segment.js +2 -5
- package/dist/secret-file.d.ts +0 -1
- package/dist/secret-file.js +7 -17
- package/dist/secret-read-async.d.ts +0 -1
- package/dist/secret-read-async.js +5 -5
- package/dist/secret-read-policy.d.ts +0 -1
- package/dist/secret.d.ts +0 -1
- package/dist/secure-file-windows.d.ts +0 -6
- package/dist/secure-file-windows.js +13 -28
- package/dist/secure-file.d.ts +0 -1
- package/dist/secure-file.js +9 -9
- package/dist/secure-temp-dir.d.ts +0 -1
- package/dist/secure-temp-repair.d.ts +0 -1
- package/dist/sibling-staged-file.d.ts +0 -1
- package/dist/sibling-staged-file.js +32 -39
- package/dist/sibling-temp.d.ts +0 -1
- package/dist/sidecar-lock-acquire.d.ts +1 -2
- package/dist/sidecar-lock-acquire.js +31 -52
- package/dist/sidecar-lock-admission-context.d.ts +0 -1
- package/dist/sidecar-lock-admission-parser.d.ts +0 -1
- package/dist/sidecar-lock-admission.d.ts +1 -5
- package/dist/sidecar-lock-admission.js +1 -7
- package/dist/sidecar-lock-handle.d.ts +0 -1
- package/dist/sidecar-lock-policy.d.ts +3 -1
- package/dist/sidecar-lock-policy.js +16 -0
- package/dist/sidecar-lock-reclaim.d.ts +0 -1
- package/dist/sidecar-lock-registration.d.ts +13 -0
- package/dist/sidecar-lock-registration.js +47 -0
- package/dist/sidecar-lock-root.d.ts +0 -1
- package/dist/sidecar-lock-stale-admission.d.ts +0 -1
- package/dist/sidecar-lock-target.d.ts +0 -1
- package/dist/sidecar-lock-types.d.ts +0 -1
- package/dist/sidecar-lock.d.ts +0 -1
- package/dist/sidecar-lock.js +16 -83
- package/dist/staged-directory.d.ts +0 -1
- package/dist/staged-file-settlement.d.ts +0 -1
- package/dist/staged-file-types.d.ts +0 -1
- package/dist/standalone-publication-path.d.ts +0 -1
- package/dist/stat-observation.d.ts +0 -1
- package/dist/store.d.ts +0 -1
- package/dist/strict-file-identity.d.ts +0 -1
- package/dist/string-coerce.d.ts +0 -1
- package/dist/suppressed-error.d.ts +0 -1
- package/dist/symlink-parents.d.ts +0 -1
- package/dist/temp-cleanup.d.ts +0 -1
- package/dist/temp-target.d.ts +0 -1
- package/dist/temp-target.js +7 -46
- package/dist/temp-workspace-admission.d.ts +0 -8
- package/dist/temp-workspace-admission.js +0 -4
- package/dist/temp-workspace-child-admission.d.ts +0 -4
- package/dist/temp-workspace-child-admission.js +0 -12
- package/dist/temp-workspace-descriptor.d.ts +0 -6
- package/dist/temp-workspace-descriptor.js +0 -2
- package/dist/temp-workspace-identity.d.ts +0 -1
- package/dist/temp-workspace-owner.d.ts +1 -1
- package/dist/temp-workspace-owner.js +45 -22
- package/dist/temp-workspace-permissions.d.ts +0 -1
- package/dist/temp-workspace-types.d.ts +0 -1
- package/dist/temp.d.ts +0 -1
- package/dist/test-hooks.d.ts +0 -1
- package/dist/text-atomic.d.ts +0 -1
- package/dist/timing.d.ts +0 -1
- package/dist/trash.d.ts +0 -1
- package/dist/types.d.ts +0 -1
- package/dist/unicode-path.d.ts +0 -1
- package/dist/walk.d.ts +0 -1
- package/dist/windows-command.d.ts +0 -1
- package/dist/windows-owner.d.ts +0 -1
- package/dist/windows-owner.js +4 -1
- package/dist/windows-path-alias.d.ts +0 -1
- package/dist/windows-path-alias.js +7 -43
- package/dist/windows-path-syntax.d.ts +5 -0
- package/dist/windows-path-syntax.js +21 -0
- package/dist/windows-security-command.d.ts +0 -1
- package/dist/windows-security-facts.d.ts +0 -1
- package/dist/write-file-handle.d.ts +0 -1
- package/dist/write-open-flags.d.ts +0 -1
- package/dist/write-queue.d.ts +0 -1
- package/docs/atomic.md +14 -0
- package/docs/copy.md +2 -0
- package/docs/mutation-policy-proof.md +6 -4
- package/docs/permissions.md +6 -0
- package/docs/root.md +10 -0
- package/docs/secret-file.md +4 -0
- package/docs/writing.md +9 -3
- package/package.json +8 -9
- package/dist/absolute-path.d.ts.map +0 -1
- package/dist/advanced.d.ts.map +0 -1
- package/dist/archive-crc32.d.ts.map +0 -1
- package/dist/archive-deadline.d.ts.map +0 -1
- package/dist/archive-durability.d.ts.map +0 -1
- package/dist/archive-entry.d.ts.map +0 -1
- package/dist/archive-errors.d.ts.map +0 -1
- package/dist/archive-gzip-tail.d.ts.map +0 -1
- package/dist/archive-input.d.ts.map +0 -1
- package/dist/archive-kind.d.ts.map +0 -1
- package/dist/archive-limits.d.ts.map +0 -1
- package/dist/archive-merge.d.ts.map +0 -1
- package/dist/archive-native.d.ts.map +0 -1
- package/dist/archive-options.d.ts.map +0 -1
- package/dist/archive-parser-errors.d.ts.map +0 -1
- package/dist/archive-plan.d.ts.map +0 -1
- package/dist/archive-policy.d.ts.map +0 -1
- package/dist/archive-read.d.ts.map +0 -1
- package/dist/archive-staging.d.ts.map +0 -1
- package/dist/archive-tar-inspect.d.ts.map +0 -1
- package/dist/archive-tar-stream.d.ts.map +0 -1
- package/dist/archive-tar-wasm.d.ts.map +0 -1
- package/dist/archive-tar.d.ts.map +0 -1
- package/dist/archive-zip-admission.d.ts.map +0 -1
- package/dist/archive-zip-count.d.ts.map +0 -1
- package/dist/archive-zip-directory.d.ts.map +0 -1
- package/dist/archive-zip-entry.d.ts.map +0 -1
- package/dist/archive-zip-integrity.d.ts.map +0 -1
- package/dist/archive-zip-loader.d.ts.map +0 -1
- package/dist/archive-zip-manifest.d.ts.map +0 -1
- package/dist/archive-zip-names.d.ts.map +0 -1
- package/dist/archive-zip-preflight.d.ts.map +0 -1
- package/dist/archive.d.ts.map +0 -1
- package/dist/async-lock.d.ts.map +0 -1
- package/dist/atomic.d.ts.map +0 -1
- package/dist/bounded-read-stream.d.ts.map +0 -1
- package/dist/bounded-read.d.ts.map +0 -1
- package/dist/byte-budget.d.ts.map +0 -1
- package/dist/byte-view.d.ts.map +0 -1
- package/dist/clone-metadata.d.ts.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/containment.d.ts.map +0 -1
- package/dist/copy-file-input.d.ts.map +0 -1
- package/dist/copy-policy.d.ts.map +0 -1
- package/dist/copy-publication.d.ts.map +0 -1
- package/dist/copy-tree-portable.d.ts.map +0 -1
- package/dist/copy.d.ts.map +0 -1
- package/dist/create-directory.d.ts.map +0 -1
- package/dist/create-file-async.d.ts.map +0 -1
- package/dist/create-file.d.ts.map +0 -1
- package/dist/create-owned-file.d.ts.map +0 -1
- package/dist/create.d.ts.map +0 -1
- package/dist/creation-darwin.d.ts.map +0 -1
- package/dist/creation-file-state.d.ts.map +0 -1
- package/dist/creation-path.d.ts.map +0 -1
- package/dist/creation-permissions.d.ts.map +0 -1
- package/dist/deny-mutations.d.ts.map +0 -1
- package/dist/device-path.d.ts.map +0 -1
- package/dist/directory-durability.d.ts.map +0 -1
- package/dist/directory-entry-path.d.ts.map +0 -1
- package/dist/directory-guard.d.ts.map +0 -1
- package/dist/directory-mode-node.d.ts.map +0 -1
- package/dist/directory-mode-owner.d.ts.map +0 -1
- package/dist/directory-receipt.d.ts.map +0 -1
- package/dist/durability.d.ts.map +0 -1
- package/dist/effective-uid.d.ts.map +0 -1
- package/dist/error-detail.d.ts.map +0 -1
- package/dist/errors.d.ts.map +0 -1
- package/dist/file-cleanup.d.ts.map +0 -1
- package/dist/file-contents.d.ts.map +0 -1
- package/dist/file-handle-transfer.d.ts.map +0 -1
- package/dist/file-hash.d.ts.map +0 -1
- package/dist/file-identity.d.ts.map +0 -1
- package/dist/file-lock-sync-admission.d.ts.map +0 -1
- package/dist/file-lock-sync-root-acquire.d.ts.map +0 -1
- package/dist/file-lock-sync-root-arbitration.d.ts.map +0 -1
- package/dist/file-lock-sync-root-held.d.ts.map +0 -1
- package/dist/file-lock-sync-root-io.d.ts.map +0 -1
- package/dist/file-lock-sync-root-mutation.d.ts.map +0 -1
- package/dist/file-lock-sync-root-options.d.ts.map +0 -1
- package/dist/file-lock-sync-root-registration.d.ts.map +0 -1
- package/dist/file-lock-sync-root.d.ts.map +0 -1
- package/dist/file-lock-sync-stale-admission.d.ts.map +0 -1
- package/dist/file-lock-sync.d.ts.map +0 -1
- package/dist/file-lock.d.ts.map +0 -1
- package/dist/file-observation.d.ts.map +0 -1
- package/dist/file-store-boundary.d.ts.map +0 -1
- package/dist/file-store-copy-source.d.ts.map +0 -1
- package/dist/file-store-limit.d.ts.map +0 -1
- package/dist/file-store-path.d.ts.map +0 -1
- package/dist/file-store-prune.d.ts.map +0 -1
- package/dist/file-store-sync-directory.d.ts.map +0 -1
- package/dist/file-store-sync-write.d.ts.map +0 -1
- package/dist/file-store.d.ts.map +0 -1
- package/dist/file-sync.d.ts.map +0 -1
- package/dist/filename.d.ts.map +0 -1
- package/dist/fs.d.ts.map +0 -1
- package/dist/guarded-mkdir.d.ts.map +0 -1
- package/dist/guarded-mutation.d.ts.map +0 -1
- package/dist/guest-dispatch-python.d.ts.map +0 -1
- package/dist/guest-native-python.d.ts.map +0 -1
- package/dist/guest.d.ts.map +0 -1
- package/dist/home-dir.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/install-path.d.ts.map +0 -1
- package/dist/json-document-store.d.ts.map +0 -1
- package/dist/json-durable-queue-directory.d.ts.map +0 -1
- package/dist/json-durable-queue-ownership.d.ts.map +0 -1
- package/dist/json-durable-queue-paths.d.ts +0 -11
- package/dist/json-durable-queue-paths.d.ts.map +0 -1
- package/dist/json-durable-queue-paths.js +0 -20
- package/dist/json-durable-queue-read.d.ts.map +0 -1
- package/dist/json-durable-queue.d.ts.map +0 -1
- package/dist/json-store.d.ts.map +0 -1
- package/dist/json-stringify.d.ts.map +0 -1
- package/dist/json.d.ts.map +0 -1
- package/dist/local-file-access.d.ts.map +0 -1
- package/dist/local-file-descriptor.d.ts.map +0 -1
- package/dist/local-roots.d.ts.map +0 -1
- package/dist/lock-config.d.ts.map +0 -1
- package/dist/move-path-cleanup.d.ts.map +0 -1
- package/dist/move-path-stage.d.ts.map +0 -1
- package/dist/move-path.d.ts.map +0 -1
- package/dist/mutation-authority.d.ts.map +0 -1
- package/dist/native-binding.d.ts.map +0 -1
- package/dist/native-config.d.ts.map +0 -1
- package/dist/native-directory-observation.d.ts.map +0 -1
- package/dist/native-fallback-warning.d.ts.map +0 -1
- package/dist/native-operations.d.ts.map +0 -1
- package/dist/native-parent-admission.d.ts.map +0 -1
- package/dist/native-pinned-write-windows.d.ts.map +0 -1
- package/dist/native-pinned-write.d.ts.map +0 -1
- package/dist/native-policy-directory-observation.d.ts.map +0 -1
- package/dist/native-policy-parent-windows.d.ts.map +0 -1
- package/dist/native-rename-outcome.d.ts.map +0 -1
- package/dist/native-staged-file.d.ts.map +0 -1
- package/dist/native.d.ts.map +0 -1
- package/dist/opened-file-failure.d.ts.map +0 -1
- package/dist/opened-realpath.d.ts.map +0 -1
- package/dist/output.d.ts.map +0 -1
- package/dist/overwrite-file-handle.d.ts.map +0 -1
- package/dist/owner-dacl.d.ts.map +0 -1
- package/dist/path-case.d.ts.map +0 -1
- package/dist/path-policy.d.ts.map +0 -1
- package/dist/path-prefix.d.ts.map +0 -1
- package/dist/path-scope-lexical.d.ts.map +0 -1
- package/dist/path-segment-route.d.ts.map +0 -1
- package/dist/path-suffix-aliases.d.ts.map +0 -1
- package/dist/path.d.ts.map +0 -1
- package/dist/permission-exec.d.ts.map +0 -1
- package/dist/permissions-public.d.ts.map +0 -1
- package/dist/permissions-windows.d.ts.map +0 -1
- package/dist/permissions.d.ts.map +0 -1
- package/dist/pinned-mutation-admission.d.ts.map +0 -1
- package/dist/pinned-mutation-observation.d.ts.map +0 -1
- package/dist/pinned-mutation-shared-route.d.ts.map +0 -1
- package/dist/pinned-open.d.ts.map +0 -1
- package/dist/pinned-operation.d.ts.map +0 -1
- package/dist/pinned-write-input.d.ts.map +0 -1
- package/dist/pinned-write-mode.d.ts.map +0 -1
- package/dist/pinned-write-staged.d.ts.map +0 -1
- package/dist/pinned-write-types.d.ts.map +0 -1
- package/dist/pinned-write.d.ts.map +0 -1
- package/dist/positional-read.d.ts.map +0 -1
- package/dist/private-directory.d.ts.map +0 -1
- package/dist/private-producer-handoff-sync.d.ts.map +0 -1
- package/dist/private-producer-handoff.d.ts.map +0 -1
- package/dist/private-temp-workspace.d.ts.map +0 -1
- package/dist/publish-copy-stage.d.ts.map +0 -1
- package/dist/publish-file-failure.d.ts.map +0 -1
- package/dist/publish-file.d.ts.map +0 -1
- package/dist/read-open-flags.d.ts.map +0 -1
- package/dist/read-opened-file.d.ts.map +0 -1
- package/dist/realpath.d.ts.map +0 -1
- package/dist/recursive-mkdir-path.d.ts.map +0 -1
- package/dist/regular-file.d.ts.map +0 -1
- package/dist/replace-directory.d.ts.map +0 -1
- package/dist/replace-file-copy-fallback.d.ts.map +0 -1
- package/dist/replace-file-copy-source.d.ts.map +0 -1
- package/dist/replace-file-descriptor.d.ts.map +0 -1
- package/dist/replace-file-mode.d.ts.map +0 -1
- package/dist/replace-file-rename-policy.d.ts.map +0 -1
- package/dist/replace-file-temp-owner.d.ts.map +0 -1
- package/dist/replace-file.d.ts.map +0 -1
- package/dist/retained-directory-replacement.d.ts.map +0 -1
- package/dist/root-boundary.d.ts.map +0 -1
- package/dist/root-context.d.ts.map +0 -1
- package/dist/root-create-input.d.ts.map +0 -1
- package/dist/root-directory-creation.d.ts.map +0 -1
- package/dist/root-directory-list.d.ts.map +0 -1
- package/dist/root-directory.d.ts.map +0 -1
- package/dist/root-entries.d.ts.map +0 -1
- package/dist/root-errors.d.ts.map +0 -1
- package/dist/root-file-final-admission.d.ts.map +0 -1
- package/dist/root-file.d.ts.map +0 -1
- package/dist/root-impl.d.ts.map +0 -1
- package/dist/root-move-noreplace.d.ts.map +0 -1
- package/dist/root-move-preflight.d.ts.map +0 -1
- package/dist/root-observed-path.d.ts.map +0 -1
- package/dist/root-options.d.ts.map +0 -1
- package/dist/root-path-errors.d.ts.map +0 -1
- package/dist/root-path-existing.d.ts.map +0 -1
- package/dist/root-path-observation.d.ts.map +0 -1
- package/dist/root-path-stat.d.ts.map +0 -1
- package/dist/root-path-symlink.d.ts +0 -7
- package/dist/root-path-symlink.d.ts.map +0 -1
- package/dist/root-path-symlink.js +0 -55
- package/dist/root-path.d.ts.map +0 -1
- package/dist/root-paths-lexical.d.ts.map +0 -1
- package/dist/root-paths.d.ts.map +0 -1
- package/dist/root-read-admission.d.ts.map +0 -1
- package/dist/root-remove-identity.d.ts.map +0 -1
- package/dist/root-remove-receipt.d.ts.map +0 -1
- package/dist/root-remove.d.ts.map +0 -1
- package/dist/root-symlink-policy.d.ts.map +0 -1
- package/dist/root-walk.d.ts.map +0 -1
- package/dist/root-write-admission.d.ts.map +0 -1
- package/dist/root-write-compatibility.d.ts.map +0 -1
- package/dist/root-write-complete-parent.d.ts.map +0 -1
- package/dist/root-write-lock-binding.d.ts.map +0 -1
- package/dist/root-write-mode.d.ts.map +0 -1
- package/dist/root-write-publication.d.ts.map +0 -1
- package/dist/root-write-verification.d.ts.map +0 -1
- package/dist/root.d.ts.map +0 -1
- package/dist/safe-path-segment.d.ts.map +0 -1
- package/dist/secret-file.d.ts.map +0 -1
- package/dist/secret-read-async.d.ts.map +0 -1
- package/dist/secret-read-policy.d.ts.map +0 -1
- package/dist/secret.d.ts.map +0 -1
- package/dist/secure-file-windows.d.ts.map +0 -1
- package/dist/secure-file.d.ts.map +0 -1
- package/dist/secure-temp-dir.d.ts.map +0 -1
- package/dist/secure-temp-repair.d.ts.map +0 -1
- package/dist/sibling-staged-file.d.ts.map +0 -1
- package/dist/sibling-temp.d.ts.map +0 -1
- package/dist/sidecar-lock-acquire.d.ts.map +0 -1
- package/dist/sidecar-lock-admission-context.d.ts.map +0 -1
- package/dist/sidecar-lock-admission-parser.d.ts.map +0 -1
- package/dist/sidecar-lock-admission.d.ts.map +0 -1
- package/dist/sidecar-lock-handle.d.ts.map +0 -1
- package/dist/sidecar-lock-policy.d.ts.map +0 -1
- package/dist/sidecar-lock-reclaim.d.ts.map +0 -1
- package/dist/sidecar-lock-root.d.ts.map +0 -1
- package/dist/sidecar-lock-stale-admission.d.ts.map +0 -1
- package/dist/sidecar-lock-target.d.ts.map +0 -1
- package/dist/sidecar-lock-types.d.ts.map +0 -1
- package/dist/sidecar-lock.d.ts.map +0 -1
- package/dist/staged-directory.d.ts.map +0 -1
- package/dist/staged-file-settlement.d.ts.map +0 -1
- package/dist/staged-file-types.d.ts.map +0 -1
- package/dist/standalone-publication-path.d.ts.map +0 -1
- package/dist/stat-observation.d.ts.map +0 -1
- package/dist/store.d.ts.map +0 -1
- package/dist/strict-file-identity.d.ts.map +0 -1
- package/dist/string-coerce.d.ts.map +0 -1
- package/dist/suppressed-error.d.ts.map +0 -1
- package/dist/symlink-parents.d.ts.map +0 -1
- package/dist/temp-cleanup.d.ts.map +0 -1
- package/dist/temp-target.d.ts.map +0 -1
- package/dist/temp-workspace-admission.d.ts.map +0 -1
- package/dist/temp-workspace-child-admission.d.ts.map +0 -1
- package/dist/temp-workspace-descriptor.d.ts.map +0 -1
- package/dist/temp-workspace-identity.d.ts.map +0 -1
- package/dist/temp-workspace-owner.d.ts.map +0 -1
- package/dist/temp-workspace-permissions.d.ts.map +0 -1
- package/dist/temp-workspace-types.d.ts.map +0 -1
- package/dist/temp.d.ts.map +0 -1
- package/dist/test-hooks.d.ts.map +0 -1
- package/dist/text-atomic.d.ts.map +0 -1
- package/dist/timing.d.ts.map +0 -1
- package/dist/trash.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/unicode-path.d.ts.map +0 -1
- package/dist/walk.d.ts.map +0 -1
- package/dist/windows-command.d.ts.map +0 -1
- package/dist/windows-owner.d.ts.map +0 -1
- package/dist/windows-path-alias.d.ts.map +0 -1
- package/dist/windows-security-command.d.ts.map +0 -1
- package/dist/windows-security-facts.d.ts.map +0 -1
- package/dist/write-file-handle.d.ts.map +0 -1
- package/dist/write-open-flags.d.ts.map +0 -1
- package/dist/write-queue.d.ts.map +0 -1
package/dist/guarded-mutation.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fsSync, {} from "node:fs";
|
|
2
2
|
import fs from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
import { assertAsyncDirectoryGuard, assertSyncDirectoryGuard, createAsyncDirectoryGuard,
|
|
4
|
+
import { assertAsyncDirectoryGuard, assertSyncDirectoryGuard, createAsyncDirectoryGuard, createSyncDirectoryGuard, } from "./directory-guard.js";
|
|
5
5
|
export async function withAsyncDirectoryGuards(guards, mutate, options = {}) {
|
|
6
6
|
for (const guard of guards) {
|
|
7
7
|
await assertAsyncDirectoryGuard(guard);
|
|
@@ -44,9 +44,7 @@ export function withSyncDirectoryGuards(guards, mutate, options = {}) {
|
|
|
44
44
|
}
|
|
45
45
|
export async function guardedRename(params) {
|
|
46
46
|
const sourceGuard = await createAsyncDirectoryGuard(path.dirname(params.from));
|
|
47
|
-
const targetGuard = params.
|
|
48
|
-
? await createNearestExistingDirectoryGuard(params.targetRoot, path.dirname(params.to))
|
|
49
|
-
: await createAsyncDirectoryGuard(path.dirname(params.to));
|
|
47
|
+
const targetGuard = await createAsyncDirectoryGuard(path.dirname(params.to));
|
|
50
48
|
await withAsyncDirectoryGuards([sourceGuard, targetGuard], async () => {
|
|
51
49
|
if (params.onSourceInspected) {
|
|
52
50
|
params.onSourceInspected(fsSync.lstatSync(params.from, { bigint: true }));
|
|
@@ -55,14 +53,12 @@ export async function guardedRename(params) {
|
|
|
55
53
|
params.assertBeforeRename?.();
|
|
56
54
|
await fs.rename(params.from, params.to);
|
|
57
55
|
params.onRenamed?.();
|
|
58
|
-
}
|
|
56
|
+
});
|
|
59
57
|
}
|
|
60
58
|
export function guardedRenameSync(params) {
|
|
61
59
|
const sourceGuard = createSyncDirectoryGuard(path.dirname(params.from));
|
|
62
|
-
const targetGuard = params.
|
|
63
|
-
|
|
64
|
-
: createSyncDirectoryGuard(path.dirname(params.to));
|
|
65
|
-
withSyncDirectoryGuards([sourceGuard, targetGuard], () => fsSync.renameSync(params.from, params.to), { verifyAfter: params.verifyAfter });
|
|
60
|
+
const targetGuard = createSyncDirectoryGuard(path.dirname(params.to));
|
|
61
|
+
withSyncDirectoryGuards([sourceGuard, targetGuard], () => fsSync.renameSync(params.from, params.to));
|
|
66
62
|
}
|
|
67
63
|
export async function guardedRm(params) {
|
|
68
64
|
const guard = await createAsyncDirectoryGuard(path.dirname(params.target));
|
|
@@ -70,9 +66,8 @@ export async function guardedRm(params) {
|
|
|
70
66
|
params.assertBeforeMutation?.();
|
|
71
67
|
await fs.rm(params.target, {
|
|
72
68
|
...(params.recursive !== undefined ? { recursive: params.recursive } : {}),
|
|
73
|
-
...(params.force !== undefined ? { force: params.force } : {}),
|
|
74
69
|
});
|
|
75
|
-
}
|
|
70
|
+
});
|
|
76
71
|
}
|
|
77
72
|
export function guardedRmSync(params) {
|
|
78
73
|
const guard = createSyncDirectoryGuard(path.dirname(params.target));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const GUEST_FILESYSTEM_DISPATCH_PYTHON = [
|
|
2
|
-
"if operation
|
|
2
|
+
"if operation in ('copy', 'rename'):",
|
|
3
3
|
" src_root_fd = open_dir(sys.argv[2])",
|
|
4
4
|
" dst_root_fd = open_dir(sys.argv[5])",
|
|
5
5
|
" src_parent_fd = None",
|
|
@@ -7,7 +7,10 @@ export const GUEST_FILESYSTEM_DISPATCH_PYTHON = [
|
|
|
7
7
|
" try:",
|
|
8
8
|
" src_parent_fd = walk_dir(src_root_fd, sys.argv[3], False)",
|
|
9
9
|
" dst_parent_fd = walk_dir(dst_root_fd, sys.argv[6], sys.argv[8] == '1')",
|
|
10
|
-
"
|
|
10
|
+
" if operation == 'copy':",
|
|
11
|
+
" copy_file_atomic(src_parent_fd, sys.argv[4], dst_parent_fd, sys.argv[7])",
|
|
12
|
+
" else:",
|
|
13
|
+
" move_entry(src_parent_fd, sys.argv[4], dst_parent_fd, sys.argv[7])",
|
|
11
14
|
" finally:",
|
|
12
15
|
" if src_parent_fd is not None:",
|
|
13
16
|
" os.close(src_parent_fd)",
|
|
@@ -15,103 +18,51 @@ export const GUEST_FILESYSTEM_DISPATCH_PYTHON = [
|
|
|
15
18
|
" os.close(dst_parent_fd)",
|
|
16
19
|
" os.close(src_root_fd)",
|
|
17
20
|
" os.close(dst_root_fd)",
|
|
18
|
-
"elif operation
|
|
21
|
+
"elif operation in ('write', 'create', 'read', 'readdir', 'mkdirp', 'remove'):",
|
|
19
22
|
" root_fd = open_dir(sys.argv[2])",
|
|
20
23
|
" parent_fd = None",
|
|
21
24
|
" try:",
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
" create_exclusive(parent_fd, sys.argv[4], sys.stdin.buffer)",
|
|
35
|
-
" except FileExistsError:",
|
|
36
|
-
" sys.exit(SANDBOX_CREATE_EXISTS_EXIT_CODE)",
|
|
37
|
-
" finally:",
|
|
38
|
-
" if parent_fd is not None:",
|
|
39
|
-
" os.close(parent_fd)",
|
|
40
|
-
" os.close(root_fd)",
|
|
41
|
-
"elif operation == 'read':",
|
|
42
|
-
" root_fd = open_dir(sys.argv[2])",
|
|
43
|
-
" parent_fd = None",
|
|
44
|
-
" try:",
|
|
45
|
-
" parent_fd = walk_dir(root_fd, sys.argv[3], False)",
|
|
46
|
-
" if len(sys.argv) > 5:",
|
|
47
|
-
" read_file_bounded(parent_fd, sys.argv[4], int(sys.argv[5]))",
|
|
48
|
-
" else:",
|
|
49
|
-
" read_file(parent_fd, sys.argv[4])",
|
|
50
|
-
" except FileNotFoundError:",
|
|
51
|
-
" sys.exit(SANDBOX_READ_NOT_FOUND_EXIT_CODE)",
|
|
52
|
-
" finally:",
|
|
53
|
-
" if parent_fd is not None:",
|
|
54
|
-
" os.close(parent_fd)",
|
|
55
|
-
" os.close(root_fd)",
|
|
56
|
-
"elif operation == 'readdir':",
|
|
57
|
-
" root_fd = open_dir(sys.argv[2])",
|
|
58
|
-
" target_fd = None",
|
|
59
|
-
" try:",
|
|
60
|
-
" target_fd = walk_dir(root_fd, sys.argv[3], False)",
|
|
61
|
-
" with os.scandir(target_fd) as entries:",
|
|
62
|
-
" print(json.dumps([{'name': entry.name, 'isDirectory': entry.is_dir(follow_symlinks=False), 'isFile': entry.is_file(follow_symlinks=False)} for entry in entries]))",
|
|
63
|
-
" finally:",
|
|
64
|
-
" if target_fd is not None:",
|
|
65
|
-
" os.close(target_fd)",
|
|
66
|
-
" os.close(root_fd)",
|
|
67
|
-
"elif operation == 'mkdirp':",
|
|
68
|
-
" root_fd = open_dir(sys.argv[2])",
|
|
69
|
-
" target_fd = None",
|
|
70
|
-
" try:",
|
|
71
|
-
" target_fd = walk_dir(root_fd, sys.argv[3], True)",
|
|
72
|
-
" os.fsync(target_fd)",
|
|
73
|
-
" finally:",
|
|
74
|
-
" if target_fd is not None:",
|
|
75
|
-
" os.close(target_fd)",
|
|
76
|
-
" os.close(root_fd)",
|
|
77
|
-
"elif operation == 'remove':",
|
|
78
|
-
" root_fd = open_dir(sys.argv[2])",
|
|
79
|
-
" parent_fd = None",
|
|
80
|
-
" try:",
|
|
81
|
-
" parent_fd = walk_dir(root_fd, sys.argv[3], False)",
|
|
82
|
-
" try:",
|
|
83
|
-
" if sys.argv[5] == '1':",
|
|
84
|
-
" remove_tree(parent_fd, sys.argv[4])",
|
|
25
|
+
" mkdir_enabled = operation == 'mkdirp' or (operation in ('write', 'create') and sys.argv[5] == '1')",
|
|
26
|
+
" parent_fd = walk_dir(root_fd, sys.argv[3], mkdir_enabled)",
|
|
27
|
+
" if operation == 'write':",
|
|
28
|
+
" write_atomic(parent_fd, sys.argv[4], sys.stdin.buffer)",
|
|
29
|
+
" elif operation == 'create':",
|
|
30
|
+
" try:",
|
|
31
|
+
" create_exclusive(parent_fd, sys.argv[4], sys.stdin.buffer)",
|
|
32
|
+
" except FileExistsError:",
|
|
33
|
+
" sys.exit(SANDBOX_CREATE_EXISTS_EXIT_CODE)",
|
|
34
|
+
" elif operation == 'read':",
|
|
35
|
+
" if len(sys.argv) > 5:",
|
|
36
|
+
" read_file_bounded(parent_fd, sys.argv[4], int(sys.argv[5]))",
|
|
85
37
|
" else:",
|
|
86
|
-
"
|
|
87
|
-
"
|
|
88
|
-
"
|
|
89
|
-
"
|
|
90
|
-
"
|
|
38
|
+
" read_file(parent_fd, sys.argv[4])",
|
|
39
|
+
" elif operation == 'readdir':",
|
|
40
|
+
" with os.scandir(parent_fd) as entries:",
|
|
41
|
+
" print(json.dumps([{'name': entry.name, 'isDirectory': entry.is_dir(follow_symlinks=False), 'isFile': entry.is_file(follow_symlinks=False)} for entry in entries]))",
|
|
42
|
+
" elif operation == 'mkdirp':",
|
|
91
43
|
" os.fsync(parent_fd)",
|
|
92
|
-
"
|
|
93
|
-
"
|
|
94
|
-
"
|
|
44
|
+
" elif operation == 'remove':",
|
|
45
|
+
" try:",
|
|
46
|
+
" if sys.argv[5] == '1':",
|
|
47
|
+
" remove_tree(parent_fd, sys.argv[4])",
|
|
48
|
+
" else:",
|
|
49
|
+
" entry_stat = os.lstat(sys.argv[4], dir_fd=parent_fd)",
|
|
50
|
+
" if stat.S_ISDIR(entry_stat.st_mode) and not stat.S_ISLNK(entry_stat.st_mode):",
|
|
51
|
+
" os.rmdir(sys.argv[4], dir_fd=parent_fd)",
|
|
52
|
+
" else:",
|
|
53
|
+
" os.unlink(sys.argv[4], dir_fd=parent_fd)",
|
|
54
|
+
" os.fsync(parent_fd)",
|
|
55
|
+
" except FileNotFoundError:",
|
|
56
|
+
" if sys.argv[6] != '1':",
|
|
57
|
+
" raise",
|
|
58
|
+
" except FileNotFoundError:",
|
|
59
|
+
" if operation == 'read':",
|
|
60
|
+
" sys.exit(SANDBOX_READ_NOT_FOUND_EXIT_CODE)",
|
|
61
|
+
" raise",
|
|
95
62
|
" finally:",
|
|
96
63
|
" if parent_fd is not None:",
|
|
97
64
|
" os.close(parent_fd)",
|
|
98
65
|
" os.close(root_fd)",
|
|
99
|
-
"elif operation == 'rename':",
|
|
100
|
-
" src_root_fd = open_dir(sys.argv[2])",
|
|
101
|
-
" dst_root_fd = open_dir(sys.argv[5])",
|
|
102
|
-
" src_parent_fd = None",
|
|
103
|
-
" dst_parent_fd = None",
|
|
104
|
-
" try:",
|
|
105
|
-
" src_parent_fd = walk_dir(src_root_fd, sys.argv[3], False)",
|
|
106
|
-
" dst_parent_fd = walk_dir(dst_root_fd, sys.argv[6], sys.argv[8] == '1')",
|
|
107
|
-
" move_entry(src_parent_fd, sys.argv[4], dst_parent_fd, sys.argv[7])",
|
|
108
|
-
" finally:",
|
|
109
|
-
" if src_parent_fd is not None:",
|
|
110
|
-
" os.close(src_parent_fd)",
|
|
111
|
-
" if dst_parent_fd is not None:",
|
|
112
|
-
" os.close(dst_parent_fd)",
|
|
113
|
-
" os.close(src_root_fd)",
|
|
114
|
-
" os.close(dst_root_fd)",
|
|
115
66
|
"else:",
|
|
116
67
|
" raise RuntimeError('unknown sandbox mutation operation: ' + operation)",
|
|
117
68
|
].join("\n");
|
package/dist/guest.d.ts
CHANGED
|
@@ -6,4 +6,3 @@ export declare const GUEST_FILESYSTEM_READ_NOT_FOUND_EXIT_CODE = 2;
|
|
|
6
6
|
/** Python 3 source for the descriptor-relative guest filesystem protocol. See docs/guest.md. */
|
|
7
7
|
export declare const GUEST_FILESYSTEM_PYTHON: string;
|
|
8
8
|
export { GUEST_FILESYSTEM_RENAME_NO_REPLACE_PYTHON };
|
|
9
|
-
//# sourceMappingURL=guest.d.ts.map
|
package/dist/home-dir.d.ts
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -4,4 +4,3 @@ export type { ContainmentGuarantee } from "./containment.js";
|
|
|
4
4
|
export { configureFsSafePython, configureFsSafeNative, getFsSafeNativeConfig, type FsSafePythonConfig, type FsSafeNativeConfig, type FsSafeNativeMode, } from "./native-config.js";
|
|
5
5
|
export { writeExternalFileWithinRoot, type ExternalFileWriteOptions, type ExternalFileWriteResult, } from "./output.js";
|
|
6
6
|
export { configureFsSafeLocks, getFsSafeLockConfig, type FsSafeLockConfig, } from "./lock-config.js";
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/install-path.d.ts
CHANGED
|
@@ -1,2 +1,14 @@
|
|
|
1
|
+
export declare function queueDirectories(queueDir: string, failedDir: string): Promise<{
|
|
2
|
+
queue: QueueDirectory;
|
|
3
|
+
failed: QueueDirectory;
|
|
4
|
+
}>;
|
|
5
|
+
declare class QueueDirectory {
|
|
6
|
+
private readonly dir;
|
|
7
|
+
private readonly root;
|
|
8
|
+
private readonly allowSymlinkBase;
|
|
9
|
+
constructor(dir: string);
|
|
10
|
+
ensure(): Promise<void>;
|
|
11
|
+
assert(allowMissing?: boolean): Promise<void>;
|
|
12
|
+
}
|
|
1
13
|
export declare function syncQueueDirectoryCreation(dir: string, validationBase: string): Promise<void>;
|
|
2
|
-
|
|
14
|
+
export {};
|
|
@@ -1,7 +1,141 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
1
2
|
import path from "node:path";
|
|
2
3
|
import { syncDirectory } from "./directory-durability.js";
|
|
3
4
|
import { isPathRelativeEscape } from "./path.js";
|
|
4
5
|
import { realpathSync } from "./realpath.js";
|
|
6
|
+
import { recursiveMkdirPath } from "./recursive-mkdir-path.js";
|
|
7
|
+
import { assertNoWindowsPathAlias, resolvePathPreservingWindowsRoot, } from "./windows-path-alias.js";
|
|
8
|
+
export async function queueDirectories(queueDir, failedDir) {
|
|
9
|
+
const queue = new QueueDirectory(queueDir);
|
|
10
|
+
return { queue, failed: new QueueDirectory(failedDir) };
|
|
11
|
+
}
|
|
12
|
+
class QueueDirectory {
|
|
13
|
+
dir;
|
|
14
|
+
root;
|
|
15
|
+
allowSymlinkBase;
|
|
16
|
+
constructor(dir) {
|
|
17
|
+
this.dir = dir;
|
|
18
|
+
this.root = path.parse(resolveQueueFilesystemPath(dir)).root;
|
|
19
|
+
this.allowSymlinkBase = process.platform === "darwin";
|
|
20
|
+
}
|
|
21
|
+
async ensure() {
|
|
22
|
+
await this.assert(true);
|
|
23
|
+
await fs.promises.mkdir(recursiveMkdirPath(this.dir), { recursive: true, mode: 0o700 });
|
|
24
|
+
await this.assert();
|
|
25
|
+
await chmodQueueDirectory(this.dir);
|
|
26
|
+
await syncQueueDirectoryCreation(this.dir, this.root);
|
|
27
|
+
}
|
|
28
|
+
async assert(allowMissing = false) {
|
|
29
|
+
const dir = this.dir;
|
|
30
|
+
let base = resolveQueueFilesystemPath(this.root);
|
|
31
|
+
let target = resolveQueueFilesystemPath(dir);
|
|
32
|
+
let current = base;
|
|
33
|
+
let baseStat = fs.lstatSync(base);
|
|
34
|
+
if (baseStat.isSymbolicLink() && this.allowSymlinkBase) {
|
|
35
|
+
const relative = path.relative(base, target);
|
|
36
|
+
if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
|
|
37
|
+
throw new Error(`durable queue path is not a directory: ${dir}`);
|
|
38
|
+
}
|
|
39
|
+
base = realpathSync.native(base);
|
|
40
|
+
target = path.join(base, ...relative.split(path.sep).filter(Boolean));
|
|
41
|
+
current = base;
|
|
42
|
+
baseStat = fs.lstatSync(base);
|
|
43
|
+
}
|
|
44
|
+
if (baseStat.isSymbolicLink() || !baseStat.isDirectory()) {
|
|
45
|
+
throw new Error(`durable queue path is not a directory: ${dir}`);
|
|
46
|
+
}
|
|
47
|
+
const segments = path.relative(base, target).split(path.sep).filter(Boolean);
|
|
48
|
+
for (let index = 0; index < segments.length; index++) {
|
|
49
|
+
const segment = segments[index];
|
|
50
|
+
if (segment === undefined) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
current = path.join(current, segment);
|
|
54
|
+
let stat;
|
|
55
|
+
try {
|
|
56
|
+
stat = fs.lstatSync(current);
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
if (allowMissing && error.code === "ENOENT") {
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
65
|
+
if (stat.isSymbolicLink() && this.allowSymlinkBase) {
|
|
66
|
+
if (await isDarwinSystemAlias(current, stat)) {
|
|
67
|
+
current = realpathSync.native(current);
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
throw new Error(`durable queue path is not a directory: ${dir}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function isDarwinSystemAlias(dir, stat) {
|
|
77
|
+
if (process.platform !== "darwin" || !stat.isSymbolicLink()) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
const resolved = path.resolve(dir);
|
|
81
|
+
if (resolved !== "/tmp" && resolved !== "/var") {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
try {
|
|
85
|
+
return realpathSync.native(resolved) === `/private${resolved}`;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function chmodQueueDirectory(dir) {
|
|
92
|
+
const noFollow = typeof fs.constants.O_NOFOLLOW === "number" && process.platform !== "win32"
|
|
93
|
+
? fs.constants.O_NOFOLLOW
|
|
94
|
+
: 0;
|
|
95
|
+
const directoryFlag = typeof fs.constants.O_DIRECTORY === "number" && process.platform !== "win32"
|
|
96
|
+
? fs.constants.O_DIRECTORY
|
|
97
|
+
: 0;
|
|
98
|
+
if (noFollow || directoryFlag) {
|
|
99
|
+
let handle;
|
|
100
|
+
try {
|
|
101
|
+
handle = await fs.promises.open(dir, fs.constants.O_RDONLY | noFollow | directoryFlag);
|
|
102
|
+
const stat = fs.fstatSync(handle.fd);
|
|
103
|
+
if (!stat.isDirectory()) {
|
|
104
|
+
throw new Error(`durable queue path is not a directory: ${dir}`);
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
await handle.chmod(0o700);
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Best-effort on platforms that do not enforce POSIX modes.
|
|
111
|
+
}
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
try {
|
|
116
|
+
await handle?.close();
|
|
117
|
+
}
|
|
118
|
+
catch {
|
|
119
|
+
// Best-effort cleanup after chmod/open failures.
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
const stat = fs.lstatSync(dir);
|
|
124
|
+
if (stat.isSymbolicLink() || !stat.isDirectory()) {
|
|
125
|
+
throw new Error(`durable queue path is not a directory: ${dir}`);
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
await fs.promises.chmod(dir, 0o700);
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
// Best-effort on platforms that do not enforce POSIX modes.
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function resolveQueueFilesystemPath(value) {
|
|
135
|
+
const resolved = resolvePathPreservingWindowsRoot(value);
|
|
136
|
+
assertNoWindowsPathAlias(resolved);
|
|
137
|
+
return resolved;
|
|
138
|
+
}
|
|
5
139
|
export async function syncQueueDirectoryCreation(dir, validationBase) {
|
|
6
140
|
const baseReal = realpathSync.native(validationBase);
|
|
7
141
|
const targetReal = realpathSync.native(dir);
|