{"_id":"@absolutejs/blob","_rev":"9-53898d17f9d31fb915c181df823eff6d","name":"@absolutejs/blob","dist-tags":{"latest":"0.5.2"},"versions":{"0.1.0":{"name":"@absolutejs/blob","version":"0.1.0","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/blob@0.1.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"dist":{"shasum":"277e7966da282444622ec46223f9ad4c1b5287bd","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.1.0.tgz","fileCount":12,"integrity":"sha512-Qr9JkH/qNJS4Dw3Toa0wHlG2kW6fgMMyPj0FOrWIKKzrrbQJpsIhVQEDQ7Tk+sGOyc/bL+eCC6QNkTETNbEl1g==","signatures":[{"sig":"MEYCIQCIzYdYguh6Ya9/KrjBAHPhXmo2Ecg2tVDWjCTvZ0rkPgIhAKqKUwlDJcmN01jebyhNlPpZNoLinC5l3on0VGG0DlfX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":91339},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"277e7966da282444622ec46223f9ad4c1b5287bd","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"}},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts --outdir dist --root src --sourcemap --target=bun && tsc --project tsconfig.build.json","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-Qr9JkH/qNJS4Dw3Toa0wHlG2kW6fgMMyPj0FOrWIKKzrrbQJpsIhVQEDQ7Tk+sGOyc/bL+eCC6QNkTETNbEl1g==","repository":{"url":"git+https://github.com/absolutejs/blob.git","type":"git"},"_npmVersion":"10.8.3","description":"Object storage substrate for the AbsoluteJS PaaS. One BlobStore interface (put/get/getStream/head/delete/list/presign) with adapters for local disk (dev) and S3-compatible services (AWS S3, Cloudflare R2, Backblaze B2, MinIO). Narrow S3ClientLike keeps th","directories":{},"_nodeVersion":"24.3.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^5.9.0"},"peerDependencies":{"bun-types":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/blob_0.1.0_1780223693964_0.04237260577213009","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@absolutejs/blob","version":"0.1.1","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/blob@0.1.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/blob","bugs":{"url":"https://github.com/absolutejs/blob/issues"},"dist":{"shasum":"fda1a934ac79e4b60643076d0f58d6503096a0c2","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.1.1.tgz","fileCount":16,"integrity":"sha512-BlgoFLsFdt69n4p7yA28YX2DrxvbUFo91tLnsUL98cC1zenR7QN+ykUAwb/wLwDiwUrn+NwB7y+jkNl/yBeI8g==","signatures":[{"sig":"MEQCIGb7hXK4gTZTtFiHzqmaum2J+HqkPpbN4xgZJDhfqDHwAiBiXK1BHTBJraOdUjLfWUX09rPLSUrqCUxACww0ZzkrLA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1194446},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"fda1a934ac79e4b60643076d0f58d6503096a0c2","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-BlgoFLsFdt69n4p7yA28YX2DrxvbUFo91tLnsUL98cC1zenR7QN+ykUAwb/wLwDiwUrn+NwB7y+jkNl/yBeI8g==","absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/blob.git","type":"git"},"_npmVersion":"10.8.3","description":"Object storage substrate for the AbsoluteJS PaaS. One BlobStore interface (put/get/getStream/head/delete/list/presign) with adapters for local disk (dev) and S3-compatible services (AWS S3, Cloudflare R2, Backblaze B2, MinIO). Narrow S3ClientLike keeps th","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^5.9.0"},"peerDependencies":{"bun-types":"^1.3.14"},"_npmOperationalInternal":{"tmp":"tmp/blob_0.1.1_1783964081616_0.418513589626446","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@absolutejs/blob","version":"0.2.0","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/blob@0.2.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/blob","bugs":{"url":"https://github.com/absolutejs/blob/issues"},"dist":{"shasum":"ff96f7137149bc853048dc9a712e34b4c231f2e6","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.2.0.tgz","fileCount":19,"integrity":"sha512-JasAx/NukZkUDRq3Tio4YmP9gObc3cohkb8mGBkOMovkSMz0OPtS8cR8IAnT43PUNkLkSE6kjd46quXJ2BTWeQ==","signatures":[{"sig":"MEQCIDj3XFN/fB9JwMfvmV3aH0slwYQ1bGUmapjoYZR5UJDTAiAXFG2DpkS9Twb2CfrzwTOyCFD9fxVMIlavT6XN+TRQkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1237542},"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"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"},"./aws-s3":{"types":"./dist/aws-s3.d.ts","import":"./dist/aws-s3.js","default":"./dist/aws-s3.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"650f345b15497f6c24dd73ceb367a5e561c1f55a","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts src/aws-s3.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @aws-sdk/client-s3 --external @aws-sdk/lib-storage --external @aws-sdk/s3-request-presigner && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/blob.git","type":"git"},"_npmVersion":"10.9.2","description":"Object storage substrate for AbsoluteJS. One BlobStore interface with bounded streaming local and S3-compatible adapters, plus official AWS SDK wiring for multipart object storage.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^5.9.0","@aws-sdk/client-s3":"3.1087.0","@aws-sdk/lib-storage":"3.1087.0","@aws-sdk/s3-request-presigner":"3.1087.0"},"peerDependencies":{"bun-types":"^1.3.14","@aws-sdk/client-s3":"^3.1087.0","@aws-sdk/lib-storage":"^3.1087.0","@aws-sdk/s3-request-presigner":"^3.1087.0"},"peerDependenciesMeta":{"@aws-sdk/client-s3":{"optional":true},"@aws-sdk/lib-storage":{"optional":true},"@aws-sdk/s3-request-presigner":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/blob_0.2.0_1784124501679_0.8203893601993895","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@absolutejs/blob","version":"0.2.1","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/blob@0.2.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/blob","bugs":{"url":"https://github.com/absolutejs/blob/issues"},"dist":{"shasum":"3433598c7b88054861abc261d4d198aff5f31504","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.2.1.tgz","fileCount":19,"integrity":"sha512-WlHvHcYmCCP4IBWk9cdyn2dzcMkzMOJkEqjAibRt+aEenCJVB5gBPt24ty9ydoH813iWjHSajVKweOdDKAiddA==","signatures":[{"sig":"MEQCIHquY9s7aw6YBHxwFNg7BgyFNleXhE0E1/15GiICFe4oAiB8c6woSlJfLwIWA2a29TcsLqCPIbDT9wqnOujYQT+agw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1243173},"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"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"},"./aws-s3":{"types":"./dist/aws-s3.d.ts","import":"./dist/aws-s3.js","default":"./dist/aws-s3.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"91b48af583ec4b29f85f678d73f1eacafdde2658","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts src/aws-s3.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @aws-sdk/client-s3 --external @aws-sdk/lib-storage --external @aws-sdk/s3-request-presigner && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/blob.git","type":"git"},"_npmVersion":"10.9.2","description":"Object storage substrate for AbsoluteJS. One BlobStore interface with bounded streaming local and S3-compatible adapters, plus official AWS SDK wiring for multipart object storage.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^5.9.0","@aws-sdk/client-s3":"3.1087.0","@aws-sdk/lib-storage":"3.1087.0","@aws-sdk/s3-request-presigner":"3.1087.0"},"peerDependencies":{"bun-types":"^1.3.14","@aws-sdk/client-s3":"^3.1087.0","@aws-sdk/lib-storage":"^3.1087.0","@aws-sdk/s3-request-presigner":"^3.1087.0"},"peerDependenciesMeta":{"@aws-sdk/client-s3":{"optional":true},"@aws-sdk/lib-storage":{"optional":true},"@aws-sdk/s3-request-presigner":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/blob_0.2.1_1784125536805_0.4767848611983794","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@absolutejs/blob","version":"0.3.0","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/blob@0.3.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/blob","bugs":{"url":"https://github.com/absolutejs/blob/issues"},"dist":{"shasum":"09a3ba4dad87645e4b8454c51d137ea56c1acc22","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.3.0.tgz","fileCount":22,"integrity":"sha512-jAEX6ObN1BM5b7jaBomm6uXedKPKWmeInn4heXVcA7TJSAdGbA/jw7qGEH8KJqPuNQ/LmZnswqnOaHan2lv8DA==","signatures":[{"sig":"MEQCIEbRydy6qb51Zh787pSDVFJsz7LBee23n/JN0DtnAK+DAiAiOvkqc7TUFaz8wmKgOXoR6doH0asNpm8a/eJdKRQ89g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1267884},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"09a3ba4dad87645e4b8454c51d137ea56c1acc22","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"},"./aws-s3":{"types":"./dist/aws-s3.d.ts","import":"./dist/aws-s3.js","default":"./dist/aws-s3.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./uploadthing":{"types":"./dist/uploadthing.d.ts","import":"./dist/uploadthing.js","default":"./dist/uploadthing.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts src/aws-s3.ts src/uploadthing.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @aws-sdk/client-s3 --external @aws-sdk/lib-storage --external @aws-sdk/s3-request-presigner --external uploadthing && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-jAEX6ObN1BM5b7jaBomm6uXedKPKWmeInn4heXVcA7TJSAdGbA/jw7qGEH8KJqPuNQ/LmZnswqnOaHan2lv8DA==","absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/blob.git","type":"git"},"_npmVersion":"10.8.3","description":"Object storage substrate for AbsoluteJS. One BlobStore interface with bounded streaming local and S3-compatible adapters, plus official AWS SDK wiring for multipart object storage.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^5.9.0","uploadthing":"7.7.4","@aws-sdk/client-s3":"3.1087.0","@aws-sdk/lib-storage":"3.1087.0","@aws-sdk/s3-request-presigner":"3.1087.0"},"peerDependencies":{"bun-types":"^1.3.14","uploadthing":"^7.7.4","@aws-sdk/client-s3":"^3.1087.0","@aws-sdk/lib-storage":"^3.1087.0","@aws-sdk/s3-request-presigner":"^3.1087.0"},"peerDependenciesMeta":{"uploadthing":{"optional":true},"@aws-sdk/client-s3":{"optional":true},"@aws-sdk/lib-storage":{"optional":true},"@aws-sdk/s3-request-presigner":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/blob_0.3.0_1784304757461_0.4742246563512147","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@absolutejs/blob","version":"0.4.0","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"author":"Alex Kahn","license":"BSL-1.1","_id":"@absolutejs/blob@0.4.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/blob","bugs":{"url":"https://github.com/absolutejs/blob/issues"},"dist":{"shasum":"4c6b2b0a1900e917be0b76b12daac062e69aca25","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.4.0.tgz","fileCount":25,"integrity":"sha512-8dG3dzzaMmPJmS6kYoF6NuVHXlZ1Jedyj0X51FzuBy/fwOtOUc5o6gMVok7h0j5HXg/tYSom08AgMhdqxMEL8Q==","signatures":[{"sig":"MEYCIQD/xoelpUtbpRjZSaegkUQGzxPIy3oBrNKLB7TmgvDrJQIhANY18sEK4fBPN0YFzzkNBtKfJrm5oX5nSk/FFw3gN1e2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1283258},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"4c6b2b0a1900e917be0b76b12daac062e69aca25","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"},"./aws-s3":{"types":"./dist/aws-s3.d.ts","import":"./dist/aws-s3.js","default":"./dist/aws-s3.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./inspection":{"types":"./dist/inspection.d.ts","import":"./dist/inspection.js","default":"./dist/inspection.js"},"./uploadthing":{"types":"./dist/uploadthing.d.ts","import":"./dist/uploadthing.js","default":"./dist/uploadthing.js"},"./manifest.json":"./dist/manifest.json"},"scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts src/aws-s3.ts src/uploadthing.ts src/inspection.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @aws-sdk/client-s3 --external @aws-sdk/lib-storage --external @aws-sdk/s3-request-presigner --external uploadthing && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"_integrity":"sha512-8dG3dzzaMmPJmS6kYoF6NuVHXlZ1Jedyj0X51FzuBy/fwOtOUc5o6gMVok7h0j5HXg/tYSom08AgMhdqxMEL8Q==","absolutejs":{"manifestContract":1},"repository":{"url":"git+https://github.com/absolutejs/blob.git","type":"git"},"_npmVersion":"10.8.3","description":"Object storage substrate for AbsoluteJS. One BlobStore interface with bounded streaming local and S3-compatible adapters, plus official AWS SDK wiring for multipart object storage.","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^5.9.0","uploadthing":"7.7.4","@aws-sdk/client-s3":"3.1087.0","@aws-sdk/lib-storage":"3.1087.0","@aws-sdk/s3-request-presigner":"3.1087.0"},"peerDependencies":{"bun-types":"^1.3.14","uploadthing":"^7.7.4","@aws-sdk/client-s3":"^3.1087.0","@aws-sdk/lib-storage":"^3.1087.0","@aws-sdk/s3-request-presigner":"^3.1087.0"},"peerDependenciesMeta":{"uploadthing":{"optional":true},"@aws-sdk/client-s3":{"optional":true},"@aws-sdk/lib-storage":{"optional":true},"@aws-sdk/s3-request-presigner":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/blob_0.4.0_1784710238865_0.9091711033956376","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@absolutejs/blob","version":"0.5.0","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/blob@0.5.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/blob","bugs":{"url":"https://github.com/absolutejs/blob/issues"},"dist":{"shasum":"31697ea27ca39f78c3276efd68efba3f7dfa2bb1","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.5.0.tgz","fileCount":25,"integrity":"sha512-yAybNRSizfTbGJAI1lvNhEizJFiKodruK1oRz0ApNOUY15lQ0Ra+DplJvbrzznB+IzleEupr9hb3vKRTtP1lBw==","signatures":[{"sig":"MEYCIQC6CKnkn0I9yZW49z9XPSGRDmtaUxzaOLCE9n1nQ9eqtQIhAOAdNY8GGjzSLY4LQxlIu/Rt5RVyptU/+Lq+AilFt75d","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1307575},"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"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"},"./aws-s3":{"types":"./dist/aws-s3.d.ts","import":"./dist/aws-s3.js","default":"./dist/aws-s3.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./inspection":{"types":"./dist/inspection.d.ts","import":"./dist/inspection.js","default":"./dist/inspection.js"},"./uploadthing":{"types":"./dist/uploadthing.d.ts","import":"./dist/uploadthing.js","default":"./dist/uploadthing.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"abda4f523345bf688196b728a5870ec9b72d8a9c","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts src/aws-s3.ts src/uploadthing.ts src/inspection.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @aws-sdk/client-s3 --external @aws-sdk/lib-storage --external @aws-sdk/s3-request-presigner --external uploadthing && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/blob.git","type":"git"},"_npmVersion":"10.9.2","description":"Object storage substrate for AbsoluteJS. One BlobStore interface with bounded streaming local and S3-compatible adapters, plus official AWS SDK wiring for multipart object storage.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"^3.8.3","@types/bun":"^1.3.14","typescript":"^5.9.0","uploadthing":"7.7.4","@aws-sdk/client-s3":"3.1087.0","@aws-sdk/lib-storage":"3.1087.0","@aws-sdk/s3-request-presigner":"3.1087.0"},"peerDependencies":{"bun-types":"^1.3.14","uploadthing":"^7.7.4","@aws-sdk/client-s3":"^3.1087.0","@aws-sdk/lib-storage":"^3.1087.0","@aws-sdk/s3-request-presigner":"^3.1087.0"},"peerDependenciesMeta":{"uploadthing":{"optional":true},"@aws-sdk/client-s3":{"optional":true},"@aws-sdk/lib-storage":{"optional":true},"@aws-sdk/s3-request-presigner":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/blob_0.5.0_1784806785140_0.67885813031759","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@absolutejs/blob","version":"0.5.1","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"author":{"name":"Alex Kahn"},"license":"BSL-1.1","_id":"@absolutejs/blob@0.5.1","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/blob","bugs":{"url":"https://github.com/absolutejs/blob/issues"},"dist":{"shasum":"da4b44f824bf644f18121257bc5cc9663fe9809f","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.5.1.tgz","fileCount":25,"integrity":"sha512-R9ASdBiKeYtrIdEnxIgcFP13Vm9I/tubxHld5UNvEXcoNP5jCo8h4z7l4m1iFQreBXJ/eq10wFxcYlTyzpN8eA==","signatures":[{"sig":"MEYCIQCRexRT0K1FbS6y2U1RC1ixve9oXeGnQPvSMyD4OzcJXgIhAPK6UCIvU88Ayr7OXyUteudXDb4UhDnBlANME/MmZTfw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":651847},"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"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"},"./aws-s3":{"types":"./dist/aws-s3.d.ts","import":"./dist/aws-s3.js","default":"./dist/aws-s3.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./inspection":{"types":"./dist/inspection.d.ts","import":"./dist/inspection.js","default":"./dist/inspection.js"},"./uploadthing":{"types":"./dist/uploadthing.d.ts","import":"./dist/uploadthing.js","default":"./dist/uploadthing.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"162367586e07a81933822254da311379a8a9000c","scripts":{"test":"bun test tests/","build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts src/aws-s3.ts src/uploadthing.ts src/inspection.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @aws-sdk/client-s3 --external @aws-sdk/lib-storage --external @aws-sdk/s3-request-presigner --external uploadthing && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run format && bun run check:package && bun publish","typecheck":"tsc --noEmit","check:package":"bun run typecheck && bun run build && bun run test"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"runtimePeers":{"uploadthing":{"range":"^7.7.4","tested":"7.7.4","optional":true,"buildExternals":["uploadthing"],"artifactImports":["uploadthing/server"],"artifactReferences":[]},"@aws-sdk/client-s3":{"range":"^3.1087.0","tested":"3.1095.0","optional":true,"buildExternals":["@aws-sdk/client-s3"],"artifactImports":["@aws-sdk/client-s3"],"artifactReferences":[]},"@aws-sdk/lib-storage":{"range":"^3.1087.0","tested":"3.1095.0","optional":true,"buildExternals":["@aws-sdk/lib-storage"],"artifactImports":["@aws-sdk/lib-storage"],"artifactReferences":[]},"@aws-sdk/s3-request-presigner":{"range":"^3.1087.0","tested":"3.1095.0","optional":true,"buildExternals":["@aws-sdk/s3-request-presigner"],"artifactImports":["@aws-sdk/s3-request-presigner"],"artifactReferences":[]}},"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/blob.git","type":"git"},"_npmVersion":"10.9.2","description":"Object storage substrate for AbsoluteJS. One BlobStore interface with bounded streaming local and S3-compatible adapters, plus official AWS SDK wiring for multipart object storage.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"^0.7.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.8.3","@types/bun":"1.3.14","typescript":"5.9.3","uploadthing":"7.7.4","@aws-sdk/client-s3":"3.1095.0","@aws-sdk/lib-storage":"3.1095.0","@aws-sdk/s3-request-presigner":"3.1095.0"},"peerDependencies":{"uploadthing":"^7.7.4","@aws-sdk/client-s3":"^3.1087.0","@aws-sdk/lib-storage":"^3.1087.0","@aws-sdk/s3-request-presigner":"^3.1087.0"},"peerDependenciesMeta":{"uploadthing":{"optional":true},"@aws-sdk/client-s3":{"optional":true},"@aws-sdk/lib-storage":{"optional":true},"@aws-sdk/s3-request-presigner":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/blob_0.5.1_1784957217927_0.9220392378577087","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@absolutejs/blob","version":"0.5.2","description":"Object storage substrate for AbsoluteJS. One BlobStore interface with bounded streaming local and S3-compatible adapters, plus official AWS SDK wiring for multipart object storage.","repository":{"type":"git","url":"git+https://github.com/absolutejs/blob.git"},"homepage":"https://github.com/absolutejs/blob","bugs":{"url":"https://github.com/absolutejs/blob/issues"},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"BSL-1.1","author":{"name":"Alex Kahn"},"absolutejs":{"manifestContract":2,"runtimePeers":{"@aws-sdk/client-s3":{"artifactImports":["@aws-sdk/client-s3"],"artifactReferences":[],"buildExternals":["@aws-sdk/client-s3"],"optional":true,"range":"^3.1087.0","tested":"3.1095.0"},"@aws-sdk/lib-storage":{"artifactImports":["@aws-sdk/lib-storage"],"artifactReferences":[],"buildExternals":["@aws-sdk/lib-storage"],"optional":true,"range":"^3.1087.0","tested":"3.1095.0"},"@aws-sdk/s3-request-presigner":{"artifactImports":["@aws-sdk/s3-request-presigner"],"artifactReferences":[],"buildExternals":["@aws-sdk/s3-request-presigner"],"optional":true,"range":"^3.1087.0","tested":"3.1095.0"},"uploadthing":{"artifactImports":["uploadthing/server"],"artifactReferences":[],"buildExternals":["uploadthing"],"optional":true,"range":"^7.7.4","tested":"7.7.4"}}},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./local":{"types":"./dist/local.d.ts","import":"./dist/local.js","default":"./dist/local.js"},"./s3":{"types":"./dist/s3.d.ts","import":"./dist/s3.js","default":"./dist/s3.js"},"./aws-s3":{"types":"./dist/aws-s3.d.ts","import":"./dist/aws-s3.js","default":"./dist/aws-s3.js"},"./uploadthing":{"types":"./dist/uploadthing.d.ts","import":"./dist/uploadthing.js","default":"./dist/uploadthing.js"},"./inspection":{"types":"./dist/inspection.d.ts","import":"./dist/inspection.js","default":"./dist/inspection.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"publishConfig":{"access":"public"},"scripts":{"build":"rm -rf dist && bun build src/index.ts src/local.ts src/s3.ts src/aws-s3.ts src/uploadthing.ts src/inspection.ts src/manifest.ts --outdir dist --root src --sourcemap --target=bun --external @aws-sdk/client-s3 --external @aws-sdk/lib-storage --external @aws-sdk/s3-request-presigner --external uploadthing && tsc --project tsconfig.build.json && absolute-manifest emit","test":"bun test tests/","typecheck":"tsc --noEmit","format":"prettier --write \"./**/*.{ts,json,md}\"","check:package":"bun run typecheck && bun run build && bun run test","release":"bun run format && bun run check:package && bun publish"},"keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"peerDependencies":{"@aws-sdk/client-s3":"^3.1087.0","@aws-sdk/lib-storage":"^3.1087.0","@aws-sdk/s3-request-presigner":"^3.1087.0","uploadthing":"^7.7.4"},"peerDependenciesMeta":{"@aws-sdk/client-s3":{"optional":true},"@aws-sdk/lib-storage":{"optional":true},"@aws-sdk/s3-request-presigner":{"optional":true},"uploadthing":{"optional":true}},"devDependencies":{"@aws-sdk/client-s3":"3.1095.0","@aws-sdk/lib-storage":"3.1095.0","@aws-sdk/s3-request-presigner":"3.1095.0","@types/bun":"1.3.14","prettier":"3.8.3","typescript":"5.9.3","uploadthing":"7.7.4"},"dependencies":{"@absolutejs/manifest":"^0.7.2","@sinclair/typebox":"^0.34.0"},"_id":"@absolutejs/blob@0.5.2","gitHead":"8d06588070b33dc4cbefff183b8488fe1f14199e","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-3g6aR8B2G5lRdP6kRcih7FGRk0aII+FXq+VvM/+aFV3rfmDHGkyBHJg1ggawjAoMhjuhPCEmc8RLKaQC0CTkSQ==","shasum":"5acc63c7ad29566c7fdcdc22b0baaa7db7d3e2d7","tarball":"https://registry.npmjs.org/@absolutejs/blob/-/blob-0.5.2.tgz","fileCount":25,"unpackedSize":654742,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID4nlWD6HxSD7fVdK3P4dC0o+TqRUqPDOL+pDJTfDSy/AiEAnfRsB97zNRRtDwSdpiz5pOw6buU0HapyR21W7K/Li/U="}]},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"directories":{},"maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/blob_0.5.2_1787085776224_0.47550003281560627"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-31T10:34:53.852Z","modified":"2026-08-18T20:42:56.551Z","0.1.0":"2026-05-31T10:34:54.099Z","0.1.1":"2026-07-13T17:34:41.755Z","0.2.0":"2026-07-15T14:08:21.851Z","0.2.1":"2026-07-15T14:25:36.992Z","0.3.0":"2026-07-17T16:12:37.658Z","0.4.0":"2026-07-22T08:50:39.006Z","0.5.0":"2026-07-23T11:39:45.308Z","0.5.1":"2026-07-25T05:26:58.086Z","0.5.2":"2026-08-18T20:42:56.382Z"},"bugs":{"url":"https://github.com/absolutejs/blob/issues"},"author":{"name":"Alex Kahn"},"license":"BSL-1.1","homepage":"https://github.com/absolutejs/blob","keywords":["absolutejs","blob","object-storage","s3","r2","b2","minio"],"repository":{"type":"git","url":"git+https://github.com/absolutejs/blob.git"},"description":"Object storage substrate for AbsoluteJS. One BlobStore interface with bounded streaming local and S3-compatible adapters, plus official AWS SDK wiring for multipart object storage.","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"readme":"# @absolutejs/blob\n\nObject storage substrate for AbsoluteJS. One `BlobStore` interface, multiple\nadapters, and bounded streaming for large artifacts.\n\n```ts\nconst store: BlobStore = /* localBlobStore(...) | s3BlobStore(...) */;\nawait store.put('users/42/avatar.png', body, { contentType: 'image/png' });\nconst bytes = await store.get('users/42/avatar.png');\nconst url = await store.presign('users/42/avatar.png', { ttlSeconds: 900 });\n```\n\n## Adapters\n\n| Subpath                        | Backs                                                                                            |\n| ------------------------------ | ------------------------------------------------------------------------------------------------ |\n| `@absolutejs/blob/local`       | Filesystem (dev / single-host prod / tests)                                                      |\n| `@absolutejs/blob/s3`          | AWS S3, Cloudflare R2, Backblaze B2, MinIO, Wasabi, Tigris — any S3-compatible HTTP API          |\n| `@absolutejs/blob/aws-s3`      | Official AWS SDK wiring, including multipart streaming uploads                                   |\n| `@absolutejs/blob/uploadthing` | UploadThing server SDK with stable application-owned custom ids and signed reads                 |\n| `@absolutejs/blob/inspection`  | Provider-neutral inspection contract, bounded stored-object inspection, and ClamAV clamd adapter |\n\nBoth implement the same `BlobStore` interface — swap providers with\none constructor change.\n\n## Private upload inspection\n\nUploads that can contain customer-controlled bytes should remain under a\nprivate quarantine key until an inspector returns `clean`. The inspection\nsubpath preserves the same workflow across local, UploadThing, S3, R2, and\nSpaces storage:\n\n```ts\nimport {\n  createClamdBlobInspector,\n  inspectStoredBlob,\n} from \"@absolutejs/blob/inspection\";\n\nconst inspector = createClamdBlobInspector({ host: \"clamav.internal\" });\nconst result = await inspectStoredBlob(blobs, inspector, {\n  filename: \"evidence.pdf\",\n  key: \"quarantine/case/evidence.pdf\",\n  maxBytes: 25 * 1024 * 1024,\n});\n```\n\nThe clamd adapter uses the bounded `INSTREAM` protocol and returns `clean`,\n`infected`, or `unavailable`. Scanner errors never become a clean verdict. The\nhost owns durable quarantine, retry, retention, and audit policy; Blob only\nowns byte transport and normalized inspection.\n\n## Local\n\n```ts\nimport { localBlobStore } from \"@absolutejs/blob/local\";\n\nconst blobs = localBlobStore({ root: \"./var/blobs\" });\nawait blobs.put(\"uploads/file.pdf\", body);\n```\n\nWrites accept `maxBytes` and an `AbortSignal`, including multipart S3/R2\nuploads: `blobs.put(key, body, { maxBytes, signal })`.\n\nFiles at `<root>/<key>`. Metadata (contentType, user metadata,\ncache headers) at `<root>/<key>.meta.json`. Atomic writes via temp\nfile + rename. `presign()` throws `BlobError('UNSUPPORTED')` —\nuse the S3 adapter against a local MinIO if you need presign in\ndev.\n\n## S3 (any S3-compatible service)\n\n```ts\nimport { S3Client } from \"@aws-sdk/client-s3\";\nimport { awsS3BlobStore } from \"@absolutejs/blob/aws-s3\";\n\nconst aws = new S3Client({ region: \"us-east-1\" });\n\nconst blobs = awsS3BlobStore({ bucket: \"my-bucket\", client: aws });\n```\n\n`awsS3BlobStore` uses the official SDK command clients and\n`@aws-sdk/lib-storage` multipart uploads. Streams are never materialized as one\ncontrol-plane buffer. The lower-level `s3BlobStore` and `S3ClientLike` remain\navailable for custom clients.\n\n### Cloudflare R2\n\n```ts\nconst aws = new S3Client({\n  region: \"auto\",\n  endpoint: `https://${ACCOUNT_ID}.r2.cloudflarestorage.com`,\n  credentials: { accessKeyId, secretAccessKey },\n});\n```\n\nR2 is fully S3-compatible — the only thing that changes is the\n`endpoint`. Same wiring + `s3BlobStore` adapter.\n\n### Backblaze B2, MinIO, Wasabi, Tigris\n\nAll the same pattern. Point `endpoint` at the provider's URL,\nprovide credentials, hand the client into `s3BlobStore`.\n\n## BlobStore interface\n\n```ts\ntype BlobStore = {\n  readonly description: string;\n  put: (\n    key: string,\n    body: BlobBody,\n    options?: PutOptions,\n  ) => Promise<BlobObject>;\n  get: (key: string) => Promise<Uint8Array | null>;\n  getStream: (key: string) => Promise<ReadableStream<Uint8Array> | null>;\n  head: (key: string) => Promise<BlobObject | null>;\n  delete: (key: string) => Promise<void>;\n  list: (options?: ListOptions) => Promise<ListResult>;\n  presign: (key: string, options?: PresignOptions) => Promise<string>;\n};\n\ntype BlobBody = Uint8Array | string | ReadableStream<Uint8Array>;\n```\n\n- `put` returns the stored object's metadata (size, contentType,\n  etag, user metadata).\n- `get` returns `null` for missing keys (not throw).\n- `getStream` for large blobs — avoids loading the body into memory.\n- `delete` is idempotent: deleting a missing key is success.\n- `list` paginates via `cursor` — pass back into the next call as\n  `options.cursor`.\n- `presign` builds a time-limited URL for direct browser upload/\n  download. `operation: 'put'` for uploads, `'get'` (default) for\n  downloads. Throws `BlobError('UNSUPPORTED')` on `local`.\n\n## Key validation\n\n```ts\nvalidateKey(\"users/42/avatar.png\"); // ok\nvalidateKey(\"/etc/passwd\"); // BlobError('INVALID_KEY')\nvalidateKey(\"../escape\"); // BlobError('INVALID_KEY')\nvalidateKey(\"with\\0nul\"); // BlobError('INVALID_KEY')\n```\n\nAdapters call `validateKey()` on every operation. Leading slashes,\nNUL bytes, and `.` / `..` path segments throw `BlobError('INVALID_KEY')`\n— closes the path-traversal class of bugs at the substrate level.\n\n## License\n\nBSL-1.1 with named carveout against hosted object-storage services.\nChange date: 2030-05-31 (Apache 2.0).\n","readmeFilename":"README.md"}