{"_id":"@absolutejs/secure-transfer-s3","_rev":"5-2fe9d4cc65773115464fd102fa8a19e7","name":"@absolutejs/secure-transfer-s3","dist-tags":{"latest":"0.2.2"},"versions":{"0.0.1":{"name":"@absolutejs/secure-transfer-s3","version":"0.0.1","author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/secure-transfer-s3@0.0.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/secure-transfer-adapters/tree/master/s3","bugs":{"url":"https://github.com/absolutejs/secure-transfer-adapters/issues"},"dist":{"shasum":"07db66770fb1d3ebcfe76c26cfa7af08cd82b233","tarball":"https://registry.npmjs.org/@absolutejs/secure-transfer-s3/-/secure-transfer-s3-0.0.1.tgz","fileCount":12,"integrity":"sha512-tKOOWu3L6y1eRXyUr67MYIJ+1K93GMZ2n9A2Iebw7biqzTlW+LSX8HYCj3ZonBWzv6SPEtKqZZ4aTJm7xstiKg==","signatures":[{"sig":"MEQCIDd8cnMk98CPsGDgiRmY6fuj5QXM29ynpNMm5FyfxeMYAiBXU1/USXghvW36IDXj0cNzzgEGV+atR63toYBkgUFOlg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41228},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"12781671f444c8855750cb3eb3e9aacd81aaaff4","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @absolutejs/secure-transfer --external @aws-sdk/client-s3 --external @absolutejs/manifest --external @sinclair/typebox && tsc --project tsconfig.build.json && absolute-manifest emit","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","format:check":"prettier --check \"./**/*.{ts,json,md}\"","check:package":"bun run format:check && bun run typecheck && bun run test && bun run build && bun run verify-package","verify-package":"absolute-manifest verify-package"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/secure-transfer-adapters.git","type":"git","directory":"s3"},"_npmVersion":"10.9.2","description":"Atomic AWS S3 and Cloudflare R2 storage adapter for @absolutejs/secure-transfer.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.9.0","@types/bun":"1.3.14","typescript":"5.9.3","@aws-sdk/client-s3":"3.1095.0","@absolutejs/secure-transfer":"https://registry.npmjs.org/@absolutejs/secure-transfer/-/secure-transfer-0.0.3.tgz"},"peerDependencies":{"@aws-sdk/client-s3":">=3.700.0 <4","@absolutejs/secure-transfer":">=0.0.3 <0.1"},"_npmOperationalInternal":{"tmp":"tmp/secure-transfer-s3_0.0.1_1787793264226_0.38115331048005974","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@absolutejs/secure-transfer-s3","version":"0.1.0","author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/secure-transfer-s3@0.1.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/secure-transfer-adapters/tree/master/s3","bugs":{"url":"https://github.com/absolutejs/secure-transfer-adapters/issues"},"dist":{"shasum":"75003d3c1159d7f909b16e7473bc1e5b452f87c1","tarball":"https://registry.npmjs.org/@absolutejs/secure-transfer-s3/-/secure-transfer-s3-0.1.0.tgz","fileCount":13,"integrity":"sha512-NqdqH9aLKqVwCBN7xmkMePD6RtbbzqVbTsIW/z3Dlr7qdQh+1TUmAjNPSVCZIfiB4ccgu/NUQVgHKiYs91dIqw==","signatures":[{"sig":"MEQCIGG7Pst1L44zl4MoiG/NHhwLlAqb9kmqPtgDpgUEIL0zAiBtJ7FhFLRiqCmwxkNVrfnIe+L3Bl+i0xvgdp9jLSErvQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAUeBQO5jyfUNmcZ8fqCZX+a0E3zQKPVJrKCiZNdd5AzAiBTjYPaMnWu3IeN8HHKZqF43pMIkMz5D7OADNBn5lBqog==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":74166},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"35656a420a6bd75ed2b2245526cacdf88f638e24","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @absolutejs/secure-transfer --external @aws-sdk/client-s3 --external @absolutejs/manifest --external @sinclair/typebox && tsc --project tsconfig.build.json && absolute-manifest emit","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","format:check":"prettier --check \"./**/*.{ts,json,md}\"","check:package":"bun run format:check && bun run typecheck && bun run test && bun run build && bun run verify-package","verify-package":"absolute-manifest verify-package"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/secure-transfer-adapters.git","type":"git","directory":"s3"},"_npmVersion":"10.9.2","description":"Atomic AWS S3 and Cloudflare R2 storage adapter for @absolutejs/secure-transfer.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.9.0","@types/bun":"1.3.14","typescript":"5.9.3","@aws-sdk/client-s3":"3.1095.0","@absolutejs/secure-transfer":"https://registry.npmjs.org/@absolutejs/secure-transfer/-/secure-transfer-0.1.1.tgz"},"peerDependencies":{"@aws-sdk/client-s3":">=3.700.0 <4","@absolutejs/secure-transfer":">=0.1.1 <0.2"},"_npmOperationalInternal":{"tmp":"tmp/secure-transfer-s3_0.1.0_1787794846917_0.9710058987997927","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@absolutejs/secure-transfer-s3","version":"0.2.0","author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/secure-transfer-s3@0.2.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/secure-transfer-adapters/tree/master/s3","bugs":{"url":"https://github.com/absolutejs/secure-transfer-adapters/issues"},"dist":{"shasum":"dba68f0835f348ac1bb494960bb66aaaef14c44e","tarball":"https://registry.npmjs.org/@absolutejs/secure-transfer-s3/-/secure-transfer-s3-0.2.0.tgz","fileCount":14,"integrity":"sha512-Z7OWdxT5p+JCYTR9InwUX96Duw1E4LsO4ViW+a6Pc3AN9s0Nptkbtizt5lrmrMOLlhkHqYToncII7TI8CEEsjw==","signatures":[{"sig":"MEUCIGdHrRZdPgmL+h+pA8ZDbGAJlapHrWqOKWwG3KXmFrBXAiEAmgAXyjotXWufKAJtUDHkRduEWULKHbEZBdvv26Ezh7c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCZE3OtaraWHX/D2DfE9dfstfJjBqk9edonxeHv98DEbwIhAMYlAOFUO8FT7YUWyhca4RIgytVJI4lZFX0NPsdDcXqF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93341},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"b8994ad2466a7f3c7f0573fdd0d4c8c4047f2b0c","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @absolutejs/secure-transfer --external @aws-sdk/client-s3 --external @absolutejs/manifest --external @sinclair/typebox && tsc --project tsconfig.build.json && absolute-manifest emit","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","format:check":"prettier --check \"./**/*.{ts,json,md}\"","check:package":"bun run format:check && bun run typecheck && bun run test && bun run build && bun run verify-package","verify-package":"absolute-manifest verify-package"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/secure-transfer-adapters.git","type":"git","directory":"s3"},"_npmVersion":"10.9.2","description":"Atomic AWS S3 and Cloudflare R2 storage adapter for @absolutejs/secure-transfer.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.9.0","@types/bun":"1.3.14","typescript":"5.9.3","@aws-sdk/client-s3":"3.1095.0","@absolutejs/secure-transfer":"https://registry.npmjs.org/@absolutejs/secure-transfer/-/secure-transfer-0.2.0.tgz"},"peerDependencies":{"@aws-sdk/client-s3":">=3.700.0 <4","@absolutejs/secure-transfer":">=0.2.0 <0.3"},"_npmOperationalInternal":{"tmp":"tmp/secure-transfer-s3_0.2.0_1787796156911_0.45053206138042645","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@absolutejs/secure-transfer-s3","version":"0.2.1","author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/secure-transfer-s3@0.2.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/secure-transfer-adapters/tree/master/s3","bugs":{"url":"https://github.com/absolutejs/secure-transfer-adapters/issues"},"dist":{"shasum":"4ca0dc243a3743e1bb8c7306a2c13594ca0078d8","tarball":"https://registry.npmjs.org/@absolutejs/secure-transfer-s3/-/secure-transfer-s3-0.2.1.tgz","fileCount":14,"integrity":"sha512-8BP34kUsIATpBmSove4EZvN8thaMIReYAJSrgnI9UMaturYO2HpstZIRIat0+1U+SAzmdHYazyzbQBV/rtYHjA==","signatures":[{"sig":"MEUCIB/l8UhiwfcTEIe3vlG4PKH2nWZHMutIc/h1drFy/HwsAiEAtGaoaTzecbvkVLR79CtUeeFPSl8OzABVAnYpOrn/iiA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHKF5oW1jqTrr91wX7F7cyMIkQG+AoiwVWL3VIiYx0yDAiEA9CQof9zGo7vbXDclg/kIcCruBgx4e+R63kW0vZPRabw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":93777},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"3330724d1b569afe4bcee809fed5066b004e3691","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @absolutejs/secure-transfer --external @aws-sdk/client-s3 --external @absolutejs/manifest --external @sinclair/typebox && tsc --project tsconfig.build.json && absolute-manifest emit","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","format:check":"prettier --check \"./**/*.{ts,json,md}\"","check:package":"bun run format:check && bun run typecheck && bun run test && bun run build && bun run verify-package","verify-package":"absolute-manifest verify-package"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/secure-transfer-adapters.git","type":"git","directory":"s3"},"_npmVersion":"10.9.2","description":"Atomic AWS S3 and Cloudflare R2 storage adapter for @absolutejs/secure-transfer.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.9.0","@types/bun":"1.3.14","typescript":"5.9.3","@aws-sdk/client-s3":"3.1095.0","@absolutejs/secure-transfer":"https://registry.npmjs.org/@absolutejs/secure-transfer/-/secure-transfer-0.2.0.tgz"},"peerDependencies":{"@aws-sdk/client-s3":">=3.700.0 <4","@absolutejs/secure-transfer":">=0.2.0 <0.3"},"_npmOperationalInternal":{"tmp":"tmp/secure-transfer-s3_0.2.1_1787796293849_0.5112143658261405","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"_id":"@absolutejs/secure-transfer-s3@0.2.2","bugs":{"url":"https://github.com/absolutejs/secure-transfer-adapters/issues"},"dist":{"shasum":"bfafbea930423a20e35d6f3d0cb67827cbd442c8","tarball":"https://registry.npmjs.org/@absolutejs/secure-transfer-s3/-/secure-transfer-s3-0.2.2.tgz","fileCount":14,"integrity":"sha512-ArviEsmmu/CqyTHrShRKT9mCqwyVEy2g9bFSc0p72GZDG1K2zh0u/HdN0xKKyCnlvZpkxtGAu661IamqTHI/3Q==","signatures":[{"sig":"MEYCIQCAEsqU1qY+aqyPE2gwG3evzcHfkmnH04iRRFRAaLazDwIhAJoW2TrubLPYrWX3lqAdkxK7fq9SyemcYQBxQKMUoXwv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDCzAnMQLAl+Vj3pcPDn+Mm7tZXG6UCs29uHEH0M+uAIwIgU1dHZ4x3kLLSCLUl/iTRF8iyITveuSr2qNhAzCwaW8U="}],"unpackedSize":93922},"main":"./dist/index.js","name":"@absolutejs/secure-transfer-s3","type":"module","types":"./dist/index.d.ts","author":{"name":"Alex Kahn"},"module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"939dc2275d8ca4dddab486b6904aaebe035af437","license":"Apache-2.0","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @absolutejs/secure-transfer --external @aws-sdk/client-s3 --external @absolutejs/manifest --external @sinclair/typebox && tsc --project tsconfig.build.json && absolute-manifest emit","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","format:check":"prettier --check \"./**/*.{ts,json,md}\"","check:package":"bun run format:check && bun run typecheck && bun run test && bun run build && bun run verify-package","verify-package":"absolute-manifest verify-package"},"version":"0.2.2","_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"homepage":"https://github.com/absolutejs/secure-transfer-adapters/tree/master/s3","absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/secure-transfer-adapters.git","type":"git","directory":"s3"},"_npmVersion":"10.9.2","description":"Atomic AWS S3 and Cloudflare R2 storage adapter for @absolutejs/secure-transfer.","directories":{},"maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.9.0","@types/bun":"1.3.14","typescript":"5.9.3","@aws-sdk/client-s3":"3.1095.0","@absolutejs/secure-transfer":"https://registry.npmjs.org/@absolutejs/secure-transfer/-/secure-transfer-0.3.0.tgz"},"peerDependencies":{"@aws-sdk/client-s3":">=3.700.0 <4","@absolutejs/secure-transfer":">=0.2.0 <0.4"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/secure-transfer-s3_0.2.2_1787797347431_0.4092032163190469"}}},"time":{"created":"2026-08-27T01:14:24.050Z","modified":"2026-08-27T02:22:27.684Z","0.0.1":"2026-08-27T01:14:24.404Z","0.1.0":"2026-08-27T01:40:47.005Z","0.2.0":"2026-08-27T02:02:36.991Z","0.2.1":"2026-08-27T02:04:53.927Z","0.2.2":"2026-08-27T02:22:27.513Z"},"bugs":{"url":"https://github.com/absolutejs/secure-transfer-adapters/issues"},"author":{"name":"Alex Kahn"},"license":"Apache-2.0","homepage":"https://github.com/absolutejs/secure-transfer-adapters/tree/master/s3","repository":{"url":"git+https://github.com/absolutejs/secure-transfer-adapters.git","type":"git","directory":"s3"},"description":"Atomic AWS S3 and Cloudflare R2 storage adapter for @absolutejs/secure-transfer.","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"readme":"# `@absolutejs/secure-transfer-s3`\n\nAWS SDK storage adapter for `@absolutejs/secure-transfer`. It also works with\nS3-compatible services such as Cloudflare R2 when the SDK client is configured\nwith that service's endpoint and credentials.\n\n```ts\nimport { S3Client } from \"@aws-sdk/client-s3\";\nimport {\n  s3ProtectedReceiptStore,\n  s3SecureTransferRevocationStore,\n  s3SecureTransferStore,\n} from \"@absolutejs/secure-transfer-s3\";\n\nconst store = s3SecureTransferStore({\n  bucket: \"private-ciphertext\",\n  client: new S3Client({ region: \"us-east-1\" }),\n  prefix: \"secure-transfer/\",\n});\nconst receiptStore = s3ProtectedReceiptStore({\n  bucket: \"private-ciphertext\",\n  client: new S3Client({ region: \"us-east-1\" }),\n  prefix: \"secure-transfer/\",\n});\nconst revocations = s3SecureTransferRevocationStore({\n  bucket: \"trusted-transfer-policy\",\n  client: new S3Client({ region: \"us-east-1\" }),\n});\n```\n\nWrites use `If-None-Match: *`; a precondition failure becomes `\"exists\"` and is\nnever retried as an unconditional write. Transient `409` conflicts are retried\nwith the condition still attached, following AWS guidance. Configure bucket\nlifecycle expiration as defense in depth, and run `sweepExpired()` with its\ncontinuation cursor for a testable application-level cleanup path.\n\nProtected receipts use ETags as compare-and-swap versions. Lease acquisition and\ncheckpoint updates use `If-Match`; creation uses `If-None-Match: *`. Completion\nfirst installs a conditional tombstone so a stale resumer cannot revive state,\nthen removes it. Run `sweepExpiredReceipts()` for abandoned receipt state.\n\nRevocation tombstones use conditional create-only writes, opaque SHA-256 keys,\nand required-retention metadata. Prefer a separately permissioned policy bucket;\ndownload authorization fails safely only when clients can trust this state. Run\n`sweepExpiredRevocations()` until its cursor is exhausted after retention ends.\n\nCloud credentials and paid object storage are bring-your-own. Managed credentials\nand scheduled lifecycle operations belong in AbsoluteJS PaaS.\n","readmeFilename":"README.md"}