{"_id":"@ar.io/anchor-s3","_rev":"5-87c7628e4bbecee3be7dae6ebd221b5b","name":"@ar.io/anchor-s3","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@ar.io/anchor-s3","version":"0.1.0","keywords":["ar.io","arweave","s3","provenance","anchoring","audit-trail"],"license":"MIT","_id":"@ar.io/anchor-s3@0.1.0","maintainers":[{"name":"vilenarios","email":"info@ardrive.io"}],"homepage":"https://github.com/ar-io/ar-io-anchor#readme","bugs":{"url":"https://github.com/ar-io/ar-io-anchor/issues"},"dist":{"shasum":"aefd81323f6576b94d58d015f5f8e410a0691d60","tarball":"https://registry.npmjs.org/@ar.io/anchor-s3/-/anchor-s3-0.1.0.tgz","fileCount":8,"integrity":"sha512-+KohhH6DycP3huI3zdhz2xChXigMfIQjg3T5flxoLDsBVSxsPfJ9Hy48OGkaiS45FqXJ8BxWl29e7eQ9uHVytA==","signatures":[{"sig":"MEUCIQCXSgBURZWvCx+ZfbpVZRs57SpDfTalNwdenbOcToywGgIgMAgP7rDtfnIPHV90/K8dzhDGpyrhonFHk+0YG3liUuU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":10145},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9597e1558501440e13cfe316e3c819510cbeea0b","scripts":{"build":"tsc -p tsconfig.build.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"vilenarios","email":"info@ardrive.io"},"repository":{"url":"git+https://github.com/ar-io/ar-io-anchor.git","type":"git","directory":"packages/s3"},"_npmVersion":"10.8.2","description":"Anchor-as-you-store for S3: wrap your S3 client so every putObject also anchors a tamper-evident provenance record on Arweave and stores it beside the object.","directories":{},"sideEffects":false,"_nodeVersion":"20.18.2","dependencies":{"@ar.io/anchor":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"peerDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/anchor-s3_0.1.0_1781213388524_0.942260615893461","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ar.io/anchor-s3","version":"0.1.1","keywords":["ar.io","arweave","s3","provenance","anchoring","audit-trail"],"license":"MIT","_id":"@ar.io/anchor-s3@0.1.1","maintainers":[{"name":"vilenarios","email":"info@ardrive.io"}],"homepage":"https://github.com/ar-io/ar-io-anchor#readme","bugs":{"url":"https://github.com/ar-io/ar-io-anchor/issues"},"dist":{"shasum":"86a4fae7eb753a860f5659366c600c0157d7066b","tarball":"https://registry.npmjs.org/@ar.io/anchor-s3/-/anchor-s3-0.1.1.tgz","fileCount":8,"integrity":"sha512-EXzvcQCIbl8G31AvBs8KSIOGi5wytTb2kueGLQ+coatqC18EI6FgfPZIXEXiAcVdNdIIIQw7RDQkocnQe+iDfQ==","signatures":[{"sig":"MEUCIE9wpAgyvFws4lIhvH6XPZW9KCrkw8QQP5ZtaQVtFa+2AiEAi1qwlWKDau2Ex62TYXW57EAMc+1SfD0W7NpnhoSUkxo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ar.io%2fanchor-s3@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11191},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"1c371d36ba96a25f9e532303ce9da8b9493600ee","scripts":{"build":"tsc -p tsconfig.build.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45904512-cfd4-4f1f-a4c3-ce17ae7a4fc9"}},"repository":{"url":"git+https://github.com/ar-io/ar-io-anchor.git","type":"git","directory":"packages/s3"},"_npmVersion":"11.17.0","description":"Anchor-as-you-store for S3: wrap your S3 client so every putObject also anchors a tamper-evident provenance record to ar.io and writes it beside the object as a verify-anywhere .provenance.json sidecar. Bytes are hashed locally, never uploaded.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@ar.io/anchor":"^0.1.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"peerDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/anchor-s3_0.1.1_1781214149983_0.5233898639499388","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ar.io/anchor-s3","version":"0.1.2","keywords":["ar.io","arweave","s3","provenance","anchoring","audit-trail"],"license":"MIT","_id":"@ar.io/anchor-s3@0.1.2","maintainers":[{"name":"vilenarios","email":"info@ardrive.io"}],"homepage":"https://github.com/ar-io/ar-io-anchor#readme","bugs":{"url":"https://github.com/ar-io/ar-io-anchor/issues"},"dist":{"shasum":"2c3359bcd8209216b0aa2b39403bb05eb75980e1","tarball":"https://registry.npmjs.org/@ar.io/anchor-s3/-/anchor-s3-0.1.2.tgz","fileCount":8,"integrity":"sha512-YgrrC3yOXgxP/IY3QNxJuBEPgox6/xfUe0Onz/1n3+ZRWmvnjz14ebVgI12rGWZmok6ZfF5AJGApAIi7woYQ/A==","signatures":[{"sig":"MEUCIFXNgj6ejzlFTR9N/T8ISJiyZY8sQFC5gKQbpEWC0gUIAiEA/7PPhyIw70/BYBDvu9vSPdY9yarWkOl+6llYgc07f5g=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ar.io%2fanchor-s3@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11281},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"ab447c29cf55f82a22af1155e2bc9070da37d938","scripts":{"build":"tsc -p tsconfig.build.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45904512-cfd4-4f1f-a4c3-ce17ae7a4fc9"}},"repository":{"url":"git+https://github.com/ar-io/ar-io-anchor.git","type":"git","directory":"packages/s3"},"_npmVersion":"11.17.0","description":"Anchor-as-you-store for S3: wrap your S3 client so every putObject also anchors a tamper-evident provenance record to ar.io and writes it beside the object as a verify-anywhere .provenance.json sidecar. Bytes are hashed locally, never uploaded.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@ar.io/anchor":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"peerDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/anchor-s3_0.1.2_1781221922068_0.3948115410542994","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@ar.io/anchor-s3","version":"0.1.3","keywords":["ar.io","arweave","s3","provenance","anchoring","audit-trail"],"license":"MIT","_id":"@ar.io/anchor-s3@0.1.3","maintainers":[{"name":"vilenarios","email":"info@ardrive.io"}],"homepage":"https://github.com/ar-io/ar-io-anchor#readme","bugs":{"url":"https://github.com/ar-io/ar-io-anchor/issues"},"dist":{"shasum":"4e9aad808566ea22f37effa58fdd446a434d5b90","tarball":"https://registry.npmjs.org/@ar.io/anchor-s3/-/anchor-s3-0.1.3.tgz","fileCount":8,"integrity":"sha512-oblnUXoGnzUVD5Czfru6GkoDUAMY8UmkOIZxbiWttNy+PCPFsscb6QbIpFW52pPFafx9Q7+2lQCHClR5U7f26Q==","signatures":[{"sig":"MEQCH0GYur3fVMXNU6VZKEphhsuq7dQUHs6JRNcAYC7HGE4CIQC/mBY5w80dezBxZb8It9wtrUjnqvRtbgxsh0dEM+vZdg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ar.io%2fanchor-s3@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11281},"type":"module","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"2b910037dcf3be167320a0f1df3655433d973d9f","scripts":{"build":"tsc -p tsconfig.build.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45904512-cfd4-4f1f-a4c3-ce17ae7a4fc9"}},"repository":{"url":"git+https://github.com/ar-io/ar-io-anchor.git","type":"git","directory":"packages/s3"},"_npmVersion":"11.17.0","description":"Anchor-as-you-store for S3: wrap your S3 client so every putObject also anchors a tamper-evident provenance record to ar.io and writes it beside the object as a verify-anywhere .provenance.json sidecar. Bytes are hashed locally, never uploaded.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@ar.io/anchor":"^0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"peerDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/anchor-s3_0.1.3_1782159468689_0.30430660631916284","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ar.io/anchor-s3","version":"0.2.0","description":"Anchor-as-you-store for S3: wrap your S3 client so every putObject also anchors a tamper-evident provenance record to ar.io and writes it beside the object as a verify-anywhere .provenance.json sidecar. Bytes are hashed locally, never uploaded.","license":"MIT","type":"module","sideEffects":false,"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.build.json","prepublishOnly":"npm run build"},"dependencies":{"@ar.io/anchor":"^0.2.0"},"peerDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"devDependencies":{"@aws-sdk/client-s3":"^3.0.0"},"repository":{"type":"git","url":"git+https://github.com/ar-io/ar-io-anchor.git","directory":"packages/s3"},"publishConfig":{"access":"public"},"keywords":["ar.io","arweave","s3","provenance","anchoring","audit-trail"],"gitHead":"f47f769b080b7d87a59f2ab9b6dcbb9eb25661f6","_id":"@ar.io/anchor-s3@0.2.0","bugs":{"url":"https://github.com/ar-io/ar-io-anchor/issues"},"homepage":"https://github.com/ar-io/ar-io-anchor#readme","_nodeVersion":"22.23.0","_npmVersion":"11.18.0","dist":{"integrity":"sha512-sHwPQqdU1WIRtUeuoHeNUMJa9lUdesIUzFuyYuCuXIiToBUETxShtZWlNAX5JZcbd0lD9ACqFJx1TGUyN9CJng==","shasum":"847ca834438bb74aab42e198c193928afbab26c8","tarball":"https://registry.npmjs.org/@ar.io/anchor-s3/-/anchor-s3-0.2.0.tgz","fileCount":8,"unpackedSize":11281,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ar.io%2fanchor-s3@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD6vXiOrraaPYe9uEuiC4NNuRZqZ8NzBQYw2m7RD1m1OgIhAKkjLwnTXx2w/Azw7HU70GrSaI4sVulYPax0udQo3KbD"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:45904512-cfd4-4f1f-a4c3-ce17ae7a4fc9"}},"directories":{},"maintainers":[{"name":"vilenarios","email":"info@ardrive.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/anchor-s3_0.2.0_1782831889824_0.9775638290851751"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-11T21:29:48.362Z","modified":"2026-06-30T15:04:50.793Z","0.1.0":"2026-06-11T21:29:48.654Z","0.1.1":"2026-06-11T21:42:30.134Z","0.1.2":"2026-06-11T23:52:02.208Z","0.1.3":"2026-06-22T20:17:48.818Z","0.2.0":"2026-06-30T15:04:49.949Z"},"bugs":{"url":"https://github.com/ar-io/ar-io-anchor/issues"},"license":"MIT","homepage":"https://github.com/ar-io/ar-io-anchor#readme","keywords":["ar.io","arweave","s3","provenance","anchoring","audit-trail"],"repository":{"type":"git","url":"git+https://github.com/ar-io/ar-io-anchor.git","directory":"packages/s3"},"description":"Anchor-as-you-store for S3: wrap your S3 client so every putObject also anchors a tamper-evident provenance record to ar.io and writes it beside the object as a verify-anywhere .provenance.json sidecar. Bytes are hashed locally, never uploaded.","maintainers":[{"name":"vilenarios","email":"info@ardrive.io"}],"readme":"# @ar.io/anchor-s3\n\nAnchor as you store. Wrap your S3 client once, and every `putObject` also:\n\n1. stores your object exactly as asked,\n2. anchors a tamper-evident provenance record to ar.io (your bytes are hashed locally — they never leave your infrastructure), and\n3. writes that record beside the object as `<key>.provenance.json`, so the bucket carries its own offline-verifiable audit trail.\n\n```bash\nnpm install @ar.io/anchor-s3 @ar.io/anchor @aws-sdk/client-s3\n```\n\n```ts\nimport { S3Client } from \"@aws-sdk/client-s3\";\nimport { createAnchorer } from \"@ar.io/anchor\";\nimport { anchoredS3 } from \"@ar.io/anchor-s3\";\n\nconst s3 = anchoredS3(new S3Client({}), createAnchorer()); // dev mode: zero config\n\nconst { receipt, provenanceKey } = await s3.putObject({\n  Bucket: \"models\",\n  Key: \"prod/scorer.pkl\",\n  Body: modelBytes,\n});\n\nreceipt.txId;        // permanent ar.io anchor for these exact bytes\nprovenanceKey;       // \"prod/scorer.pkl.provenance.json\" — verify offline, anytime\n```\n\n`Body` must be a `string` or `Uint8Array` (it is hashed in-process; streams aren't accepted here).\n\n## Verifying a sidecar\n\nThe sidecar is JSON: `{ txId, gatewayUrl, envelope, record, contentHash, environment }`. Anyone with the object and its sidecar can verify offline with the read-only [`@ar.io/proof`](https://www.npmjs.com/package/@ar.io/proof) — no ar.io service in the trust path:\n\n```ts\nimport { ed25519Verify, jcs, sha256Hex, utf8 } from \"@ar.io/proof\";\n\nconst sidecar = JSON.parse(sidecarJson);\n\n// 1. The object bytes are what was anchored.\n(await sha256Hex(objectBytes)) === sidecar.record.event.content_hash;\n\n// 2. The record is what the envelope committed to.\n(await sha256Hex(utf8(jcs(sidecar.record)))) === sidecar.envelope.payload_hash;\n\n// 3. The envelope is authentically signed.\nconst { signature, ...pre } = sidecar.envelope;\nawait ed25519Verify(signature, utf8(jcs(pre)), sidecar.envelope.public_key);\n```\n\nCross-check against the chain by fetching `txId` from any ar.io gateway (`https://<gateway>/raw/<txId>` — e.g. `turbo-gateway.com`; browse the network at [gateways.ar.io](https://gateways.ar.io)) and comparing it to `sidecar.envelope`.\n\n## Semantics\n\n- If anchoring fails, the object is already stored but no sidecar is written — the put itself is never rolled back.\n- For production credentials (explicit signing key, funded wallet) and the typed-error table: see [`@ar.io/anchor`](https://www.npmjs.com/package/@ar.io/anchor).\n","readmeFilename":"README.md"}