{"_id":"@ar.io/anchor","_rev":"5-83db5bd0838741b5c2acb8d9cede79e1","name":"@ar.io/anchor","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@ar.io/anchor","version":"0.1.0","keywords":["ar.io","arweave","anchoring","provenance","audit-trail","ans-104","turbo","merkle","jcs","rfc8785","ed25519"],"license":"MIT","_id":"@ar.io/anchor@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":"e8c0ef71e079bd004f0c92ff3ec468b04040dc06","tarball":"https://registry.npmjs.org/@ar.io/anchor/-/anchor-0.1.0.tgz","fileCount":77,"integrity":"sha512-6RSlGjo9BkZtjZQnmoPR12lWYIx61clKuoxnW+3tR+QvrbS1XhOyMGl6ealp6S+OROQ/eetoGxQS+ZEs69X0Fw==","signatures":[{"sig":"MEQCIHNQ1EVaHDx/2OiWeU9/J+HiSPXL3d/wQoLluCAhciOCAiAphv/thumgO9RHJPtmkADu6IzbCHiHVBpPbhrWE+nz3w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":161743},"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/anchor"},"_npmVersion":"10.8.2","description":"TypeScript write path of the ar.io verification stack: build signed ario.events/v1 envelopes, assemble ANS-104 data items, upload via Turbo, Merkle-batch high-frequency events with per-event inclusion proofs. Verify side: @ar.io/proof.","directories":{},"sideEffects":false,"_nodeVersion":"20.18.2","dependencies":{"@ar.io/proof":"^0.1.2","@noble/hashes":"^1.8.0","@noble/ed25519":"^2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bs58":"^6.0.0","axios":"^1.17.0","@dha-team/arbundles":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/anchor_0.1.0_1781213386810_0.7409225242467703","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@ar.io/anchor","version":"0.1.1","keywords":["ar.io","arweave","anchoring","provenance","audit-trail","ans-104","turbo","merkle","jcs","rfc8785","ed25519"],"license":"MIT","_id":"@ar.io/anchor@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":"8cb344a6234c22e1e746b7a0080acae6c96a6b0a","tarball":"https://registry.npmjs.org/@ar.io/anchor/-/anchor-0.1.1.tgz","fileCount":77,"integrity":"sha512-fk4TMhqHij08hOeXNIxq43XYFsHhZPb1oXwtL1WUshVMOGqYpm1VFDRK4OZr2bG/kvBusweKbBAl6KlFDqom/g==","signatures":[{"sig":"MEUCIQCPCKl7qZefv1/0/W71Ebod5RZDghM8wpK7xbn3FIWzYAIgB5Fw8J5wmQ+T/3HfS8ISMos9YUe5Ueyu+mK0I7toVXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ar.io%2fanchor@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":162732},"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:345925fb-0837-4b45-ac11-3d1f6dc33b5b"}},"repository":{"url":"git+https://github.com/ar-io/ar-io-anchor.git","type":"git","directory":"packages/anchor"},"_npmVersion":"11.17.0","description":"Anchor-at-write-time for the ar.io verification stack. Hash your data locally, sign a Verifiable Event Envelope (ario.events/v1), and anchor it to ar.io — permanent, tamper-evident provenance with Merkle-batched checkpoints and per-event inclusion proofs.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@ar.io/proof":"^0.1.2","@noble/hashes":"^1.8.0","@noble/ed25519":"^2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bs58":"^6.0.0","axios":"^1.17.0","@dha-team/arbundles":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/anchor_0.1.1_1781214121947_0.23497625279901668","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@ar.io/anchor","version":"0.1.2","keywords":["ar.io","arweave","anchoring","provenance","audit-trail","ans-104","turbo","merkle","jcs","rfc8785","ed25519"],"license":"MIT","_id":"@ar.io/anchor@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":"0a1e87fed0d52228793f52c4b0a22426992c022e","tarball":"https://registry.npmjs.org/@ar.io/anchor/-/anchor-0.1.2.tgz","fileCount":77,"integrity":"sha512-Lkn3vuieX1eB7heeSWBK7DihG34bqfIiuRDqFlCUnqK+XfQ6r8wiIUngQn/x9GbW9K35XEhZ8cZmJimr/gCF6w==","signatures":[{"sig":"MEYCIQDMzpaED0FxwEzowDy8EDutunDQdKLNJfzbRoEAXSuYmgIhAKblq2q2etaFK5BpEP8GRzjYluw7dTmpvbEuazoossMh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ar.io%2fanchor@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":163206},"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:345925fb-0837-4b45-ac11-3d1f6dc33b5b"}},"repository":{"url":"git+https://github.com/ar-io/ar-io-anchor.git","type":"git","directory":"packages/anchor"},"_npmVersion":"11.17.0","description":"Anchor-at-write-time for the ar.io verification stack. Hash your data locally, sign a Verifiable Event Envelope (ario.events/v1), and anchor it to ar.io — permanent, tamper-evident provenance with Merkle-batched checkpoints and per-event inclusion proofs.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@ar.io/proof":"^0.1.2","@noble/hashes":"^1.8.0","@noble/ed25519":"^2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bs58":"^6.0.0","axios":"^1.17.0","@dha-team/arbundles":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/anchor_0.1.2_1781221916468_0.4712356954588104","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@ar.io/anchor","version":"0.1.3","keywords":["ar.io","arweave","anchoring","provenance","audit-trail","ans-104","turbo","merkle","jcs","rfc8785","ed25519"],"license":"MIT","_id":"@ar.io/anchor@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":"74df64eb352381d0cd3d35ed10570fa2cbfd759c","tarball":"https://registry.npmjs.org/@ar.io/anchor/-/anchor-0.1.3.tgz","fileCount":82,"integrity":"sha512-IgT9YG+9qGZMJywvSxZXajma0TxF1ainTGRnaAlYYmzNGRp3X/my6OjbzdQAhZEk+PUFB1aBT0OLLbnDUT91ww==","signatures":[{"sig":"MEUCIQDriB1hG8L7SXb+MpRUfTn8xZYZyJfayXaePteZU1UntgIgf3xefxPEp5KB5mjxsek28hm6ch5NearXuSY2GrM40nU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ar.io%2fanchor@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":193092},"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:345925fb-0837-4b45-ac11-3d1f6dc33b5b"}},"repository":{"url":"git+https://github.com/ar-io/ar-io-anchor.git","type":"git","directory":"packages/anchor"},"_npmVersion":"11.17.0","description":"Anchor-at-write-time for the ar.io verification stack. Hash your data locally, sign a Verifiable Event Envelope (ario.events/v1), and anchor it to ar.io — permanent, tamper-evident provenance with Merkle-batched checkpoints and per-event inclusion proofs.","directories":{},"sideEffects":false,"_nodeVersion":"22.22.3","dependencies":{"@ar.io/proof":"^0.2.0","@noble/hashes":"^1.8.0","@noble/ed25519":"^2.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"bs58":"^6.0.0","axios":"^1.17.0","@dha-team/arbundles":"^1.0.4"},"_npmOperationalInternal":{"tmp":"tmp/anchor_0.1.3_1782159462752_0.3902086638299047","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@ar.io/anchor","version":"0.2.0","description":"Anchor-at-write-time for the ar.io verification stack. Hash your data locally, sign a Verifiable Event Envelope (ario.events/v1), and anchor it to ar.io — permanent, tamper-evident provenance with Merkle-batched checkpoints and per-event inclusion proofs.","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/proof":"^0.2.0","@noble/ed25519":"^2.1.0","@noble/hashes":"^1.8.0"},"repository":{"type":"git","url":"git+https://github.com/ar-io/ar-io-anchor.git","directory":"packages/anchor"},"publishConfig":{"access":"public"},"keywords":["ar.io","arweave","anchoring","provenance","audit-trail","ans-104","turbo","merkle","jcs","rfc8785","ed25519"],"devDependencies":{"@dha-team/arbundles":"^1.0.4","axios":"^1.17.0","bs58":"^6.0.0"},"gitHead":"f47f769b080b7d87a59f2ab9b6dcbb9eb25661f6","_id":"@ar.io/anchor@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-cQwjDlAolDfqOh9Mwvj7OxNYtND8pyO1XR7HGDKd4ydZW9dPFReSWxZkcSlzl08ZOGbzEWuCBut6XsfDCPsexw==","shasum":"54c131f4a820277689ab5778cf7dc54734b49bcb","tarball":"https://registry.npmjs.org/@ar.io/anchor/-/anchor-0.2.0.tgz","fileCount":83,"unpackedSize":202592,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@ar.io%2fanchor@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDrnmY/0YDTXgEhoZzeOf4gSurSdPRI278mpkUn/X3xFwIgY/+NrG1i7fu9aI63aYpPnPwqCFPYnBOJycYB44zj3m8="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:345925fb-0837-4b45-ac11-3d1f6dc33b5b"}},"directories":{},"maintainers":[{"name":"vilenarios","email":"info@ardrive.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/anchor_0.2.0_1782831884112_0.3374588073292546"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-11T21:29:46.629Z","modified":"2026-06-30T15:04:44.569Z","0.1.0":"2026-06-11T21:29:46.994Z","0.1.1":"2026-06-11T21:42:02.085Z","0.1.2":"2026-06-11T23:51:56.598Z","0.1.3":"2026-06-22T20:17:42.882Z","0.2.0":"2026-06-30T15:04:44.276Z"},"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","anchoring","provenance","audit-trail","ans-104","turbo","merkle","jcs","rfc8785","ed25519"],"repository":{"type":"git","url":"git+https://github.com/ar-io/ar-io-anchor.git","directory":"packages/anchor"},"description":"Anchor-at-write-time for the ar.io verification stack. Hash your data locally, sign a Verifiable Event Envelope (ario.events/v1), and anchor it to ar.io — permanent, tamper-evident provenance with Merkle-batched checkpoints and per-event inclusion proofs.","maintainers":[{"name":"vilenarios","email":"info@ardrive.io"}],"readme":"# @ar.io/anchor\n\nAnchor-at-write-time for the ar.io verification stack: hash your data locally, sign a [Verifiable Event Envelope](https://github.com/ar-io/ar-io-proof/blob/main/specs/envelope-spec.md) under the `ario.events/v1` profile, and anchor it to ar.io — no relay, no SDK bloat, raw bytes never leave your system.\n\n**Write** through Turbo — ar.io's upload service. **Read** it back through any ar.io gateway — turbo-gateway.com, or any of the others at [gateways.ar.io](https://gateways.ar.io); you're never locked to one provider. Underneath, it's stored permanently on Arweave.\n\n```bash\nnpm install @ar.io/anchor\n```\n\n```ts\nimport { createAnchorer } from \"@ar.io/anchor\";\n\n// Dev mode: zero config. Auto identity + wallet; small uploads are free on Turbo.\n// Proofs are permanently marked environment:\"dev\" inside the signed bytes.\nconst ario = createAnchorer();\n\nconst receipt = await ario.anchor({\n  type: \"event\",\n  data: fileBytes,            // or a string, or an AsyncIterable (streams),\n  // contentHash: \"...\",      // or a pre-computed sha256 — exactly one\n  ref: \"s3://bucket/key\",     // optional locator\n  metadata: { approver: \"alice\" },\n  chain: \"orders\",            // optional per-key hash chain\n});\n\nreceipt.txId;          // ar.io transaction id (resolved once Turbo accepts the upload)\nreceipt.envelope;      // the signed, Minimal-disclosure envelope\nreceipt.recordBytes;   // RETAIN THESE — the committed event record\nreceipt.gatewayUrl;    // resolve on any ar.io gateway (gateways.ar.io)\n```\n\n## Batching\n\nHigh-frequency events (LLM steps, pipeline records): one ar.io write per window, while every event keeps its own offline-verifiable inclusion proof.\n\n```ts\nconst batch = ario.batch({\n  maxEvents: 100,     // flush when full…\n  maxAge: 60_000,     // …or 60s after the first buffered event…\n  flushOnIdle: 5_000, // …or 5s after the last add. First trigger wins.\n});\n\nconst receipt = await batch.add({ data: JSON.stringify(step) }).receipt();\n// → { checkpointTxId, root, leafHash, leafIndex, auditPath, envelope, recordBytes, ... }\n\nawait ario.close(); // explicit flush — call it on shutdown; nothing is flushed for you\n```\n\n`add()` is synchronous (bytes/string/pre-computed hash — no streams here). A batch of one is valid. With the default in-memory buffer a crash loses buffered *proofs*, never data — every event is re-anchorable from your system.\n\n## Bundle a whole trace (one portable file)\n\nCollect a set of receipts and serialize them into ONE signed, self-verifying `ario.evidence/v1` bundle (`body_type: ario.anchor.trace/v1`) with `ario.bundle()`. The wrapper is signed by your anchorer's own key — the same key the receipts' envelopes carry, so the call site needs zero signer handling; the bundle carries every event's signed envelope + committed record + inclusion proof, de-duplicating the shared checkpoint(s).\n\n```ts\nconst receipts = await Promise.all(handles.map((h) => h.receipt()));\nconst bundle = await ario.bundle(receipts); // signed with the anchorer's own key — zero ceremony\nawait fs.writeFile(\"trace-bundle.json\", JSON.stringify(bundle, null, 2));\n```\n\nNeed an explicit key, or to override the issuer/gateway? The standalone advanced form is `toEvidenceBundle(receipts, { signer, issuer })` (also from `@ar.io/anchor`) — `ario.bundle()` is the same call wired to your anchorer's own signer with a sensible default issuer.\n\n### Optionally include the raw logs (opt-in, default off)\n\nBy default a bundle discloses **nothing semantic** — it carries hashes and on-chain locations, never your raw bytes, and that's the whole point of minimal disclosure. Sometimes, though, you *want* one self-contained file an auditor can open and read: the raw logs **and** their on-chain proofs together. Pass `disclose`, keyed by `eventId`, with the original bytes (the receipt never retained them, so you supply them back):\n\n```ts\nconst bundle = await ario.bundle(receipts, {\n  disclose: { [receipts[0].eventId]: rawLogBytes }, // Uint8Array | string (UTF-8)\n});\n```\n\nEach disclosed event embeds its bytes (lowercase hex) **inside the signed body**, so the disclosure is covered by `body_hash` and tamper-evident like everything else; `sha256(bytes)` is asserted equal to the event's committed `content_hash` at assembly time, and a mismatch throws. This is purely a property of the **file you hand out** — your **on-chain footprint is unchanged** (the envelope still carries only the hash), and events you don't list stay minimal. Disclose all, some, or none, per event.\n\n## Verifying\n\nHand the trace bundle to an auditor; they verify the whole thing — every event's signature + payload binding + Merkle inclusion, offline — with **one command** and the read-only [`@ar.io/proof`](https://www.npmjs.com/package/@ar.io/proof) (no write SDK in the trust path):\n\n```bash\nnpx @ar.io/proof verify trace-bundle.json\n# optionally re-fetch each checkpoint on-chain to confirm it's anchored:\nnpx @ar.io/proof verify trace-bundle.json https://arweave.net,https://permagate.io\n```\n\nIt prints a per-event + rollup verdict and exits on a pinned code (`0` verified · `1` failed · `2` malformed · `3` gateway-unavailable); the producer's asserted verdict is shown but never trusted (the verdict is recomputed from the body). A **withheld** record surfaces as semantics-undetermined (`~`), not a failure. Any raw bytes you **disclosed** (above) are checked too — the verifier recomputes their hash, confirms it equals the event's committed `content_hash`, and marks the event `logs ✓` (`--logs <file>` does the same for logs that travel alongside a minimal bundle). The same CLI also verifies the agent's `ario.agent.proof/v1` inclusion bundles (it sniffs `spec_version`).\n\n> **Live:** the bundle emit (`ario.bundle()` / `toEvidenceBundle`) ships in `@ar.io/anchor` ≥ 0.1.3 and the `npx @ar.io/proof verify` CLI in `@ar.io/proof` ≥ 0.2.2. The `@ar.io/proof` primitives below remain available for manual/advanced verification.\n\nA single envelope still verifies by hand from any ar.io gateway (`https://<gateway>/raw/<txId>`, e.g. `turbo-gateway.com`) with your retained `recordBytes`:\n\n```ts\nimport { ed25519Verify, jcs, sha256Hex, utf8, verifyInclusion, hexToBytes } from \"@ar.io/proof\";\n\nconst { signature, ...preSignature } = receipt.envelope;\nawait ed25519Verify(signature, utf8(jcs(preSignature)), receipt.envelope.public_key); // true\n(await sha256Hex(receipt.recordBytes)) === receipt.envelope.payload_hash;             // true\n```\n\nSee the runnable [examples](https://github.com/ar-io/ar-io-anchor/tree/main/examples).\n\n## Production\n\nProduction structurally refuses auto-generated secrets — it throws unless you pass all three:\n\n```ts\nimport { createAnchorer, LocalEd25519Signer, SolanaWalletSigner } from \"@ar.io/anchor\";\n\nconst ario = createAnchorer({\n  environment: \"production\",\n  // Identity key (signs envelopes). Any { publicKey(), sign() } works —\n  // file seed shown; Vault/KMS adapters implement the same interface.\n  signer: LocalEd25519Signer.fromSeedHex(process.env.ANCHOR_IDENTITY_SEED!),\n  // Funding wallet (pays Turbo) — a different key, Solana ed25519 default.\n  wallet: new SolanaWalletSigner(LocalEd25519Signer.fromSeedHex(process.env.ANCHOR_WALLET_SEED!)),\n  subject: { type: \"producer\", producer_id: \"acme-app\" },\n});\n```\n\nThe two keys are deliberately separate: identity (who signed) vs money (who pays). Fund the wallet with Turbo Credits at https://turbo.ardrive.io.\n\n## Errors\n\nAll errors carry a machine-checkable `code`:\n\n| Class (`code`) | When | Do |\n|---|---|---|\n| `FundingExhaustedError` (`FUNDING_EXHAUSTED`) | Turbo 402 — wallet out of funds | Fund the wallet; the message includes instructions. Not retryable as-is. |\n| `UploadFailedError` (`UPLOAD_FAILED`) | 5xx/429/network, retries exhausted | Transient — safe to retry the same `anchor()` call. |\n| `UploadRejectedError` (`UPLOAD_REJECTED`) | Terminal 4xx from Turbo | Inspect the detail; retrying the same bytes won't help. |\n| `TxIdMismatchError` (`TXID_MISMATCH`) | Upstream returned a TX ID that doesn't match the signature-derived one | Should never happen with an honest upstream — treat the upload as suspect. |\n| `ProductionConfigError` (`PRODUCTION_CONFIG`) | Production mode without explicit signer/wallet/subject | Supply the missing credentials; dev secrets cannot reach production. |\n\nA failed **batch** window rejects only that window's `receipt()` promises — the chain head is untouched and the next window proceeds; re-`add` the events to re-anchor them.\n\n## Guarantees\n\n- **Local hashing only.** `data` is hashed in-process (streams supported); only the signed envelope (a few hundred bytes) is uploaded.\n- **Minimal disclosure.** The on-chain envelope carries no event type, no subject, no chain pointer — those live in the hash-committed record you retain.\n- **Dev proofs are cryptographically dev.** `environment` sits inside the signed scope; a dev proof can never be presented as production evidence.\n- **Verification is a separate, read-only package** — [`@ar.io/proof`](https://www.npmjs.com/package/@ar.io/proof). This package contains the write path only.\n\n## Conformance\n\nByte-for-byte against the family corpus (`ar-io-proof` `test-vectors-v1.1`); ANS-104 output byte-pinned vs arbundles and re-verified by an independent Python parser in CI. See the [profile spec](https://github.com/ar-io/ar-io-anchor/blob/main/docs/profile-ario.events-v1.md).\n","readmeFilename":"README.md"}