{"_id":"@storagesdk/core","_rev":"9-1b2c69547cb0d29621e56c913060a8ea","name":"@storagesdk/core","dist-tags":{"latest":"0.5.0"},"versions":{"0.0.0":{"name":"@storagesdk/core","version":"0.0.0","keywords":[],"author":"","license":"ISC","_id":"@storagesdk/core@0.0.0","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"dist":{"shasum":"63ef77e1674d49560851fee5e5d6496ab3614102","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.0.0.tgz","fileCount":4,"integrity":"sha512-ixACg12RGaU9Lq7sNJ4rxpQaYS83MpQln5d8ypoI3qA6mgvnKO9pWIBqPZW0Hr2S3SNe9RR0Tk3qeBiTpaNoOw==","signatures":[{"sig":"MEYCIQCUISBvY0uKvnOhYZOWPYJi+ZdwHYyKZzDf9xocHLqVLAIhAOtznD8yLGcxtaPA8b+XHrQCJFa46IMiz1qTHuRHAcw8","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":386},"main":"index.js","type":"module","gitHead":"7023d73e6f784231191794ae578a66ff12056b2a","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"designcode87","email":"hello@designcode.me"},"_npmVersion":"10.9.2","description":"","directories":{},"_nodeVersion":"22.14.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core_0.0.0_1778659112357_0.05930082573873907","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@storagesdk/core","version":"0.1.0","keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"author":"","license":"MIT","_id":"@storagesdk/core@0.1.0","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"homepage":"https://github.com/storagesdk/storagesdk#readme","bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"dist":{"shasum":"ac03d75f16ee9c35fa8f72cca03fb1f616e4d08a","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.1.0.tgz","fileCount":43,"integrity":"sha512-TP4/qRLxnY96Zxzb7VNQkLcue8UXHJTSbC2TNqFNXOsAdsA5Bl8K3IP553z+Nm1sZrE/3ZzSHmtekHUNtfJDUw==","signatures":[{"sig":"MEYCIQD31gdUZWiRc5ZtIMVPEkcoQOwlWieVFePx0Ua2dfiwPgIhAOJLeAWtmUiiaIBxq1tlyvT2jVi2m4nk1JxsE6s+oK1h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@storagesdk%2fcore@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":70795},"type":"module","_from":"file:storagesdk-core-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./adapter":{"types":"./dist/adapter-kit.d.ts","default":"./dist/adapter-kit.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","publint":"publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9e4738a1-4c1d-4cb3-8512-8b1cd5d9386e"}},"_resolved":"/tmp/beabf18f270ae28bce2ec3c9b9dd039f/storagesdk-core-0.1.0.tgz","_integrity":"sha512-TP4/qRLxnY96Zxzb7VNQkLcue8UXHJTSbC2TNqFNXOsAdsA5Bl8K3IP553z+Nm1sZrE/3ZzSHmtekHUNtfJDUw==","repository":{"url":"git+https://github.com/storagesdk/storagesdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.12.1","description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core_0.1.0_1779722978840_0.5370826252918692","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@storagesdk/core","version":"0.1.1","keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"author":"","license":"Apache-2.0","_id":"@storagesdk/core@0.1.1","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"homepage":"https://github.com/storagesdk/storagesdk#readme","bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"dist":{"shasum":"7ce3cc82e773ebaf298e7ad8f6c9954b797b317b","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.1.1.tgz","fileCount":43,"integrity":"sha512-/V/RVvg9gc3NqKeYrR1zJ0gkgcgOYHoU7Xy7qmb7FoDsk3IDe2hqjApcZxgqktTN8H9s7d1PgTUeQM2elgTWBw==","signatures":[{"sig":"MEQCIB9vE/x6dKRBjG69pl9cwavzX+alpx3xEzcUGeL+2HU1AiAkYBeoiD9d2YCB30+lDitdn/z5zBeWuEYRRnlOhKdc2w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@storagesdk%2fcore@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":81023},"type":"module","_from":"file:storagesdk-core-0.1.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./adapter":{"types":"./dist/adapter-kit.d.ts","default":"./dist/adapter-kit.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","publint":"publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9e4738a1-4c1d-4cb3-8512-8b1cd5d9386e"}},"_resolved":"/tmp/d7651a837fcad571602034b6a9883cb9/storagesdk-core-0.1.1.tgz","_integrity":"sha512-/V/RVvg9gc3NqKeYrR1zJ0gkgcgOYHoU7Xy7qmb7FoDsk3IDe2hqjApcZxgqktTN8H9s7d1PgTUeQM2elgTWBw==","repository":{"url":"git+https://github.com/storagesdk/storagesdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.12.1","description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core_0.1.1_1779733386300_0.3280371138474696","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@storagesdk/core","version":"0.2.0","keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"author":"","license":"Apache-2.0","_id":"@storagesdk/core@0.2.0","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"homepage":"https://github.com/storagesdk/storagesdk#readme","bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"dist":{"shasum":"01057a7625022443d48ce1f630798183f9679c29","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.2.0.tgz","fileCount":43,"integrity":"sha512-3EC5455+UBt+U06rMBlO7bARRV0hDWq6pRY6O1TxgYd9/l0Ei/T95WLjsXheYU5AHVfxUenziL2hEmtN3lPFDA==","signatures":[{"sig":"MEQCIFtRfPbrASUwud3kRz8OVZXTrHCBzmVqIpq70S9adm9PAiA9itJeT4TLnjRsN00SOrba783fbaSquvyrx1flJqyilg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@storagesdk%2fcore@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":81023},"type":"module","_from":"file:storagesdk-core-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./adapter":{"types":"./dist/adapter-kit.d.ts","default":"./dist/adapter-kit.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","publint":"publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9e4738a1-4c1d-4cb3-8512-8b1cd5d9386e"}},"_resolved":"/tmp/52a2f552a34ee5e15b65bae1b93a2ff8/storagesdk-core-0.2.0.tgz","_integrity":"sha512-3EC5455+UBt+U06rMBlO7bARRV0hDWq6pRY6O1TxgYd9/l0Ei/T95WLjsXheYU5AHVfxUenziL2hEmtN3lPFDA==","repository":{"url":"git+https://github.com/storagesdk/storagesdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.12.1","description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core_0.2.0_1779818897002_0.22705782987879242","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@storagesdk/core","version":"0.3.0","keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"author":"","license":"Apache-2.0","_id":"@storagesdk/core@0.3.0","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"homepage":"https://github.com/storagesdk/storagesdk#readme","bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"dist":{"shasum":"88b588f81b3332d286ae5c7c362529cb8c80d0fa","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.3.0.tgz","fileCount":43,"integrity":"sha512-hePG5HKpoClciNo2/uXG+76CeKlOqFAAYsTVzq+LDI9h2Cy2gHeKeixufaoCy5GLnUL/shbDicw3vEyLtP1kHA==","signatures":[{"sig":"MEQCIFjqdFoLvkrw4VSgjORQrHdnKEcjmNK/hinnoCrFSPyuAiBjSTMe78fv76bAg096PuEluegpfvahklRR1yivpIJbfQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@storagesdk%2fcore@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":89273},"type":"module","_from":"file:storagesdk-core-0.3.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./adapter":{"types":"./dist/adapter-kit.d.ts","default":"./dist/adapter-kit.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","publint":"publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9e4738a1-4c1d-4cb3-8512-8b1cd5d9386e"}},"_resolved":"/tmp/d51c13366a3a35103f7872c30533ca30/storagesdk-core-0.3.0.tgz","_integrity":"sha512-hePG5HKpoClciNo2/uXG+76CeKlOqFAAYsTVzq+LDI9h2Cy2gHeKeixufaoCy5GLnUL/shbDicw3vEyLtP1kHA==","repository":{"url":"git+https://github.com/storagesdk/storagesdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.12.1","description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","directories":{},"sideEffects":false,"_nodeVersion":"24.15.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core_0.3.0_1779901678784_0.003467077401799079","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@storagesdk/core","version":"0.4.0","keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"author":"","license":"Apache-2.0","_id":"@storagesdk/core@0.4.0","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"homepage":"https://github.com/storagesdk/storagesdk#readme","bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"dist":{"shasum":"b87683b1fa058adb3ad8b764d0deca07b6a2cbd0","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.4.0.tgz","fileCount":43,"integrity":"sha512-TKBnLTGDxeQOz1NU30MLiUsGzn4ezpXKjYqmkGov/4sUQ3jEtLj36pdpXbkbcRzgf7ecEwId/glrwsj0SGW2YA==","signatures":[{"sig":"MEUCIQDyGgNQp9a5NOM/abqtve1GtU1OYjepViVDBo+Y6EPEqgIgPeR91iqqQlqi9lraRoo48EGBUTijUoDvsWQQwzHRzkY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@storagesdk%2fcore@0.4.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":93494},"type":"module","_from":"file:storagesdk-core-0.4.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./adapter":{"types":"./dist/adapter-kit.d.ts","default":"./dist/adapter-kit.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","publint":"publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9e4738a1-4c1d-4cb3-8512-8b1cd5d9386e"}},"_resolved":"/tmp/301e6cfa013f9a6c295997427cf1d502/storagesdk-core-0.4.0.tgz","_integrity":"sha512-TKBnLTGDxeQOz1NU30MLiUsGzn4ezpXKjYqmkGov/4sUQ3jEtLj36pdpXbkbcRzgf7ecEwId/glrwsj0SGW2YA==","repository":{"url":"git+https://github.com/storagesdk/storagesdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.13.0","description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core_0.4.0_1780137694293_0.14763108981608264","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@storagesdk/core","version":"0.4.1","keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"author":"","license":"Apache-2.0","_id":"@storagesdk/core@0.4.1","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"homepage":"https://github.com/storagesdk/storagesdk#readme","bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"dist":{"shasum":"744d1e373edcaf84b354457800e825d6144e9596","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.4.1.tgz","fileCount":43,"integrity":"sha512-8oBTkeu9eL7Gf294rt1DlJRL8wzd0LjN0aJJyMuQGuBoD5VDN2l1A5U1vra9HGFXW2xA6OxnImzPBd9qM6nlSw==","signatures":[{"sig":"MEYCIQD0Z+v3UZEq0E/J7ATYBK3YQJhk5ZDzc+L63w0TcejoOgIhAP19Cjv6ogChd1n7gYvlOTr9UNwg0pQLJCiu2gflwbmX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@storagesdk%2fcore@0.4.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":93728},"type":"module","_from":"file:storagesdk-core-0.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./adapter":{"types":"./dist/adapter-kit.d.ts","default":"./dist/adapter-kit.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","publint":"publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9e4738a1-4c1d-4cb3-8512-8b1cd5d9386e"}},"_resolved":"/tmp/1c51bfb1d8e35b42209143a3255c1f49/storagesdk-core-0.4.1.tgz","_integrity":"sha512-8oBTkeu9eL7Gf294rt1DlJRL8wzd0LjN0aJJyMuQGuBoD5VDN2l1A5U1vra9HGFXW2xA6OxnImzPBd9qM6nlSw==","repository":{"url":"git+https://github.com/storagesdk/storagesdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.13.0","description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core_0.4.1_1780338006656_0.15166573914371906","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"@storagesdk/core","version":"0.4.2","keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"author":"","license":"Apache-2.0","_id":"@storagesdk/core@0.4.2","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"homepage":"https://github.com/storagesdk/storagesdk#readme","bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"dist":{"shasum":"680aac473d0ad523c13f2cf7d3ec025f53167272","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.4.2.tgz","fileCount":43,"integrity":"sha512-TASJvFpf4tHM52Sgg3AWMF1VsW6tiZAf6cG1PWktyqKWm+P4Iaz8cILEpD1VncvC4DzFYKeXRkq/xgaY3phKtg==","signatures":[{"sig":"MEUCICTfoxDjd0pkG41/+BzHJfd9Uk8ASgOdBK8rVToZUJlIAiEAuVM1sns0XeBDFsKwtuJHclKUNS1MmA+UwSLr57FFDZA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@storagesdk%2fcore@0.4.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":93954},"type":"module","_from":"file:storagesdk-core-0.4.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./adapter":{"types":"./dist/adapter-kit.d.ts","default":"./dist/adapter-kit.js"},"./package.json":"./package.json"},"scripts":{"dev":"tsc -p tsconfig.build.json --watch","test":"vitest run","build":"tsc -p tsconfig.build.json","clean":"rm -rf dist","publint":"publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9e4738a1-4c1d-4cb3-8512-8b1cd5d9386e"}},"_resolved":"/tmp/3ba49f01441b6c34e6a8d2e974f113e0/storagesdk-core-0.4.2.tgz","_integrity":"sha512-TASJvFpf4tHM52Sgg3AWMF1VsW6tiZAf6cG1PWktyqKWm+P4Iaz8cILEpD1VncvC4DzFYKeXRkq/xgaY3phKtg==","repository":{"url":"git+https://github.com/storagesdk/storagesdk.git","type":"git","directory":"packages/core"},"_npmVersion":"11.13.0","description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","directories":{},"sideEffects":false,"_nodeVersion":"24.16.0","publishConfig":{"access":"public","provenance":true},"_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/core_0.4.2_1780414004048_0.8814062336932575","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@storagesdk/core","version":"0.5.0","description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./adapter":{"types":"./dist/adapter-kit.d.ts","default":"./dist/adapter-kit.js"},"./package.json":"./package.json"},"sideEffects":false,"publishConfig":{"access":"public","provenance":true},"keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"author":"","license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/storagesdk/storagesdk.git","directory":"packages/core"},"engines":{"node":">=20"},"scripts":{"build":"tsc -p tsconfig.build.json","dev":"tsc -p tsconfig.build.json --watch","typecheck":"tsc --noEmit","publint":"publint","test":"vitest run","clean":"rm -rf dist"},"_id":"@storagesdk/core@0.5.0","bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"homepage":"https://github.com/storagesdk/storagesdk#readme","_integrity":"sha512-v4Ya5h4Ulc5yj+FO0iNCm05hvc1UvvFJxT/e44Ip/WcXMHpHAAQioOGG+S89iKJ+YXywRhCjwz0S2141gH/agA==","_resolved":"/tmp/56a088e444802ad6b2fcc3b0fbc664b3/storagesdk-core-0.5.0.tgz","_from":"file:storagesdk-core-0.5.0.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-v4Ya5h4Ulc5yj+FO0iNCm05hvc1UvvFJxT/e44Ip/WcXMHpHAAQioOGG+S89iKJ+YXywRhCjwz0S2141gH/agA==","shasum":"371bc44f9871b6c164522cffd794dd06fe8c6486","tarball":"https://registry.npmjs.org/@storagesdk/core/-/core-0.5.0.tgz","fileCount":47,"unpackedSize":130598,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@storagesdk%2fcore@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCektnAkedU+ip8r5k5vHNBJThGwL0bMUWza7NNLx0UygIhAMUbQlJwSn5DF8bcvvp8Z8SNZWqn07aYFkRNHwreWKi7"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:9e4738a1-4c1d-4cb3-8512-8b1cd5d9386e"}},"directories":{},"maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.5.0_1785206425589_0.7122048529595435"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-13T07:58:32.264Z","modified":"2026-07-28T02:40:26.105Z","0.0.0":"2026-05-13T07:58:32.491Z","0.1.0":"2026-05-25T15:29:39.016Z","0.1.1":"2026-05-25T18:23:06.441Z","0.2.0":"2026-05-26T18:08:17.243Z","0.3.0":"2026-05-27T17:07:58.965Z","0.4.0":"2026-05-30T10:41:34.457Z","0.4.1":"2026-06-01T18:20:06.804Z","0.4.2":"2026-06-02T15:26:44.204Z","0.5.0":"2026-07-28T02:40:25.770Z"},"bugs":{"url":"https://github.com/storagesdk/storagesdk/issues"},"license":"Apache-2.0","homepage":"https://github.com/storagesdk/storagesdk#readme","keywords":["storage","object-storage","s3","snapshot","fork","sdk"],"repository":{"type":"git","url":"git+https://github.com/storagesdk/storagesdk.git","directory":"packages/core"},"description":"Core types and runtime for storagesdk. One API across object storage providers, with fork and snapshot built in.","maintainers":[{"name":"designcode87","email":"hello@designcode.me"}],"readme":"# storagesdk\n\n[![npm version](https://img.shields.io/npm/v/@storagesdk/core?label=%40storagesdk%2Fcore)](https://www.npmjs.com/package/@storagesdk/core)\n[![CI](https://github.com/storagesdk/storagesdk/actions/workflows/ci.yml/badge.svg)](https://github.com/storagesdk/storagesdk/actions/workflows/ci.yml)\n[![license](https://img.shields.io/npm/l/@storagesdk/core)](./LICENSE)\n\nA unified TypeScript SDK for storage with first-class support for snapshotting and forking across Tigris, Tensorlake Cloud Volumes, Amazon S3, Cloudflare R2, Archil, Code Storage, Mesa, GCS, Azure Blob, Vercel Blob and many more.\n\n```sh\nnpm install @storagesdk/core @storagesdk/adapters\n```\n\n```ts\nimport { Storage } from '@storagesdk/core';\nimport { tigris } from '@storagesdk/adapters/tigris';\n\nconst storage = new Storage({\n  adapter: tigris({\n    bucket: 'agent-runs',\n    accessKeyId: process.env.TIGRIS_ACCESS_KEY_ID,\n    secretAccessKey: process.env.TIGRIS_SECRET_ACCESS_KEY,\n  }),\n});\n\nawait storage.upload('hello.txt', 'Hello, storage SDK!', {\n  contentType: 'text/plain',\n});\n\nconst text = await storage.download('hello.txt', { as: 'text' });\nconst url = await storage.url('hello.txt', { expiresIn: 300 });\n\nconst snap = await storage.snapshots.create({ name: 'pre-migration' });\nawait storage.forks.create({ name: 'agent-runs-exp', fromSnapshot: snap.id });\nconst fork = storage.forks.get('agent-runs-exp');\nawait fork.upload('hello.txt', 'mutated in fork only');\n```\n\n## What you get\n\n- **Snapshots and forks as primitives.** Take a snapshot of a bucket, get a read-only handle, fork from it as a writable branch. Native APIs where available (including Tigris and Tensorlake); sibling buckets/folders otherwise.\n- **Typed escape hatch.** `storage.raw` is typed to the underlying SDK (e.g. `S3Client` on the S3 adapter) for provider-specific operations storagesdk doesn't surface.\n- **Agent-ready.** [`@storagesdk/ai`](./packages/ai/README.md) wraps every verb (plus the full snapshot and fork roster) as AI tool definitions for the Vercel AI SDK — hand a `Storage` to your agent runtime and get a ready-to-register tool set back.\n- **Runtime adapter selection.** [`@storagesdk/adapters`](./packages/adapters/README.md#runtime-adapter-selection)'s root export ships `ADAPTERS`, `buildAdapter(name)`, and `getAdapterEnvVars(name)` — CLIs and scripts pick any adapter by name, reading config from adapter-native env vars (`TIGRIS_*`, `S3_*`, etc.) with backend-native fallbacks (`AWS_*`, `BLOB_READ_WRITE_TOKEN`, `GOOGLE_CLOUD_PROJECT`).\n- **CLI.** [`@storagesdk/cli`](./packages/cli/README.md) ships the `storage` and `storagesdk` binaries with the full verb set: reads (`ls`, `stat`, `cat`), writes (`cp`, `mv`, `rm`), signed URLs (`sign download`, `sign upload`), snapshot/fork list and management (`storage snapshots`, `storage forks`, `storage snapshot {create,rm}`, `storage fork {create,rm}`), and a stdio Model Context Protocol server (`storage mcp`) for Claude Desktop / Cursor / any MCP host. `cp` and `mv` use a `storage://` URL scheme to mark remote paths; `-` is stdin/stdout. `--fork`/`--snapshot` scope operations into derived state. `storage adapters` discovers every adapter with its env-var spec including backend-native fallbacks.\n- **ESM-only, Node 20+.** Plain `tsc` build, no bundler.\n\n## Adapters\n\n| Adapter | Subpath | Backend |\n| --- | --- | --- |\n| Tigris | [`@storagesdk/adapters/tigris`](./packages/adapters/src/tigris/README.md) | [Tigris](https://www.tigrisdata.com/) — snapshots and forks are first-class via Tigris's native APIs. |\n| S3 | [`@storagesdk/adapters/s3`](./packages/adapters/src/s3/README.md) | Amazon S3 and any S3-compatible provider. |\n| R2 | [`@storagesdk/adapters/r2`](./packages/adapters/src/r2/README.md) | [Cloudflare R2](https://www.cloudflare.com/developer-platform/products/r2/). |\n| Code Storage | [`@storagesdk/adapters/code-storage`](./packages/adapters/src/code-storage/README.md) | [Code Storage](https://code.storage/) repositories — snapshots are tags, forks are branches. |\n| Archil | [`@storagesdk/adapters/archil`](./packages/adapters/src/archil/README.md) | [Archil](https://archil.com/) disks via Archil's S3-compatible API. |\n| Mesa | [`@storagesdk/adapters/mesa`](./packages/adapters/src/mesa/README.md) | [Mesa](https://mesa.dev/) repositories — snapshots and forks are bookmarks. |\n| Tensorlake | [`@storagesdk/adapters/tensorlake`](./packages/adapters/src/tensorlake/README.md) | [Tensorlake Cloud Volumes](https://docs.tensorlake.ai/) — direct-to-blob uploads with metadata-only snapshots, copies, moves, and forks. |\n| GCS | [`@storagesdk/adapters/gcs`](./packages/adapters/src/gcs/README.md) | [Google Cloud Storage](https://cloud.google.com/storage). |\n| Azure Blob | [`@storagesdk/adapters/azure`](./packages/adapters/src/azure/README.md) | [Azure Blob Storage](https://azure.microsoft.com/products/storage/blobs). |\n| Vercel Blob | [`@storagesdk/adapters/vercel`](./packages/adapters/src/vercel/README.md) | [Vercel Blob](https://vercel.com/docs/vercel-blob). |\n| MinIO | [`@storagesdk/adapters/minio`](./packages/adapters/src/minio/README.md) | [MinIO](https://min.io/). |\n| GitHub | [`@storagesdk/adapters/github`](./packages/adapters/src/github/README.md) | [GitHub](https://github.com) repository — snapshots are tags, forks are branches, native git refs all the way down. |\n| WebDAV | [`@storagesdk/adapters/webdav`](./packages/adapters/src/webdav/README.md) | Any WebDAV server — Nextcloud, ownCloud, Apache mod_dav, nginx-dav, NAS, pCloud, mailbox.org, kDrive. Snapshots/forks via native server-side `COPY`. |\n| Fly.io | [`@storagesdk/adapters/fly`](./packages/adapters/src/fly/README.md) | Fly-managed Tigris buckets — branded alias of the Tigris adapter. |\n| Railway | [`@storagesdk/adapters/railway`](./packages/adapters/src/railway/README.md) | [Railway Buckets](https://docs.railway.com/storage-buckets) — branded alias of the Tigris adapter. |\n| Filesystem | [`@storagesdk/adapters/fs`](./packages/adapters/src/fs/README.md) | Local `node:fs/promises`. For development and tests. |\n\nFor the full, up-to-date list see **[storagesdk.dev/adapters](https://storagesdk.dev/adapters)**.\n\n## API\n\n```ts\nclass Storage<Raw = unknown> {\n  constructor(opts: { adapter: Adapter<Raw> });\n\n  readonly raw: Raw;\n  readonly snapshots: { create, list, head, delete, get };\n  readonly forks:     { create, list, head, delete, get };\n\n  upload(path: string, body: BodyInput, opts?: UploadOptions): Promise<StorageItemMeta>;\n\n  // download — single signature returns full StorageItem; overloads return typed bodies\n  download(path: string, opts?: { signal? }):                            Promise<StorageItem>;\n  download(path: string, opts: { as: 'stream', signal? }):               Promise<ReadableStream<Uint8Array>>;\n  download(path: string, opts: { as: 'text',   signal? }):               Promise<string>;\n  download(path: string, opts: { as: 'bytes',  signal? }):               Promise<Uint8Array>;\n  download(path: string, opts: { as: 'blob',   signal? }):               Promise<Blob>;\n  download(path: string, opts: { as: 'json',   signal? }):               Promise<unknown>;\n\n  head(path: string, opts?: { signal? }):                                Promise<StorageItemMeta>;\n  list(opts?: ListOptions):                                              Promise<ListResult>;\n  delete(path: string, opts?: { signal? }):                              Promise<void>;\n  copy(from: string, to: string, opts?: { signal? }):                    Promise<void>;\n  move(from: string, to: string, opts?: { signal? }):                    Promise<void>;\n  url(path: string, opts?: UrlOptions):                                  Promise<string>;\n  uploadUrl(path: string, opts?: UploadUrlOptions):                      Promise<UploadUrlResult>;\n}\n```\n\n### `snapshots` and `forks`\n\n```ts\nstorage.snapshots.create(opts?: { name?, signal? }):         Promise<SnapshotInfo>;\nstorage.snapshots.list():                                    Promise<SnapshotInfo[]>;\nstorage.snapshots.head(id: string, opts?: { signal? }):      Promise<SnapshotInfo>;\nstorage.snapshots.delete(id: string, opts?: { signal? }):    Promise<void>;\nstorage.snapshots.get(id: string):                           ReadOnlyStorage; // .download, .head, .list, .url\n\nstorage.forks.create(opts: { name, fromSnapshot?, signal? }): Promise<ForkInfo>;\nstorage.forks.list():                                         Promise<ForkInfo[]>;\nstorage.forks.head(name: string, opts?: { signal? }):         Promise<ForkInfo>;\nstorage.forks.delete(name: string, opts?: { signal? }):       Promise<void>;\nstorage.forks.get(name: string):                              Storage<Raw>;    // full read/write\n```\n\n### `uploadUrl` — PUT vs POST\n\n```ts\n// PUT: default. Returns a signed URL the client uploads to with PUT.\nstorage.uploadUrl('photo.jpg', { expiresIn: 300, contentType: 'image/jpeg' });\n// → { method: 'PUT', url, headers? }\n\n// POST: triggered by `maxSize` or `minSize`. Returns a presigned POST URL +\n// form fields the browser submits as multipart/form-data. Enforces size and\n// content-type bounds server-side.\nstorage.uploadUrl('photo.jpg', { expiresIn: 300, maxSize: 5_000_000, contentType: 'image/jpeg' });\n// → { method: 'POST', url, fields }\n```\n\n### Errors\n\nEvery operation throws `StorageError`. The `code` is a typed union:\n\n```ts\ntype StorageErrorCode =\n  | 'NotFound'         // missing key, missing snapshot/fork\n  | 'NotSupported'     // adapter doesn't implement this op\n  | 'Conflict'         // duplicate fork name, etc.\n  | 'Unauthorized'     // 401/403 from the backend\n  | 'InvalidArgument'  // bad path, sidecar-suffix collision, etc.\n  | 'Aborted'          // caller's AbortSignal fired\n  | 'Provider';        // unmapped backend error (cause attached)\n```\n\n## Common patterns\n\n### Snapshots — read frozen state after live writes\n\n```ts\nawait storage.upload('photo.jpg', 'before');\nconst snap = await storage.snapshots.create({ name: 'baseline' });\nawait storage.upload('photo.jpg', 'after');\n\nconst reader = storage.snapshots.get(snap.id);\nawait reader.download('photo.jpg', { as: 'text' });   // 'before'\nawait storage.download('photo.jpg', { as: 'text' });  // 'after'\n```\n\n### Forks — branch and mutate\n\n```ts\nconst snap = await storage.snapshots.create();\nawait storage.forks.create({ name: 'experiment', fromSnapshot: snap.id });\n\nconst fork = storage.forks.get('experiment');\nawait fork.upload('config.json', JSON.stringify({ flag: true }));\n// parent unchanged; fork has its own writable view\n```\n\n`forks.create` also accepts no `fromSnapshot` — the fork starts at the parent's live state at creation time.\n\n### Signed URLs\n\n```ts\nawait storage.url('photo.jpg', { expiresIn: 300 });          // 5-min GET URL\nawait storage.uploadUrl('new.jpg', { expiresIn: 300 });      // PUT URL + method\n```\n\n### Streaming download\n\n```ts\nconst stream = await storage.download('large.mp4', { as: 'stream' });\n// Web ReadableStream<Uint8Array>\n```\n\n### Byte-range reads\n\n```ts\n// Fetch a slice instead of the full object.\nconst item = await storage.download('video.mp4', {\n  range: { offset: 0, length: 65_536 },\n});\nitem.size; // 65536 — the slice length, not the full-object size\n\n// Combines with the `as` overloads.\nconst bytes = await storage.download('big.bin', {\n  as: 'bytes',\n  range: { offset: 4096, length: 1024 },\n});\n```\n\nMaps to each provider's native range API (`Range: bytes=N-M` for S3-family, `download(offset, count)` for Azure, `createReadStream({ start, end })` for GCS, the `Range` header on Vercel). `range` past EOF returns the bytes that exist — matches HTTP `Range` semantics.\n\n### AbortSignal\n\n```ts\nconst ctrl = new AbortController();\nsetTimeout(() => ctrl.abort(), 5000);\n\nawait storage.upload('big.bin', body, { signal: ctrl.signal });\n// throws StorageError({ code: 'Aborted' }) if signal fires\n```\n\n### Escape hatch\n\n```ts\nconst storage = new Storage({ adapter: tigris({ bucket: 'agent-runs' }) });\n//    ↑ Storage typed with the underlying client end-to-end, no cast needed\n\nawait storage.raw.someBackendOp({ /* ... */ });\n```\n\n## Examples\n\nRunnable examples live under [`examples/`](./examples). Each picks the adapter at runtime via `EXAMPLE_ADAPTER`; out of the box they run against a local filesystem so you can try them without any setup:\n\n```sh\npnpm install\npnpm --filter @storagesdk/examples quickstart\npnpm --filter @storagesdk/examples snapshots\npnpm --filter @storagesdk/examples forks\npnpm --filter @storagesdk/examples agent-with-snapshots  # needs ANTHROPIC_API_KEY for the live agent run\n```\n\n## Authoring adapters\n\n`@storagesdk/adapters` is *one* set of providers; the SDK is designed for third-party adapters too.\n\n```sh\nnpm install @storagesdk/core\n```\n\n```ts\nimport {\n  defineAdapter,\n  type Adapter,\n  StorageError,\n} from '@storagesdk/core/adapter';\n\nexport function myAdapter(config: MyConfig): Adapter {\n  return defineAdapter({\n    name: 'my-backend',\n    raw: /* your client */,\n    async upload(path, body, opts) { /* ... */ },\n    async download(path, opts) { /* ... */ },\n    async head(path, opts) { /* ... */ },\n    async list(opts) { /* ... */ },\n    async delete(path, opts) { /* ... */ },\n    async copy(from, to, opts) { /* ... */ },\n    async move(from, to, opts) { /* ... */ },\n    async url(path, opts) { /* ... */ },\n    async uploadUrl(path, opts) { /* ... */ },\n    snapshots: { /* create, list, head, delete, get */ },\n    forks:     { /* create, list, head, delete, get */ },\n  });\n}\n```\n\n`@storagesdk/core/adapter` is the adapter-authoring entry. It exposes:\n\n- `defineAdapter` — wraps your implementation with path normalization (leading slashes stripped, empty paths throw) and recursive wrapping for `snapshots.get` / `forks.get` returns.\n- `Adapter`, `ReadOnlyAdapter`, `AdapterSnapshots`, `AdapterForks` — the contract types.\n- `Manifest` helpers (`emptyManifest`, `readManifest`, `writeManifest`, `nextSnapshotId`, `isInternalKey`, `MANIFEST_PATH`) for copy-based adapters that store snapshot/fork lineage as a sibling location.\n- `checkSignal`, `isAbortError`, `bridgeSignalToController` — abort-handling helpers (Web `AbortSignal` → SDK `AbortController` bridge with listener cleanup).\n- `toWebStream`, `readStreamToBytes` — stream utilities.\n\n### Verifying your adapter\n\nDrop in the conformance test suite:\n\n```sh\nnpm install --save-dev vitest @storagesdk/adapters\n```\n\n```ts\n// my-adapter.test.ts\nimport { storageAdapterTestSuite } from '@storagesdk/adapters/test-suite';\nimport { myAdapter } from './my-adapter.js';\n\nstorageAdapterTestSuite({\n  name: 'my-adapter',\n  adapter: () => myAdapter({ /* config */ }),\n});\n```\n\nThe suite runs the cross-adapter behavioral tests (upload round-trip, NotFound on missing keys, snapshots/forks contract, AbortSignal short-circuit, etc.) against your adapter. Tests it fails are gaps you need to close.\n\n## Contributing\n\nSee [`AGENTS.md`](./AGENTS.md) for development setup, gates (lint / typecheck / build / test), and the design decisions that aren't up for re-litigation.\n\n## License\n\n[Apache 2.0](./LICENSE).\n","readmeFilename":"README.md"}