@openclaw/fs-safe 0.17.0 → 0.18.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.
- package/CHANGELOG.md +53 -0
- package/dist/absolute-path.d.ts +0 -1
- package/dist/advanced.d.ts +2 -2
- package/dist/archive-crc32.d.ts +0 -1
- package/dist/archive-deadline.d.ts +0 -1
- package/dist/archive-durability.d.ts +1 -2
- 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-parser-errors.d.ts +0 -1
- package/dist/archive-parser.wasm +0 -0
- package/dist/archive-plan.d.ts +72 -2
- package/dist/archive-plan.js +86 -22
- package/dist/archive-read.d.ts +0 -1
- package/dist/archive-staging.d.ts +0 -1
- package/dist/archive-tar-stream.d.ts +0 -1
- package/dist/archive-tar-wasm.d.ts +1 -2
- 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 +1 -2
- package/dist/archive-zip-entry.d.ts +1 -2
- package/dist/archive-zip-entry.js +1 -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 +8 -6
- package/dist/archive.js +204 -168
- package/dist/async-lock.d.ts +0 -1
- package/dist/atomic.d.ts +3 -2
- 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 +1 -2
- 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-owned-file.d.ts +0 -1
- package/dist/create.d.ts +16 -3
- package/dist/create.js +388 -2
- package/dist/creation-boundary.d.ts +60 -0
- package/dist/creation-boundary.js +371 -0
- 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-node.js +12 -2
- package/dist/directory-mode-owner.d.ts +0 -1
- package/dist/directory-receipt.d.ts +0 -1
- package/dist/durability.d.ts +2 -2
- 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 +33 -103
- 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 +3 -3
- 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 +18 -27
- package/dist/file-lock-sync.d.ts +4 -22
- 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 +7 -2
- package/dist/file-store-boundary.js +64 -27
- 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 +18 -29
- package/dist/file-store.d.ts +0 -1
- package/dist/file-store.js +4 -10
- 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 +1 -2
- 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 +9 -7
- 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 +13 -9
- package/dist/json-durable-queue.d.ts +0 -1
- package/dist/json-durable-queue.js +8 -132
- package/dist/json-store.d.ts +0 -1
- package/dist/json-store.js +1 -2
- package/dist/json-stringify.d.ts +0 -1
- package/dist/json.d.ts +0 -1
- package/dist/json.js +7 -17
- 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/move-path.js +1 -2
- 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 -7
- package/dist/native-parent-admission.d.ts +0 -1
- package/dist/native-pinned-write-windows.d.ts +1 -2
- package/dist/native-pinned-write-windows.js +1 -1
- package/dist/native-pinned-write.d.ts +1 -2
- package/dist/native-pinned-write.js +7 -16
- package/dist/native-policy-directory-observation.d.ts +0 -1
- package/dist/native-policy-parent-windows.d.ts +1 -2
- package/dist/native-rename-outcome.d.ts +0 -1
- package/dist/native-staged-file.d.ts +17 -5
- package/dist/native-staged-file.js +56 -65
- 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 +1 -2
- 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 +7 -2
- package/dist/pinned-operation.d.ts +1 -2
- package/dist/pinned-operation.js +3 -16
- package/dist/pinned-write-input.d.ts +0 -1
- package/dist/pinned-write-mode.d.ts +0 -1
- package/dist/pinned-write-mode.js +1 -1
- package/dist/pinned-write-staged.d.ts +0 -1
- package/dist/pinned-write-staged.js +1 -2
- package/dist/pinned-write-types.d.ts +9 -21
- package/dist/pinned-write.d.ts +0 -2
- package/dist/pinned-write.js +3 -5
- package/dist/positional-read.d.ts +0 -1
- package/dist/private-directory.d.ts +0 -1
- package/dist/private-producer-handoff-sync.d.ts +2 -13
- package/dist/private-producer-handoff-sync.js +10 -52
- package/dist/private-producer-handoff.d.ts +23 -4
- package/dist/private-producer-handoff.js +69 -46
- package/dist/private-temp-workspace.d.ts +0 -1
- package/dist/private-temp-workspace.js +11 -37
- package/dist/publish-copy-stage.d.ts +1 -2
- package/dist/publish-file-failure.d.ts +0 -1
- package/dist/publish-file.d.ts +0 -2
- package/dist/publish-file.js +1 -2
- 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-directory.js +1 -2
- 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 +1 -3
- 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 +3 -4
- package/dist/replace-file.js +1 -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-context.js +3 -7
- package/dist/root-create-input.d.ts +1 -2
- package/dist/root-directory-creation.d.ts +1 -2
- package/dist/root-directory-creation.js +1 -1
- package/dist/root-directory-list.d.ts +0 -1
- package/dist/root-directory-list.js +3 -7
- package/dist/root-directory.d.ts +0 -1
- package/dist/root-entries.d.ts +0 -1
- package/dist/root-entries.js +2 -2
- package/dist/root-errors.d.ts +4 -1
- package/dist/root-errors.js +5 -3
- 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 -15
- package/dist/root-impl.js +136 -112
- package/dist/root-move-noreplace.d.ts +0 -1
- package/dist/root-move-noreplace.js +4 -10
- package/dist/root-move-preflight.d.ts +0 -1
- package/dist/root-observed-path.d.ts +0 -1
- package/dist/root-observed-path.js +2 -4
- package/dist/root-options.d.ts +1 -2
- package/dist/root-path-errors.d.ts +0 -1
- package/dist/root-path-existing.d.ts +3 -1
- package/dist/root-path-existing.js +38 -18
- package/dist/root-path-observation.d.ts +0 -1
- package/dist/root-path-stat.d.ts +0 -1
- package/dist/root-path-stat.js +2 -4
- 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-public-types.d.ts +11 -0
- 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-identity.js +2 -4
- package/dist/root-remove-receipt.d.ts +0 -1
- package/dist/root-remove.d.ts +0 -1
- package/dist/root-remove.js +2 -4
- package/dist/root-symlink-policy.d.ts +0 -1
- package/dist/root-walk.d.ts +0 -1
- package/dist/root-write-admission.d.ts +1 -2
- package/dist/root-write-admission.js +3 -7
- package/dist/root-write-compatibility.d.ts +0 -1
- package/dist/root-write-complete-parent.d.ts +0 -1
- package/dist/root-write-complete-parent.js +2 -3
- 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 +1 -2
- package/dist/root.d.ts +2 -7
- 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 -18
- 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/secure-temp-repair.js +5 -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 +37 -61
- 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 +4 -1
- package/dist/sidecar-lock-policy.js +23 -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-stale-admission.js +2 -6
- package/dist/sidecar-lock-target.d.ts +0 -1
- package/dist/sidecar-lock-types.d.ts +22 -17
- 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/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 +1 -7
- package/dist/temp-workspace-child-admission.d.ts +16 -6
- package/dist/temp-workspace-child-admission.js +71 -15
- package/dist/temp-workspace-descriptor.d.ts +1 -7
- package/dist/temp-workspace-descriptor.js +1 -4
- package/dist/temp-workspace-owner.d.ts +1 -1
- package/dist/temp-workspace-owner.js +45 -22
- 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/text-atomic.js +1 -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 +5 -2
- package/dist/windows-path-alias.d.ts +1 -1
- package/dist/windows-path-alias.js +12 -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/advanced.md +3 -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 +8 -0
- package/docs/sidecar-lock.md +4 -0
- package/docs/store.md +6 -0
- package/docs/temp.md +8 -1
- package/docs/writing.md +14 -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 +0 -22
- package/dist/archive-native.d.ts.map +0 -1
- package/dist/archive-native.js +0 -98
- package/dist/archive-options.d.ts +0 -25
- 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 +0 -22
- package/dist/archive-policy.d.ts.map +0 -1
- package/dist/archive-policy.js +0 -38
- 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 +0 -7
- package/dist/archive-tar-inspect.d.ts.map +0 -1
- package/dist/archive-tar-inspect.js +0 -62
- 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 +0 -19
- package/dist/archive-tar.d.ts.map +0 -1
- package/dist/archive-tar.js +0 -21
- 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 +0 -20
- package/dist/create-directory.d.ts.map +0 -1
- package/dist/create-directory.js +0 -130
- package/dist/create-file-async.d.ts +0 -7
- package/dist/create-file-async.d.ts.map +0 -1
- package/dist/create-file-async.js +0 -121
- package/dist/create-file.d.ts +0 -8
- package/dist/create-file.d.ts.map +0 -1
- package/dist/create-file.js +0 -190
- package/dist/create-owned-file.d.ts.map +0 -1
- package/dist/create.d.ts.map +0 -1
- package/dist/creation-darwin.d.ts +0 -6
- package/dist/creation-darwin.d.ts.map +0 -1
- package/dist/creation-darwin.js +0 -70
- package/dist/creation-file-state.d.ts +0 -19
- package/dist/creation-file-state.d.ts.map +0 -1
- package/dist/creation-file-state.js +0 -118
- package/dist/creation-path.d.ts +0 -21
- package/dist/creation-path.d.ts.map +0 -1
- package/dist/creation-path.js +0 -71
- package/dist/creation-permissions.d.ts +0 -19
- package/dist/creation-permissions.d.ts.map +0 -1
- package/dist/creation-permissions.js +0 -125
- 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 +0 -5
- package/dist/file-store-copy-source.d.ts.map +0 -1
- package/dist/file-store-copy-source.js +0 -31
- package/dist/file-store-limit.d.ts +0 -2
- package/dist/file-store-limit.d.ts.map +0 -1
- package/dist/file-store-limit.js +0 -8
- package/dist/file-store-path.d.ts +0 -3
- package/dist/file-store-path.d.ts.map +0 -1
- package/dist/file-store-path.js +0 -30
- 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 +0 -2
- package/dist/standalone-publication-path.d.ts.map +0 -1
- package/dist/standalone-publication-path.js +0 -6
- 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 +0 -15
- package/dist/temp-workspace-identity.d.ts.map +0 -1
- package/dist/temp-workspace-identity.js +0 -41
- package/dist/temp-workspace-owner.d.ts.map +0 -1
- package/dist/temp-workspace-permissions.d.ts +0 -4
- package/dist/temp-workspace-permissions.d.ts.map +0 -1
- package/dist/temp-workspace-permissions.js +0 -32
- 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/{archive-options.js → root-public-types.js} +0 -0
package/dist/root-remove.js
CHANGED
|
@@ -8,7 +8,7 @@ import { sameFileIdentityForCleanup } from "./file-identity.js";
|
|
|
8
8
|
import { MutationAuthorityError } from "./mutation-authority.js";
|
|
9
9
|
import { isNotFoundPathError, isPathInside } from "./path.js";
|
|
10
10
|
import { assertRootIdentityCurrent } from "./root-context.js";
|
|
11
|
-
import { normalizeRemoveGuardError, normalizeRemovePathError, rootPathChangedError } from "./root-errors.js";
|
|
11
|
+
import { errorCauseOptions, normalizeRemoveGuardError, normalizeRemovePathError, rootPathChangedError } from "./root-errors.js";
|
|
12
12
|
import { assertRemovalDirectoryCurrent, createRemovalDirectoryAssertion, } from "./root-remove-identity.js";
|
|
13
13
|
import { assertFinalSymlinkRejected } from "./root-symlink-policy.js";
|
|
14
14
|
import { inspectFileIdentitySync } from "./strict-file-identity.js";
|
|
@@ -44,9 +44,7 @@ function assertNotAborted(signal) {
|
|
|
44
44
|
}
|
|
45
45
|
}
|
|
46
46
|
function removalAncestorChanged(error) {
|
|
47
|
-
return new FsSafeError("path-mismatch", "removal ancestor changed during operation",
|
|
48
|
-
cause: error instanceof Error ? error : undefined,
|
|
49
|
-
});
|
|
47
|
+
return new FsSafeError("path-mismatch", "removal ancestor changed during operation", errorCauseOptions(error));
|
|
50
48
|
}
|
|
51
49
|
function sameCanonicalDirectory(left, right) {
|
|
52
50
|
return left === right || (isPathInside(left, right) && isPathInside(right, left));
|
|
@@ -11,4 +11,3 @@ export declare function mutationSymlinkResolution(symlinks: MutationSymlinkPolic
|
|
|
11
11
|
resolveCanonical: boolean;
|
|
12
12
|
};
|
|
13
13
|
export declare function assertFinalSymlinkRejected(targetPath: string, reject: boolean | undefined, details?: FsSafeErrorDetails): void;
|
|
14
|
-
//# sourceMappingURL=root-symlink-policy.d.ts.map
|
package/dist/root-walk.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { BigIntStats } from "node:fs";
|
|
2
2
|
import { type DenyMutationPolicy } from "./deny-mutations.js";
|
|
3
3
|
import { type AnyAsyncDirectoryGuard } from "./directory-guard.js";
|
|
4
|
-
import type { PinnedWriteMutationAdmission } from "./pinned-write.js";
|
|
4
|
+
import type { PinnedWriteMutationAdmission } from "./pinned-write-types.js";
|
|
5
5
|
import type { RootContext } from "./root-context.js";
|
|
6
6
|
import { resolvePathInRoot } from "./root-context.js";
|
|
7
7
|
import { type MutationSymlinkPolicy } from "./root-symlink-policy.js";
|
|
@@ -63,4 +63,3 @@ export declare function resolveGuardedWritePathInRoot(root: RootContext, params:
|
|
|
63
63
|
export declare function resolveGuardedWriteTargetInRoot(root: RootContext, params: GuardedWritePathOptions): Promise<GuardedRootWriteTarget>;
|
|
64
64
|
export declare function resolvePinnedWriteTargetInRoot(root: RootContext, relativePath: string, requestedMode?: number, denyMutations?: DenyMutationPolicy, overwrite?: boolean, mutationSymlinks?: MutationSymlinkPolicy): Promise<PinnedWriteTarget>;
|
|
65
65
|
export {};
|
|
66
|
-
//# sourceMappingURL=root-write-admission.d.ts.map
|
|
@@ -8,7 +8,7 @@ import { assertNoPathAliasEscape } from "./path-policy.js";
|
|
|
8
8
|
import { preparePinnedWriteMutationAdmission, snapshotPinnedMutationPolicy, } from "./pinned-mutation-admission.js";
|
|
9
9
|
import { admitPathInsideRoot, sameNormalizedPathSpelling } from "./root-boundary.js";
|
|
10
10
|
import { resolvePathInRoot } from "./root-context.js";
|
|
11
|
-
import { hardlinkedPathNotAllowedError, outsideWorkspaceError } from "./root-errors.js";
|
|
11
|
+
import { errorCauseOptions, hardlinkedPathNotAllowedError, outsideWorkspaceError } from "./root-errors.js";
|
|
12
12
|
import { inheritWriteTargetMode } from "./root-write-mode.js";
|
|
13
13
|
import { mutationSymlinkResolution, } from "./root-symlink-policy.js";
|
|
14
14
|
import { inspectFileIdentitySync } from "./strict-file-identity.js";
|
|
@@ -23,9 +23,7 @@ export function createRootWriteSelectionForFd(selection, fd) {
|
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
function writeSelectionChanged(cause) {
|
|
26
|
-
return new FsSafeError("path-mismatch", "write target changed during operation",
|
|
27
|
-
cause: cause instanceof Error ? cause : undefined,
|
|
28
|
-
});
|
|
26
|
+
return new FsSafeError("path-mismatch", "write target changed during operation", errorCauseOptions(cause));
|
|
29
27
|
}
|
|
30
28
|
function inspectRegularSelectionPath(pathname, expected, follow) {
|
|
31
29
|
let observed;
|
|
@@ -186,9 +184,7 @@ export async function resolveGuardedWritePathInRoot(root, params) {
|
|
|
186
184
|
});
|
|
187
185
|
}
|
|
188
186
|
catch (error) {
|
|
189
|
-
throw new FsSafeError("path-alias", "path alias escape blocked",
|
|
190
|
-
cause: error instanceof Error ? error : undefined,
|
|
191
|
-
});
|
|
187
|
+
throw new FsSafeError("path-alias", "path alias escape blocked", errorCauseOptions(error));
|
|
192
188
|
}
|
|
193
189
|
}
|
|
194
190
|
return resolvedPath;
|
|
@@ -39,4 +39,3 @@ export type SharedRootWriteTarget = Readonly<{
|
|
|
39
39
|
export declare function assertPreparedRootWriteParentCurrent(prepared: PreparedRootWriteParent, verifyTarget?: boolean): void;
|
|
40
40
|
export declare function prepareSharedRootWriteTarget(root: RootContext, params: SharedRootWriteTargetParams): Promise<SharedRootWriteTarget>;
|
|
41
41
|
export {};
|
|
42
|
-
//# sourceMappingURL=root-write-complete-parent.d.ts.map
|
|
@@ -8,13 +8,12 @@ import { realpathSync } from "./realpath.js";
|
|
|
8
8
|
import { admitPathInsideRoot, sameNormalizedPathSpelling } from "./root-boundary.js";
|
|
9
9
|
import { ordinaryWindowsSegments } from "./pinned-mutation-shared-route.js";
|
|
10
10
|
import { prepareRootWriteTarget } from "./root-directory-creation.js";
|
|
11
|
+
import { errorCauseOptions } from "./root-errors.js";
|
|
11
12
|
import { canReuseParentWithMutationAssertion } from "./root-write-lock-binding.js";
|
|
12
13
|
import { inspectFileIdentitySync } from "./strict-file-identity.js";
|
|
13
14
|
import { getFsSafeTestHooks } from "./test-hooks.js";
|
|
14
15
|
function writeSelectionChanged(cause) {
|
|
15
|
-
return new FsSafeError("path-mismatch", "write target changed during operation",
|
|
16
|
-
cause: cause instanceof Error ? cause : undefined,
|
|
17
|
-
});
|
|
16
|
+
return new FsSafeError("path-mismatch", "write target changed during operation", errorCauseOptions(cause));
|
|
18
17
|
}
|
|
19
18
|
function ordinarySharedWriteRoute(root, relativePath, operationTargetPath) {
|
|
20
19
|
if (process.versions.bun || relativePath === "" || relativePath.startsWith("~") ||
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type AnyAsyncDirectoryGuard } from "./directory-guard.js";
|
|
2
|
-
import type { PublishedWriteIdentity } from "./pinned-write.js";
|
|
2
|
+
import type { PublishedWriteIdentity } from "./pinned-write-types.js";
|
|
3
3
|
import { type RootContext } from "./root-context.js";
|
|
4
4
|
export declare function verifyAtomicWriteResult(params: {
|
|
5
5
|
root: RootContext;
|
|
@@ -9,4 +9,3 @@ export declare function verifyAtomicWriteResult(params: {
|
|
|
9
9
|
expectedMode?: number;
|
|
10
10
|
parentGuard: AnyAsyncDirectoryGuard;
|
|
11
11
|
}): Promise<void>;
|
|
12
|
-
//# sourceMappingURL=root-write-verification.d.ts.map
|
package/dist/root.d.ts
CHANGED
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
export { DEFAULT_ROOT_MAX_BYTES, openLocalFileSafely, readLocalFileSafely, resolveOpenedFileRealPathForHandle, root, type
|
|
2
|
-
export type
|
|
3
|
-
export type { CopyCloneMode } from "./copy-policy.js";
|
|
4
|
-
export type { RootEntriesOptions } from "./root-entries.js";
|
|
5
|
-
export type { ContainmentGuarantee } from "./containment.js";
|
|
6
|
-
export type { RootWalkDataEntry, RootWalkDataEntryKind, RootWalkDirectoryErrorBehavior, RootWalkEntry, RootWalkEntryFilter, RootWalkEntryFilterResult, RootWalkEntryKind, RootWalkLimitBehavior, RootWalkOptions, RootWalkSymlinkPolicy, } from "./root-walk.js";
|
|
7
|
-
//# sourceMappingURL=root.d.ts.map
|
|
1
|
+
export { DEFAULT_ROOT_MAX_BYTES, openLocalFileSafely, readLocalFileSafely, resolveOpenedFileRealPathForHandle, root, type Root, } from "./root-impl.js";
|
|
2
|
+
export type * from "./root-public-types.js";
|
|
@@ -7,6 +7,5 @@ export declare function assertNoDriveRelativePathSegments(value: string, label:
|
|
|
7
7
|
export declare function trimHyphenEdges(value: string): string;
|
|
8
8
|
export declare function isSafePathSegment(segment: string, options?: SafePathSegmentOptions): boolean;
|
|
9
9
|
export declare function assertSafePathSegment(segment: string, options?: SafePathSegmentOptions): string;
|
|
10
|
-
export declare function sanitizeSafePathSegment(value: string
|
|
10
|
+
export declare function sanitizeSafePathSegment(value: string): string | undefined;
|
|
11
11
|
export declare function assertSafePathPrefix(prefix: string, options?: SafePathSegmentOptions): string;
|
|
12
|
-
//# sourceMappingURL=safe-path-segment.d.ts.map
|
|
@@ -47,17 +47,14 @@ export function assertSafePathSegment(segment, options = {}) {
|
|
|
47
47
|
}
|
|
48
48
|
return segment;
|
|
49
49
|
}
|
|
50
|
-
export function sanitizeSafePathSegment(value
|
|
50
|
+
export function sanitizeSafePathSegment(value) {
|
|
51
51
|
const sanitized = value
|
|
52
52
|
.trim()
|
|
53
53
|
.replace(/[\\/]+/g, "-")
|
|
54
54
|
.replace(/\0/g, "")
|
|
55
55
|
.replace(/[^A-Za-z0-9._-]+/g, "-");
|
|
56
56
|
const trimmed = trimHyphenEdges(sanitized);
|
|
57
|
-
|
|
58
|
-
return trimmed;
|
|
59
|
-
}
|
|
60
|
-
return assertSafePathSegment(fallback, { ...options, label: "fallback path segment" });
|
|
57
|
+
return isSafePathSegment(trimmed, { allowDotPrefix: true }) ? trimmed : undefined;
|
|
61
58
|
}
|
|
62
59
|
export function assertSafePathPrefix(prefix, options = {}) {
|
|
63
60
|
// Prefixes are often derived from safe filenames. Normalize harmless
|
package/dist/secret-file.d.ts
CHANGED
|
@@ -23,4 +23,3 @@ export declare function prepareSecretFileWrite(params: Omit<SecretFileWriteParam
|
|
|
23
23
|
export declare function writeSecretFileAtomic(params: SecretFileWriteParams): Promise<void>;
|
|
24
24
|
export declare function createSecretFileAtomic(params: SecretFileWriteParams): Promise<void>;
|
|
25
25
|
export {};
|
|
26
|
-
//# sourceMappingURL=secret-file.d.ts.map
|
package/dist/secret-file.js
CHANGED
|
@@ -8,7 +8,6 @@ import { assertAsyncDirectoryGuard, createAsyncDirectoryGuard, inspectDirectoryI
|
|
|
8
8
|
import { pinNodeDirectoryForMode } from "./directory-mode-node.js";
|
|
9
9
|
import { assertOwnedDirectory } from "./directory-mode-owner.js";
|
|
10
10
|
import { FsSafeError } from "./errors.js";
|
|
11
|
-
import { resolveHomeRelativePath } from "./home-dir.js";
|
|
12
11
|
import { openPinnedFileSync } from "./pinned-open.js";
|
|
13
12
|
import { runPinnedWriteHelper } from "./pinned-write.js";
|
|
14
13
|
import { ensureTrailingSep } from "./root-context.js";
|
|
@@ -31,29 +30,19 @@ export function readSecretFileSync(filePath, label, options = {}) {
|
|
|
31
30
|
}
|
|
32
31
|
let raw;
|
|
33
32
|
try {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
if (!stat.isFile() || (rejectHardlinks && stat.nlink > 1n)) {
|
|
37
|
-
throw new FsSafeError("path-mismatch", "security validation failed");
|
|
38
|
-
}
|
|
39
|
-
return stat;
|
|
40
|
-
}, previewStat);
|
|
41
|
-
inspectFileIdentitySync(() => {
|
|
42
|
-
const stat = fs.lstatSync(opened.path, { bigint: true });
|
|
43
|
-
if (!stat.isFile() || (rejectHardlinks && stat.nlink > 1n)) {
|
|
44
|
-
throw new FsSafeError("path-mismatch", "security validation failed");
|
|
45
|
-
}
|
|
46
|
-
return stat;
|
|
47
|
-
}, openedIdentity);
|
|
33
|
+
// The pin already compared the descriptor and resolved name without yielding.
|
|
34
|
+
const openedIdentity = inspectFileIdentitySync(() => opened.identity, previewStat);
|
|
48
35
|
inspectFileIdentitySync(() => inspectInput("secret path became a symlink"), openedIdentity);
|
|
49
36
|
raw = readFileDescriptorBoundedSync(opened.fd, maxBytes).toString("utf8");
|
|
50
37
|
}
|
|
51
38
|
catch (error) {
|
|
39
|
+
try {
|
|
40
|
+
fs.closeSync(opened.fd);
|
|
41
|
+
}
|
|
42
|
+
catch { /* Preserve the read failure. */ }
|
|
52
43
|
throw secretReadError(error instanceof FsSafeError ? error.code : "read-failed", "read", label, resolvedPath, error);
|
|
53
44
|
}
|
|
54
|
-
|
|
55
|
-
fs.closeSync(opened.fd);
|
|
56
|
-
}
|
|
45
|
+
fs.closeSync(opened.fd);
|
|
57
46
|
return trimSecretFileContent(raw, label, resolvedPath);
|
|
58
47
|
}
|
|
59
48
|
export function tryReadSecretFileSync(filePath, label, options = {}) {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { type SecretFileReadOptions } from "./secret-read-policy.js";
|
|
2
2
|
export declare function readSecretFile(filePath: string, label: string, options?: SecretFileReadOptions): Promise<string>;
|
|
3
3
|
export declare function tryReadSecretFile(filePath: string | undefined, label: string, options?: SecretFileReadOptions): Promise<string | undefined>;
|
|
4
|
-
//# sourceMappingURL=secret-read-async.d.ts.map
|
|
@@ -5,11 +5,11 @@ import { assertNoUnsafeDeviceReadPath } from "./device-path.js";
|
|
|
5
5
|
import { FsSafeError } from "./errors.js";
|
|
6
6
|
import { resolveReadOpenFlags } from "./read-open-flags.js";
|
|
7
7
|
import { realpathSync } from "./realpath.js";
|
|
8
|
-
import {
|
|
8
|
+
import { inspectFileIdentitySync } from "./strict-file-identity.js";
|
|
9
9
|
import { prepareSecretRead, secretPathErrorCode, secretReadError, trimSecretFileContent, } from "./secret-read-policy.js";
|
|
10
10
|
import { assertNoWindowsPathAlias } from "./windows-path-alias.js";
|
|
11
11
|
export async function readSecretFile(filePath, label, options = {}) {
|
|
12
|
-
const { resolvedPath, maxBytes,
|
|
12
|
+
const { resolvedPath, maxBytes, rejectHardlinks, previewStat, inspectInput } = prepareSecretRead(filePath, label, options);
|
|
13
13
|
let handle;
|
|
14
14
|
let raw;
|
|
15
15
|
try {
|
|
@@ -18,20 +18,20 @@ export async function readSecretFile(filePath, label, options = {}) {
|
|
|
18
18
|
assertNoUnsafeDeviceReadPath(realPath);
|
|
19
19
|
handle = await fs.open(realPath, resolveReadOpenFlags());
|
|
20
20
|
const openedHandle = handle;
|
|
21
|
-
const openedStat =
|
|
21
|
+
const openedStat = inspectFileIdentitySync(() => {
|
|
22
22
|
const stat = fsSync.fstatSync(openedHandle.fd, { bigint: true });
|
|
23
23
|
if (!stat.isFile() || (rejectHardlinks && stat.nlink > 1n)) {
|
|
24
24
|
throw new FsSafeError("path-mismatch", "security validation failed");
|
|
25
25
|
}
|
|
26
26
|
return stat;
|
|
27
27
|
}, previewStat);
|
|
28
|
-
|
|
28
|
+
inspectFileIdentitySync(() => {
|
|
29
29
|
const stat = fsSync.lstatSync(realPath, { bigint: true });
|
|
30
30
|
if (!stat.isFile())
|
|
31
31
|
throw new FsSafeError("path-mismatch", "security validation failed");
|
|
32
32
|
return stat;
|
|
33
33
|
}, openedStat);
|
|
34
|
-
|
|
34
|
+
inspectFileIdentitySync(() => inspectInput("secret path became a symlink"), openedStat);
|
|
35
35
|
raw = (await readFileHandleBounded(handle, maxBytes)).toString("utf8");
|
|
36
36
|
}
|
|
37
37
|
catch (error) {
|
package/dist/secret.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
export { createSecretFileAtomic, PRIVATE_SECRET_DIR_MODE, PRIVATE_SECRET_FILE_MODE, readSecretFileSync, tryReadSecretFileSync, writeSecretFileAtomic, } from "./secret-file.js";
|
|
2
2
|
export { DEFAULT_SECRET_FILE_MAX_BYTES, type SecretFileReadOptions } from "./secret-read-policy.js";
|
|
3
3
|
export { readSecretFile, tryReadSecretFile } from "./secret-read-async.js";
|
|
4
|
-
//# sourceMappingURL=secret.d.ts.map
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import type { BigIntStats, Stats } from "node:fs";
|
|
2
2
|
import type { PermissionCheck } from "./permissions.js";
|
|
3
3
|
type ExactIdentity = Pick<BigIntStats, "dev" | "ino">;
|
|
4
|
-
export declare function inspectSecureWindowsDescriptor(params: {
|
|
5
|
-
fd: number;
|
|
6
|
-
identity: ExactIdentity;
|
|
7
|
-
stat: Stats;
|
|
8
|
-
}): PermissionCheck;
|
|
9
4
|
/** Both mechanisms inspect the same borrowed handle; the caller owns its lifetime. */
|
|
10
5
|
export declare function inspectSecureWindowsFile(params: {
|
|
11
6
|
fd: number;
|
|
@@ -13,4 +8,3 @@ export declare function inspectSecureWindowsFile(params: {
|
|
|
13
8
|
stat: Stats;
|
|
14
9
|
}): Promise<PermissionCheck>;
|
|
15
10
|
export {};
|
|
16
|
-
//# sourceMappingURL=secure-file-windows.d.ts.map
|
|
@@ -29,27 +29,6 @@ function parseIdentity(value) {
|
|
|
29
29
|
ino: BigInt(`0x${match[2]}`),
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
export function inspectSecureWindowsDescriptor(params) {
|
|
33
|
-
let native;
|
|
34
|
-
try {
|
|
35
|
-
native = getNativeBinding();
|
|
36
|
-
}
|
|
37
|
-
catch (cause) {
|
|
38
|
-
permissionUnverified("Windows descriptor ACL verification requires the matching native helper", cause);
|
|
39
|
-
}
|
|
40
|
-
const inspect = native?.inspectWindowsSecureFileHandle;
|
|
41
|
-
if (typeof inspect !== "function") {
|
|
42
|
-
permissionUnverified("Windows descriptor ACL verification requires an up-to-date native helper");
|
|
43
|
-
}
|
|
44
|
-
let result;
|
|
45
|
-
try {
|
|
46
|
-
result = inspect.call(native, params.fd);
|
|
47
|
-
}
|
|
48
|
-
catch (cause) {
|
|
49
|
-
permissionUnverified("Windows descriptor ACL verification failed", cause);
|
|
50
|
-
}
|
|
51
|
-
return inspectDescriptorResult(params, result, "native");
|
|
52
|
-
}
|
|
53
32
|
function inspectDescriptorResult(params, result, mechanism) {
|
|
54
33
|
if (!isRecord(result))
|
|
55
34
|
permissionUnverified("Windows descriptor ACL facts were malformed");
|
|
@@ -85,19 +64,25 @@ export async function inspectSecureWindowsFile(params) {
|
|
|
85
64
|
catch (cause) {
|
|
86
65
|
permissionUnverified("Windows descriptor ACL verification requires the matching native helper", cause);
|
|
87
66
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
if (getFsSafeNativeConfig().mode === "require") {
|
|
67
|
+
const inspect = native?.inspectWindowsSecureFileHandle;
|
|
68
|
+
const nativeAvailable = typeof inspect === "function";
|
|
69
|
+
if (!nativeAvailable && getFsSafeNativeConfig().mode === "require") {
|
|
92
70
|
permissionUnverified("Windows descriptor ACL verification requires an up-to-date native helper");
|
|
93
71
|
}
|
|
94
|
-
|
|
72
|
+
if (!nativeAvailable) {
|
|
73
|
+
warnNativeFallback("windows-secure-file", "Windows descriptor ACL inspection uses a slower built-in system command.");
|
|
74
|
+
}
|
|
95
75
|
let result;
|
|
96
76
|
try {
|
|
97
|
-
|
|
77
|
+
if (nativeAvailable) {
|
|
78
|
+
result = inspect.call(native, params.fd);
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
result = await inspectWindowsDescriptorCommand(params.fd);
|
|
82
|
+
}
|
|
98
83
|
}
|
|
99
84
|
catch (cause) {
|
|
100
85
|
permissionUnverified("Windows descriptor ACL verification failed", cause);
|
|
101
86
|
}
|
|
102
|
-
return inspectDescriptorResult(params, result, "system-command");
|
|
87
|
+
return inspectDescriptorResult(params, result, nativeAvailable ? "native" : "system-command");
|
|
103
88
|
}
|
package/dist/secure-file.d.ts
CHANGED
package/dist/secure-file.js
CHANGED
|
@@ -12,7 +12,7 @@ import { formatPermissionErrorDetail } from "./permission-exec.js";
|
|
|
12
12
|
import { resolveReadOpenFlags } from "./read-open-flags.js";
|
|
13
13
|
import { realpathSync } from "./realpath.js";
|
|
14
14
|
import { inspectPathPermissions, isGroupReadable, isGroupWritable, isWorldReadable, isWorldWritable, modeBits, } from "./permissions.js";
|
|
15
|
-
import {
|
|
15
|
+
import { inspectFileIdentitySync } from "./strict-file-identity.js";
|
|
16
16
|
import { inspectSecureWindowsFile } from "./secure-file-windows.js";
|
|
17
17
|
import { scheduleTimeout } from "./timing.js";
|
|
18
18
|
import { anchorWindowsDriveRelativePath, assertNoWindowsPathAlias, resolvePathPreservingWindowsRoot, } from "./windows-path-alias.js";
|
|
@@ -139,9 +139,9 @@ async function openSecureHandle(options, maxBytes) {
|
|
|
139
139
|
if (!openedStat.isFile()) {
|
|
140
140
|
throw new FsSafeError("not-file", `${label(options)} must be a file: ${options.filePath}`);
|
|
141
141
|
}
|
|
142
|
-
const openedIdentity =
|
|
142
|
+
const openedIdentity = inspectFileIdentitySync(() => fsSync.fstatSync(handle.fd, { bigint: true }));
|
|
143
143
|
assertNotHardlinked(options, openedIdentity);
|
|
144
|
-
|
|
144
|
+
inspectFileIdentitySync(() => {
|
|
145
145
|
const pathStat = options.trust?.allowSymlink
|
|
146
146
|
? fsSync.statSync(options.filePath, { bigint: true })
|
|
147
147
|
: fsSync.lstatSync(options.filePath, { bigint: true });
|
|
@@ -153,7 +153,7 @@ async function openSecureHandle(options, maxBytes) {
|
|
|
153
153
|
}, openedIdentity);
|
|
154
154
|
const realPath = realpathSync.native(options.filePath);
|
|
155
155
|
assertNoWindowsPathAlias(realPath, "filesystem", `${label(options)} resolved path uses a Windows filesystem namespace alias`);
|
|
156
|
-
|
|
156
|
+
inspectFileIdentitySync(() => {
|
|
157
157
|
const realPathStat = fsSync.statSync(realPath, { bigint: true });
|
|
158
158
|
assertNotHardlinked(options, realPathStat);
|
|
159
159
|
return realPathStat;
|
|
@@ -168,11 +168,11 @@ async function openSecureHandle(options, maxBytes) {
|
|
|
168
168
|
throw err;
|
|
169
169
|
}
|
|
170
170
|
}
|
|
171
|
-
|
|
171
|
+
function assertTrustedDirs(options, realPath) {
|
|
172
172
|
if (!options.trust?.trustedDirs || options.trust.trustedDirs.length === 0) {
|
|
173
173
|
return;
|
|
174
174
|
}
|
|
175
|
-
const trusted =
|
|
175
|
+
const trusted = options.trust.trustedDirs.map((dir) => {
|
|
176
176
|
let realPath;
|
|
177
177
|
try {
|
|
178
178
|
realPath = realpathSync.native(dir);
|
|
@@ -182,7 +182,7 @@ async function assertTrustedDirs(options, realPath) {
|
|
|
182
182
|
}
|
|
183
183
|
assertNoWindowsPathAlias(realPath, "filesystem", "trusted directory uses a Windows filesystem namespace alias");
|
|
184
184
|
return realPath;
|
|
185
|
-
})
|
|
185
|
+
});
|
|
186
186
|
if (!trusted.some((dir) => isPathInside(dir, realPath))) {
|
|
187
187
|
throw new FsSafeError("outside-workspace", `${label(options)} is outside trustedDirs: ${realPath}`);
|
|
188
188
|
}
|
|
@@ -281,10 +281,10 @@ export async function readSecureFile(options) {
|
|
|
281
281
|
assertNoWindowsPathAlias(options.filePath, "filesystem", `${label(options)} path uses a Windows filesystem namespace alias`);
|
|
282
282
|
const opened = await openSecureHandle(options, maxBytes);
|
|
283
283
|
try {
|
|
284
|
-
|
|
284
|
+
assertTrustedDirs(options, opened.realPath);
|
|
285
285
|
const permissions = await assertSecurePermissions(options, opened.pathStat, opened.realPath, opened.identity, opened.handle.fd);
|
|
286
286
|
const buffer = await readHandleWithTimeout(opened.handle, options.io?.timeoutMs, maxBytes);
|
|
287
|
-
const finalIdentity =
|
|
287
|
+
const finalIdentity = inspectFileIdentitySync(() => fsSync.fstatSync(opened.handle.fd, { bigint: true }), opened.identity);
|
|
288
288
|
if (!finalIdentity.isFile()) {
|
|
289
289
|
throw new FsSafeError("not-file", `${label(options)} must remain a file: ${options.filePath}`);
|
|
290
290
|
}
|
|
@@ -32,4 +32,3 @@ export declare function secureTempDirectoryReceipt(stat: ExactDirectoryStat, uid
|
|
|
32
32
|
/** No pathname chmod, search-only descriptors, procfs, or reopening fallback. */
|
|
33
33
|
export declare function repairSecureTempDirectory(candidate: string, expected: SecureTempDirectoryReceipt, uid: number, adapter: SecureTempRepairAdapter, access: () => void, repaired: () => void, finalize?: boolean): void;
|
|
34
34
|
export {};
|
|
35
|
-
//# sourceMappingURL=secure-temp-repair.d.ts.map
|
|
@@ -14,9 +14,13 @@ export function captureSecureTempRepairAdapter(supplied, hasLegacyFsHooks) {
|
|
|
14
14
|
}
|
|
15
15
|
return { lstatSync, fstatSync, openSync, fchmodSync, closeSync, flags: O_RDONLY | O_DIRECTORY | O_NOFOLLOW | O_NONBLOCK };
|
|
16
16
|
}
|
|
17
|
+
// Node exposes stat identity through BigInt64Array; a high OS bit can be negative.
|
|
18
|
+
// Preserve raw values and existing positive adapter receipts, never normalize them.
|
|
19
|
+
const MIN_NODE_STAT_IDENTITY = -(1n << 63n);
|
|
17
20
|
export function secureTempDirectoryReceipt(stat, uid) {
|
|
18
21
|
const { dev, ino, uid: owner, mode } = stat;
|
|
19
|
-
if (typeof dev !== "bigint" || dev <
|
|
22
|
+
if (typeof dev !== "bigint" || dev < MIN_NODE_STAT_IDENTITY ||
|
|
23
|
+
typeof ino !== "bigint" || ino < MIN_NODE_STAT_IDENTITY || ino === 0n ||
|
|
20
24
|
typeof owner !== "bigint" || owner !== BigInt(uid) || typeof mode !== "bigint" ||
|
|
21
25
|
mode < 0n || mode > 0xffffffffn || (mode & 61440n) !== 16384n ||
|
|
22
26
|
stat.isDirectory() !== true || stat.isSymbolicLink() !== false) {
|