@poe-platform/safe-js 0.1.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/LICENSE +21 -0
- package/README.md +206 -0
- package/dist/agent-defs/agents/claude-code.d.ts +2 -0
- package/dist/agent-defs/agents/claude-desktop.d.ts +2 -0
- package/dist/agent-defs/agents/codex.d.ts +2 -0
- package/dist/agent-defs/agents/cursor.d.ts +2 -0
- package/dist/agent-defs/agents/gemini-cli.d.ts +2 -0
- package/dist/agent-defs/agents/goose.d.ts +2 -0
- package/dist/agent-defs/agents/index.d.ts +10 -0
- package/dist/agent-defs/agents/kimi.d.ts +2 -0
- package/dist/agent-defs/agents/opencode.d.ts +2 -0
- package/dist/agent-defs/agents/pi.d.ts +2 -0
- package/dist/agent-defs/agents/poe-agent.d.ts +2 -0
- package/dist/agent-defs/capabilities.d.ts +14 -0
- package/dist/agent-defs/index.d.ts +6 -0
- package/dist/agent-defs/registry.d.ts +3 -0
- package/dist/agent-defs/specifier.d.ts +7 -0
- package/dist/agent-defs/types.d.ts +35 -0
- package/dist/agent-harness-tools/binary-exists.d.ts +10 -0
- package/dist/agent-harness-tools/execution-env.d.ts +108 -0
- package/dist/agent-harness-tools/hooks.d.ts +30 -0
- package/dist/agent-harness-tools/index.d.ts +18 -0
- package/dist/agent-harness-tools/log-stream.d.ts +28 -0
- package/dist/agent-harness-tools/participant.d.ts +10 -0
- package/dist/agent-harness-tools/paths.d.ts +14 -0
- package/dist/agent-harness-tools/plan-readiness.d.ts +7 -0
- package/dist/agent-harness-tools/plans.d.ts +35 -0
- package/dist/agent-harness-tools/poe-command-execution.d.ts +37 -0
- package/dist/agent-harness-tools/run-logs.d.ts +17 -0
- package/dist/agent-harness-tools/run-poe-command.d.ts +33 -0
- package/dist/agent-harness-tools/runner.d.ts +33 -0
- package/dist/agent-harness-tools/select-agent.d.ts +18 -0
- package/dist/agent-harness-tools/sequence.d.ts +7 -0
- package/dist/agent-harness-tools/skill-config.d.ts +1 -0
- package/dist/agent-harness-tools/stage.d.ts +22 -0
- package/dist/agent-harness-tools/workspace-transfer.d.ts +3 -0
- package/dist/agent-spawn/acp/middleware.d.ts +38 -0
- package/dist/agent-spawn/acp/types.d.ts +180 -0
- package/dist/agent-spawn/adapters/claude.d.ts +3 -0
- package/dist/agent-spawn/adapters/codex.d.ts +2 -0
- package/dist/agent-spawn/adapters/cursor.d.ts +2 -0
- package/dist/agent-spawn/adapters/index.d.ts +12 -0
- package/dist/agent-spawn/adapters/kimi.d.ts +2 -0
- package/dist/agent-spawn/adapters/native.d.ts +5 -0
- package/dist/agent-spawn/adapters/opencode.d.ts +2 -0
- package/dist/agent-spawn/adapters/pi.d.ts +2 -0
- package/dist/agent-spawn/environment.d.ts +2 -0
- package/dist/agent-spawn/parallel.d.ts +30 -0
- package/dist/agent-spawn/retry.d.ts +26 -0
- package/dist/agent-spawn/types.d.ts +272 -0
- package/dist/auth-store/create-secret-store.d.ts +2 -0
- package/dist/auth-store/encrypted-file-store.d.ts +47 -0
- package/dist/auth-store/index.d.ts +7 -0
- package/dist/auth-store/keychain-store.d.ts +25 -0
- package/dist/auth-store/provider-store.d.ts +14 -0
- package/dist/auth-store/types.d.ts +22 -0
- package/dist/config-mutations/execution/run-mutations.d.ts +7 -0
- package/dist/config-mutations/fs-utils.d.ts +18 -0
- package/dist/config-mutations/index.d.ts +8 -0
- package/dist/config-mutations/mutations/config-mutation.d.ts +47 -0
- package/dist/config-mutations/mutations/file-mutation.d.ts +62 -0
- package/dist/config-mutations/mutations/template-mutation.d.ts +40 -0
- package/dist/config-mutations/template/render.d.ts +6 -0
- package/dist/config-mutations/types.d.ts +168 -0
- package/dist/poe-code-config/compile/schema-compiler.d.ts +11 -0
- package/dist/poe-code-config/config.d.ts +2 -0
- package/dist/poe-code-config/configured-services.d.ts +29 -0
- package/dist/poe-code-config/index.d.ts +16 -0
- package/dist/poe-code-config/inspect.d.ts +13 -0
- package/dist/poe-code-config/memory.d.ts +14 -0
- package/dist/poe-code-config/merge-callbacks.d.ts +38 -0
- package/dist/poe-code-config/merge.d.ts +2 -0
- package/dist/poe-code-config/plan-scope.d.ts +8 -0
- package/dist/poe-code-config/provider-config.d.ts +16 -0
- package/dist/poe-code-config/resolve.d.ts +2 -0
- package/dist/poe-code-config/runtime.d.ts +114 -0
- package/dist/poe-code-config/schema.d.ts +14 -0
- package/dist/poe-code-config/state/fs.d.ts +24 -0
- package/dist/poe-code-config/state/index.d.ts +12 -0
- package/dist/poe-code-config/state/jobs.d.ts +34 -0
- package/dist/poe-code-config/state/templates.d.ts +18 -0
- package/dist/poe-code-config/store.d.ts +12 -0
- package/dist/poe-code-config/types.d.ts +88 -0
- package/dist/process-runner/docker/build-context.d.ts +5 -0
- package/dist/process-runner/docker/context.d.ts +3 -0
- package/dist/process-runner/docker/docker-execution-env.d.ts +28 -0
- package/dist/process-runner/docker/docker-runner.d.ts +2 -0
- package/dist/process-runner/docker/engine.d.ts +3 -0
- package/dist/process-runner/host/host-execution-env.d.ts +2 -0
- package/dist/process-runner/host/host-runner.d.ts +3 -0
- package/dist/process-runner/index.d.ts +10 -0
- package/dist/process-runner/testing/index.d.ts +2 -0
- package/dist/process-runner/testing/mock-runner.d.ts +3 -0
- package/dist/process-runner/types.d.ts +191 -0
- package/dist/process-runner/workspace-transfer.d.ts +61 -0
- package/dist/providers/auth/api-key.d.ts +5 -0
- package/dist/providers/auth/types.d.ts +14 -0
- package/dist/providers/compatibility.d.ts +4 -0
- package/dist/providers/index.d.ts +8 -0
- package/dist/providers/providers/anthropic.d.ts +1 -0
- package/dist/providers/providers/cloudflare.d.ts +1 -0
- package/dist/providers/providers/generated.d.ts +5 -0
- package/dist/providers/providers/openai.d.ts +1 -0
- package/dist/providers/providers/poe.d.ts +2 -0
- package/dist/providers/registry.d.ts +44 -0
- package/dist/providers/types.d.ts +54 -0
- package/dist/safe-fs/bridge/filesystem.d.ts +88 -0
- package/dist/safe-fs/bridge/index.d.ts +6 -0
- package/dist/safe-fs/bridge/types.d.ts +75 -0
- package/dist/safe-fs/config.d.ts +15 -0
- package/dist/safe-fs/config.node.d.ts +2 -0
- package/dist/safe-fs/contracts/errors.d.ts +50 -0
- package/dist/safe-fs/contracts/filesystem.d.ts +96 -0
- package/dist/safe-fs/contracts/index.d.ts +4 -0
- package/dist/safe-fs/contracts/io.d.ts +8 -0
- package/dist/safe-fs/contracts/path.d.ts +8 -0
- package/dist/safe-fs/contracts/portable-path.d.ts +13 -0
- package/dist/safe-fs/contracts/virtual-path.d.ts +7 -0
- package/dist/safe-fs/core.d.ts +12 -0
- package/dist/safe-fs/fs/memory/index.d.ts +58 -0
- package/dist/safe-fs/fs/mount/comparison.d.ts +19 -0
- package/dist/safe-fs/fs/mount/index.d.ts +44 -0
- package/dist/safe-fs/fs/overlay/index.d.ts +73 -0
- package/dist/safe-fs/fs/readonly/index.d.ts +31 -0
- package/dist/safe-fs/fs/real/index.d.ts +76 -0
- package/dist/safe-fs/fs/s3/filesystem.d.ts +93 -0
- package/dist/safe-fs/fs/s3/http/index.d.ts +2 -0
- package/dist/safe-fs/fs/s3/http/transport.d.ts +3 -0
- package/dist/safe-fs/fs/s3/http/types.d.ts +30 -0
- package/dist/safe-fs/fs/s3/index.d.ts +6 -0
- package/dist/safe-fs/fs/s3/mock.d.ts +48 -0
- package/dist/safe-fs/fs/s3/transport.d.ts +103 -0
- package/dist/safe-fs/fs/webdav/index.d.ts +2 -0
- package/dist/safe-fs/fs/webdav/webdav.d.ts +101 -0
- package/dist/safe-fs/index.d.ts +14 -0
- package/dist/safe-fs/node/filesystem.d.ts +11 -0
- package/dist/safe-fs/node/index.d.ts +2 -0
- package/dist/safe-fs/node-host.d.ts +1 -0
- package/dist/safe-fs/node-unavailable.d.ts +1 -0
- package/dist/safe-fs/platform/browser.d.ts +12 -0
- package/dist/safe-fs/platform/node.d.ts +13 -0
- package/dist/safe-js/browser/chunks/chunk-QGN6DKT5.js +4335 -0
- package/dist/safe-js/browser/chunks/chunk-QGN6DKT5.js.map +7 -0
- package/dist/safe-js/browser/safe-fs-core.js +67 -0
- package/dist/safe-js/browser/safe-fs-core.js.map +7 -0
- package/dist/safe-js/browser/safe-fs.js +67 -0
- package/dist/safe-js/browser/safe-fs.js.map +7 -0
- package/dist/safe-js/chunks/chunk-2QRYPKQQ.js +4315 -0
- package/dist/safe-js/chunks/chunk-2QRYPKQQ.js.map +7 -0
- package/dist/safe-js/chunks/chunk-4YIDX44G.js +40 -0
- package/dist/safe-js/chunks/chunk-4YIDX44G.js.map +7 -0
- package/dist/safe-js/chunks/chunk-7M2SJPSZ.js +2613 -0
- package/dist/safe-js/chunks/chunk-7M2SJPSZ.js.map +7 -0
- package/dist/safe-js/chunks/chunk-DC5B3GYM.js +8248 -0
- package/dist/safe-js/chunks/chunk-DC5B3GYM.js.map +7 -0
- package/dist/safe-js/chunks/chunk-Z3D76J4U.js +30732 -0
- package/dist/safe-js/chunks/chunk-Z3D76J4U.js.map +7 -0
- package/dist/safe-js/cli.d.ts +36 -0
- package/dist/safe-js/cli.js +724 -0
- package/dist/safe-js/cli.js.map +7 -0
- package/dist/safe-js/core.d.ts +6 -0
- package/dist/safe-js/core.js +14 -0
- package/dist/safe-js/core.js.map +7 -0
- package/dist/safe-js/dump.d.ts +2 -0
- package/dist/safe-js/error/format.d.ts +15 -0
- package/dist/safe-js/error/shape.d.ts +28 -0
- package/dist/safe-js/index.d.ts +56 -0
- package/dist/safe-js/index.js +454 -0
- package/dist/safe-js/index.js.map +7 -0
- package/dist/safe-js/interp/arguments.d.ts +10 -0
- package/dist/safe-js/interp/async.d.ts +56 -0
- package/dist/safe-js/interp/budget.d.ts +95 -0
- package/dist/safe-js/interp/exceptions.d.ts +45 -0
- package/dist/safe-js/interp/generator.d.ts +16 -0
- package/dist/safe-js/interp/globals/console-json.d.ts +14 -0
- package/dist/safe-js/interp/host-bridge.d.ts +29 -0
- package/dist/safe-js/interp/host-call.d.ts +130 -0
- package/dist/safe-js/interp/interpreter.d.ts +63 -0
- package/dist/safe-js/interp/promise-replay.d.ts +70 -0
- package/dist/safe-js/interp/regex/compile-guard.d.ts +33 -0
- package/dist/safe-js/interp/regex/parse.d.ts +62 -0
- package/dist/safe-js/interp/scope.d.ts +43 -0
- package/dist/safe-js/interp/values.d.ts +136 -0
- package/dist/safe-js/lint/index.d.ts +38 -0
- package/dist/safe-js/lint/rules/AS-export-import-meta.d.ts +21 -0
- package/dist/safe-js/lint/rules/module-registry.d.ts +33 -0
- package/dist/safe-js/lint.d.ts +1 -0
- package/dist/safe-js/loader/extract-block.d.ts +10 -0
- package/dist/safe-js/loader/find-exported.d.ts +2 -0
- package/dist/safe-js/loader/frontmatter.d.ts +5 -0
- package/dist/safe-js/migrate.d.ts +33 -0
- package/dist/safe-js/migration-file.d.ts +55 -0
- package/dist/safe-js/modules/agent.d.ts +132 -0
- package/dist/safe-js/modules/env.d.ts +14 -0
- package/dist/safe-js/modules/fail.d.ts +6 -0
- package/dist/safe-js/modules/fs-config.d.ts +12 -0
- package/dist/safe-js/modules/fs.d.ts +82 -0
- package/dist/safe-js/modules/harness.d.ts +19 -0
- package/dist/safe-js/modules/log.d.ts +16 -0
- package/dist/safe-js/modules/mcp-transport.d.ts +26 -0
- package/dist/safe-js/modules/mcp.d.ts +63 -0
- package/dist/safe-js/modules/metric.d.ts +4 -0
- package/dist/safe-js/modules/registry.d.ts +16 -0
- package/dist/safe-js/modules/time.d.ts +12 -0
- package/dist/safe-js/observability/otel.d.ts +21 -0
- package/dist/safe-js/output-stream.d.ts +12 -0
- package/dist/safe-js/parse/parse-export.d.ts +36 -0
- package/dist/safe-js/parse/parser.d.ts +356 -0
- package/dist/safe-js/parse/tokenizer.d.ts +26 -0
- package/dist/safe-js/parse.d.ts +4 -0
- package/dist/safe-js/random.d.ts +9 -0
- package/dist/safe-js/restore.d.ts +26 -0
- package/dist/safe-js/run.d.ts +74 -0
- package/dist/safe-js/runner/run-harness.d.ts +32 -0
- package/dist/safe-js/safe-fs-core.js +130 -0
- package/dist/safe-js/safe-fs-core.js.map +7 -0
- package/dist/safe-js/safe-fs-node.js +94 -0
- package/dist/safe-js/safe-fs-node.js.map +7 -0
- package/dist/safe-js/safe-fs.js +94 -0
- package/dist/safe-js/safe-fs.js.map +7 -0
- package/dist/safe-js/snapshot/arguments.d.ts +17 -0
- package/dist/safe-js/snapshot/backend.d.ts +19 -0
- package/dist/safe-js/snapshot/dump-format.d.ts +7 -0
- package/dist/safe-js/snapshot/dump.d.ts +23 -0
- package/dist/safe-js/snapshot/float32array.d.ts +12 -0
- package/dist/safe-js/snapshot/migration.d.ts +35 -0
- package/dist/safe-js/snapshot/policy.d.ts +49 -0
- package/dist/safe-js/snapshot/replay-data.d.ts +71 -0
- package/dist/safe-js/snapshot/validation.d.ts +15 -0
- package/dist/task-list/backends/gh-issues-client.d.ts +19 -0
- package/dist/task-list/backends/gh-issues-sync.d.ts +46 -0
- package/dist/task-list/backends/gh-issues.d.ts +21 -0
- package/dist/task-list/index.d.ts +9 -0
- package/dist/task-list/move.d.ts +2 -0
- package/dist/task-list/open.d.ts +5 -0
- package/dist/task-list/state-machine.d.ts +16 -0
- package/dist/task-list/state.d.ts +29 -0
- package/dist/task-list/types.d.ts +206 -0
- package/dist/tiny-mcp-client/index.d.ts +662 -0
- package/dist/tiny-stdio-mcp-server/content/audio.d.ts +15 -0
- package/dist/tiny-stdio-mcp-server/content/convert.d.ts +16 -0
- package/dist/tiny-stdio-mcp-server/content/file-type.d.ts +11 -0
- package/dist/tiny-stdio-mcp-server/content/file.d.ts +28 -0
- package/dist/tiny-stdio-mcp-server/content/image.d.ts +15 -0
- package/dist/tiny-stdio-mcp-server/content/index.d.ts +7 -0
- package/dist/tiny-stdio-mcp-server/content/mime.d.ts +7 -0
- package/dist/tiny-stdio-mcp-server/content/remote.d.ts +5 -0
- package/dist/tiny-stdio-mcp-server/index.d.ts +9 -0
- package/dist/tiny-stdio-mcp-server/schema.d.ts +20 -0
- package/dist/tiny-stdio-mcp-server/server.d.ts +35 -0
- package/dist/tiny-stdio-mcp-server/types.d.ts +247 -0
- package/dist/toolcraft-design/acp/components.d.ts +19 -0
- package/dist/toolcraft-design/acp/index.d.ts +4 -0
- package/dist/toolcraft-design/acp/writer.d.ts +13 -0
- package/dist/toolcraft-design/components/browser.d.ts +15 -0
- package/dist/toolcraft-design/components/catalog.d.ts +26 -0
- package/dist/toolcraft-design/components/color.d.ts +31 -0
- package/dist/toolcraft-design/components/command-errors.d.ts +18 -0
- package/dist/toolcraft-design/components/detail-card.d.ts +22 -0
- package/dist/toolcraft-design/components/file-changes.d.ts +16 -0
- package/dist/toolcraft-design/components/help-formatter-plain.d.ts +5 -0
- package/dist/toolcraft-design/components/help-formatter.d.ts +50 -0
- package/dist/toolcraft-design/components/inspector-card.d.ts +21 -0
- package/dist/toolcraft-design/components/logger.d.ts +11 -0
- package/dist/toolcraft-design/components/resource-browser.d.ts +21 -0
- package/dist/toolcraft-design/components/symbols.d.ts +12 -0
- package/dist/toolcraft-design/components/table.d.ts +16 -0
- package/dist/toolcraft-design/components/template.d.ts +19 -0
- package/dist/toolcraft-design/components/text.d.ts +16 -0
- package/dist/toolcraft-design/dashboard/buffer.d.ts +25 -0
- package/dist/toolcraft-design/dashboard/components/footer.d.ts +8 -0
- package/dist/toolcraft-design/dashboard/dashboard.d.ts +20 -0
- package/dist/toolcraft-design/dashboard/index.d.ts +8 -0
- package/dist/toolcraft-design/dashboard/should-use-dashboard.d.ts +10 -0
- package/dist/toolcraft-design/dashboard/snapshot.d.ts +10 -0
- package/dist/toolcraft-design/dashboard/terminal.d.ts +37 -0
- package/dist/toolcraft-design/dashboard/types.d.ts +38 -0
- package/dist/toolcraft-design/explorer/events.d.ts +77 -0
- package/dist/toolcraft-design/explorer/index.d.ts +8 -0
- package/dist/toolcraft-design/explorer/keymap.d.ts +31 -0
- package/dist/toolcraft-design/explorer/runtime.d.ts +2 -0
- package/dist/toolcraft-design/explorer/state.d.ts +224 -0
- package/dist/toolcraft-design/index.d.ts +62 -0
- package/dist/toolcraft-design/internal/output-format.d.ts +6 -0
- package/dist/toolcraft-design/internal/strip-ansi.d.ts +1 -0
- package/dist/toolcraft-design/internal/theme-detect.d.ts +12 -0
- package/dist/toolcraft-design/internal/theme-state.d.ts +12 -0
- package/dist/toolcraft-design/prompts/index.d.ts +91 -0
- package/dist/toolcraft-design/prompts/interactive/cancel-symbol.d.ts +2 -0
- package/dist/toolcraft-design/prompts/interactive/select.d.ts +18 -0
- package/dist/toolcraft-design/prompts/primitives/cancel.d.ts +2 -0
- package/dist/toolcraft-design/prompts/primitives/intro.d.ts +1 -0
- package/dist/toolcraft-design/prompts/primitives/log.d.ts +18 -0
- package/dist/toolcraft-design/prompts/primitives/note.d.ts +1 -0
- package/dist/toolcraft-design/prompts/primitives/outro.d.ts +1 -0
- package/dist/toolcraft-design/prompts/primitives/spinner.d.ts +6 -0
- package/dist/toolcraft-design/prompts/theme.d.ts +11 -0
- package/dist/toolcraft-design/screen/screen.d.ts +40 -0
- package/dist/toolcraft-design/screen/style.d.ts +16 -0
- package/dist/toolcraft-design/static/index.d.ts +4 -0
- package/dist/toolcraft-design/static/menu.d.ts +11 -0
- package/dist/toolcraft-design/static/spinner.d.ts +14 -0
- package/dist/toolcraft-design/terminal/driver.d.ts +34 -0
- package/dist/toolcraft-design/terminal/input.d.ts +25 -0
- package/dist/toolcraft-design/terminal-markdown/ast.d.ts +98 -0
- package/dist/toolcraft-design/terminal-markdown/html-renderer.d.ts +7 -0
- package/dist/toolcraft-design/terminal-markdown/index.d.ts +12 -0
- package/dist/toolcraft-design/terminal-markdown/parser.d.ts +5 -0
- package/dist/toolcraft-design/terminal-markdown/plaintext-renderer.d.ts +11 -0
- package/dist/toolcraft-design/terminal-markdown/renderer.d.ts +7 -0
- package/dist/toolcraft-design/tokens/brand.d.ts +5 -0
- package/dist/toolcraft-design/tokens/colors.d.ts +37 -0
- package/dist/toolcraft-design/tokens/index.d.ts +6 -0
- package/dist/toolcraft-design/tokens/spacing.d.ts +6 -0
- package/dist/toolcraft-design/tokens/typography.d.ts +7 -0
- package/dist/toolcraft-design/tokens/widths.d.ts +5 -0
- package/dist/toolcraft-schema/index.d.ts +184 -0
- package/dist/toolcraft-schema/json-schema/index.d.ts +5 -0
- package/dist/toolcraft-schema/json-schema/types.d.ts +33 -0
- package/dist/toolcraft-schema/json-schema-document.d.ts +14 -0
- package/dist/toolcraft-schema/json.d.ts +10 -0
- package/dist/toolcraft-schema/oneof.d.ts +15 -0
- package/dist/toolcraft-schema/record.d.ts +5 -0
- package/dist/toolcraft-schema/union.d.ts +8 -0
- package/dist/toolcraft-schema/validate.d.ts +17 -0
- package/package.json +89 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../safe-fs/src/contracts/path.ts", "../../../safe-fs/src/fs/real/index.ts", "../../../safe-fs/src/fs/real/allocation.ts", "../../../safe-fs/src/fs/s3/filesystem.ts", "../../../safe-fs/src/fs/s3/authority.ts", "../../../safe-fs/src/fs/s3/transport.ts", "../../../safe-fs/src/fs/s3/mock.ts", "../../../safe-fs/src/fs/s3/http/transport.ts", "../../../safe-fs/src/fs/s3/http/request.ts", "../../../safe-fs/src/fs/s3/http/signature.ts", "../../../safe-fs/src/fs/s3/http/xml.ts", "../../../safe-fs/src/node/filesystem.ts", "../../../safe-fs/src/config.ts", "../../../safe-fs/src/config/memory.ts", "../../../safe-fs/src/config/real.ts", "../../../safe-fs/src/config.node.ts"],
|
|
4
|
+
"sourcesContent": ["import { posix } from \"node:path\";\nexport {\n assertPathWithin, isPathWithin, normalizePath, relativePath, resolvePath, validatePath\n} from \"./virtual-path.js\";\n\nexport const posixPath = posix;\nexport const basename = posix.basename;\nexport const dirname = posix.dirname;\nexport const extname = posix.extname;\nexport const joinPath = posix.join;\nexport const isAbsolutePath = posix.isAbsolute;\n", "import { constants, type Stats } from \"node:fs\";\nimport * as native from \"node:fs/promises\";\nimport { isAbsolute, join, relative, resolve, sep } from \"node:path\";\nimport { nativeAllocatedBytes } from \"./allocation.js\";\nimport { finishCleanup } from \"../../contracts/cleanup.js\";\nimport {\n FsError, collectBytes, isErrnoCode, toByteSource, toFsError, validatePath,\n} from \"../../contracts/index.js\";\nimport type {\n AppendFileOptions, ByteSource, CopyFileOptions, DirectoryEntry, FileStat,\n FileSystem, FileSystemCapabilities, FileType, FsOptions, MkdirOptions,\n ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions,\n} from \"../../contracts/index.js\";\n\nexport interface RealFileSystemOptions {\n /** An existing, absolute host directory. It is never created implicitly. */\n readonly root: string;\n}\n\ninterface ResolutionOptions extends FsOptions {\n readonly followFinal?: boolean;\n readonly missing?: \"final\";\n readonly deferTrailingSeparator?: boolean;\n readonly createDirectories?: { readonly mode: number };\n readonly checkTarget?: boolean;\n}\n\ninterface PathComponent {\n readonly name: string;\n readonly fromLink: boolean;\n}\n\nfunction fileType(stats: Pick<Stats, \"isFile\" | \"isDirectory\" | \"isSymbolicLink\">): FileType {\n if (stats.isFile()) return \"file\";\n if (stats.isDirectory()) return \"directory\";\n if (stats.isSymbolicLink()) return \"symlink\";\n throw new FsError(\"ENOTSUP\", { message: \"special filesystem nodes are not supported\" });\n}\n\nfunction fileStat(stats: Stats): FileStat {\n const allocatedBytes = nativeAllocatedBytes(stats.blocks, process.platform);\n return {\n type: fileType(stats), size: stats.size, mode: stats.mode,\n ...(allocatedBytes === undefined ? {} : { allocatedBytes }),\n atimeMs: stats.atimeMs, mtimeMs: stats.mtimeMs, ctimeMs: stats.ctimeMs,\n birthtimeMs: stats.birthtimeMs, ino: stats.ino, dev: stats.dev,\n ...(Number.isSafeInteger(stats.dev) && stats.dev >= 0 && Number.isSafeInteger(stats.ino) && stats.ino >= 0\n ? { identityScope: Symbol.for(\"virtual-bash.fs.native\") } : {}),\n nlink: stats.nlink, uid: stats.uid, gid: stats.gid,\n };\n}\n\nfunction integer(value: number, minimum = 0): void {\n if (!Number.isSafeInteger(value) || value < minimum) {\n throw new FsError(\"EINVAL\", { message: \"expected a nonnegative safe integer\" });\n }\n}\n\nfunction nativeError(error: unknown): FsError {\n if (typeof error === \"object\" && error !== null && \"code\" in error\n && (error.code === \"ERR_INVALID_ARG_TYPE\" || error.code === \"ERR_INVALID_ARG_VALUE\" || error.code === \"ERR_OUT_OF_RANGE\")) {\n return new FsError(\"EINVAL\", { cause: error });\n }\n if (typeof error === \"object\" && error !== null && \"info\" in error) {\n const info = error.info;\n if (typeof info === \"object\" && info !== null && \"code\" in info && isErrnoCode(info.code)) {\n return new FsError(info.code, { cause: error });\n }\n }\n return toFsError(error);\n}\n\n/**\n * Async byte filesystem for trusted POSIX hosts (Windows is unsupported).\n * Both relative and absolute input paths are virtual POSIX paths rooted at `/`;\n * components resolve in order, following symlinks before subsequent `..` and\n * preserving trailing directory requirements. Empty paths are ENOENT. Excess\n * input `..` clamps at the virtual root; symlink targets may never cross it.\n * There is no process cwd dependency. The configured host root must already\n * exist; its canonical location is pinned on first use or by the async factory.\n *\n * Absolute symlink targets created here are virtual paths, stored as rooted\n * host targets without lexical normalization. Relative targets retain their\n * text; safe dangling, non-directory, and looping targets may be created.\n * Existing host symlinks are\n * followed only when every traversed component remains beneath the root, with\n * a 40-link traversal limit. Existing absolute host targets must start with the\n * canonical root, not a different host alias of that root. lstat, removal, and\n * rename inspect or modify a final symlink itself rather than its target. Absolute readlink results are\n * translated back into virtual paths; external absolute targets are refused.\n *\n * SECURITY LIMIT: containment checks and subsequent Node path operations are\n * not atomic. O_NOFOLLOW narrows final-file open races, but ancestor swaps,\n * concurrent renames, mount changes, and preexisting hardlinks cannot be made\n * safe by these APIs. This is NOT a race-proof sandbox or an isolation boundary\n * against another process modifying the tree. Use an OS sandbox for that.\n *\n * Only regular files, directories, and symlinks are represented. Permissions,\n * ownership, timestamp precision, case sensitivity, umask, and rename behavior\n * are those of the host filesystem. Copy is not atomic; rename can fail EXDEV.\n * Cancellation is cooperative between operations/chunks, not rollback: failed\n * or canceled writes/copies may leave partial data. No native commands execute.\n * Destructive rm/rename operands ending in `.` or `..` are refused with EINVAL,\n * including native recursive-rm edge cases that could otherwise delete content.\n * Public filesystem errors carry only virtual operands; native causes are\n * intentionally omitted so host paths cannot escape through nested errors.\n */\nexport class RealFileSystem implements FileSystem {\n readonly capabilities: FileSystemCapabilities = Object.freeze({\n readOnly: false, symlinks: true, hardlinks: true, permissions: true,\n timestamps: true, atomicRename: true, streamingRead: true, streamingWrite: true,\n });\n\n private readonly configuredRoot: string;\n private rootPromise: Promise<string> | undefined;\n\n constructor(options: RealFileSystemOptions | string) {\n const root = typeof options === \"string\" ? options : options.root;\n validatePath(root);\n if (!isAbsolute(root)) {\n throw new FsError(\"EINVAL\", { syscall: \"root\", path: root, message: \"root must be an absolute host path\" });\n }\n if (sep !== \"/\") {\n throw new FsError(\"ENOTSUP\", { syscall: \"root\", message: \"this backend requires a POSIX host\" });\n }\n this.configuredRoot = root;\n }\n\n private async root(options: FsOptions = {}): Promise<string> {\n options.signal?.throwIfAborted();\n this.rootPromise ??= (async () => {\n const root = await native.realpath(this.configuredRoot);\n if (!(await native.stat(root)).isDirectory()) throw new FsError(\"ENOTDIR\");\n return root;\n })();\n const root = await this.rootPromise;\n options.signal?.throwIfAborted();\n if (await native.realpath(root) !== root) throw new FsError(\"EACCES\");\n options.signal?.throwIfAborted();\n if (!(await native.stat(root)).isDirectory()) throw new FsError(\"ENOTDIR\");\n options.signal?.throwIfAborted();\n return root;\n }\n\n private absoluteTarget(root: string, target: string): string[] {\n if (target === root) return [];\n const prefix = root === \"/\" ? \"/\" : `${root}/`;\n if (!target.startsWith(prefix)) {\n throw new FsError(\"EACCES\", { message: \"symlink target escapes the configured root\" });\n }\n return target.slice(prefix.length).split(\"/\");\n }\n\n private async walk(root: string, components: PathComponent[], options: ResolutionOptions): Promise<string> {\n let current = root;\n let links = 0;\n const pending = [...components];\n while (pending.length > 0) {\n options.signal?.throwIfAborted();\n const { name: component, fromLink } = pending.shift()!;\n if (component === \"\" || component === \".\") continue;\n if (component === \"..\") {\n if (current === root) {\n if (fromLink) throw new FsError(\"EACCES\", { message: \"symlink target escapes the configured root\" });\n } else {\n current = resolve(current, \"..\");\n }\n continue;\n }\n const candidate = join(current, component);\n let stats: Stats;\n try {\n stats = await native.lstat(candidate);\n } catch (error) {\n options.signal?.throwIfAborted();\n const code = (error as NodeJS.ErrnoException).code;\n if (options.checkTarget && (code === \"ENOENT\" || code === \"ENOTDIR\")) {\n current = candidate;\n continue;\n }\n if (code !== \"ENOENT\") throw error;\n if (options.createDirectories && !fromLink) {\n try {\n options.signal?.throwIfAborted();\n await native.mkdir(candidate, { mode: options.createDirectories.mode });\n } catch (creationError) {\n if (nativeError(creationError).code !== \"EEXIST\") throw creationError;\n }\n options.signal?.throwIfAborted();\n stats = await native.lstat(candidate);\n } else if (!options.createDirectories && options.missing === \"final\" && pending.every((part) => part.name === \"\")) {\n return pending.length > 0 ? `${candidate}/` : candidate;\n } else {\n throw error;\n }\n }\n options.signal?.throwIfAborted();\n if (stats.isSymbolicLink() && (pending.length > 0 || options.followFinal !== false)) {\n if (++links > 40) throw new FsError(\"ELOOP\");\n const target = await native.readlink(candidate);\n if (isAbsolute(target)) {\n pending.unshift(...this.absoluteTarget(root, target).map((name) => ({ name, fromLink: true })));\n current = root;\n } else {\n pending.unshift(...target.split(\"/\").map((name) => ({ name, fromLink: true })));\n }\n continue;\n }\n if (pending.length > 0 && !stats.isDirectory() && !options.checkTarget) {\n if (options.deferTrailingSeparator && stats.isFile() && pending.every((part) => part.name === \"\")) {\n return `${candidate}/`;\n }\n throw new FsError(\"ENOTDIR\");\n }\n if (!options.checkTarget) fileType(stats);\n current = candidate;\n }\n options.signal?.throwIfAborted();\n return components.at(-1)?.name === \"\" && current !== root ? `${current}/` : current;\n }\n\n private async path(path: string, options: ResolutionOptions = {}): Promise<string> {\n options.signal?.throwIfAborted();\n validatePath(path);\n if (path === \"\") throw new FsError(\"ENOENT\");\n return this.walk(await this.root(options), path.split(\"/\").map((name) => ({ name, fromLink: false })), options);\n }\n\n private async operation<Result>(\n syscall: string, path: string, options: FsOptions,\n action: () => Promise<Result>, dest?: string,\n ): Promise<Result> {\n options.signal?.throwIfAborted();\n try {\n validatePath(path);\n if (dest !== undefined) validatePath(dest);\n const result = await action();\n options.signal?.throwIfAborted();\n return result;\n } catch (error) {\n options.signal?.throwIfAborted();\n const converted = nativeError(error);\n throw new FsError(converted.code, {\n syscall, path, ...(dest === undefined ? {} : { dest }),\n });\n }\n }\n\n private protectRoot(path: string, root: string): void {\n if (resolve(path) === root) throw new FsError(\"EBUSY\", { message: \"the filesystem root cannot be removed or replaced\" });\n }\n\n private protectTerminal(path: string): void {\n const terminal = path.split(\"/\").filter(Boolean).at(-1);\n if (terminal === \".\" || terminal === \"..\") throw new FsError(\"EINVAL\");\n }\n\n async readFile(path: string, options: ReadFileOptions = {}): Promise<Uint8Array> {\n return this.operation(\"readFile\", path, options, async () => {\n const maxBytes = options.maxBytes ?? Number.MAX_SAFE_INTEGER;\n integer(maxBytes);\n return collectBytes(this.readStream(path, options), { maxBytes, ...options });\n });\n }\n\n async writeFile(path: string, data: Uint8Array, options: WriteFileOptions = {}): Promise<void> {\n return this.operation(\"writeFile\", path, options, async () => {\n if (!(data instanceof Uint8Array)) throw new FsError(\"EINVAL\");\n await this.writeStream(path, toByteSource(data), options);\n });\n }\n\n async appendFile(path: string, data: Uint8Array, options: AppendFileOptions = {}): Promise<void> {\n return this.operation(\"appendFile\", path, options, () => this.writeFile(path, data, { ...options, flag: \"a\" }));\n }\n\n async stat(path: string, options: FsOptions = {}): Promise<FileStat> {\n return this.operation(\"stat\", path, options, async () => {\n const target = await this.path(path, options);\n options.signal?.throwIfAborted();\n return fileStat(await native.stat(target));\n });\n }\n\n async lstat(path: string, options: FsOptions = {}): Promise<FileStat> {\n return this.operation(\"lstat\", path, options, async () => {\n const target = await this.path(path, { ...options, followFinal: false });\n options.signal?.throwIfAborted();\n return fileStat(await native.lstat(target));\n });\n }\n\n async readdir(path: string, options: FsOptions = {}): Promise<DirectoryEntry[]> {\n return this.operation(\"readdir\", path, options, async () => {\n const target = await this.path(path, options);\n options.signal?.throwIfAborted();\n const entries = await native.readdir(target, { withFileTypes: true });\n return entries.map((entry) => ({ name: entry.name, type: fileType(entry) }));\n });\n }\n\n async mkdir(path: string, options: MkdirOptions = {}): Promise<void> {\n return this.operation(\"mkdir\", path, options, async () => {\n if (options.mode !== undefined) integer(options.mode);\n const target = await this.path(path, {\n ...options,\n missing: \"final\", followFinal: !!options.recursive, deferTrailingSeparator: true,\n ...(options.recursive ? { createDirectories: { mode: options.mode ?? 0o777 } } : {}),\n });\n options.signal?.throwIfAborted();\n await native.mkdir(target, { recursive: options.recursive ?? false, ...(options.mode === undefined ? {} : { mode: options.mode }) });\n });\n }\n\n async rmdir(path: string, options: FsOptions = {}): Promise<void> {\n return this.operation(\"rmdir\", path, options, async () => {\n const target = await this.path(path.replace(/\\/+$/, \"\") || (path ? \"/\" : \"\"), { ...options, followFinal: false });\n this.protectTerminal(path);\n this.protectRoot(target, await this.root(options));\n options.signal?.throwIfAborted();\n await native.rmdir(target);\n });\n }\n\n async rm(path: string, options: RemoveOptions = {}): Promise<void> {\n return this.operation(\"rm\", path, options, async () => {\n let target: string;\n try {\n target = await this.path(path, { ...options, followFinal: false });\n } catch (error) {\n if (options.force && toFsError(error).code === \"ENOENT\") return;\n throw error;\n }\n this.protectTerminal(path);\n this.protectRoot(target, await this.root(options));\n options.signal?.throwIfAborted();\n await native.rm(target, { recursive: options.recursive ?? false, force: options.force ?? false });\n });\n }\n\n async rename(source: string, destination: string, options: FsOptions = {}): Promise<void> {\n return this.operation(\"rename\", source, options, async () => {\n const from = await this.path(source, { ...options, followFinal: false });\n const to = await this.path(destination, { ...options, followFinal: false, missing: \"final\" });\n this.protectTerminal(source);\n this.protectTerminal(destination);\n const root = await this.root(options);\n this.protectRoot(from, root);\n this.protectRoot(to, root);\n options.signal?.throwIfAborted();\n await native.rename(from, to);\n }, destination);\n }\n\n async copyFile(source: string, destination: string, options: CopyFileOptions = {}): Promise<void> {\n return this.operation(\"copyFile\", source, options, async () => {\n const from = await this.path(source, options);\n const to = await this.path(destination, { ...options, missing: \"final\", followFinal: !options.exclusive, deferTrailingSeparator: true });\n let flags = options.exclusive ? constants.COPYFILE_EXCL : 0;\n if (!to.endsWith(\"/\")) {\n const origin = await native.stat(from, { bigint: true });\n let target;\n try { target = await native.lstat(to, { bigint: true }); }\n catch (error) { if (nativeError(error).code !== \"ENOENT\") throw error; }\n if (target && options.exclusive) throw new FsError(\"EEXIST\");\n if (target && origin.isFile() && origin.dev === target.dev && origin.ino === target.ino) throw new FsError(\"EINVAL\");\n if (!target) flags |= constants.COPYFILE_EXCL;\n }\n options.signal?.throwIfAborted();\n await native.copyFile(from, to, flags);\n }, destination);\n }\n\n async realpath(path: string, options: FsOptions = {}): Promise<string> {\n return this.operation(\"realpath\", path, options, async () => {\n const target = await this.path(path, options);\n return `/${relative(await this.root(options), target)}`;\n });\n }\n\n async access(path: string, mode = constants.F_OK, options: FsOptions = {}): Promise<void> {\n return this.operation(\"access\", path, options, async () => {\n integer(mode);\n if (mode > 7) throw new FsError(\"EINVAL\");\n const target = await this.path(path, options);\n options.signal?.throwIfAborted();\n await native.access(target, mode);\n });\n }\n\n async readlink(path: string, options: FsOptions = {}): Promise<string> {\n return this.operation(\"readlink\", path, options, async () => {\n const resolved = await this.path(path, { ...options, followFinal: false });\n options.signal?.throwIfAborted();\n const target = await native.readlink(resolved);\n if (!isAbsolute(target)) return target;\n return `/${this.absoluteTarget(await this.root(options), target).join(\"/\")}`;\n });\n }\n\n async symlink(target: string, path: string, options: FsOptions = {}): Promise<void> {\n return this.operation(\"symlink\", path, options, async () => {\n validatePath(target);\n if (!target) throw new FsError(\"ENOENT\");\n const destination = await this.path(path, { ...options, followFinal: false, missing: \"final\" });\n const root = await this.root(options);\n const stored = target.startsWith(\"/\") ? `${root === \"/\" ? \"\" : root}${target}` : target;\n const components = target.startsWith(\"/\")\n ? target.split(\"/\")\n : [...relative(root, resolve(destination, \"..\")).split(\"/\"), ...target.split(\"/\")];\n try {\n await this.walk(root, components.map((name) => ({ name, fromLink: true })), { ...options, checkTarget: true });\n } catch (error) {\n if (nativeError(error).code !== \"ELOOP\") throw error;\n }\n options.signal?.throwIfAborted();\n await native.symlink(stored, destination);\n });\n }\n\n async link(existingPath: string, newPath: string, options: FsOptions = {}): Promise<void> {\n return this.operation(\"link\", existingPath, options, async () => {\n const source = await this.path(existingPath, { ...options, followFinal: false });\n const destination = await this.path(newPath, { ...options, followFinal: false, missing: \"final\" });\n options.signal?.throwIfAborted();\n await native.link(source, destination);\n }, newPath);\n }\n\n async chmod(path: string, mode: number, options: FsOptions = {}): Promise<void> {\n return this.operation(\"chmod\", path, options, async () => {\n integer(mode);\n const target = await this.path(path, options);\n options.signal?.throwIfAborted();\n await native.chmod(target, mode);\n });\n }\n\n async utimes(path: string, atimeMs: number, mtimeMs: number, options: FsOptions = {}): Promise<void> {\n return this.operation(\"utimes\", path, options, async () => {\n if (!Number.isFinite(atimeMs) || !Number.isFinite(mtimeMs)) throw new FsError(\"EINVAL\");\n const target = await this.path(path, options);\n options.signal?.throwIfAborted();\n await native.utimes(target, new Date(atimeMs), new Date(mtimeMs));\n });\n }\n\n async truncate(path: string, length = 0, options: FsOptions = {}): Promise<void> {\n return this.operation(\"truncate\", path, options, async () => {\n integer(length);\n const target = await this.path(path, options);\n options.signal?.throwIfAborted();\n const handle = await native.open(target, constants.O_WRONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n try {\n options.signal?.throwIfAborted();\n if (!(await handle.stat()).isFile()) throw new FsError(\"ENOTSUP\");\n options.signal?.throwIfAborted();\n await handle.truncate(length);\n } finally {\n await handle.close();\n }\n });\n }\n\n async *readStream(path: string, options: ReadStreamOptions = {}): ByteSource {\n const syscall = \"readStream\";\n let handle: native.FileHandle | undefined;\n let failed = false;\n try {\n options.signal?.throwIfAborted();\n const start = options.start ?? 0;\n const end = options.endExclusive ?? Number.MAX_SAFE_INTEGER;\n const chunkSize = options.chunkSize ?? 64 * 1024;\n integer(start);\n integer(end);\n integer(chunkSize, 1);\n if (end < start) throw new FsError(\"EINVAL\");\n const target = await this.path(path, options);\n options.signal?.throwIfAborted();\n handle = await native.open(target, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);\n options.signal?.throwIfAborted();\n const stats = await handle.stat();\n if (stats.isDirectory()) throw new FsError(\"EISDIR\");\n if (!stats.isFile()) throw new FsError(\"ENOTSUP\");\n let position = start;\n while (position < end) {\n options.signal?.throwIfAborted();\n const bytes = new Uint8Array(Math.min(chunkSize, end - position));\n const { bytesRead } = await handle.read(bytes, 0, bytes.byteLength, position);\n options.signal?.throwIfAborted();\n if (bytesRead === 0) break;\n position += bytesRead;\n yield bytes.subarray(0, bytesRead);\n }\n options.signal?.throwIfAborted();\n } catch (error) {\n failed = true;\n options.signal?.throwIfAborted();\n throw new FsError(nativeError(error).code, { syscall, path });\n } finally {\n await finishCleanup(async () => {\n try {\n await handle?.close();\n } catch (error) {\n throw new FsError(nativeError(error).code, { syscall, path });\n }\n }, failed);\n }\n }\n\n async writeStream(path: string, source: ByteSource, options: WriteFileOptions = {}): Promise<void> {\n return this.operation(\"writeStream\", path, options, async () => {\n const flag = options.flag ?? \"w\";\n if (![\"w\", \"wx\", \"a\", \"ax\"].includes(flag)) throw new FsError(\"EINVAL\");\n if (options.mode !== undefined) integer(options.mode);\n const exclusive = flag.endsWith(\"x\");\n const destination = await this.path(path, { ...options, missing: \"final\", followFinal: !exclusive, deferTrailingSeparator: true });\n const flags = constants.O_WRONLY | constants.O_CREAT | constants.O_NOFOLLOW | constants.O_NONBLOCK\n | (flag.startsWith(\"a\") ? constants.O_APPEND : constants.O_TRUNC)\n | (exclusive ? constants.O_EXCL : 0);\n options.signal?.throwIfAborted();\n const handle = await native.open(destination, flags, options.mode ?? 0o666);\n try {\n options.signal?.throwIfAborted();\n if (!(await handle.stat()).isFile()) throw new FsError(\"ENOTSUP\");\n options.signal?.throwIfAborted();\n for await (const chunk of source) {\n options.signal?.throwIfAborted();\n if (!(chunk instanceof Uint8Array)) throw new FsError(\"EINVAL\");\n let offset = 0;\n while (offset < chunk.byteLength) {\n options.signal?.throwIfAborted();\n const { bytesWritten } = await handle.write(chunk, offset, chunk.byteLength - offset, null);\n if (bytesWritten === 0) throw new FsError(\"EIO\");\n offset += bytesWritten;\n }\n }\n } finally {\n await handle.close();\n }\n });\n }\n}\n\n/** Construct and validate an existing root before returning the backend. */\nexport async function createRealFileSystem(options: RealFileSystemOptions | string): Promise<RealFileSystem> {\n const filesystem = new RealFileSystem(options);\n await filesystem.stat(\"/\");\n return filesystem;\n}\n", "export function nativeAllocatedBytes(blocks: unknown, platform: string): number | undefined {\n if (platform !== \"darwin\" && platform !== \"linux\") return undefined;\n if (typeof blocks !== \"number\" || !Number.isSafeInteger(blocks) || blocks < 0) return undefined;\n const bytes = blocks * 512;\n return Number.isSafeInteger(bytes) ? bytes : undefined;\n}\n", "import { posix } from \"node:path\";\nimport { FsError, isFsError } from \"../../contracts/errors.js\";\nimport { composeAbortSignals } from \"../../contracts/abort.js\";\nimport type { ErrnoCode } from \"../../contracts/errors.js\";\nimport type {\n AppendFileOptions, CopyFileOptions, DirectoryEntry, EntryComparison, FileStat, FileSystem,\n FsOptions, MkdirOptions, ReadFileOptions, ReadStreamOptions, RemoveOptions, WriteFileOptions,\n} from \"../../contracts/filesystem.js\";\nimport { collectBytes, readBytes } from \"../../contracts/io.js\";\nimport type { ByteSource } from \"../../contracts/io.js\";\nimport { compareEntries, registerEntryAuthority } from \"../mount/comparison.js\";\nimport { compareOwnedS3Entries, queryS3Head, recordS3Stat, registerS3EntryOwner } from \"./authority.js\";\nimport { encodeCopySource } from \"./transport.js\";\nimport type {\n S3GetOutput, S3HeadOutput, S3ListOutput, S3ObjectSummary, S3RequestOptions, S3Transport,\n S3StreamGetOutput,\n} from \"./transport.js\";\n\nexport interface S3FileSystemOptions {\n readonly transport: S3Transport;\n readonly bucket: string;\n readonly prefix?: string;\n readonly compareEntry?: (this: FileSystem, ...args: Parameters<NonNullable<FileSystem[\"compareEntry\"]>>) => ReturnType<NonNullable<FileSystem[\"compareEntry\"]>>;\n readonly readOnly?: boolean;\n readonly allowNonAtomicRename?: boolean;\n readonly pageSize?: number;\n readonly maxReadBytes?: number;\n readonly maxStreamBytes?: number;\n readonly maxListEntries?: number;\n}\n\ninterface NodeInfo {\n readonly stat: FileStat;\n readonly metadata?: S3HeadOutput;\n}\n\nexport class S3RenameError extends FsError {\n readonly phase: \"copy\" | \"delete\";\n readonly copiedKeys: readonly string[];\n readonly deletedKeys: readonly string[];\n\n constructor(source: string, destination: string, phase: \"copy\" | \"delete\", copied: string[], deleted: string[], cause: FsError) {\n super(cause.code, {\n syscall: \"rename\", path: source, dest: destination, cause,\n message: `non-atomic S3 rename failed during ${phase}; destination copies or partial source deletions may remain`,\n });\n this.name = \"S3RenameError\";\n this.phase = phase;\n this.copiedKeys = Object.freeze([...copied]);\n this.deletedKeys = Object.freeze([...deleted]);\n }\n}\n\nfunction serviceCode(error: unknown): string | undefined {\n if (typeof error !== \"object\" || error === null) return undefined;\n const record = error as { name?: unknown; code?: unknown; Code?: unknown };\n const value = record.Code ?? record.code ?? record.name;\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction translate(error: unknown, syscall: string, path: string, precondition: ErrnoCode = \"EAGAIN\"): FsError {\n if (error instanceof FsError) return error;\n const status = (error as { $metadata?: { httpStatusCode?: number } } | null)?.$metadata?.httpStatusCode;\n const name = serviceCode(error);\n let code: ErrnoCode = \"EIO\";\n if (name === \"AbortError\" || status === 499) code = \"ECANCELED\";\n else if (name === \"NoSuchKey\" || name === \"NotFound\" || name === \"NoSuchBucket\" || status === 404) code = \"ENOENT\";\n else if ([\"AccessDenied\", \"InvalidAccessKeyId\", \"SignatureDoesNotMatch\", \"ExpiredToken\"].includes(name ?? \"\") || status === 401 || status === 403) code = \"EACCES\";\n else if (name === \"PreconditionFailed\" || status === 412) code = precondition;\n else if (name === \"ConditionalRequestConflict\" || name === \"SlowDown\" || status === 409 || status === 429 || status === 503) code = \"EAGAIN\";\n else if (name === \"NotImplemented\" || status === 501) code = \"ENOTSUP\";\n else if (name === \"EntityTooLarge\") code = \"EFBIG\";\n else if (name === \"InvalidArgument\" || name === \"InvalidRequest\" || status === 400) code = \"EINVAL\";\n else if (name === \"TimeoutError\" || name === \"RequestTimeout\" || status === 408) code = \"ETIMEDOUT\";\n return new FsError(code, { syscall, path, cause: error });\n}\n\nfunction fail(code: ErrnoCode, syscall: string, path: string, message?: string): never {\n throw new FsError(code, { syscall, path, ...(message === undefined ? {} : { message }) });\n}\n\nfunction validateLimit(value: number, name: string, minimum: number, maximum = Number.MAX_SAFE_INTEGER): number {\n if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {\n throw new FsError(\"EINVAL\", { message: `${name} must be an integer from ${minimum} to ${maximum}` });\n }\n return value;\n}\n\nfunction isWellFormed(value: string): boolean {\n return !/[\\uD800-\\uDFFF]/u.test(value);\n}\n\nexport class S3FileSystem implements FileSystem {\n readonly capabilities;\n readonly readStream?: (path: string, options?: ReadStreamOptions) => ByteSource;\n readonly writeStream?: (path: string, source: ByteSource, options?: WriteFileOptions) => Promise<void>;\n private readonly transport: S3Transport;\n private readonly bucket: string;\n private readonly prefix: string;\n private readonly allowRename: boolean;\n private readonly pageSize: number;\n private readonly maxReadBytes: number;\n private readonly maxStreamBytes: number;\n private readonly maxListEntries: number;\n\n constructor(options: S3FileSystemOptions) {\n if (!options?.transport || [\"headObject\", \"getObject\", \"putObject\", \"deleteObject\", \"copyObject\", \"listObjectsV2\"]\n .some((method) => typeof (options.transport as unknown as Record<string, unknown>)[method] !== \"function\")) {\n throw new FsError(\"EINVAL\", { message: \"an explicit six-operation S3 transport is required; no default credentials or network client are created\" });\n }\n if (options.compareEntry !== undefined && typeof options.compareEntry !== \"function\") {\n throw new FsError(\"EINVAL\", { message: \"compareEntry must be a filesystem comparison callback\" });\n }\n if (typeof options.bucket !== \"string\" || !options.bucket || /[/:\\0]/.test(options.bucket)) {\n throw new FsError(\"EINVAL\", { message: \"bucket must be a nonempty bucket name, not a URL or ARN\" });\n }\n const prefix = options.prefix ?? \"\";\n if (typeof prefix !== \"string\" || prefix.includes(\"\\0\") || !isWellFormed(prefix)\n || (prefix !== \"\" && prefix.replace(/\\/$/, \"\").split(\"/\").some((part) => !part || part === \".\" || part === \"..\"))) {\n throw new FsError(\"EINVAL\", { message: \"prefix must be a canonical relative object-key prefix\" });\n }\n this.prefix = prefix === \"\" || prefix.endsWith(\"/\") ? prefix : `${prefix}/`;\n if (Buffer.byteLength(this.prefix) > 1024) throw new FsError(\"ENAMETOOLONG\", { message: \"S3 prefix exceeds 1024 UTF-8 bytes\" });\n this.transport = options.transport;\n this.bucket = options.bucket;\n this.allowRename = options.allowNonAtomicRename ?? true;\n this.pageSize = validateLimit(options.pageSize ?? 1000, \"pageSize\", 1, 1000);\n this.maxReadBytes = validateLimit(options.maxReadBytes ?? 64 * 1024 * 1024, \"maxReadBytes\", 0);\n this.maxStreamBytes = validateLimit(options.maxStreamBytes ?? 5_000_000_000, \"maxStreamBytes\", 0, 5_000_000_000);\n this.maxListEntries = validateLimit(options.maxListEntries ?? 100_000, \"maxListEntries\", 1);\n this.capabilities = Object.freeze({\n readOnly: options.readOnly ?? false,\n symlinks: false, hardlinks: false, permissions: false,\n timestamps: options.transport.capabilities?.conditionalCopy === true || options.transport.capabilities?.conditionalPut === true,\n atomicRename: false, snapshotRmdir: true,\n streamingRead: options.transport.capabilities?.streamingRead === true && typeof options.transport.getObjectStream === \"function\",\n streamingWrite: options.transport.capabilities?.streamingWrite === true && typeof options.transport.putObjectStream === \"function\",\n });\n if (this.capabilities.streamingRead) this.readStream = this.streamRead.bind(this);\n if (this.capabilities.streamingWrite) this.writeStream = this.streamWrite.bind(this);\n const transport = this.transport;\n const bucket = this.bucket;\n const registeredPrefix = this.prefix;\n registerS3EntryOwner(this, path => this.path(path), () => this.transport === transport\n && this.bucket === bucket && this.prefix === registeredPrefix, s3Comparison, options.compareEntry);\n registerEntryAuthority(this, compareOwnedS3Entries);\n }\n\n async compareEntry(path: string, peer: FileSystem, peerPath: string, options: FsOptions = {}): Promise<EntryComparison> {\n return compareEntries(this, path, peer, peerPath, options);\n }\n\n private path(input: string): string {\n if (typeof input !== \"string\" || input.includes(\"\\0\") || !isWellFormed(input)) fail(\"EINVAL\", \"resolve\", input, \"invalid path string\");\n const components: string[] = [];\n for (const part of input.split(\"/\")) {\n if (!part || part === \".\") continue;\n if (part === \"..\") {\n if (components.length === 0) fail(\"EACCES\", \"resolve\", input, \"path attempts to escape the configured prefix\");\n components.pop();\n } else components.push(part);\n }\n const path = `/${components.join(\"/\")}`;\n if (Buffer.byteLength(this.key(path)) > 1024) fail(\"ENAMETOOLONG\", \"resolve\", input);\n return path;\n }\n\n private key(path: string): string {\n return this.prefix + path.slice(1);\n }\n\n private directoryKey(path: string): string {\n const key = path === \"/\" ? this.prefix : `${this.key(path)}/`;\n if (Buffer.byteLength(key) > 1024) fail(\"ENAMETOOLONG\", \"resolve\", path);\n return key;\n }\n\n private checkAbort(options: FsOptions, syscall: string, path: string): void {\n if (options.signal?.aborted) fail(\"ECANCELED\", syscall, path);\n }\n\n private requestOptions(options: FsOptions): S3RequestOptions {\n return options.signal === undefined ? {} : { abortSignal: options.signal };\n }\n\n private async call<Result>(syscall: string, path: string, options: FsOptions, action: () => Promise<Result>, precondition?: ErrnoCode): Promise<Result> {\n this.checkAbort(options, syscall, path);\n let onAbort: (() => void) | undefined;\n try {\n const pending = action();\n const result = options.signal ? await new Promise<Result>((resolve, reject) => {\n const signal = options.signal!;\n onAbort = () => reject(new FsError(\"ECANCELED\", { syscall, path, cause: signal.reason }));\n signal.addEventListener(\"abort\", onAbort, { once: true });\n if (signal.aborted) onAbort();\n pending.then(value => {\n if (signal.aborted && typeof value === \"object\" && value !== null && \"Body\" in value) this.dispose(value.Body);\n resolve(value);\n }, reject);\n }) : await pending;\n this.checkAbort(options, syscall, path);\n return result;\n } catch (error) {\n if (options.signal?.aborted) fail(\"ECANCELED\", syscall, path);\n throw translate(error, syscall, path, precondition);\n } finally {\n if (onAbort) options.signal?.removeEventListener(\"abort\", onAbort);\n }\n }\n\n private writable(path: string, mode?: number): void {\n if (this.capabilities.readOnly) fail(\"EROFS\", \"write\", path);\n if (mode !== undefined) validateLimit(mode, \"mode\", 0, 0o7777);\n }\n\n private unsupported(operation: string, path: string): never {\n return fail(\"ENOTSUP\", operation, path, `S3 does not support ${operation} with the configured transport`);\n }\n\n private async head(key: string, path: string, options: FsOptions): Promise<S3HeadOutput | undefined> {\n try {\n const input = { Bucket: this.bucket, Key: key };\n return await this.call(\"headObject\", path, options, () => queryS3Head(input, () => this.transport.headObject(input, this.requestOptions(options))));\n } catch (error) {\n if (isFsError(error, \"ENOENT\") && serviceCode(error.cause) !== \"NoSuchBucket\") return undefined;\n throw error;\n }\n }\n\n private makeStat(type: \"file\" | \"directory\", metadata?: S3HeadOutput): FileStat {\n const size = type === \"directory\" ? 0 : metadata?.ContentLength;\n if (size === undefined || !Number.isSafeInteger(size) || size < 0) fail(\"EIO\", \"stat\", \"\", \"transport omitted a valid object ContentLength\");\n const modified = metadata?.LastModified?.getTime() ?? 0;\n if (!Number.isFinite(modified)) fail(\"EIO\", \"stat\", \"\", \"transport returned an invalid LastModified\");\n const timestamp = (key: string, fallback: number): number => {\n const value = metadata?.Metadata?.[key];\n if (value === undefined) return fallback;\n const parsed = Number(value);\n if (!value || !Number.isFinite(parsed)) fail(\"EIO\", \"stat\", \"\", \"invalid virtual timestamp metadata\");\n return parsed;\n };\n const storedMode = metadata?.Metadata?.[\"virtual-bash-mode\"];\n const mode = storedMode === undefined ? (type === \"directory\" ? 0o755 : 0o644) : Number(storedMode);\n if (!Number.isSafeInteger(mode) || mode < 0 || mode > 0o7777 || storedMode === \"\") fail(\"EIO\", \"stat\", \"\", \"invalid virtual mode metadata\");\n return { type, size, mode: (type === \"directory\" ? 0o40000 : 0o100000) | mode,\n mtimeMs: timestamp(\"virtual-bash-mtime\", modified), atimeMs: timestamp(\"virtual-bash-atime\", 0), ctimeMs: modified };\n }\n\n private async page(prefix: string, path: string, options: FsOptions, delimiter?: string, token?: string, maxKeys = this.pageSize): Promise<S3ListOutput> {\n const result = await this.call(\"listObjectsV2\", path, options, () => this.transport.listObjectsV2({\n Bucket: this.bucket, Prefix: prefix, MaxKeys: maxKeys,\n ...(delimiter === undefined ? {} : { Delimiter: delimiter }),\n ...(token === undefined ? {} : { ContinuationToken: token }),\n }, this.requestOptions(options)));\n for (const item of result.Contents ?? []) {\n if (typeof item.Key !== \"string\" || !item.Key.startsWith(prefix)) fail(\"EIO\", \"listObjectsV2\", path, \"transport returned an object outside the requested prefix\");\n this.validateObject(item, path);\n }\n for (const item of result.CommonPrefixes ?? []) {\n if (delimiter === undefined || typeof item.Prefix !== \"string\" || !item.Prefix.startsWith(prefix)\n || !item.Prefix.endsWith(\"/\") || item.Prefix === prefix) fail(\"EIO\", \"listObjectsV2\", path, \"invalid common prefix\");\n this.validateKey(item.Prefix, path);\n }\n if (result.IsTruncated !== undefined && typeof result.IsTruncated !== \"boolean\") fail(\"EIO\", \"listObjectsV2\", path, \"invalid IsTruncated flag\");\n return result;\n }\n\n private validateKey(key: string, path: string): void {\n if (!key.startsWith(this.prefix)) fail(\"EIO\", \"listObjectsV2\", path, \"key escapes the configured prefix\");\n const relative = key.slice(this.prefix.length).replace(/\\/$/, \"\");\n if (!isWellFormed(key) || key.includes(\"\\0\") || Buffer.byteLength(key) > 1024\n || (relative !== \"\" && relative.split(\"/\").some((part) => !part || part === \".\" || part === \"..\"))) {\n fail(\"ENOTSUP\", \"listObjectsV2\", path, \"object key cannot be represented as a canonical filesystem path\");\n }\n }\n\n private validateObject(object: S3ObjectSummary, path: string): void {\n const key = object.Key!;\n this.validateKey(key, path);\n if (object.Size === undefined || !Number.isSafeInteger(object.Size) || object.Size < 0) fail(\"EIO\", \"listObjectsV2\", path, \"invalid object size\");\n if (key.endsWith(\"/\") && object.Size !== 0) fail(\"ENOTSUP\", \"listObjectsV2\", path, \"nonempty slash-suffixed objects cannot be treated as directories\");\n }\n\n private async *pages(prefix: string, path: string, options: FsOptions, delimiter?: string, maxKeys = this.pageSize): AsyncGenerator<S3ListOutput> {\n const tokens = new Set<string>();\n let token: string | undefined;\n let entries = 0;\n do {\n const page = await this.page(prefix, path, options, delimiter, token, maxKeys);\n entries += (page.Contents?.length ?? 0) + (page.CommonPrefixes?.length ?? 0);\n if (entries > this.maxListEntries || tokens.size >= this.maxListEntries) fail(\"EFBIG\", \"listObjectsV2\", path, \"listing exceeds maxListEntries\");\n yield page;\n if (!page.IsTruncated) return;\n token = page.NextContinuationToken;\n if (typeof token !== \"string\" || !token || tokens.has(token)) fail(\"EIO\", \"listObjectsV2\", path, \"missing or repeated continuation token\");\n tokens.add(token);\n } while (true);\n }\n\n private async inspect(path: string, options: FsOptions): Promise<NodeInfo | undefined> {\n if (path === \"/\") {\n const listing = await this.page(this.prefix, path, options, undefined, undefined, 1);\n const marker = this.prefix && listing.Contents?.some(object => object.Key === this.prefix)\n ? await this.head(this.prefix, path, options) : undefined;\n if (marker && marker.ContentLength !== 0) this.unsupported(\"nonempty directory markers\", path);\n return { stat: this.makeStat(\"directory\", marker), ...(marker ? { metadata: marker } : {}) };\n }\n const file = await this.head(this.key(path), path, options);\n if (Buffer.byteLength(this.key(path)) === 1024) {\n return file ? { stat: this.makeStat(\"file\", file), metadata: file } : undefined;\n }\n const directoryKey = this.directoryKey(path);\n const marker = await this.head(directoryKey, path, options);\n if (marker && marker.ContentLength !== 0) this.unsupported(\"nonempty directory markers\", path);\n let directory = marker !== undefined;\n if (!directory) {\n for await (const children of this.pages(directoryKey, path, options, undefined, 1)) {\n if ((children.Contents?.length ?? 0) > 0) {\n directory = true;\n break;\n }\n }\n }\n if (file && directory) this.unsupported(\"file/prefix collisions\", path);\n if (file) return { stat: this.makeStat(\"file\", file), metadata: file };\n if (directory) return { stat: this.makeStat(\"directory\", marker), ...(marker ? { metadata: marker } : {}) };\n return undefined;\n }\n\n private async lookup(path: string, options: FsOptions): Promise<NodeInfo | undefined> {\n const ancestors: string[] = [];\n for (let parent = posix.dirname(path); path !== \"/\"; parent = posix.dirname(parent)) {\n ancestors.unshift(parent);\n if (parent === \"/\") break;\n }\n for (const parent of ancestors) {\n const ancestor = await this.inspect(parent, options);\n if (!ancestor) fail(\"ENOENT\", \"stat\", parent);\n if (ancestor.stat.type !== \"directory\") fail(\"ENOTDIR\", \"stat\", parent);\n }\n return this.inspect(path, options);\n }\n\n private requireDirectorySuffix(input: string, info: NodeInfo | undefined): void {\n if (input.endsWith(\"/\") && info?.stat.type === \"file\") fail(\"ENOTDIR\", \"stat\", input);\n }\n\n async stat(input: string, options: FsOptions = {}): Promise<FileStat> {\n const path = this.path(input);\n const info = await this.lookup(path, options);\n this.requireDirectorySuffix(input, info);\n if (!info) fail(\"ENOENT\", \"stat\", input);\n recordS3Stat(this, path, info.stat, info.metadata);\n return info.stat;\n }\n\n async lstat(path: string, options: FsOptions = {}): Promise<FileStat> {\n return this.stat(path, options);\n }\n\n private async body(output: S3GetOutput, path: string, options: ReadFileOptions): Promise<Uint8Array> {\n const limit = Math.min(this.maxReadBytes, validateLimit(options.maxBytes ?? this.maxReadBytes, \"maxBytes\", 0));\n return this.call(\"readFile\", path, options, async () => {\n if (output.ContentLength !== undefined && output.ContentLength > limit) fail(\"EFBIG\", \"readFile\", path);\n const body = output.Body;\n if (!body) fail(\"EIO\", \"readFile\", path, \"transport omitted the response body\");\n let bytes: Uint8Array;\n if (body instanceof Uint8Array) {\n if (body.byteLength > limit) fail(\"EFBIG\", \"readFile\", path);\n bytes = new Uint8Array(body);\n } else if (Symbol.asyncIterator in body) {\n bytes = await collectBytes(body, { maxBytes: limit, ...(options.signal ? { signal: options.signal } : {}) });\n } else if (\"transformToByteArray\" in body) {\n const converted = await body.transformToByteArray();\n if (!(converted instanceof Uint8Array)) fail(\"EIO\", \"readFile\", path, \"transport body is not binary\");\n if (converted.byteLength > limit) fail(\"EFBIG\", \"readFile\", path);\n bytes = new Uint8Array(converted);\n } else fail(\"EIO\", \"readFile\", path, \"unsupported response body\");\n this.checkAbort(options, \"readFile\", path);\n if (output.ContentLength !== undefined && output.ContentLength !== bytes.byteLength) fail(\"EIO\", \"readFile\", path, \"response body length does not match ContentLength\");\n return bytes;\n }).catch((error: unknown) => {\n this.dispose(output.Body);\n throw error;\n });\n }\n\n private async get(path: string, options: FsOptions): Promise<S3GetOutput> {\n return this.call(\"getObject\", path, options, () => this.transport.getObject({ Bucket: this.bucket, Key: this.key(path) }, this.requestOptions(options)));\n }\n\n async readFile(input: string, options: ReadFileOptions = {}): Promise<Uint8Array> {\n const path = this.path(input);\n validateLimit(options.maxBytes ?? this.maxReadBytes, \"maxBytes\", 0);\n const info = await this.stat(input, options);\n if (info.type === \"directory\") fail(\"EISDIR\", \"readFile\", path);\n if (info.size > Math.min(this.maxReadBytes, options.maxBytes ?? this.maxReadBytes)) fail(\"EFBIG\", \"readFile\", path);\n return this.body(await this.get(path, options), path, options);\n }\n\n private etag(metadata: S3HeadOutput | undefined, path: string): string {\n if (!metadata?.ETag) this.unsupported(\"conditional mutation without an ETag\", path);\n return metadata.ETag;\n }\n\n async writeFile(input: string, data: Uint8Array, options: WriteFileOptions = {}): Promise<void> {\n const path = this.path(input);\n this.writable(path, options.mode);\n if (!(data instanceof Uint8Array)) fail(\"EINVAL\", \"writeFile\", path, \"data must be Uint8Array\");\n const bytes = new Uint8Array(data);\n if (bytes.byteLength > 5_000_000_000) fail(\"EFBIG\", \"writeFile\", path, \"multipart upload is not supported\");\n const flag = options.flag ?? \"w\";\n if (![\"w\", \"wx\", \"a\", \"ax\"].includes(flag)) fail(\"EINVAL\", \"writeFile\", path, \"invalid write flag\");\n if (flag !== \"w\" && !this.transport.capabilities?.conditionalPut) this.unsupported(\"conditional writes\", path);\n const info = await this.lookup(path, options);\n this.requireDirectorySuffix(input, info);\n if (info?.stat.type === \"directory\") fail(\"EISDIR\", \"writeFile\", path);\n if (input.endsWith(\"/\")) fail(\"EISDIR\", \"writeFile\", input);\n const exclusive = flag === \"wx\" || flag === \"ax\";\n if (exclusive && info) fail(\"EEXIST\", \"writeFile\", path);\n let body = bytes;\n let match: string | undefined;\n let metadata: Record<string, string> | undefined = this.writeMetadata(info?.metadata, options.mode);\n if (flag === \"a\" && info) {\n const current = await this.get(path, options);\n const previous = await this.body(current, path, options);\n match = this.etag(current, path);\n metadata = { ...current.Metadata };\n delete metadata[\"virtual-bash-mtime\"];\n if (previous.length + bytes.length > this.maxReadBytes) fail(\"EFBIG\", \"appendFile\", path);\n body = new Uint8Array(previous.length + bytes.length);\n body.set(previous);\n body.set(bytes, previous.length);\n }\n await this.call(\"putObject\", path, options, () => this.transport.putObject({\n Bucket: this.bucket, Key: this.key(path), Body: body,\n ...(match === undefined ? {} : { IfMatch: match }),\n ...(exclusive || (flag === \"a\" && !info) ? { IfNoneMatch: \"*\" as const } : {}),\n ...(metadata === undefined ? {} : { Metadata: metadata }),\n }, this.requestOptions(options)), exclusive ? \"EEXIST\" : \"EAGAIN\");\n }\n\n private writeMetadata(previous: S3HeadOutput | undefined, mode?: number): Record<string, string> | undefined {\n const metadata = { ...previous?.Metadata };\n delete metadata[\"virtual-bash-mtime\"];\n if (previous === undefined && mode !== undefined) metadata[\"virtual-bash-mode\"] = String(mode);\n return Object.keys(metadata).length === 0 ? undefined : metadata;\n }\n\n async appendFile(path: string, data: Uint8Array, options: AppendFileOptions = {}): Promise<void> {\n return this.writeFile(path, data, { ...options, flag: \"a\" });\n }\n\n async mkdir(input: string, options: MkdirOptions = {}): Promise<void> {\n const path = this.path(input);\n this.writable(path, options.mode);\n if (options.recursive && path !== \"/\") {\n await this.mkdir(posix.dirname(path), { ...options, recursive: true });\n }\n const info = await this.lookup(path, options);\n if (info) {\n if (options.recursive && info.stat.type === \"directory\") return;\n fail(\"EEXIST\", \"mkdir\", path);\n }\n await this.call(\"putObject\", path, options, () => this.transport.putObject({\n Bucket: this.bucket, Key: this.directoryKey(path), Body: new Uint8Array(),\n ...(options.mode === undefined ? {} : { Metadata: { \"virtual-bash-mode\": String(options.mode) } }),\n ...(this.transport.capabilities?.conditionalPut ? { IfNoneMatch: \"*\" as const } : {}),\n }, this.requestOptions(options)), \"EEXIST\");\n }\n\n async readdir(input: string, options: FsOptions = {}): Promise<DirectoryEntry[]> {\n const path = this.path(input);\n if ((await this.stat(input, options)).type !== \"directory\") fail(\"ENOTDIR\", \"readdir\", path);\n const prefix = this.directoryKey(path);\n const entries = new Map<string, DirectoryEntry>();\n const add = (name: string, type: \"file\" | \"directory\"): void => {\n if (!name || name.includes(\"/\")) fail(\"EIO\", \"readdir\", path, \"invalid direct child in delimited listing\");\n const existing = entries.get(name);\n if (existing && existing.type !== type) this.unsupported(\"file/prefix collisions\", path);\n entries.set(name, { name, type });\n };\n for await (const page of this.pages(prefix, path, options, \"/\")) {\n for (const item of page.Contents ?? []) {\n if (item.Key === prefix) continue;\n add(item.Key!.slice(prefix.length), \"file\");\n }\n for (const item of page.CommonPrefixes ?? []) add(item.Prefix!.slice(prefix.length, -1), \"directory\");\n }\n return [...entries.values()].sort((left, right) => Buffer.compare(Buffer.from(left.name), Buffer.from(right.name)));\n }\n\n private async tree(path: string, options: FsOptions): Promise<S3ObjectSummary[]> {\n const objects = new Map<string, S3ObjectSummary>();\n for await (const page of this.pages(this.directoryKey(path), path, options)) {\n for (const item of page.Contents ?? []) objects.set(item.Key!, item);\n }\n for (const key of objects.keys()) {\n const withoutSlash = key.replace(/\\/$/, \"\");\n if (key.endsWith(\"/\") && objects.has(withoutSlash)) this.unsupported(\"file/prefix collisions\", path);\n let parent = posix.dirname(withoutSlash);\n while (parent !== \".\" && parent !== \"/\") {\n if (objects.has(parent)) this.unsupported(\"file/prefix collisions\", path);\n parent = posix.dirname(parent);\n }\n }\n return [...objects.values()];\n }\n\n async rmdir(input: string, options: FsOptions = {}): Promise<void> {\n try {\n const path = this.path(input);\n this.checkAbort(options, \"rmdir\", input);\n this.writable(path);\n if (path === \"/\") fail(\"EBUSY\", \"rmdir\", input, \"cannot remove the mounted root\");\n const info = await this.lookup(path, options);\n this.checkAbort(options, \"rmdir\", input);\n if (!info) fail(\"ENOENT\", \"rmdir\", input);\n if (info.stat.type !== \"directory\") fail(\"ENOTDIR\", \"rmdir\", input);\n const prefix = this.directoryKey(path);\n let markerObserved = false;\n for await (const page of this.pages(prefix, path, options, \"/\", Math.max(2, this.pageSize))) {\n this.checkAbort(options, \"rmdir\", input);\n if (page.Contents?.some(item => item.Key !== prefix) || page.CommonPrefixes?.length) {\n fail(\"ENOTEMPTY\", \"rmdir\", input);\n }\n if (page.IsTruncated === undefined) fail(\"EIO\", \"rmdir\", input, \"listing did not confirm completeness\");\n if (page.Contents?.some(item => item.Key === prefix)) markerObserved = true;\n }\n this.checkAbort(options, \"rmdir\", input);\n if (!info.metadata) fail(\"ENOTSUP\", \"rmdir\", input, \"snapshot removal requires an explicit directory marker\");\n if (!markerObserved) fail(\"ENOENT\", \"rmdir\", input, \"directory marker disappeared during inspection\");\n await this.call(\"deleteObject\", path, options, () => this.transport.deleteObject({ Bucket: this.bucket, Key: prefix }, this.requestOptions(options)));\n } catch (error) {\n if (isFsError(error) && (error.syscall !== \"rmdir\" || error.path !== input)) {\n throw new FsError(error.code, { syscall: \"rmdir\", path: input, cause: error });\n }\n throw error;\n }\n }\n\n async rm(input: string, options: RemoveOptions = {}): Promise<void> {\n const path = this.path(input);\n this.writable(path);\n if (path === \"/\") fail(\"EBUSY\", \"rm\", path, \"cannot remove the mounted root\");\n let info: NodeInfo | undefined;\n try {\n info = await this.lookup(path, options);\n } catch (error) {\n if (options.force && isFsError(error, \"ENOENT\") && serviceCode(error.cause) !== \"NoSuchBucket\") return;\n throw error;\n }\n this.requireDirectorySuffix(input, info);\n if (!info) {\n if (options.force) return;\n fail(\"ENOENT\", \"rm\", path);\n }\n const objects = info.stat.type === \"directory\" ? await this.tree(path, options) : [{ Key: this.key(path) }];\n if (info.stat.type === \"directory\" && !options.recursive && objects.some((item) => item.Key !== this.directoryKey(path))) fail(\"ENOTEMPTY\", \"rm\", path);\n for (const item of objects) {\n await this.call(\"deleteObject\", path, options, () => this.transport.deleteObject({ Bucket: this.bucket, Key: item.Key! }, this.requestOptions(options)));\n }\n }\n\n private async copy(sourceKey: string, destinationKey: string, source: string, metadata: S3HeadOutput, options: CopyFileOptions, destination?: S3HeadOutput | null): Promise<void> {\n if (metadata.ContentLength === undefined || metadata.ContentLength > 5_000_000_000) this.unsupported(\"multipart copy\", source);\n const etag = this.etag(metadata, source);\n const result = await this.call(\"copyObject\", source, options, () => this.transport.copyObject({\n Bucket: this.bucket, Key: destinationKey, CopySource: encodeCopySource(this.bucket, sourceKey),\n CopySourceIfMatch: etag, MetadataDirective: \"COPY\",\n ...(options.exclusive ? { IfNoneMatch: \"*\" as const } : {}),\n ...(destination === undefined ? {} : destination === null ? { IfNoneMatch: \"*\" as const } : { IfMatch: this.etag(destination, source) }),\n }, this.requestOptions(options)));\n if (!result.CopyObjectResult?.ETag) fail(\"EIO\", \"copyObject\", source, \"transport did not confirm a completed CopyObject result\");\n }\n\n async copyFile(sourceInput: string, destinationInput: string, options: CopyFileOptions = {}): Promise<void> {\n const source = this.path(sourceInput);\n const destination = this.path(destinationInput);\n this.writable(destination);\n if (options.exclusive && !this.transport.capabilities?.conditionalCopy) this.unsupported(\"exclusive server-side copy\", destination);\n const origin = await this.lookup(source, options);\n this.requireDirectorySuffix(sourceInput, origin);\n if (!origin) fail(\"ENOENT\", \"copyFile\", source);\n if (origin.stat.type === \"directory\") fail(\"EISDIR\", \"copyFile\", source);\n const target = await this.lookup(destination, options);\n this.requireDirectorySuffix(destinationInput, target);\n if (target?.stat.type === \"directory\" || destinationInput.endsWith(\"/\")) fail(\"EISDIR\", \"copyFile\", destination);\n if (target && options.exclusive) fail(\"EEXIST\", \"copyFile\", destination);\n if (source === destination) return;\n try {\n await this.copy(this.key(source), this.key(destination), source, origin.metadata!, options);\n } catch (error) {\n if (!options.exclusive || !isFsError(error, \"EAGAIN\")) throw error;\n const status = (error.cause as { $metadata?: { httpStatusCode?: number } } | null)?.$metadata?.httpStatusCode;\n if (serviceCode(error.cause) !== \"PreconditionFailed\" && status !== 412) throw error;\n let destinationExists = false;\n try {\n const currentSource = await this.head(this.key(source), source, options);\n if (currentSource?.ETag === origin.metadata?.ETag) {\n destinationExists = await this.head(this.key(destination), destination, options) !== undefined;\n }\n } catch (diagnosticError) {\n if (isFsError(diagnosticError, \"ECANCELED\")) throw diagnosticError;\n }\n if (destinationExists) {\n throw new FsError(\"EEXIST\", { syscall: \"copyFile\", path: source, dest: destination, cause: error });\n }\n throw error;\n }\n }\n\n async rename(sourceInput: string, destinationInput: string, options: FsOptions = {}): Promise<void> {\n const source = this.path(sourceInput);\n const destination = this.path(destinationInput);\n this.writable(destination);\n if (!this.allowRename) this.unsupported(\"atomic rename; explicitly enable allowNonAtomicRename for copy/delete semantics\", source);\n if (!this.transport.capabilities?.conditionalDelete) this.unsupported(\"rename without conditional delete\", source);\n const conditionalCopy = this.transport.capabilities?.conditionalCopy === true;\n if (!conditionalCopy && this.transport.capabilities?.conditionalPut !== true) {\n this.unsupported(\"rename requires conditional destination copy or conditional PUT, plus conditional delete\", source);\n }\n const streamFallback = this.capabilities.streamingRead && this.capabilities.streamingWrite;\n if (source === \"/\" || destination === \"/\") fail(\"EBUSY\", \"rename\", source);\n const origin = await this.lookup(source, options);\n this.requireDirectorySuffix(sourceInput, origin);\n if (!origin) fail(\"ENOENT\", \"rename\", source);\n if (source === destination) {\n this.requireDirectorySuffix(destinationInput, origin);\n return;\n }\n if (destination.startsWith(`${source}/`)) fail(\"EINVAL\", \"rename\", destination, \"cannot move a path into itself\");\n const target = await this.lookup(destination, options);\n this.requireDirectorySuffix(destinationInput, target);\n if (destinationInput.endsWith(\"/\") && origin.stat.type !== \"directory\") fail(\"ENOTDIR\", \"rename\", destination);\n if (target && target.stat.type !== origin.stat.type) fail(target.stat.type === \"directory\" ? \"EISDIR\" : \"ENOTDIR\", \"rename\", destination);\n if (target?.stat.type === \"directory\" && (await this.readdir(destination, options)).length > 0) fail(\"ENOTEMPTY\", \"rename\", destination);\n if (target?.metadata) this.etag(target.metadata, destination);\n const objects = origin.stat.type === \"directory\" ? await this.tree(source, options) : [{\n Key: this.key(source), Size: origin.stat.size, ETag: origin.metadata?.ETag,\n }];\n for (const object of objects) {\n this.etag({ ETag: object.ETag }, source);\n if (object.Size === undefined || object.Size > 5_000_000_000) this.unsupported(\"multipart copy\", source);\n if (!conditionalCopy && object.Size > (streamFallback ? this.maxStreamBytes : this.maxReadBytes)) {\n fail(\"EFBIG\", \"rename\", source, \"conditional PUT fallback exceeds its configured transfer or buffered read limit\");\n }\n if (Buffer.byteLength(this.key(destination) + object.Key!.slice(this.key(source).length)) > 1024) fail(\"ENAMETOOLONG\", \"rename\", destination);\n }\n const copied: string[] = [];\n const deleted: string[] = [];\n let phase: \"copy\" | \"delete\" = \"copy\";\n try {\n for (const object of objects) {\n const destinationKey = this.key(destination) + object.Key!.slice(this.key(source).length);\n const destinationMetadata = origin.stat.type === \"file\" || object.Key === this.directoryKey(source) ? target?.metadata ?? null : null;\n const metadata = { ContentLength: object.Size, ETag: object.ETag };\n if (conditionalCopy) await this.copy(object.Key!, destinationKey, source, metadata, options, destinationMetadata);\n else await this.copyWithPut(object.Key!, destinationKey, source, metadata, destinationMetadata, options, streamFallback);\n copied.push(destinationKey);\n }\n phase = \"delete\";\n for (const object of objects) {\n await this.call(\"deleteObject\", source, options, () => this.transport.deleteObject({\n Bucket: this.bucket, Key: object.Key!, IfMatch: object.ETag!,\n }, this.requestOptions(options)));\n deleted.push(object.Key!);\n }\n } catch (error) {\n throw new S3RenameError(source, destination, phase, copied, deleted, translate(error, \"rename\", source));\n }\n }\n\n private async copyWithPut(sourceKey: string, destinationKey: string, source: string, expected: S3HeadOutput,\n destination: S3HeadOutput | null, options: FsOptions, streaming: boolean): Promise<void> {\n const etag = this.etag(expected, source);\n const condition = destination === null ? { IfNoneMatch: \"*\" as const } : { IfMatch: this.etag(destination, destinationKey) };\n const controller = new AbortController();\n const signalScope = options.signal ? composeAbortSignals([options.signal, controller.signal]) : undefined;\n const signal = signalScope?.signal ?? controller.signal;\n const operationOptions = { signal };\n let output: S3GetOutput | undefined;\n let upload: AsyncGenerator<Uint8Array> | undefined;\n let reading = false;\n try {\n output = await this.call(\"getObject\", source, operationOptions, () => streaming\n ? this.transport.getObjectStream!({ Bucket: this.bucket, Key: sourceKey, IfMatch: etag }, { abortSignal: signal })\n : this.transport.getObject({ Bucket: this.bucket, Key: sourceKey }, { abortSignal: signal }));\n if (this.etag(output, source) !== etag) fail(\"EAGAIN\", \"rename\", source, \"source changed before conditional PUT copy\");\n if (output.ContentLength !== undefined && output.ContentLength !== expected.ContentLength) {\n fail(\"EIO\", \"rename\", source, \"source response length differs from the enumerated object\");\n }\n const input = { Bucket: this.bucket, Key: destinationKey, ...condition,\n ...(output.Metadata === undefined ? {} : { Metadata: { ...output.Metadata } }) };\n if (!streaming) {\n const body = await this.body(output, source, operationOptions);\n if (body.length !== expected.ContentLength) fail(\"EIO\", \"rename\", source, \"source body length differs from the enumerated object\");\n await this.call(\"putObject\", source, operationOptions, () => this.transport.putObject({ ...input, Body: body }, { abortSignal: signal }));\n return;\n }\n const body = output.Body;\n if (!body || !(Symbol.asyncIterator in body)) fail(\"EIO\", \"rename\", source, \"streaming transport did not return an async binary body\");\n let finished = false;\n upload = (async function* () {\n let count = 0;\n reading = true;\n for await (const chunk of readBytes(body, signal)) {\n if (chunk.length > expected.ContentLength! - count) fail(\"EIO\", \"rename\", source, \"source body exceeds its enumerated length\");\n count += chunk.length;\n for (let offset = 0; offset < chunk.length; offset += 64 * 1024) {\n signal.throwIfAborted();\n yield new Uint8Array(chunk.subarray(offset, offset + 64 * 1024));\n }\n }\n if (count !== expected.ContentLength) fail(\"EIO\", \"rename\", source, \"incomplete source body\");\n finished = true;\n })();\n await this.call(\"putObject\", source, operationOptions, () => this.transport.putObjectStream!({ ...input, Body: upload! }, { abortSignal: signal }));\n if (!finished) fail(\"EIO\", \"rename\", source, \"transport completed without consuming the conditional copy body\");\n } finally {\n controller.abort();\n signalScope?.dispose();\n this.dispose(upload);\n this.dispose(output?.Body, !reading);\n }\n }\n\n async realpath(input: string, options: FsOptions = {}): Promise<string> {\n await this.stat(input, options);\n return this.path(input);\n }\n\n async access(path: string, mode = 0, options: FsOptions = {}): Promise<void> {\n if (!Number.isInteger(mode) || mode < 0 || mode > 7) fail(\"EINVAL\", \"access\", path);\n const info = await this.stat(path, options);\n if ((mode & 2) !== 0 && this.capabilities.readOnly) fail(\"EROFS\", \"access\", path);\n if ((mode & 1) !== 0 && info.type !== \"directory\") fail(\"EACCES\", \"access\", path);\n }\n\n async readlink(path: string): Promise<string> { return this.unsupported(\"readlink\", path); }\n async symlink(_target: string, path: string): Promise<void> { this.unsupported(\"symlink\", path); }\n async link(_existingPath: string, path: string): Promise<void> { this.unsupported(\"link\", path); }\n async chmod(path: string, _mode: number): Promise<void> { this.unsupported(\"chmod\", path); }\n\n async utimes(input: string, atimeMs: number, mtimeMs: number, options: FsOptions = {}): Promise<void> {\n const path = this.path(input);\n this.writable(path);\n if (!Number.isFinite(atimeMs) || !Number.isFinite(mtimeMs)) fail(\"EINVAL\", \"utimes\", path);\n const info = await this.lookup(path, options);\n this.requireDirectorySuffix(input, info);\n if (!info) fail(\"ENOENT\", \"utimes\", path);\n if (!this.capabilities.timestamps) this.unsupported(\"conditional metadata mutation\", path);\n const key = info.stat.type === \"directory\" ? this.directoryKey(path) : this.key(path);\n if (!key) this.unsupported(\"timestamps on an unprefixed bucket root\", path);\n const metadata = { ...info.metadata?.Metadata,\n \"virtual-bash-atime\": String(atimeMs), \"virtual-bash-mtime\": String(mtimeMs) };\n if (!info.metadata) {\n if (!this.transport.capabilities?.conditionalPut) this.unsupported(\"conditional directory marker creation\", path);\n await this.call(\"utimes\", path, options, () => this.transport.putObject({\n Bucket: this.bucket, Key: key, Body: new Uint8Array(), Metadata: metadata, IfNoneMatch: \"*\",\n }, this.requestOptions(options)));\n return;\n }\n if (!this.transport.capabilities?.conditionalCopy) {\n const current = await this.call(\"getObject\", path, options, () => this.transport.getObject({\n Bucket: this.bucket, Key: key,\n }, this.requestOptions(options)));\n const body = await this.body(current, path, options);\n await this.call(\"utimes\", path, options, () => this.transport.putObject({\n Bucket: this.bucket, Key: key, Body: body, IfMatch: this.etag(current, path),\n Metadata: { ...current.Metadata, \"virtual-bash-atime\": String(atimeMs), \"virtual-bash-mtime\": String(mtimeMs) },\n }, this.requestOptions(options)));\n return;\n }\n if (info.stat.size > 5_000_000_000) this.unsupported(\"multipart metadata copy\", path);\n const etag = this.etag(info.metadata, path);\n const result = await this.call(\"utimes\", path, options, () => this.transport.copyObject({\n Bucket: this.bucket, Key: key, CopySource: encodeCopySource(this.bucket, key),\n CopySourceIfMatch: etag, IfMatch: etag, MetadataDirective: \"REPLACE\", Metadata: metadata,\n }, this.requestOptions(options)));\n if (!result.CopyObjectResult?.ETag) fail(\"EIO\", \"utimes\", path, \"transport did not confirm a completed metadata copy\");\n }\n\n async truncate(input: string, length = 0, options: FsOptions = {}): Promise<void> {\n const path = this.path(input);\n this.writable(path);\n validateLimit(length, \"length\", 0);\n const info = await this.lookup(path, options);\n this.requireDirectorySuffix(input, info);\n if (!info) fail(\"ENOENT\", \"truncate\", path);\n if (info.stat.type === \"directory\") fail(\"EISDIR\", \"truncate\", path);\n if (!this.transport.capabilities?.conditionalPut) this.unsupported(\"conditional truncate\", path);\n if (length > this.maxReadBytes) fail(\"EFBIG\", \"truncate\", path);\n let current = info.metadata!;\n const body = new Uint8Array(length);\n if (length !== 0 && info.stat.size !== 0) {\n if (this.readStream) {\n const previous = await this.call(\"truncate\", path, options, () => collectBytes(this.readStream!(input, { ...options, endExclusive: Math.min(length, info.stat.size) }), { ...options, maxBytes: length }));\n body.set(previous);\n } else {\n const output = await this.get(path, options);\n const previous = await this.body(output, path, options);\n current = output;\n body.set(previous.subarray(0, length));\n }\n }\n const metadata = { ...current.Metadata };\n delete metadata[\"virtual-bash-mtime\"];\n await this.call(\"truncate\", path, options, () => this.transport.putObject({\n Bucket: this.bucket, Key: this.key(path), Body: body, IfMatch: this.etag(current, path), Metadata: metadata,\n }, this.requestOptions(options)));\n }\n\n private async *streamRead(input: string, options: ReadStreamOptions = {}): ByteSource {\n const path = this.path(input);\n const start = validateLimit(options.start ?? 0, \"start\", 0);\n const end = options.endExclusive === undefined ? undefined : validateLimit(options.endExclusive, \"endExclusive\", start);\n const chunkSize = validateLimit(options.chunkSize ?? 64 * 1024, \"chunkSize\", 1);\n const info = await this.lookup(path, options);\n this.requireDirectorySuffix(input, info);\n if (!info) fail(\"ENOENT\", \"readStream\", path);\n if (info.stat.type === \"directory\") fail(\"EISDIR\", \"readStream\", path);\n const stop = Math.min(end ?? info.stat.size, info.stat.size);\n const expected = Math.max(0, stop - start);\n if (expected > this.maxStreamBytes) fail(\"EFBIG\", \"readStream\", path);\n if (expected === 0 && info.stat.size !== 0) return;\n let count = 0;\n let finished = false;\n const controller = new AbortController();\n const signalScope = options.signal ? composeAbortSignals([options.signal, controller.signal]) : undefined;\n const signal = signalScope?.signal ?? controller.signal;\n let output: S3StreamGetOutput | undefined;\n let iterator: AsyncIterator<Uint8Array> | undefined;\n try {\n output = await this.call(\"getObject\", path, options, () => this.transport.getObjectStream!({\n Bucket: this.bucket, Key: this.key(path), IfMatch: this.etag(info.metadata, path),\n ...(expected === 0 || (start === 0 && stop === info.stat.size) ? {} : { Range: `bytes=${start}-${stop - 1}` }),\n }, { abortSignal: signal }));\n if (output.ETag !== undefined && output.ETag !== info.metadata?.ETag) fail(\"EIO\", \"readStream\", path, \"response ETag differs from requested snapshot\");\n if (output.ContentLength !== undefined && output.ContentLength !== expected) fail(\"EIO\", \"readStream\", path, \"response length differs from requested snapshot\");\n iterator = readBytes(output.Body, signal)[Symbol.asyncIterator]();\n while (true) {\n const result = await iterator.next();\n if (result.done) break;\n const chunk = result.value;\n if (chunk.length > expected - count) fail(\"EIO\", \"readStream\", path, \"response exceeds requested length\");\n count += chunk.length;\n for (let offset = 0; offset < chunk.length; offset += chunkSize) {\n this.checkAbort(options, \"readStream\", path);\n yield new Uint8Array(chunk.subarray(offset, offset + chunkSize));\n }\n }\n if (count !== expected) fail(\"EIO\", \"readStream\", path, \"incomplete response body\");\n finished = true;\n } catch (error) {\n this.checkAbort(options, \"readStream\", path);\n throw translate(error, \"readStream\", path);\n } finally {\n controller.abort();\n signalScope?.dispose();\n if (!finished && output) {\n this.dispose(iterator);\n this.dispose(output.Body, iterator === undefined);\n }\n }\n }\n\n private dispose(body: unknown, returnIterator = true): void {\n const disposable = body as { destroy?: () => void; cancel?: () => unknown; return?: () => unknown } | undefined;\n try {\n const result = typeof disposable?.destroy === \"function\" ? disposable.destroy()\n : typeof disposable?.cancel === \"function\" ? disposable.cancel() : returnIterator ? disposable?.return?.() : undefined;\n void Promise.resolve(result).catch(() => {});\n } catch (ignoredError) { void ignoredError; }\n }\n\n private async streamWrite(input: string, source: ByteSource, options: WriteFileOptions = {}): Promise<void> {\n const path = this.path(input);\n this.writable(path, options.mode);\n const flag = options.flag ?? \"w\";\n if (![\"w\", \"wx\", \"a\", \"ax\"].includes(flag)) fail(\"EINVAL\", \"writeStream\", path);\n if (flag !== \"w\" && !this.transport.capabilities?.conditionalPut) this.unsupported(\"conditional writes\", path);\n const info = await this.lookup(path, options);\n this.requireDirectorySuffix(input, info);\n if (info?.stat.type === \"directory\" || input.endsWith(\"/\")) fail(\"EISDIR\", \"writeStream\", path);\n const exclusive = flag === \"wx\" || flag === \"ax\";\n if (exclusive && info) fail(\"EEXIST\", \"writeStream\", path);\n if (flag === \"a\") {\n const current = info ? await this.get(path, options) : undefined;\n const previous = current ? await this.body(current, path, options) : new Uint8Array();\n const limit = Math.min(this.maxReadBytes, this.maxStreamBytes);\n if (previous.length > limit) fail(\"EFBIG\", \"writeStream\", path);\n const bytes = await this.call(\"writeStream\", path, options, () => collectBytes(source, { maxBytes: limit - previous.length, ...options }));\n const body = new Uint8Array(previous.length + bytes.length);\n body.set(previous);\n body.set(bytes, previous.length);\n const metadata = this.writeMetadata(current, options.mode);\n await this.call(\"putObject\", path, options, () => this.transport.putObject({\n Bucket: this.bucket, Key: this.key(path), Body: body,\n ...(current ? { IfMatch: this.etag(current, path) } : { IfNoneMatch: \"*\" as const }),\n ...(metadata ? { Metadata: metadata } : {}),\n }, this.requestOptions(options)));\n return;\n }\n const controller = new AbortController();\n const signalScope = options.signal ? composeAbortSignals([options.signal, controller.signal]) : undefined;\n const signal = signalScope?.signal ?? controller.signal;\n let finished = false;\n const body = (async function* (this: S3FileSystem) {\n let total = 0;\n for await (const chunk of readBytes(source, signal)) {\n if (chunk.length > this.maxStreamBytes - total) fail(\"EFBIG\", \"writeStream\", path);\n total += chunk.length;\n for (let offset = 0; offset < chunk.length; offset += 64 * 1024) {\n this.checkAbort({ signal }, \"writeStream\", path);\n yield new Uint8Array(chunk.subarray(offset, offset + 64 * 1024));\n }\n }\n finished = true;\n }).call(this);\n try {\n const metadata = this.writeMetadata(info?.metadata, options.mode);\n await this.call(\"putObject\", path, options, () => this.transport.putObjectStream!({\n Bucket: this.bucket, Key: this.key(path), Body: body, ...(exclusive ? { IfNoneMatch: \"*\" as const } : {}),\n ...(metadata === undefined ? {} : { Metadata: metadata }),\n }, { abortSignal: signal }), exclusive ? \"EEXIST\" : \"EAGAIN\");\n if (!finished) fail(\"EIO\", \"writeStream\", path, \"transport completed without consuming the request body\");\n } finally {\n controller.abort();\n signalScope?.dispose();\n this.dispose(body);\n }\n }\n}\n\nconst s3Comparison = S3FileSystem.prototype.compareEntry;\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\nimport type { FileStat, FileSystem } from \"../../contracts/filesystem.js\";\nimport type { S3HeadOutput, S3ObjectInput } from \"./transport.js\";\n\nimport { recordS3Observation } from \"./registry.js\";\nimport type { OwnedS3Entry } from \"./registry.js\";\nexport { registerS3EntryOwner, getOwnedS3Entry, compareOwnedS3Entries } from \"./registry.js\";\nexport type { OwnedS3Entry } from \"./registry.js\";\n\ninterface HeadProof {\n readonly query: S3ObjectInput;\n readonly entry: OwnedS3Entry;\n}\n\nconst queries = new AsyncLocalStorage<S3ObjectInput>();\nconst providerHeads = new WeakMap<S3HeadOutput, HeadProof>();\nconst acceptedHeads = new WeakMap<S3HeadOutput, OwnedS3Entry>();\nexport function recordMockS3Head(output: S3HeadOutput, input: S3ObjectInput, storage: object): void {\n const query = queries.getStore();\n if (query && query.Bucket === input.Bucket && query.Key === input.Key) {\n providerHeads.set(output, { query, entry: { storage, key: input.Key } });\n }\n}\n\nexport async function queryS3Head(input: S3ObjectInput, action: () => Promise<S3HeadOutput>): Promise<S3HeadOutput> {\n const query = { ...input };\n return queries.run(query, async () => {\n const output = await action();\n acceptedHeads.delete(output);\n const proof = providerHeads.get(output);\n if (proof?.query === query) acceptedHeads.set(output, proof.entry);\n return output;\n });\n}\n\nexport function recordS3Stat(filesystem: FileSystem, path: string, stat: FileStat, metadata: S3HeadOutput | undefined): void {\n if (!metadata) return;\n const entry = acceptedHeads.get(metadata);\n acceptedHeads.delete(metadata);\n if (entry) recordS3Observation(filesystem, path, stat, entry);\n}\n", "export interface S3RequestOptions {\n readonly abortSignal?: AbortSignal;\n}\n\nexport interface S3ObjectInput {\n readonly Bucket: string;\n readonly Key: string;\n}\n\nexport interface S3HeadOutput {\n readonly ContentLength?: number | undefined;\n readonly LastModified?: Date | undefined;\n readonly ETag?: string | undefined;\n readonly Metadata?: Record<string, string> | undefined;\n}\n\nexport type S3Body = Uint8Array | AsyncIterable<Uint8Array> | {\n transformToByteArray(): Promise<Uint8Array>;\n};\n\nexport interface S3GetOutput extends S3HeadOutput {\n readonly Body?: S3Body | undefined;\n}\n\nexport interface S3StreamGetInput extends S3ObjectInput {\n readonly Range?: string;\n readonly IfMatch?: string;\n}\n\nexport interface S3StreamGetOutput extends S3HeadOutput {\n readonly Body: AsyncIterable<Uint8Array>;\n}\n\nexport interface S3StreamPutInput extends Omit<S3PutInput, \"Body\"> {\n readonly Body: AsyncIterable<Uint8Array>;\n}\n\nexport interface S3PutInput extends S3ObjectInput {\n readonly Body: Uint8Array;\n readonly IfMatch?: string;\n readonly IfNoneMatch?: \"*\";\n readonly Metadata?: Record<string, string>;\n}\n\nexport interface S3DeleteInput extends S3ObjectInput {\n readonly IfMatch?: string;\n}\n\nexport interface S3CopyInput extends S3ObjectInput {\n readonly CopySource: string;\n readonly CopySourceIfMatch?: string;\n readonly IfNoneMatch?: \"*\";\n readonly IfMatch?: string;\n readonly MetadataDirective?: \"COPY\" | \"REPLACE\";\n readonly Metadata?: Record<string, string>;\n}\n\nexport interface S3CopyOutput {\n readonly CopyObjectResult?: {\n readonly ETag?: string | undefined;\n readonly LastModified?: Date | undefined;\n } | undefined;\n}\n\nexport interface S3ListInput {\n readonly Bucket: string;\n readonly Prefix?: string;\n readonly Delimiter?: string;\n readonly MaxKeys?: number;\n readonly ContinuationToken?: string;\n}\n\nexport interface S3ObjectSummary {\n readonly Key?: string | undefined;\n readonly Size?: number | undefined;\n readonly ETag?: string | undefined;\n readonly LastModified?: Date | undefined;\n}\n\nexport interface S3ListOutput {\n readonly Contents?: readonly S3ObjectSummary[] | undefined;\n readonly CommonPrefixes?: readonly { readonly Prefix?: string | undefined }[] | undefined;\n readonly IsTruncated?: boolean | undefined;\n readonly NextContinuationToken?: string | undefined;\n readonly KeyCount?: number | undefined;\n}\n\nexport interface S3Client {\n getObjectStream?(input: S3StreamGetInput, options?: S3RequestOptions): Promise<S3StreamGetOutput>;\n putObjectStream?(input: S3StreamPutInput, options?: S3RequestOptions): Promise<unknown>;\n headObject(input: S3ObjectInput, options?: S3RequestOptions): Promise<S3HeadOutput>;\n getObject(input: S3ObjectInput, options?: S3RequestOptions): Promise<S3GetOutput>;\n putObject(input: S3PutInput, options?: S3RequestOptions): Promise<unknown>;\n deleteObject(input: S3DeleteInput, options?: S3RequestOptions): Promise<unknown>;\n copyObject(input: S3CopyInput, options?: S3RequestOptions): Promise<S3CopyOutput>;\n listObjectsV2(input: S3ListInput, options?: S3RequestOptions): Promise<S3ListOutput>;\n}\n\nexport interface S3TransportCapabilities {\n readonly streamingRead?: boolean;\n readonly streamingWrite?: boolean;\n readonly conditionalPut?: boolean;\n readonly conditionalCopy?: boolean;\n readonly conditionalDelete?: boolean;\n}\n\nexport interface S3Transport extends S3Client {\n readonly capabilities?: S3TransportCapabilities;\n}\n\nexport function createS3Transport(\n client: S3Client,\n capabilities: S3TransportCapabilities = {},\n): S3Transport {\n const transport: S3Transport = {\n capabilities: Object.freeze({ ...capabilities }),\n ...(client.getObjectStream ? { getObjectStream: (input: S3StreamGetInput, options?: S3RequestOptions) => client.getObjectStream!(input, options) } : {}),\n ...(client.putObjectStream ? { putObjectStream: (input: S3StreamPutInput, options?: S3RequestOptions) => client.putObjectStream!(input, options) } : {}),\n headObject: (input, options) => client.headObject(input, options),\n getObject: (input, options) => client.getObject(input, options),\n putObject: (input, options) => client.putObject(input, options),\n deleteObject: (input, options) => client.deleteObject(input, options),\n copyObject: (input, options) => client.copyObject(input, options),\n listObjectsV2: (input, options) => client.listObjectsV2(input, options),\n };\n return transport;\n}\n\nexport class S3ServiceError extends Error {\n readonly code: string;\n readonly $metadata: { readonly httpStatusCode: number };\n\n constructor(code: string, status: number, message = code) {\n super(message);\n this.name = code;\n this.code = code;\n this.$metadata = { httpStatusCode: status };\n }\n}\n\nexport function encodeCopySource(bucket: string, key: string): string {\n return [bucket, ...key.split(\"/\")].map((part) => encodeURIComponent(part)\n .replace(/[!'()*]/g, (character) => `%${character.charCodeAt(0).toString(16).toUpperCase()}`)).join(\"/\");\n}\n", "import { createHash } from \"node:crypto\";\nimport { collectBytes } from \"../../contracts/io.js\";\nimport { recordMockS3Head } from \"./authority.js\";\nimport type { S3StreamGetInput, S3StreamGetOutput, S3StreamPutInput } from \"./transport.js\";\nimport { S3ServiceError } from \"./transport.js\";\nimport type {\n S3CopyInput, S3CopyOutput, S3DeleteInput, S3GetOutput, S3HeadOutput,\n S3ListInput, S3ListOutput, S3ObjectInput, S3ObjectSummary, S3PutInput,\n S3RequestOptions, S3Transport,\n} from \"./transport.js\";\n\nexport type MockS3Operation = \"headObject\" | \"getObject\" | \"putObject\"\n | \"deleteObject\" | \"copyObject\" | \"listObjectsV2\";\n\nexport interface MockS3Request {\n readonly operation: MockS3Operation;\n readonly input: S3ObjectInput | S3ListInput | S3CopyInput | S3PutInput | S3DeleteInput;\n}\n\nexport interface MockS3ClientOptions {\n readonly buckets: readonly string[];\n readonly pageSize?: number;\n readonly now?: () => Date;\n readonly authorize?: (request: MockS3Request) => void | Promise<void>;\n}\n\ninterface StoredObject {\n readonly body: Uint8Array;\n readonly etag: string;\n readonly modified: Date;\n readonly metadata: Record<string, string>;\n}\n\ninterface Cursor {\n readonly scope: string;\n readonly after: string;\n}\n\nfunction compareKeys(left: string, right: string): number {\n return Buffer.compare(Buffer.from(left), Buffer.from(right));\n}\n\nexport class MockS3Client implements S3Transport {\n readonly capabilities = Object.freeze({ conditionalPut: true, conditionalCopy: true, conditionalDelete: true, streamingRead: true, streamingWrite: true });\n private readonly buckets = new Map<string, Map<string, StoredObject>>();\n private readonly cursors = new Map<string, Cursor>();\n private readonly history: MockS3Request[] = [];\n private readonly pageSize: number;\n private readonly now: () => Date;\n private readonly authorize: MockS3ClientOptions[\"authorize\"];\n private nextToken = 0;\n\n constructor(options: MockS3ClientOptions) {\n this.pageSize = options.pageSize ?? 1000;\n if (!Number.isInteger(this.pageSize) || this.pageSize < 1 || this.pageSize > 1000) {\n throw new RangeError(\"pageSize must be an integer from 1 to 1000\");\n }\n this.now = options.now ?? (() => new Date());\n this.authorize = options.authorize;\n for (const bucket of options.buckets) this.buckets.set(bucket, new Map());\n }\n\n get requests(): readonly MockS3Request[] {\n return structuredClone(this.history);\n }\n\n private async begin(operation: MockS3Operation, input: MockS3Request[\"input\"], options?: S3RequestOptions): Promise<void> {\n if (options?.abortSignal?.aborted) throw new S3ServiceError(\"AbortError\", 499);\n const request = { operation, input: structuredClone(input) };\n this.history.push(structuredClone(request));\n await this.authorize?.(request);\n if (options?.abortSignal?.aborted) throw new S3ServiceError(\"AbortError\", 499);\n if (!this.buckets.has(input.Bucket)) throw new S3ServiceError(\"NoSuchBucket\", 404);\n if (\"Key\" in input && (input.Key.length === 0 || Buffer.byteLength(input.Key) > 1024)) {\n throw new S3ServiceError(\"InvalidArgument\", 400);\n }\n }\n\n private bucket(name: string): Map<string, StoredObject> {\n const bucket = this.buckets.get(name);\n if (!bucket) throw new S3ServiceError(\"NoSuchBucket\", 404);\n return bucket;\n }\n\n private object(input: S3ObjectInput): StoredObject {\n const object = this.bucket(input.Bucket).get(input.Key);\n if (!object) throw new S3ServiceError(\"NoSuchKey\", 404);\n return object;\n }\n\n private head(object: StoredObject): S3HeadOutput {\n return {\n ContentLength: object.body.byteLength,\n ETag: object.etag,\n LastModified: new Date(object.modified),\n Metadata: { ...object.metadata },\n };\n }\n\n private store(body: Uint8Array, metadata: Record<string, string> = {}): StoredObject {\n const metadataBytes = Object.entries(metadata).reduce((total, [key, value]) => total + Buffer.byteLength(key) + Buffer.byteLength(value), 0);\n if (metadataBytes > 2048) throw new S3ServiceError(\"MetadataTooLarge\", 400);\n return {\n body: new Uint8Array(body),\n etag: `\"${createHash(\"md5\").update(body).digest(\"hex\")}\"`,\n modified: new Date(this.now()),\n metadata: { ...metadata },\n };\n }\n\n async headObject(input: S3ObjectInput, options?: S3RequestOptions): Promise<S3HeadOutput> {\n await this.begin(\"headObject\", input, options);\n const output = this.head(this.object(input));\n recordMockS3Head(output, input, this.bucket(input.Bucket));\n return output;\n }\n\n async getObject(input: S3ObjectInput, options?: S3RequestOptions): Promise<S3GetOutput> {\n await this.begin(\"getObject\", input, options);\n const object = this.object(input);\n return { ...this.head(object), Body: new Uint8Array(object.body) };\n }\n\n async putObject(input: S3PutInput, options?: S3RequestOptions): Promise<{ ETag: string }> {\n if (!(input.Body instanceof Uint8Array)) throw new S3ServiceError(\"InvalidArgument\", 400);\n input = { ...input, Body: new Uint8Array(input.Body), ...(input.Metadata ? { Metadata: { ...input.Metadata } } : {}) };\n await this.begin(\"putObject\", input, options);\n const bucket = this.bucket(input.Bucket);\n const previous = bucket.get(input.Key);\n if (input.IfMatch !== undefined && !previous) throw new S3ServiceError(\"NoSuchKey\", 404);\n if ((input.IfNoneMatch === \"*\" && previous)\n || (input.IfMatch !== undefined && previous?.etag !== input.IfMatch)) {\n throw new S3ServiceError(\"PreconditionFailed\", 412);\n }\n const object = this.store(input.Body, input.Metadata);\n bucket.set(input.Key, object);\n return { ETag: object.etag };\n }\n\n async getObjectStream(input: S3StreamGetInput, options?: S3RequestOptions): Promise<S3StreamGetOutput> {\n await this.begin(\"getObject\", input, options);\n const object = this.object(input);\n if (input.IfMatch !== undefined && input.IfMatch !== object.etag) throw new S3ServiceError(\"PreconditionFailed\", 412);\n let start = 0;\n let end = object.body.length;\n if (input.Range !== undefined) {\n const range = /^bytes=(\\d+)-(\\d+)$/.exec(input.Range);\n if (!range) throw new S3ServiceError(\"InvalidArgument\", 400);\n start = Number(range[1]);\n end = Math.min(Number(range[2]) + 1, end);\n if (start >= end) throw new S3ServiceError(\"InvalidRange\", 416);\n }\n return {\n ...this.head(object), ContentLength: end - start,\n Body: (async function* () {\n for (let offset = start; offset < end; offset += 64 * 1024) {\n if (options?.abortSignal?.aborted) throw new S3ServiceError(\"AbortError\", 499);\n yield object.body.slice(offset, Math.min(offset + 64 * 1024, end));\n }\n })(),\n };\n }\n\n async putObjectStream(input: S3StreamPutInput, options?: S3RequestOptions): Promise<{ ETag: string }> {\n const snapshot = { ...input, Body: new Uint8Array(), ...(input.Metadata ? { Metadata: { ...input.Metadata } } : {}) };\n await this.begin(\"putObject\", snapshot, options);\n const body = await collectBytes(input.Body, { maxBytes: 5_000_000_000, ...(options?.abortSignal ? { signal: options.abortSignal } : {}) });\n const bucket = this.bucket(input.Bucket);\n const previous = bucket.get(input.Key);\n if (input.IfMatch !== undefined && !previous) throw new S3ServiceError(\"NoSuchKey\", 404);\n if ((input.IfNoneMatch === \"*\" && previous) || (input.IfMatch !== undefined && previous?.etag !== input.IfMatch)) {\n throw new S3ServiceError(\"PreconditionFailed\", 412);\n }\n const object = this.store(body, snapshot.Metadata);\n bucket.set(input.Key, object);\n return { ETag: object.etag };\n }\n\n async deleteObject(input: S3DeleteInput, options?: S3RequestOptions): Promise<Record<string, never>> {\n await this.begin(\"deleteObject\", input, options);\n const bucket = this.bucket(input.Bucket);\n const previous = bucket.get(input.Key);\n if (input.IfMatch !== undefined && !previous) throw new S3ServiceError(\"NoSuchKey\", 404);\n if (previous && input.IfMatch !== undefined && input.IfMatch !== \"*\" && previous.etag !== input.IfMatch) {\n throw new S3ServiceError(\"PreconditionFailed\", 412);\n }\n bucket.delete(input.Key);\n return {};\n }\n\n async copyObject(input: S3CopyInput, options?: S3RequestOptions): Promise<S3CopyOutput> {\n await this.begin(\"copyObject\", input, options);\n let decoded: string;\n try {\n decoded = decodeURIComponent(input.CopySource.replace(/^\\//, \"\"));\n } catch {\n throw new S3ServiceError(\"InvalidArgument\", 400);\n }\n const separator = decoded.indexOf(\"/\");\n if (separator < 1) throw new S3ServiceError(\"InvalidArgument\", 400);\n const source = this.object({ Bucket: decoded.slice(0, separator), Key: decoded.slice(separator + 1) });\n if (input.CopySourceIfMatch !== undefined && input.CopySourceIfMatch !== source.etag) {\n throw new S3ServiceError(\"PreconditionFailed\", 412);\n }\n const bucket = this.bucket(input.Bucket);\n if (input.IfNoneMatch === \"*\" && bucket.has(input.Key)) throw new S3ServiceError(\"PreconditionFailed\", 412);\n if (input.IfMatch !== undefined && bucket.get(input.Key)?.etag !== input.IfMatch) throw new S3ServiceError(\"PreconditionFailed\", 412);\n const copy = this.store(source.body, input.MetadataDirective === \"REPLACE\" ? input.Metadata : source.metadata);\n bucket.set(input.Key, copy);\n return { CopyObjectResult: { ETag: copy.etag, LastModified: new Date(copy.modified) } };\n }\n\n async listObjectsV2(input: S3ListInput, options?: S3RequestOptions): Promise<S3ListOutput> {\n await this.begin(\"listObjectsV2\", input, options);\n const maxKeys = input.MaxKeys ?? 1000;\n if (!Number.isInteger(maxKeys) || maxKeys < 0 || maxKeys > 1000) throw new S3ServiceError(\"InvalidArgument\", 400);\n const prefix = input.Prefix ?? \"\";\n const delimiter = input.Delimiter ?? \"\";\n const scope = JSON.stringify([input.Bucket, prefix, delimiter]);\n const cursor = input.ContinuationToken === undefined ? undefined : this.cursors.get(input.ContinuationToken);\n if (input.ContinuationToken !== undefined && (!cursor || cursor.scope !== scope)) {\n throw new S3ServiceError(\"InvalidArgument\", 400, \"invalid continuation token\");\n }\n const entries = new Map<string, S3ObjectSummary | string>();\n for (const [key, object] of this.bucket(input.Bucket)) {\n if (!key.startsWith(prefix)) continue;\n const separator = delimiter === \"\" ? -1 : key.indexOf(delimiter, prefix.length);\n if (separator >= 0) {\n const commonPrefix = key.slice(0, separator + delimiter.length);\n entries.set(commonPrefix, commonPrefix);\n } else {\n entries.set(key, { Key: key, Size: object.body.byteLength, ETag: object.etag, LastModified: new Date(object.modified) });\n }\n }\n const ordered = [...entries.keys()].sort(compareKeys)\n .filter((key) => cursor === undefined || compareKeys(key, cursor.after) > 0);\n const selected = ordered.slice(0, Math.min(maxKeys, this.pageSize));\n const contents: S3ObjectSummary[] = [];\n const prefixes: { Prefix: string }[] = [];\n for (const key of selected) {\n const entry = entries.get(key);\n if (typeof entry === \"string\") prefixes.push({ Prefix: entry });\n else if (entry) contents.push(entry);\n }\n const truncated = maxKeys > 0 && selected.length < ordered.length;\n let token: string | undefined;\n if (truncated) {\n token = `mock-s3-cursor-${++this.nextToken}`;\n this.cursors.set(token, { scope, after: selected[selected.length - 1]! });\n }\n return {\n Contents: contents,\n CommonPrefixes: prefixes,\n KeyCount: selected.length,\n IsTruncated: truncated,\n ...(token === undefined ? {} : { NextContinuationToken: token }),\n };\n }\n}\n", "import type { IncomingMessage } from \"node:http\";\nimport { isIP } from \"node:net\";\nimport { S3ServiceError } from \"../transport.js\";\nimport type { S3CopyInput, S3CopyOutput, S3HeadOutput, S3ListOutput, S3ObjectInput, S3RequestOptions, S3StreamGetInput, S3StreamGetOutput, S3Transport } from \"../transport.js\";\nimport { abortable, collect, limitedBody, scopeFor, sendRequest } from \"./request.js\";\nimport type { WireResponse } from \"./request.js\";\nimport { canonicalQuery, headerValue, invalid, signRequest, uriEncode } from \"./signature.js\";\nimport type { S3HttpTransportOptions } from \"./types.js\";\nimport { children, integer, malformed, parseXml, text, timestamp } from \"./xml.js\";\n\nconst empty = new Uint8Array();\n\nfunction limit(value: number | undefined, fallback: number, name: string, maximum = 1024 * 1024 * 1024): number {\n const result = value ?? fallback;\n if (!Number.isSafeInteger(result) || result < 1 || result > maximum) invalid(`invalid ${name}`);\n return result;\n}\n\nfunction boolean(value: boolean | undefined, fallback: boolean, name: string): boolean {\n if (value !== undefined && typeof value !== \"boolean\") invalid(`invalid ${name}`);\n return value ?? fallback;\n}\n\nfunction bucketName(bucket: string): void {\n if (typeof bucket !== \"string\" || !/^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$/.test(bucket)\n || bucket.includes(\"..\") || bucket.includes(\".-\") || bucket.includes(\"-.\") || isIP(bucket)) invalid(\"expected a standard S3 bucket name\");\n}\n\nfunction objectKey(key: string): void {\n if (typeof key !== \"string\" || !key || Buffer.byteLength(key) > 1024) invalid(\"object keys must contain 1..1024 UTF-8 bytes\");\n uriEncode(key);\n}\n\nfunction header(message: IncomingMessage, name: string): string | undefined {\n const values = message.headersDistinct[name];\n if (values && values.length !== 1) malformed(`duplicate ${name} header`);\n return values?.[0];\n}\n\nfunction head(message: IncomingMessage): S3HeadOutput {\n const length = header(message, \"content-length\");\n const modified = header(message, \"last-modified\");\n const etag = header(message, \"etag\");\n const metadata: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const name of Object.keys(message.headersDistinct)) {\n if (name.startsWith(\"x-amz-meta-\")) metadata[name.slice(11)] = header(message, name)!;\n }\n return {\n ...(length === undefined ? {} : { ContentLength: integer(length) }),\n ...(modified === undefined ? {} : { LastModified: timestamp(modified) }),\n ...(etag === undefined ? {} : { ETag: etag }),\n Metadata: metadata,\n };\n}\n\nfunction metadataHeaders(metadata: Record<string, string> | undefined): Record<string, string> {\n const headers: Record<string, string> = Object.create(null) as Record<string, string>;\n let size = 0;\n for (const [name, value] of Object.entries(metadata ?? {})) {\n const lower = name.toLowerCase();\n if (!/^[a-z0-9][a-z0-9_-]*$/.test(lower) || `x-amz-meta-${lower}` in headers) invalid(\"invalid or duplicate metadata key\");\n const normalized = headerValue(value);\n size += Buffer.byteLength(lower) + Buffer.byteLength(normalized);\n if (size > 2048) invalid(\"metadata exceeds 2 KiB\");\n headers[`x-amz-meta-${lower}`] = normalized;\n }\n return headers;\n}\n\nfunction conditions(input: { readonly IfMatch?: string; readonly IfNoneMatch?: \"*\" }): Record<string, string> {\n const headers: Record<string, string> = {};\n if (input.IfMatch !== undefined) {\n const value = headerValue(input.IfMatch);\n if (!value) invalid(\"empty IfMatch\");\n headers[\"if-match\"] = value;\n }\n if (input.IfNoneMatch !== undefined) {\n if (input.IfNoneMatch !== \"*\") invalid(\"IfNoneMatch must be '*'\");\n headers[\"if-none-match\"] = \"*\";\n }\n return headers;\n}\n\nfunction requireCondition(enabled: boolean, present: boolean): void {\n if (present && !enabled) throw new S3ServiceError(\"NotImplemented\", 501, \"conditional operation requires independently verified provider enforcement\");\n}\n\nfunction copySource(value: string): string {\n if (typeof value !== \"string\" || value.length > 4096 || !/^\\/?[A-Za-z0-9_.~!$&'()*+,;=:@%/-]+$/.test(value)) invalid(\"CopySource must already be URI encoded without a query\");\n const source = value.startsWith(\"/\") ? value.slice(1) : value;\n const slash = source.indexOf(\"/\");\n if (slash < 1) invalid(\"CopySource requires bucket/key\");\n let bucket: string;\n let key: string;\n try { bucket = decodeURIComponent(source.slice(0, slash)); key = decodeURIComponent(source.slice(slash + 1)); }\n catch { return invalid(\"invalid CopySource encoding\"); }\n bucketName(bucket);\n objectKey(key);\n return value;\n}\n\nfunction rangeHeader(value: string | undefined): string | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"string\" || !/^bytes=(?:[0-9]+-[0-9]*|-[0-9]+)$/.test(value)) invalid(\"unsupported byte range\");\n const [start, end] = value.slice(6).split(\"-\");\n if ((start && !Number.isSafeInteger(Number(start))) || (end && !Number.isSafeInteger(Number(end)))\n || (!start && Number(end) === 0) || (start && end && Number(start) > Number(end))) invalid(\"invalid byte range\");\n return value;\n}\n\nfunction checkRange(message: IncomingMessage, range: string | undefined, metadata: S3HeadOutput): number | undefined {\n if (!range) { if (message.statusCode !== 200) malformed(\"unexpected GET status\"); return metadata.ContentLength; }\n if (message.statusCode !== 206) malformed(\"provider ignored byte range\");\n const match = /^bytes ([0-9]+)-([0-9]+)\\/([0-9]+)$/.exec(header(message, \"content-range\") ?? \"\");\n if (!match) malformed(\"invalid Content-Range\");\n const start = integer(match[1]!);\n const end = integer(match[2]!);\n const total = integer(match[3]!);\n const [requestedStart, requestedEnd] = range.slice(6).split(\"-\");\n const expectedStart = requestedStart ? Number(requestedStart) : Math.max(0, total - Number(requestedEnd));\n const expectedEnd = requestedStart && requestedEnd ? Math.min(total - 1, Number(requestedEnd)) : total - 1;\n if (start !== expectedStart || end !== expectedEnd || start > end || end >= total\n || (metadata.ContentLength !== undefined && metadata.ContentLength !== end - start + 1)) malformed(\"response range differs from request\");\n return end - start + 1;\n}\n\nexport function createS3HttpTransport(options: S3HttpTransportOptions): S3Transport {\n if (!options || typeof options.endpoint !== \"string\" || !/^https?:\\/\\/[^\\\\/?#]+\\/?$/.test(options.endpoint)) invalid(\"endpoint must be an explicit HTTP(S) origin without path, credentials, query or fragment\");\n let endpoint: URL;\n try { endpoint = new URL(options.endpoint); } catch { return invalid(\"invalid endpoint\"); }\n if (endpoint.username || endpoint.password) invalid(\"endpoint credentials are not allowed\");\n if (endpoint.protocol === \"http:\" && !boolean(options.allowInsecureHttp, false, \"allowInsecureHttp\")) invalid(\"HTTP requires explicit allowInsecureHttp\");\n if (typeof options.region !== \"string\" || !/^[a-z0-9-]{1,64}$/.test(options.region)) invalid(\"explicit signing region required\");\n if (!options.credentials || (typeof options.credentials !== \"function\" && typeof options.credentials !== \"object\")) invalid(\"explicit credentials required\");\n const credentials = typeof options.credentials === \"function\" ? options.credentials : Object.freeze({ ...options.credentials });\n const addressing = options.addressingStyle ?? \"path\";\n if (addressing !== \"path\" && addressing !== \"virtual-hosted\") invalid(\"unsupported addressing style\");\n const listEncoding = options.listUrlEncoding ?? \"percent\";\n if (listEncoding !== \"percent\" && listEncoding !== \"form\") invalid(\"unsupported LIST URL encoding\");\n if (addressing === \"virtual-hosted\" && (isIP(endpoint.hostname.replace(/^\\[|\\]$/g, \"\")) || endpoint.hostname === \"localhost\")) invalid(\"virtual-hosted addressing requires a DNS endpoint\");\n const maxPut = limit(options.maxPutBytes, 64 * 1024 * 1024, \"maxPutBytes\");\n const maxGet = limit(options.maxGetBytes, 64 * 1024 * 1024, \"maxGetBytes\");\n const maxXml = limit(options.maxXmlBytes, 4 * 1024 * 1024, \"maxXmlBytes\", 16 * 1024 * 1024);\n const timeout = limit(options.requestTimeoutMs, 30_000, \"requestTimeoutMs\", 2_147_483_647);\n const enabledCopy = boolean(options.enableCopy, true, \"enableCopy\");\n const verified = options.verifiedConditionalOperations;\n const conditionalPut = boolean(verified?.put, false, \"verifiedConditionalOperations.put\");\n const nativeConditionalCopy = boolean(verified?.copy, false, \"verifiedConditionalOperations.copy\");\n const conditionalCopy = enabledCopy ? nativeConditionalCopy : conditionalPut;\n const conditionalDelete = boolean(verified?.delete, false, \"verifiedConditionalOperations.delete\");\n const clock = options.clock ?? (() => new Date());\n const factory = options.request;\n const region = options.region;\n if (typeof clock !== \"function\" || (factory !== undefined && typeof factory !== \"function\")) invalid(\"invalid clock or request factory\");\n\n const exchange = async (method: string, bucket: string, key: string | undefined, headers: Record<string, string>,\n query: readonly (readonly [string, string])[], body: Uint8Array, requestOptions?: S3RequestOptions): Promise<WireResponse> => {\n requestOptions?.abortSignal?.throwIfAborted();\n bucketName(bucket);\n if (key !== undefined) objectKey(key);\n const hostname = addressing === \"virtual-hosted\" ? `${bucket}.${endpoint.hostname}` : endpoint.hostname;\n const host = `${hostname}${endpoint.port ? `:${endpoint.port}` : \"\"}`;\n const path = addressing === \"virtual-hosted\" ? `/${key === undefined ? \"\" : uriEncode(key, true)}`\n : `/${bucket}${key === undefined ? \"\" : `/${uriEncode(key, true)}`}`;\n const encodedQuery = canonicalQuery(query);\n const target = `${path}${encodedQuery ? `?${encodedQuery}` : \"\"}`;\n if (target.length > 16 * 1024) invalid(\"request target exceeds 16 KiB\");\n const scope = scopeFor(requestOptions?.abortSignal, timeout);\n try {\n scope.signal.throwIfAborted();\n const resolved = typeof credentials === \"function\" ? await abortable(Promise.resolve(credentials({ signal: scope.signal })), scope.signal) : credentials;\n scope.signal.throwIfAborted();\n const signed = signRequest({ method, path, query: encodedQuery,\n headers: { ...headers, host, ...(method === \"PUT\" ? { \"content-length\": String(body.length) } : {}) },\n body, region, credentials: resolved, date: clock() });\n const response = await sendRequest({ protocol: endpoint.protocol, hostname: hostname.replace(/^\\[|\\]$/g, \"\"),\n ...(endpoint.port ? { port: endpoint.port } : {}), method, path: target, headers: signed.headers,\n agent: false, maxHeaderSize: 16 * 1024, ...{ rejectUnauthorized: true } }, body, scope, factory);\n const status = response.message.statusCode ?? 502;\n if (status < 200 || status >= 300) {\n const bytes = await collect(response, maxXml);\n const fallback = status === 404 ? \"NotFound\" : status === 403 || status === 401 ? \"AccessDenied\"\n : status === 412 ? \"PreconditionFailed\" : status === 409 ? \"ConditionalRequestConflict\"\n : status === 501 ? \"NotImplemented\" : status === 408 ? \"RequestTimeout\" : status >= 300 && status < 400 ? \"RedirectRejected\" : \"HttpError\";\n let code = fallback;\n let message = `S3 HTTP request failed with status ${status}`;\n if (bytes.length) {\n try {\n const parsed = parseXml(bytes);\n if (parsed.name === \"Error\") { code = text(parsed, \"Code\") || fallback; message = text(parsed, \"Message\") || message; }\n } catch (ignoredError) { void ignoredError; }\n }\n throw new S3ServiceError(code, status, message);\n }\n return response;\n } catch (error) { scope.finish(); throw scope.signal.aborted ? scope.signal.reason : error; }\n };\n\n const get = async (input: S3StreamGetInput, requestOptions?: S3RequestOptions): Promise<S3StreamGetOutput> => {\n requestOptions?.abortSignal?.throwIfAborted();\n const range = rangeHeader(input.Range);\n const headers = { ...conditions(input), ...(range ? { range } : {}) };\n const response = await exchange(\"GET\", input.Bucket, input.Key, headers, [], empty, requestOptions);\n try {\n const metadata = head(response.message);\n const expected = checkRange(response.message, range, metadata);\n if (input.IfMatch !== undefined && input.IfMatch !== \"*\" && metadata.ETag !== undefined && metadata.ETag !== input.IfMatch) malformed(\"GET ETag differs from IfMatch\");\n return { ...metadata, Body: limitedBody(response, maxGet, expected) };\n } catch (error) { response.close(); throw error; }\n };\n\n const boundedCopy = async (input: S3CopyInput, requestOptions?: S3RequestOptions): Promise<S3CopyOutput> => {\n if (!conditionalPut) throw new S3ServiceError(\"NotImplemented\", 501, \"disabled native COPY requires verified conditional PUT for bounded fallback\");\n const scope = scopeFor(requestOptions?.abortSignal, timeout);\n const operationOptions = { abortSignal: scope.signal };\n const destination = { Bucket: input.Bucket, Key: input.Key };\n const source = copySource(input.CopySource).replace(/^\\//, \"\");\n const slash = source.indexOf(\"/\");\n const origin = { Bucket: decodeURIComponent(source.slice(0, slash)), Key: decodeURIComponent(source.slice(slash + 1)) };\n const sourceCondition = input.CopySourceIfMatch;\n let destinationCondition = { ...conditions(input) };\n const directive = input.MetadataDirective ?? \"COPY\";\n const replacementMetadata = input.Metadata === undefined ? {} : { ...input.Metadata };\n let body: AsyncIterator<Uint8Array> | undefined;\n try {\n scope.signal.throwIfAborted();\n if (Object.keys(destinationCondition).length === 0) {\n let current: S3HeadOutput | undefined;\n try { current = await transport.headObject(destination, operationOptions); }\n catch (error) {\n if (scope.signal.aborted) throw scope.signal.reason;\n if (!(error instanceof S3ServiceError) || ![\"NotFound\", \"NoSuchKey\"].includes(error.code)) throw error;\n }\n if (current) {\n if (!current.ETag) malformed(\"destination lacks ETag for conditional COPY fallback\");\n destinationCondition = { \"if-match\": current.ETag };\n } else destinationCondition = { \"if-none-match\": \"*\" };\n }\n const output = await get({ ...origin, ...(sourceCondition === undefined ? {} : { IfMatch: sourceCondition }) }, operationOptions);\n body = output.Body[Symbol.asyncIterator]();\n if (!output.ETag || output.ContentLength === undefined) malformed(\"source lacks ETag/length for bounded COPY fallback\");\n if (sourceCondition !== undefined && sourceCondition !== \"*\" && output.ETag !== sourceCondition) throw new S3ServiceError(\"PreconditionFailed\", 412, \"source changed before COPY fallback\");\n if (output.ContentLength > maxPut) throw new S3ServiceError(\"EntityTooLarge\", 413, \"COPY fallback exceeds PUT byte limit\");\n const chunks: Uint8Array[] = [];\n let count = 0;\n while (true) {\n const result = await body.next();\n if (result.done) break;\n count += result.value.length;\n if (count > maxPut) throw new S3ServiceError(\"EntityTooLarge\", 413, \"COPY fallback exceeds PUT byte limit\");\n chunks.push(result.value);\n }\n scope.signal.throwIfAborted();\n const metadata = directive === \"REPLACE\" ? replacementMetadata : output.Metadata;\n const headers = { ...metadataHeaders(metadata), ...destinationCondition };\n const response = await exchange(\"PUT\", destination.Bucket, destination.Key, headers, [], Buffer.concat(chunks, count), operationOptions);\n try {\n if (response.message.statusCode !== 200) malformed(\"unexpected COPY fallback PUT status\");\n await collect(response, maxXml);\n const etag = header(response.message, \"etag\");\n if (!etag) malformed(\"COPY fallback PUT lacks confirmation ETag\");\n return { CopyObjectResult: { ETag: etag } };\n } finally { response.close(); }\n } finally {\n await body?.return?.();\n scope.finish();\n }\n };\n\n const transport: S3Transport = {\n capabilities: Object.freeze({ streamingRead: true, streamingWrite: false, conditionalPut, conditionalCopy, conditionalDelete }),\n async headObject(input: S3ObjectInput, requestOptions?: S3RequestOptions) {\n const response = await exchange(\"HEAD\", input.Bucket, input.Key, {}, [], empty, requestOptions);\n try {\n if (response.message.statusCode !== 200) malformed(\"unexpected HEAD status\");\n const metadata = head(response.message);\n await collect(response, maxXml);\n return metadata;\n } finally { response.close(); }\n },\n async getObject(input, requestOptions) {\n const response = await get(input, requestOptions);\n const chunks: Uint8Array[] = [];\n let count = 0;\n for await (const chunk of response.Body) { chunks.push(chunk); count += chunk.length; }\n return { ...response, Body: Buffer.concat(chunks, count) };\n },\n getObjectStream: get,\n async putObject(input, requestOptions) {\n requestOptions?.abortSignal?.throwIfAborted();\n if (!(input.Body instanceof Uint8Array)) invalid(\"PUT requires a bounded Uint8Array\");\n if (input.Body.length > maxPut) throw new S3ServiceError(\"EntityTooLarge\", 413, \"PUT exceeds byte limit\");\n requireCondition(conditionalPut, input.IfMatch !== undefined || input.IfNoneMatch !== undefined);\n const body = new Uint8Array(input.Body);\n const headers = { ...metadataHeaders(input.Metadata), ...conditions(input) };\n const response = await exchange(\"PUT\", input.Bucket, input.Key, headers, [], body, requestOptions);\n try {\n if (response.message.statusCode !== 200) malformed(\"unexpected PUT status\");\n await collect(response, maxXml);\n return { ETag: header(response.message, \"etag\") };\n } finally { response.close(); }\n },\n async deleteObject(input, requestOptions) {\n requestOptions?.abortSignal?.throwIfAborted();\n requireCondition(conditionalDelete, input.IfMatch !== undefined);\n const response = await exchange(\"DELETE\", input.Bucket, input.Key, conditions(input), [], empty, requestOptions);\n try {\n if (response.message.statusCode !== 204) malformed(\"unexpected DELETE status\");\n await collect(response, maxXml);\n return {};\n } finally { response.close(); }\n },\n async copyObject(input, requestOptions) {\n requestOptions?.abortSignal?.throwIfAborted();\n if (input.MetadataDirective !== undefined && input.MetadataDirective !== \"COPY\" && input.MetadataDirective !== \"REPLACE\") invalid(\"invalid MetadataDirective\");\n const headers = { ...metadataHeaders(input.Metadata), ...conditions(input), \"x-amz-copy-source\": copySource(input.CopySource),\n ...(input.CopySourceIfMatch === undefined ? {} : { \"x-amz-copy-source-if-match\": headerValue(input.CopySourceIfMatch) }),\n ...(input.MetadataDirective === undefined ? {} : { \"x-amz-metadata-directive\": input.MetadataDirective }) };\n if (input.CopySourceIfMatch !== undefined && !headers[\"x-amz-copy-source-if-match\"]) invalid(\"empty CopySourceIfMatch\");\n bucketName(input.Bucket);\n objectKey(input.Key);\n if (!enabledCopy) return boundedCopy(input, requestOptions);\n requireCondition(conditionalCopy, input.IfMatch !== undefined || input.IfNoneMatch !== undefined || input.CopySourceIfMatch !== undefined);\n const response = await exchange(\"PUT\", input.Bucket, input.Key, headers, [], empty, requestOptions);\n const root = parseXml(await collect(response, maxXml));\n if (root.name === \"Error\") throw new S3ServiceError(text(root, \"Code\", true)!, response.message.statusCode!, text(root, \"Message\") ?? \"embedded COPY failure\");\n if (response.message.statusCode !== 200 || root.name !== \"CopyObjectResult\") malformed(\"invalid COPY response\");\n return { CopyObjectResult: { ETag: text(root, \"ETag\", true)!, LastModified: timestamp(text(root, \"LastModified\", true)!) } };\n },\n async listObjectsV2(input, requestOptions): Promise<S3ListOutput> {\n requestOptions?.abortSignal?.throwIfAborted();\n if (input.MaxKeys !== undefined && (!Number.isSafeInteger(input.MaxKeys) || input.MaxKeys < 0 || input.MaxKeys > 1000)) invalid(\"MaxKeys must be 0..1000\");\n const query: [string, string][] = [[\"list-type\", \"2\"], [\"encoding-type\", \"url\"]];\n for (const [name, value] of [[\"prefix\", input.Prefix], [\"delimiter\", input.Delimiter], [\"continuation-token\", input.ContinuationToken]] as const) {\n if (value !== undefined) { if (typeof value !== \"string\" || Buffer.byteLength(value) > 8192) invalid(`invalid ${name}`); query.push([name, value]); }\n }\n if (input.MaxKeys !== undefined) query.push([\"max-keys\", String(input.MaxKeys)]);\n const response = await exchange(\"GET\", input.Bucket, undefined, {}, query, empty, requestOptions);\n const root = parseXml(await collect(response, maxXml));\n if (response.message.statusCode !== 200 || root.name !== \"ListBucketResult\") malformed(\"invalid LIST response\");\n const encoding = text(root, \"EncodingType\");\n if (encoding !== undefined && encoding !== \"url\") malformed(\"unsupported LIST encoding\");\n const decode = (value: string): string => {\n if (encoding !== \"url\") return value;\n try { return decodeURIComponent(listEncoding === \"form\" ? value.replace(/\\+/g, \" \") : value); }\n catch { return malformed(\"invalid URL-encoded LIST key\"); }\n };\n const truncated = text(root, \"IsTruncated\", true);\n if (truncated !== \"true\" && truncated !== \"false\") malformed(\"invalid IsTruncated\");\n const token = text(root, \"NextContinuationToken\");\n if (truncated === \"true\" && !token) malformed(\"truncated LIST lacks continuation token\");\n const keyCount = text(root, \"KeyCount\");\n const contents = children(root, \"Contents\").map(item => ({ Key: decode(text(item, \"Key\", true)!),\n Size: integer(text(item, \"Size\", true)!), ETag: text(item, \"ETag\", true)!, LastModified: timestamp(text(item, \"LastModified\", true)!) }));\n const prefixes = children(root, \"CommonPrefixes\").map(item => ({ Prefix: decode(text(item, \"Prefix\", true)!) }));\n if (contents.length + prefixes.length > (input.MaxKeys ?? 1000)) malformed(\"LIST exceeds requested page size\");\n return { Contents: contents, CommonPrefixes: prefixes, IsTruncated: truncated === \"true\",\n ...(keyCount === undefined ? {} : { KeyCount: integer(keyCount) }), ...(token === undefined ? {} : { NextContinuationToken: token }) };\n },\n };\n return Object.freeze(transport);\n}\n", "import { once } from \"node:events\";\nimport { request as httpRequest } from \"node:http\";\nimport type { ClientRequest, IncomingMessage, RequestOptions } from \"node:http\";\nimport { request as httpsRequest } from \"node:https\";\nimport { S3ServiceError } from \"../transport.js\";\nimport type { S3HttpRequestFactory } from \"./types.js\";\n\nexport interface RequestScope {\n readonly signal: AbortSignal;\n readonly finish: () => void;\n}\n\nexport function scopeFor(signal: AbortSignal | undefined, timeout: number): RequestScope {\n const controller = new AbortController();\n const abort = (): void => controller.abort(signal?.reason);\n signal?.addEventListener(\"abort\", abort, { once: true });\n if (signal?.aborted) abort();\n const timer = setTimeout(() => controller.abort(new S3ServiceError(\"RequestTimeout\", 408)), timeout);\n return {\n signal: controller.signal,\n finish: () => { clearTimeout(timer); signal?.removeEventListener(\"abort\", abort); },\n };\n}\n\nexport async function abortable<Value>(pending: Promise<Value>, signal: AbortSignal): Promise<Value> {\n let abort: (() => void) | undefined;\n try {\n return await new Promise<Value>((resolve, reject) => {\n abort = () => reject(signal.reason);\n signal.addEventListener(\"abort\", abort, { once: true });\n pending.then(resolve, reject);\n if (signal.aborted) abort();\n });\n } finally {\n if (abort) signal.removeEventListener(\"abort\", abort);\n }\n}\n\nexport interface WireResponse {\n readonly message: IncomingMessage;\n readonly body: AsyncIterable<Uint8Array>;\n readonly close: () => void;\n}\n\nexport async function sendRequest(\n options: RequestOptions,\n body: Uint8Array,\n scope: RequestScope,\n factory?: S3HttpRequestFactory,\n): Promise<WireResponse> {\n const signal = scope.signal;\n signal.throwIfAborted();\n return new Promise<WireResponse>((resolve, reject) => {\n let request: ClientRequest | undefined;\n let response: IncomingMessage | undefined;\n let headersReceived = false;\n let finished = false;\n const cleanup = (): void => {\n signal.removeEventListener(\"abort\", abort);\n scope.finish();\n };\n const close = (): void => {\n if (finished) return;\n finished = true;\n cleanup();\n response?.destroy();\n request?.destroy();\n };\n const fail = (error: unknown): void => {\n reject(signal.aborted ? signal.reason : error);\n close();\n };\n const abort = (): void => fail(signal.reason);\n signal.addEventListener(\"abort\", abort, { once: true });\n try {\n const create = factory ?? (options.protocol === \"https:\" ? httpsRequest : httpRequest);\n request = create(options, message => {\n response = message;\n message.on(\"error\", () => {});\n if (finished || signal.aborted) { close(); message.destroy(); return; }\n headersReceived = true;\n message.once(\"close\", cleanup);\n let claimed = false;\n const source: AsyncIterable<Uint8Array> = {\n [Symbol.asyncIterator]() {\n if (claimed) throw new S3ServiceError(\"InvalidResponse\", 502, \"response body is single-use\");\n claimed = true;\n const iterator = message[Symbol.asyncIterator]();\n let ended = false;\n return {\n async next(): Promise<IteratorResult<Uint8Array>> {\n try {\n signal.throwIfAborted();\n if (ended) return { done: true, value: undefined };\n const result = await abortable(iterator.next(), signal);\n signal.throwIfAborted();\n if (result.done) {\n ended = true;\n if (!message.complete) throw new S3ServiceError(\"InvalidResponse\", 502, \"incomplete HTTP response\");\n close();\n return { done: true, value: undefined };\n }\n if (!(result.value instanceof Uint8Array)) throw new S3ServiceError(\"InvalidResponse\", 502, \"nonbinary HTTP body\");\n return { done: false, value: new Uint8Array(result.value) };\n } catch (error) { ended = true; close(); throw signal.aborted ? signal.reason : error; }\n },\n async return(): Promise<IteratorResult<Uint8Array>> {\n ended = true;\n close();\n return { done: true, value: undefined };\n },\n };\n },\n };\n resolve({ message, body: source, close });\n });\n request.on(\"error\", fail);\n request.once(\"close\", () => {\n if (!headersReceived) fail(new S3ServiceError(\"InvalidResponse\", 502, \"connection closed before response headers\"));\n });\n if (signal.aborted || finished) { abort(); request.destroy(); return; }\n void (async () => {\n for (let offset = 0; offset < body.length; offset += 64 * 1024) {\n signal.throwIfAborted();\n if (!request!.write(body.subarray(offset, offset + 64 * 1024))) await once(request!, \"drain\", { signal });\n }\n signal.throwIfAborted();\n request!.end();\n })().catch(fail);\n } catch (error) { fail(error); }\n });\n}\n\nexport function limitedBody(response: WireResponse, maximum: number, expected?: number): AsyncIterable<Uint8Array> {\n if (expected !== undefined && expected > maximum) {\n response.close();\n throw new S3ServiceError(\"EntityTooLarge\", 413, \"response exceeds byte limit\");\n }\n let claimed = false;\n return {\n [Symbol.asyncIterator]() {\n if (claimed) throw new S3ServiceError(\"InvalidResponse\", 502, \"response body is single-use\");\n claimed = true;\n const iterator = response.body[Symbol.asyncIterator]();\n let count = 0;\n return {\n async next(): Promise<IteratorResult<Uint8Array>> {\n try {\n const result = await iterator.next();\n if (result.done) {\n if (expected !== undefined && count !== expected) throw new S3ServiceError(\"InvalidResponse\", 502, \"response content length mismatch\");\n } else {\n count += result.value.length;\n if (count > maximum) throw new S3ServiceError(\"EntityTooLarge\", 413, \"response exceeds byte limit\");\n if (expected !== undefined && count > expected) throw new S3ServiceError(\"InvalidResponse\", 502, \"response content length mismatch\");\n }\n return result;\n } catch (error) { response.close(); throw error; }\n },\n async return(): Promise<IteratorResult<Uint8Array>> {\n response.close();\n await iterator.return?.();\n return { done: true, value: undefined };\n },\n };\n },\n };\n}\n\nexport async function collect(response: WireResponse, maximum: number, expected?: number): Promise<Uint8Array> {\n const chunks: Uint8Array[] = [];\n let count = 0;\n try {\n for await (const chunk of limitedBody(response, maximum, expected)) { chunks.push(chunk); count += chunk.length; }\n return Buffer.concat(chunks, count);\n } finally { response.close(); }\n}\n", "import { createHash, createHmac } from \"node:crypto\";\nimport { S3ServiceError } from \"../transport.js\";\nimport type { S3HttpCredentials } from \"./types.js\";\n\nexport function invalid(message: string): never {\n throw new S3ServiceError(\"InvalidArgument\", 400, message);\n}\n\nexport function uriEncode(value: string, preserveSlash = false): string {\n if (typeof value !== \"string\") invalid(\"expected a UTF-8 string\");\n try {\n const encoded = encodeURIComponent(value).replace(/[!'()*]/g, character => `%${character.charCodeAt(0).toString(16).toUpperCase()}`);\n return preserveSlash ? encoded.replace(/%2F/g, \"/\") : encoded;\n } catch {\n return invalid(\"invalid Unicode string\");\n }\n}\n\nexport function canonicalQuery(entries: readonly (readonly [string, string])[]): string {\n return entries.map(([name, value]) => [uriEncode(name), uriEncode(value)] as const)\n .sort(([leftName, leftValue], [rightName, rightValue]) =>\n leftName < rightName ? -1 : leftName > rightName ? 1 : leftValue < rightValue ? -1 : leftValue > rightValue ? 1 : 0)\n .map(([name, value]) => `${name}=${value}`).join(\"&\");\n}\n\nexport function sha256(bytes: Uint8Array | string): string {\n return createHash(\"sha256\").update(bytes).digest(\"hex\");\n}\n\nexport function headerValue(value: string): string {\n if (typeof value !== \"string\" || /[^\\x20-\\x7e\\t]/.test(value)) invalid(\"header values must be printable ASCII without line breaks\");\n return value.trim().replace(/[ \\t]+/g, \" \");\n}\n\nexport function signRequest(input: {\n readonly method: string;\n readonly path: string;\n readonly query: string;\n readonly headers: Readonly<Record<string, string>>;\n readonly body: Uint8Array;\n readonly region: string;\n readonly credentials: S3HttpCredentials;\n readonly date: Date;\n}): { readonly headers: Record<string, string>; readonly canonicalRequest: string; readonly signature: string } {\n const credentials = input.credentials;\n if (!credentials || typeof credentials.accessKeyId !== \"string\" || !/^[A-Za-z0-9_-]+$/.test(credentials.accessKeyId)\n || typeof credentials.secretAccessKey !== \"string\" || credentials.secretAccessKey.length === 0\n || credentials.secretAccessKey.length > 4096) invalid(\"explicit signing credentials are required\");\n if (!/^[a-z0-9-]{1,64}$/.test(input.region)) invalid(\"invalid signing region\");\n if (!(input.date instanceof Date) || !Number.isFinite(input.date.getTime())\n || input.date.getUTCFullYear() < 1970 || input.date.getUTCFullYear() > 9999) invalid(\"invalid signing clock\");\n const timestamp = input.date.toISOString().replace(/[:-]|\\.\\d{3}/g, \"\");\n const date = timestamp.slice(0, 8);\n const headers: Record<string, string> = Object.create(null) as Record<string, string>;\n for (const [name, value] of Object.entries(input.headers)) {\n const lower = name.toLowerCase();\n if (!/^[a-z0-9-]+$/.test(lower) || lower in headers) invalid(\"invalid or duplicate signing header\");\n headers[lower] = headerValue(value);\n }\n if (!headers.host) invalid(\"host is required for signing\");\n const payloadHash = sha256(input.body);\n headers[\"x-amz-date\"] = timestamp;\n headers[\"x-amz-content-sha256\"] = payloadHash;\n if (credentials.sessionToken !== undefined) {\n headers[\"x-amz-security-token\"] = headerValue(credentials.sessionToken);\n if (!headers[\"x-amz-security-token\"]) invalid(\"session token must not be empty\");\n }\n const names = Object.keys(headers).sort();\n const signedHeaders = names.join(\";\");\n const canonicalRequest = [input.method, input.path, input.query,\n names.map(name => `${name}:${headers[name]}\\n`).join(\"\"), signedHeaders, payloadHash].join(\"\\n\");\n const scope = `${date}/${input.region}/s3/aws4_request`;\n const stringToSign = [\"AWS4-HMAC-SHA256\", timestamp, scope, sha256(canonicalRequest)].join(\"\\n\");\n let key = createHmac(\"sha256\", `AWS4${credentials.secretAccessKey}`).update(date).digest();\n for (const part of [input.region, \"s3\", \"aws4_request\"]) key = createHmac(\"sha256\", key).update(part).digest();\n const signature = createHmac(\"sha256\", key).update(stringToSign).digest(\"hex\");\n headers.authorization = `AWS4-HMAC-SHA256 Credential=${credentials.accessKeyId}/${scope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n if (Object.entries(headers).reduce((size, [name, value]) => size + name.length + value.length + 4, 0) > 16 * 1024) invalid(\"request headers exceed 16 KiB\");\n return { headers, canonicalRequest, signature };\n}\n", "import { S3ServiceError } from \"../transport.js\";\n\nexport interface XmlNode {\n readonly name: string;\n readonly children: XmlNode[];\n text: string;\n}\n\nexport function malformed(message = \"invalid S3 XML response\"): never {\n throw new S3ServiceError(\"InvalidResponse\", 502, message);\n}\n\nfunction validCharacter(code: number): boolean {\n return code === 9 || code === 10 || code === 13 || (code >= 32 && code <= 0xd7ff)\n || (code >= 0xe000 && code <= 0xfffd) || (code >= 0x10000 && code <= 0x10ffff);\n}\n\nfunction decodeEntities(text: string): string {\n let result = \"\";\n let position = 0;\n while (position < text.length) {\n const start = text.indexOf(\"&\", position);\n if (start < 0) return result + text.slice(position);\n result += text.slice(position, start);\n const end = text.indexOf(\";\", start + 1);\n if (end < 0 || end - start > 12) malformed(\"invalid XML entity\");\n const entity = text.slice(start + 1, end);\n const named: Record<string, string> = { amp: \"&\", lt: \"<\", gt: \">\", quot: '\"', apos: \"'\" };\n if (Object.hasOwn(named, entity)) result += named[entity];\n else {\n const hexadecimal = entity.startsWith(\"#x\");\n const digits = entity.slice(hexadecimal ? 2 : 1);\n if (!entity.startsWith(\"#\") || !(hexadecimal ? /^[0-9a-fA-F]+$/ : /^[0-9]+$/).test(digits)) malformed(\"unknown XML entity\");\n const code = Number.parseInt(digits, hexadecimal ? 16 : 10);\n if (!validCharacter(code)) malformed(\"invalid XML code point\");\n result += String.fromCodePoint(code);\n }\n position = end + 1;\n }\n return result;\n}\n\nexport function parseXml(bytes: Uint8Array): XmlNode {\n let xml: string;\n try { xml = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes); }\n catch { return malformed(\"XML is not UTF-8\"); }\n for (const character of xml) if (!validCharacter(character.codePointAt(0)!)) malformed(\"invalid XML character\");\n xml = xml.replace(/\\r\\n?/g, \"\\n\");\n let position = 0;\n let nodes = 0;\n let root: XmlNode | undefined;\n const stack: XmlNode[] = [];\n const whitespace = (): void => { while (position < xml.length && /[ \\t\\r\\n]/.test(xml[position]!)) position++; };\n const name = (): string => {\n const start = position;\n if (!/[A-Za-z_]/.test(xml[position] ?? \"\")) malformed(\"invalid XML name\");\n while (position < xml.length && /[A-Za-z0-9_.:-]/.test(xml[position]!)) position++;\n const result = xml.slice(start, position);\n if (result.length > 256) malformed(\"XML name too long\");\n return result;\n };\n while (position < xml.length) {\n if (xml[position] !== \"<\") {\n const end = xml.indexOf(\"<\", position);\n const text = xml.slice(position, end < 0 ? xml.length : end);\n if (text.includes(\"]]>\")) malformed();\n const current = stack.at(-1);\n if (current) current.text += decodeEntities(text);\n else if (text.trim()) malformed(\"text outside XML root\");\n position = end < 0 ? xml.length : end;\n continue;\n }\n if (xml.startsWith(\"<?xml \", position) && !root && position === 0) {\n const end = xml.indexOf(\"?>\", position);\n if (end < 0 || end > 256) malformed();\n const declaration = xml.slice(position, end);\n if (!/^<\\?xml\\s+version\\s*=\\s*(?:\"1\\.0\"|'1\\.0')(?:\\s+encoding\\s*=\\s*(?:\"[Uu][Tt][Ff]-8\"|'[Uu][Tt][Ff]-8'))?(?:\\s+standalone\\s*=\\s*(?:\"(?:yes|no)\"|'(?:yes|no)'))?\\s*$/.test(declaration)) malformed(\"unsupported XML declaration\");\n position = end + 2;\n continue;\n }\n if (xml.startsWith(\"<!--\", position)) {\n const end = xml.indexOf(\"-->\", position + 4);\n const comment = xml.slice(position + 4, end);\n if (end < 0 || comment.includes(\"--\") || comment.endsWith(\"-\")) malformed();\n position = end + 3;\n continue;\n }\n if (xml.startsWith(\"<![CDATA[\", position)) {\n const end = xml.indexOf(\"]]>\", position + 9);\n const current = stack.at(-1);\n if (end < 0 || !current) malformed();\n current.text += xml.slice(position + 9, end);\n position = end + 3;\n continue;\n }\n position++;\n const closing = xml[position] === \"/\";\n if (closing) position++;\n const tag = name();\n if (closing) {\n whitespace();\n if (xml[position++] !== \">\" || stack.pop()?.name !== tag) malformed(\"mismatched XML close tag\");\n continue;\n }\n const attributes = new Set<string>();\n while (true) {\n const previous = position;\n whitespace();\n if (xml[position] === \">\" || xml[position] === \"/\") break;\n if (previous === position || attributes.size >= 32) malformed(\"invalid XML attributes\");\n const attribute = name();\n if (attributes.has(attribute)) malformed(\"duplicate XML attribute\");\n attributes.add(attribute);\n whitespace();\n if (xml[position++] !== \"=\") malformed();\n whitespace();\n const quote = xml[position++];\n if (quote !== '\"' && quote !== \"'\") malformed();\n const end = xml.indexOf(quote, position);\n if (end < 0 || xml.slice(position, end).includes(\"<\")) malformed();\n decodeEntities(xml.slice(position, end));\n position = end + 1;\n }\n const selfClosing = xml[position] === \"/\";\n if (selfClosing) position++;\n if (xml[position++] !== \">\") malformed();\n if (++nodes > 32_768 || stack.length >= 32) malformed(\"XML structure limit exceeded\");\n const node: XmlNode = { name: tag, text: \"\", children: [] };\n const parent = stack.at(-1);\n if (parent) parent.children.push(node);\n else if (root) malformed(\"multiple XML roots\");\n else root = node;\n if (!selfClosing) stack.push(node);\n }\n if (!root || stack.length) malformed(\"incomplete XML\");\n return root;\n}\n\nexport function children(node: XmlNode, name: string): XmlNode[] {\n return node.children.filter(child => child.name === name);\n}\n\nexport function text(node: XmlNode, name: string, required = false): string | undefined {\n const matches = children(node, name);\n if (matches.length > 1 || (required && matches.length !== 1)) malformed(`invalid ${name} count`);\n const child = matches[0];\n if (child?.children.length) malformed(`invalid ${name} value`);\n return child?.text;\n}\n\nexport function integer(value: string): number {\n if (!/^[0-9]+$/.test(value) || !Number.isSafeInteger(Number(value))) malformed(\"invalid integer\");\n return Number(value);\n}\n\nexport function timestamp(value: string): Date {\n const date = new Date(value);\n if (!Number.isFinite(date.getTime())) malformed(\"invalid timestamp\");\n return date;\n}\n", "import { Buffer } from \"node:buffer\";\nimport { randomBytes } from \"node:crypto\";\nimport { posix } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport type * as FsPromises from \"node:fs/promises\";\nimport type { FileSystem, FsOptions } from \"../contracts/filesystem.js\";\nimport { FileSystemBridge } from \"../bridge/filesystem.js\";\n\nexport type NodeFsImplementation = Pick<typeof FsPromises,\n | \"access\" | \"appendFile\" | \"chmod\" | \"copyFile\" | \"cp\" | \"link\" | \"lstat\"\n | \"mkdir\" | \"mkdtemp\" | \"readFile\" | \"readdir\" | \"readlink\" | \"realpath\"\n | \"rename\" | \"rm\" | \"rmdir\" | \"stat\" | \"symlink\" | \"truncate\" | \"utimes\" | \"writeFile\"\n>;\n\nexport interface NodeFsBridgeOptions {\n readonly cwd?: string;\n readonly signal?: AbortSignal;\n}\n\nexport interface NodeFsBridgeFileSystem extends FileSystem {\n rmdir?(path: string, options?: FsOptions): Promise<void>;\n}\n\nexport function createNodeFsBridge(fs: FileSystem, options: NodeFsBridgeOptions = {}): NodeFsImplementation {\n return new FileSystemBridge<Buffer<ArrayBuffer>>(fs, options, {\n codec: {\n isEncoding: Buffer.isEncoding,\n encode(text, encoding) {\n if (!Buffer.isEncoding(encoding)) throw new TypeError(\"Invalid encoding\");\n return Buffer.from(text, encoding);\n },\n decode(bytes, encoding) {\n if (!Buffer.isEncoding(encoding)) throw new TypeError(\"Invalid encoding\");\n return Buffer.from(bytes).toString(encoding);\n }\n },\n copyBytes: Buffer.from,\n pathValue(value) {\n return value instanceof URL ? fileURLToPath(value) : Buffer.isBuffer(value) ? value.toString(\"utf8\") : value;\n },\n randomSuffix() { return randomBytes(6).toString(\"hex\").slice(0, 6); },\n paths: posix\n });\n}\n", "import type { FileSystem, FileSystemFactory } from \"./contracts/filesystem.js\";\n\nexport type FileSystemConfig = {\n readonly type: string;\n readonly options?: Readonly<Record<string, unknown>>;\n};\nexport type FileSystemAdapterDescriptor = {\n readonly validateOptions: (options: Readonly<Record<string, unknown>>) => void;\n readonly create: FileSystemFactory;\n};\nexport type FileSystemAdapterRegistry = ReadonlyMap<string, FileSystemAdapterDescriptor>;\n\nexport function readConfigRecord(\n value: unknown,\n label: string,\n keys?: readonly string[]\n): Readonly<Record<string, unknown>> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${label} must be a record.`);\n }\n const prototype = Object.getPrototypeOf(value);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError(`${label} must be a plain record.`);\n }\n const record: Record<string, unknown> = Object.create(null);\n for (const key of Reflect.ownKeys(value)) {\n if (typeof key !== \"string\" || (keys !== undefined && !keys.includes(key))) {\n throw new TypeError(`Unknown ${label}: ${String(key)}`);\n }\n const property = Object.getOwnPropertyDescriptor(value, key)!;\n if (!(\"value\" in property)) throw new TypeError(`${label}.${key} must be a data property.`);\n record[key] = property.value;\n }\n return Object.freeze(record);\n}\n\nexport function validateFileSystemConfig(value: unknown): FileSystemConfig {\n const config = readConfigRecord(value, \"filesystem config\", [\"type\", \"options\"]);\n if (typeof config.type !== \"string\" || config.type.trim().length === 0) {\n throw new TypeError(\"Filesystem adapter type must be a nonempty string.\");\n }\n return {\n type: config.type,\n ...(config.options === undefined\n ? {}\n : { options: readConfigRecord(config.options, \"filesystem options\") })\n };\n}\n\nexport async function createFileSystem(\n config: FileSystemConfig,\n options: { registry: FileSystemAdapterRegistry }\n): Promise<FileSystem> {\n const validated = validateFileSystemConfig(config);\n const creation = readConfigRecord(options, \"filesystem creation option\", [\"registry\"]);\n const registry = creation.registry as FileSystemAdapterRegistry | undefined;\n if (registry === undefined || registry === null || typeof registry.get !== \"function\") {\n throw new TypeError(\"registry must be a filesystem adapter map.\");\n }\n const descriptor = registry.get(validated.type);\n if (descriptor === undefined)\n throw new TypeError(`Unknown filesystem adapter: ${validated.type}`);\n const adapterOptions = validated.options ?? Object.freeze(Object.create(null));\n descriptor.validateOptions(adapterOptions);\n return await descriptor.create(adapterOptions);\n}\n", "import type { FileSystemFactory } from \"../contracts/filesystem.js\";\nimport { readConfigRecord, type FileSystemAdapterDescriptor } from \"../config.js\";\n\nexport function createMemoryFileSystemAdapter(\n create: FileSystemFactory\n): FileSystemAdapterDescriptor {\n return {\n validateOptions(options) {\n readConfigRecord(options, \"memory option\", []);\n },\n create\n };\n}\n", "import type { FileSystemFactory } from \"../contracts/filesystem.js\";\nimport { readConfigRecord, type FileSystemAdapterDescriptor } from \"../config.js\";\n\nexport function createRealFileSystemAdapter(\n create: (options: { readonly root: string }) => ReturnType<FileSystemFactory>\n): FileSystemAdapterDescriptor {\n return {\n validateOptions(options) {\n const record = readConfigRecord(options, \"real option\", [\"root\"]);\n if (\n typeof record.root !== \"string\" ||\n !record.root.startsWith(\"/\") ||\n record.root.includes(\"\\0\")\n ) {\n throw new TypeError(\"adapter.options.root must be an absolute host directory\");\n }\n },\n create(options) {\n return create({ root: options.root as string });\n }\n };\n}\n", "import type { FileSystemAdapterRegistry } from \"./config.js\";\nimport { createMemoryFileSystemAdapter } from \"./config/memory.js\";\nimport { createRealFileSystemAdapter } from \"./config/real.js\";\nimport { createMemoryFileSystem } from \"./fs/memory/index.js\";\nimport { createRealFileSystem } from \"./fs/real/index.js\";\n\nexport function createNodeFileSystemAdapterRegistry(\n extensions?: FileSystemAdapterRegistry\n): FileSystemAdapterRegistry {\n if (\n extensions !== undefined &&\n (extensions === null ||\n typeof extensions.get !== \"function\" ||\n typeof extensions[Symbol.iterator] !== \"function\")\n ) {\n throw new TypeError(\"registry must be a filesystem adapter map.\");\n }\n const registry = new Map([\n [\"memory\", createMemoryFileSystemAdapter(createMemoryFileSystem)],\n [\"real\", createRealFileSystemAdapter(createRealFileSystem)]\n ]);\n for (const [name, descriptor] of extensions ?? []) {\n if (registry.has(name)) throw new TypeError(`Filesystem adapter already registered: ${name}`);\n registry.set(name, descriptor);\n }\n return registry;\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["root", "posix", "stat", "resolve", "timestamp", "relative", "marker", "children", "posix", "limit", "body", "resolve", "fail", "createHash", "createHash", "timestamp", "text", "integer", "integer", "Buffer", "posix", "Buffer", "text", "posix"]
|
|
7
|
+
}
|