DSAR
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
bucketS3 bucket name (required)
regionAWS region (required)
endpointCustom endpoint for S3-compatible providers
accessKeyIdExplicit AWS access key
secretAccessKeyExplicit AWS secret key
sessionTokenTemporary 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 requestIdrequest-unknown
  • missing manifestIdmanifest-unknown
  • missing categoryuncategorized
  • 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.