@crvouga/mockingbird-service-s3 (英语)
本地模拟器。 真正的API合同. 部分 嘲笑鸟。 。 。 .
精确回答为 米尼奥 做,所以它下降为MinIO,亚马逊S3和其他S3兼容存储在测试中. 每个行为都由差分的甲骨文所支撑:370个脚本情景(约3,800个HTTP交换)被记录在了针对MinIO的 RELEASE.2025-10-15T17-29-55Z,以及 bun test 重放每个对仿真器,并且需要相同的状态,头和XML字节来表示字节.
安装
npm install -D @crvouga/mockingbird-service-s3
仅限无害环境管理。 节点22+或Bun 1.2+.
使用量
将 SDK 端点指向模拟器并启用路径式地址 。 Fixture 证书被验证为预签请求;默认对为 fixture 编号 : fixture。 。 。 .
import { CreateBucketCommand, GetObjectCommand, PutObjectCommand, S3Client } from "@aws-sdk/client-s3"
import { createServer } from "@crvouga/mockingbird-service-s3/server"
// Test setup: start the emulator and point the SDK's endpoint at it.
const server = await createServer()
const s3 = new S3Client({
endpoint: server.url,
region: "us-east-1",
forcePathStyle: true,
credentials: { accessKeyId: "fixture", secretAccessKey: "fixture" },
})
// Application code: the S3 SDK calls it already makes.
await s3.send(new CreateBucketCommand({ Bucket: "fixtures" }))
await s3.send(
new PutObjectCommand({ Bucket: "fixtures", Key: "result.bin", Body: new Uint8Array([0, 255]) }),
)
const object = await s3.send(new GetObjectCommand({ Bucket: "fixtures", Key: "result.bin" }))
console.log(await object.Body?.transformToByteArray()) // Uint8Array(2) [ 0, 255 ]
await server.close()
设置应用程序的 S3 端点环境变量到服务器 URL 及其区域到 us-east-1。 。 。 .
支助行动
MinIO的S3路由器所服务的一切,都有MinIO的先行,验证顺序,出错代码和消息(出自MinIO自己的出错表):
- 弹夹: CreateBucket(位置约束,对象锁定旗),HeadBucket,DevedBucket(包含.
x-minio-force-delete), ListBuckets, GetBucketLocation, Get/PutBucketVersioning (包括MinIO的被排除在外的前缀), Get/Put/DeleteBucket政策和GetBucket政策状态, Get/Put/DeleteBucketTlaging, Get/Put/DeleteBucketLife循环, Get/Put/DeleteBucketEncrypt, Get/Put/DeleteBucketReplextation, Get/PutOboxLockfignation, ACL,网站,CL,加速,要求支付和记录分站,以及Minio的监听通知和复制扩展. - 对象: Put Object, Get Object, Head Object(系统和用户元数据,有条件读取和写入,每个范围表,
partNumber, (中文(简体) ),response-*更换、校验和 CRC32/CRC32C/CRC64NVME/SHA1/SHA256x-amz-checksum-mode),复制对象(元数据和标记指令,复制源条件,版本),删除对象和删除对象(删除标记,无效版本),Get/Put/DeletobjectTlaging,Get/Putobject保留,Get/PutobjectLegalHold,Get/PutObjectAcl,GetObjectAtizes,还原对象,选择对象(CSV和JSON输入,基本SQL,事件流框架),浏览器POST上传(POST政策,V4和V2表签名). - 列名: 列出对象 V1, V2 和
metadata=true,列表objectversions,包括MinIO的标记和截取行为. - 多块: 创建、上传部分、上传部分、完整部分、中止部分、列表部分、列表多部分加载,并附有部分校验和
<md5>-NETAG (英语). - 认证: SigV4 标题并预签,流线
aws-chunked(签名块和签名或未签名的拖车),SigV2头和预先签名,请求时间 skew,以及通过桶政策匿名访问.
GetObjectLambda 财务报告和审定财务报表 PutObjectExtract (雪球自动取出)答案 NotImplemented。 。 。 .
认证模式
authentication: "lenient"(默认):未签名的请求充当桶主和信头签名不检查,所以很简单fetch做测试 已指定 URL 仍在对照credentials(默认)fixture编号 :fixture) (中文(简体) ).authentication: "strict": MinIO的认证准确无误. 每项请求都必须用下列语句签名:credentials,而匿名请求只有在桶政策允许的情况下才允许. 甲骨文运行于此模式.
region (默认) us-east-1)是签署区域和 x-amz-bucket-region 头曰.
从米尼欧出发的地方
- Bucket CORS 键盘:MinIO只给"桶"CORS API打分,因此模拟器保留了Amazon S3的有记载的行为. 存储
CORSConfiguration执行:飞行前通过第一个比对规则回答或拒绝使用403 AccessForbidden,并匹配实际请求Access-Control-*头. 这不是神谕验证. - 虚拟托管地址数字 :
Host: <bucket>.<base host>名称桶( 基准主机默认为localhost; 设置virtualHosts,或--virtual-host a,b,仅供路径样式使用. - 体积数字 :
createServer接受最高为每PUT或部分5个GiB(S3的极限;MinIO为5个TiB).createServer({ maxBodyBytes })低点. - 名单 总是读取实时数据, MinIO从第一页的快照中为后页服务.
预言
oracle/ 存储库中保存着带子、情景和录制的MINIO记录誊本. bun oracle/run.ts 重播他们与一个活的MINIO, --record 刷新记录;见 甲骨文/README.md。 。 。 .
管理和确定性控制
GET/POST /__admin/objects检查一个对象的元数据或种子;GET /__admin/objects/:bucket/:key下载其字节.GET /__admin/uploads检查活动上传和部分元数据.- 预设的缺陷是
slow_down, (中文(简体) ),access_denied, (中文(简体) ),expired_token和一发truncate_stream。通用断层可以失败或重置下一个部分请求. - 推进共享仿真器时钟通过
/__admin/clock以过期过期的 URL . - 对象写出,复制,多段补全,并删除发布S3形通知. 通过运行时间配置 HTTP 汇
webhooks选项或共享的 webhook 管理员路由; 发送尝试和重试出现在下面/__admin/webhooks。 。 。 .
共享运行时间还提供健康,重置,日记,衡量标准,时间表和断层路径. 选择孤立状态 x-mockingbird-namespace, (中文(简体) ), /__admin/ns/<name>,或者SigV4访问键映射.
故意不模拟
SSE-C和SSE-KMS加密(MinIO需要TLS和一个KMS给他们),IAM用户和根证书和桶政策以外的政策,实际应用生命周期规则或复制,以及真正的SQS送出. SQS消费者可以通过配置的HTTP槽来使用所捕获的通知有效载荷.
API 密码
S3API, (中文(简体) ),S3APIOptions:获取处理器和配置.S3Notification, (中文(简体) ),S3Object(单位:千美元)ObjectVersion, (中文(简体) ),S3SeedObject, (中文(简体) ),BucketRecord, (中文(简体) ),MultipartUpload, (中文(简体) ),MultipartPart: 通知、状态和固定类型.createRuntime, (中文(简体) ),S3Runtime, (中文(简体) ),S3RuntimeOptions:完整的"鸟"跑步时间和"网球"中枢.S3_NAMESPACE, (中文(简体) ),S3_PRESETS, (中文(简体) ),accessKeyCredential:常数和故障控制.S3_MAX_UPLOAD_BYTES: 默认请求正文限制 (5 GiB) forcreateServer。 。 。 .document, (中文(简体) ),operationIds, (中文(简体) ),supportedOperationIds: 生成了 OpenAPI 元数据.createServer, (中文(简体) ),S3ServerOptions, (中文(简体) ),DEFAULT_PORT, (中文(简体) ),serveTarget从./server:节点HTTP适配器和CLI集成.
甲骨文 : 米尼奥 RELEASE.2025-10-15T17-29-55Z,与 亚马逊 S3 API 参考 为桶 CORS.