Storage

S3 Storage

@dsar/storage-s3 connects DSAR to any S3-compatible object store — AWS S3, MinIO, Cloudflare R2, DigitalOcean Spaces, and more.

Installation

Package managerCommand
npmnpm install @dsar/storage-s3
pnpmpnpm add @dsar/storage-s3
yarnyarn add @dsar/storage-s3
bunbun add @dsar/storage-s3

Setup

import { dsarInstance } from "@dsar/backend";
import { makeS3StorageAdapter } from "@dsar/storage-s3";

const runtime = dsarInstance({
	adapters: {
		inbound: "stub",
		notifications: "stub",
		storage: makeS3StorageAdapter({
			bucket: "dsar-artifacts",
			region: "us-east-1",
			prefix: "artifacts",
			retryMaxAttempts: 3,
			timeoutMs: 3000,
		}),
	},
});

Configuration

OptionDefaultDescription
bucket—S3 bucket name (required)
region—AWS region (required)
endpoint—Custom endpoint for S3-compatible providers
accessKeyId—Explicit AWS access key
secretAccessKey—Explicit AWS secret key
sessionToken—Temporary session token
forcePathStylefalseUse path-style URLs (for MinIO, etc.)
prefixartifactsKey prefix for all stored objects
timeoutMs3000Request timeout in milliseconds
retryMaxAttempts3Retry count for retriable failures

Key Layout

Default deterministic key format:

<prefix>/<requestId>/<manifestId>/<category>/<redaction>/<thirdParty>/<artifactName>

Fallback values:

  • missing requestId → request-unknown
  • missing manifestId → manifest-unknown
  • missing category → uncategorized
  • missing name/id → artifact.bin

Error and Retry Behaviour

CategoryRetriableExamples
timeoutyestimeout, aborted request
rate_limityesthrottling, 429
networkyessocket/connection failures
authnounauthorised, access denied
validationnomalformed key/input
confignoinvalid adapter config
unknownnounmatched provider errors

Manifest Linkage

Storage operations preserve manifest-linked metadata on artifact references:

  • requestId
  • manifestId
  • manifestHash
  • manifestSignature

This metadata is available via putObject results and headObject/getObject metadata for review and audit correlation.