@openclaw/fs-safe 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +2 -2
  3. package/dist/advanced.d.ts +2 -2
  4. package/dist/advanced.d.ts.map +1 -1
  5. package/dist/advanced.js +2 -2
  6. package/dist/archive-entry.d.ts.map +1 -1
  7. package/dist/archive-entry.js +5 -0
  8. package/dist/archive-gzip-tail.d.ts +18 -0
  9. package/dist/archive-gzip-tail.d.ts.map +1 -0
  10. package/dist/archive-gzip-tail.js +74 -0
  11. package/dist/archive-kind.d.ts +1 -0
  12. package/dist/archive-kind.d.ts.map +1 -1
  13. package/dist/archive-kind.js +6 -0
  14. package/dist/archive-limits.d.ts +0 -1
  15. package/dist/archive-limits.d.ts.map +1 -1
  16. package/dist/archive-limits.js +0 -3
  17. package/dist/archive-native.d.ts.map +1 -1
  18. package/dist/archive-native.js +5 -8
  19. package/dist/archive-parser-errors.d.ts +2 -0
  20. package/dist/archive-parser-errors.d.ts.map +1 -0
  21. package/dist/archive-parser-errors.js +12 -0
  22. package/dist/archive-parser.wasm +0 -0
  23. package/dist/archive-read.d.ts.map +1 -1
  24. package/dist/archive-read.js +25 -73
  25. package/dist/archive-tar-stream.d.ts +18 -0
  26. package/dist/archive-tar-stream.d.ts.map +1 -0
  27. package/dist/archive-tar-stream.js +95 -0
  28. package/dist/archive-tar-wasm.d.ts +18 -0
  29. package/dist/archive-tar-wasm.d.ts.map +1 -0
  30. package/dist/archive-tar-wasm.js +99 -0
  31. package/dist/archive-tar.d.ts +0 -1
  32. package/dist/archive-tar.d.ts.map +1 -1
  33. package/dist/archive-tar.js +0 -22
  34. package/dist/archive.d.ts.map +1 -1
  35. package/dist/archive.js +44 -114
  36. package/dist/atomic.d.ts +1 -1
  37. package/dist/atomic.d.ts.map +1 -1
  38. package/dist/atomic.js +1 -1
  39. package/dist/bounded-read-stream.d.ts +1 -5
  40. package/dist/bounded-read-stream.d.ts.map +1 -1
  41. package/dist/bounded-read-stream.js +5 -13
  42. package/dist/byte-budget.d.ts +0 -1
  43. package/dist/byte-budget.d.ts.map +1 -1
  44. package/dist/byte-budget.js +1 -1
  45. package/dist/device-path.d.ts +1 -0
  46. package/dist/device-path.d.ts.map +1 -1
  47. package/dist/device-path.js +5 -2
  48. package/dist/directory-mode-owner.d.ts.map +1 -1
  49. package/dist/directory-mode-owner.js +5 -0
  50. package/dist/error-detail.d.ts +1 -0
  51. package/dist/error-detail.d.ts.map +1 -1
  52. package/dist/error-detail.js +6 -0
  53. package/dist/file-store-boundary.d.ts +1 -1
  54. package/dist/file-store-boundary.d.ts.map +1 -1
  55. package/dist/file-store-boundary.js +2 -13
  56. package/dist/file-store.js +1 -1
  57. package/dist/file-sync.d.ts +5 -0
  58. package/dist/file-sync.d.ts.map +1 -0
  59. package/dist/file-sync.js +19 -0
  60. package/dist/guarded-mutation.d.ts +3 -0
  61. package/dist/guarded-mutation.d.ts.map +1 -1
  62. package/dist/guarded-mutation.js +5 -1
  63. package/dist/home-dir.d.ts +0 -10
  64. package/dist/home-dir.d.ts.map +1 -1
  65. package/dist/home-dir.js +0 -28
  66. package/dist/json-durable-queue-ownership.d.ts +1 -0
  67. package/dist/json-durable-queue-ownership.d.ts.map +1 -1
  68. package/dist/json-durable-queue-ownership.js +139 -18
  69. package/dist/json-durable-queue.d.ts.map +1 -1
  70. package/dist/json-durable-queue.js +5 -10
  71. package/dist/json-store.d.ts.map +1 -1
  72. package/dist/json-store.js +1 -1
  73. package/dist/local-roots.d.ts.map +1 -1
  74. package/dist/local-roots.js +2 -3
  75. package/dist/move-path-cleanup.d.ts +1 -1
  76. package/dist/move-path-cleanup.d.ts.map +1 -1
  77. package/dist/move-path-cleanup.js +4 -2
  78. package/dist/move-path.d.ts +9 -0
  79. package/dist/move-path.d.ts.map +1 -1
  80. package/dist/move-path.js +53 -16
  81. package/dist/native-operations.d.ts +0 -1
  82. package/dist/native-operations.d.ts.map +1 -1
  83. package/dist/native-operations.js +0 -10
  84. package/dist/native-pinned-write-windows.d.ts.map +1 -1
  85. package/dist/native-pinned-write-windows.js +5 -4
  86. package/dist/native-staged-file.d.ts +8 -1
  87. package/dist/native-staged-file.d.ts.map +1 -1
  88. package/dist/native-staged-file.js +30 -9
  89. package/dist/opened-realpath.d.ts +12 -1
  90. package/dist/opened-realpath.d.ts.map +1 -1
  91. package/dist/opened-realpath.js +8 -7
  92. package/dist/output.d.ts.map +1 -1
  93. package/dist/output.js +26 -2
  94. package/dist/path-policy.js +1 -1
  95. package/dist/permissions.d.ts +1 -0
  96. package/dist/permissions.d.ts.map +1 -1
  97. package/dist/permissions.js +3 -0
  98. package/dist/pinned-write.d.ts +1 -2
  99. package/dist/pinned-write.d.ts.map +1 -1
  100. package/dist/pinned-write.js +2 -11
  101. package/dist/private-temp-workspace.js +1 -1
  102. package/dist/publish-file.js +2 -2
  103. package/dist/replace-file-copy-source.d.ts.map +1 -1
  104. package/dist/replace-file-copy-source.js +2 -7
  105. package/dist/replace-file-descriptor.d.ts.map +1 -1
  106. package/dist/replace-file-descriptor.js +5 -17
  107. package/dist/replace-file-temp-owner.d.ts.map +1 -1
  108. package/dist/replace-file-temp-owner.js +2 -7
  109. package/dist/replace-file.d.ts.map +1 -1
  110. package/dist/replace-file.js +21 -8
  111. package/dist/root-errors.d.ts +1 -0
  112. package/dist/root-errors.d.ts.map +1 -1
  113. package/dist/root-errors.js +9 -0
  114. package/dist/root-file.d.ts.map +1 -1
  115. package/dist/root-file.js +17 -28
  116. package/dist/root-impl.d.ts.map +1 -1
  117. package/dist/root-impl.js +12 -33
  118. package/dist/root-path.d.ts.map +1 -1
  119. package/dist/root-path.js +49 -94
  120. package/dist/root-write-mode.d.ts +6 -0
  121. package/dist/root-write-mode.d.ts.map +1 -0
  122. package/dist/root-write-mode.js +60 -0
  123. package/dist/root-write-verification.js +2 -2
  124. package/dist/safe-path-segment.d.ts +1 -0
  125. package/dist/safe-path-segment.d.ts.map +1 -1
  126. package/dist/safe-path-segment.js +1 -1
  127. package/dist/secret-file.d.ts.map +1 -1
  128. package/dist/secret-file.js +4 -9
  129. package/dist/secret-read-async.d.ts.map +1 -1
  130. package/dist/secret-read-async.js +5 -10
  131. package/dist/secret-read-policy.d.ts +4 -0
  132. package/dist/secret-read-policy.d.ts.map +1 -1
  133. package/dist/secret-read-policy.js +12 -0
  134. package/dist/sibling-staged-file.d.ts.map +1 -1
  135. package/dist/sibling-staged-file.js +2 -7
  136. package/dist/sidecar-lock-policy.d.ts +0 -1
  137. package/dist/sidecar-lock-policy.d.ts.map +1 -1
  138. package/dist/sidecar-lock-policy.js +0 -4
  139. package/dist/string-coerce.d.ts +0 -9
  140. package/dist/string-coerce.d.ts.map +1 -1
  141. package/dist/string-coerce.js +0 -56
  142. package/dist/temp-target.d.ts.map +1 -1
  143. package/dist/temp-target.js +1 -12
  144. package/docs/archive.md +66 -61
  145. package/docs/atomic.md +53 -19
  146. package/docs/contributing.md +35 -1
  147. package/docs/install.md +1 -1
  148. package/docs/native-helper.md +5 -0
  149. package/docs/native.md +16 -10
  150. package/docs/secret-file.md +5 -0
  151. package/docs/staged-file.md +6 -2
  152. package/docs/writing.md +5 -0
  153. package/package.json +19 -16
  154. package/dist/archive-tar-admission.d.ts +0 -7
  155. package/dist/archive-tar-admission.d.ts.map +0 -1
  156. package/dist/archive-tar-admission.js +0 -43
  157. package/dist/archive-tar-gnu.d.ts +0 -2
  158. package/dist/archive-tar-gnu.d.ts.map +0 -1
  159. package/dist/archive-tar-gnu.js +0 -20
  160. package/dist/archive-tar-header.d.ts +0 -8
  161. package/dist/archive-tar-header.d.ts.map +0 -1
  162. package/dist/archive-tar-header.js +0 -47
  163. package/dist/archive-tar-meta.d.ts +0 -34
  164. package/dist/archive-tar-meta.d.ts.map +0 -1
  165. package/dist/archive-tar-meta.js +0 -277
  166. package/dist/archive-tar-pax.d.ts +0 -8
  167. package/dist/archive-tar-pax.d.ts.map +0 -1
  168. package/dist/archive-tar-pax.js +0 -100
  169. package/dist/archive-tar-runtime.d.ts +0 -49
  170. package/dist/archive-tar-runtime.d.ts.map +0 -1
  171. package/dist/archive-tar-runtime.js +0 -22
  172. package/dist/fsync.d.ts +0 -2
  173. package/dist/fsync.d.ts.map +0 -1
  174. package/dist/fsync.js +0 -1
  175. package/dist/json-durable-queue-retirement.d.ts +0 -9
  176. package/dist/json-durable-queue-retirement.d.ts.map +0 -1
  177. package/dist/json-durable-queue-retirement.js +0 -126
  178. package/dist/json-durable-queue-transfer-lock.d.ts +0 -2
  179. package/dist/json-durable-queue-transfer-lock.d.ts.map +0 -1
  180. package/dist/json-durable-queue-transfer-lock.js +0 -19
  181. package/dist/mode.d.ts +0 -2
  182. package/dist/mode.d.ts.map +0 -1
  183. package/dist/mode.js +0 -3
  184. package/dist/output-sibling.d.ts +0 -8
  185. package/dist/output-sibling.d.ts.map +0 -1
  186. package/dist/output-sibling.js +0 -30
  187. package/dist/read-error.d.ts +0 -2
  188. package/dist/read-error.d.ts.map +0 -1
  189. package/dist/read-error.js +0 -11
  190. package/dist/short-path.d.ts +0 -2
  191. package/dist/short-path.d.ts.map +0 -1
  192. package/dist/short-path.js +0 -7
  193. package/dist/staged-file.d.ts +0 -10
  194. package/dist/staged-file.d.ts.map +0 -1
  195. package/dist/staged-file.js +0 -15
@@ -1 +0,0 @@
1
- {"version":3,"file":"output-sibling.d.ts","sourceRoot":"","sources":["../src/output-sibling.ts"],"names":[],"mappings":"AAuBA,wBAAsB,2BAA2B,CAAC,CAAC,EAAE,MAAM,EAAE;IAC3D,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IACxC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,CAAC,CAAC,CAYb"}
@@ -1,30 +0,0 @@
1
- import { randomUUID } from "node:crypto";
2
- import path from "node:path";
3
- import { fitFileNameToPortableComponent, sanitizeUntrustedFileName } from "./filename.js";
4
- import { writeCallbackSibling } from "./sibling-staged-file.js";
5
- function safeFallbackFileName(fallbackFileName) {
6
- return sanitizeUntrustedFileName(fallbackFileName ?? "output.bin", "output.bin");
7
- }
8
- function buildSiblingTempPath(targetPath, fallbackFileName) {
9
- const prefix = `.fs-safe-output-${process.pid}-${randomUUID()}-`;
10
- const suffix = ".part";
11
- const safeTail = fitFileNameToPortableComponent({
12
- prefix,
13
- fileName: sanitizeUntrustedFileName(path.basename(targetPath), safeFallbackFileName(fallbackFileName)),
14
- suffix,
15
- });
16
- return path.join(path.dirname(targetPath), `${prefix}${safeTail}${suffix}`);
17
- }
18
- export async function writeExternalFileViaSibling(params) {
19
- const finalPath = path.resolve(params.finalPath);
20
- const { result } = await writeCallbackSibling({
21
- tempPath: buildSiblingTempPath(finalPath, params.fallbackFileName),
22
- write: params.write,
23
- resolveFinalPath: () => finalPath,
24
- mode: params.mode,
25
- maxBytes: params.maxBytes,
26
- syncTempFile: true,
27
- syncParentDir: true,
28
- });
29
- return result;
30
- }
@@ -1,2 +0,0 @@
1
- export declare function throwFsSafeReadError(error: unknown, label: string): never;
2
- //# sourceMappingURL=read-error.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"read-error.d.ts","sourceRoot":"","sources":["../src/read-error.ts"],"names":[],"mappings":"AAGA,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,CAQzE"}
@@ -1,11 +0,0 @@
1
- import { FsSafeError } from "./errors.js";
2
- import { isNodeError } from "./path.js";
3
- export function throwFsSafeReadError(error, label) {
4
- if (error instanceof FsSafeError) {
5
- throw error;
6
- }
7
- if (isNodeError(error)) {
8
- throw new FsSafeError("read-failed", `${label} target could not be read`, { cause: error });
9
- }
10
- throw error;
11
- }
@@ -1,2 +0,0 @@
1
- export declare function shortPath(value: string): string;
2
- //# sourceMappingURL=short-path.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"short-path.d.ts","sourceRoot":"","sources":["../src/short-path.ts"],"names":[],"mappings":"AAGA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAI/C"}
@@ -1,7 +0,0 @@
1
- import os from "node:os";
2
- import { formatErrorDetail } from "./error-detail.js";
3
- export function shortPath(value) {
4
- const home = os.homedir();
5
- const shortened = value.startsWith(home) ? `~${value.slice(home.length)}` : value;
6
- return formatErrorDetail(shortened);
7
- }
@@ -1,10 +0,0 @@
1
- import type { DirectoryReceipt } from "./directory-durability.js";
2
- import type { StagedFile } from "./staged-file-types.js";
3
- export type { PublishedFileReceipt, StagedFile, StagedFileCleanupReceipt, StagedFileFailureDetails, StagedFilePublication, StagedFileReceipt, } from "./staged-file-types.js";
4
- export declare function stageFileInDirectory(options: {
5
- directory: string | DirectoryReceipt;
6
- content: string | Uint8Array;
7
- /** Published mode; the unpublished stage stays at 0600. Defaults to 0600. */
8
- mode?: number;
9
- }): Promise<StagedFile>;
10
- //# sourceMappingURL=staged-file.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"staged-file.d.ts","sourceRoot":"","sources":["../src/staged-file.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAKlE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,YAAY,EACV,oBAAoB,EAAE,UAAU,EAAE,wBAAwB,EAAE,wBAAwB,EACpF,qBAAqB,EAAE,iBAAiB,GACzC,MAAM,wBAAwB,CAAC;AAEhC,wBAAsB,oBAAoB,CAAC,OAAO,EAAE;IAClD,SAAS,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACrC,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,6EAA6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,UAAU,CAAC,CAUtB"}
@@ -1,15 +0,0 @@
1
- import { FsSafeError } from "./errors.js";
2
- import { assertNativeStaging, createNativeStage } from "./native-staged-file.js";
3
- import { requireNativeBinding } from "./native.js";
4
- import { openStagedDirectory } from "./staged-directory.js";
5
- export async function stageFileInDirectory(options) {
6
- if (process.platform !== "linux" && process.platform !== "darwin") {
7
- throw new FsSafeError("unsupported-platform", "retained-directory staging requires Linux or macOS");
8
- }
9
- const binding = requireNativeBinding();
10
- assertNativeStaging(binding);
11
- const input = { kind: "buffer", data: Buffer.from(options.content) };
12
- const mode = options.mode ?? 0o600;
13
- const parent = openStagedDirectory(options.directory);
14
- return await createNativeStage(binding, parent.fd, parent.receipt, input, mode);
15
- }