{"_id":"@circles-market/signers","name":"@circles-market/signers","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@circles-market/signers","version":"0.1.0","private":false,"type":"module","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.cjs","import":"./dist/index.js"}},"sideEffects":false,"scripts":{"build":"tsup src/index.ts --dts --format esm,cjs --sourcemap","clean":"rm -rf dist","typecheck":"tsc -p tsconfig.json --noEmit"},"dependencies":{"@circles-market/core":"0.1.0"},"devDependencies":{"tsup":"^8.3.0","typescript":"^5.6.3"},"_id":"@circles-market/signers@0.1.0","gitHead":"2bfca7a6816434444613f8ca4349e796179480b5","description":"Helpers for Safe-based signing used by Circles Market authentication and offer publishing.","_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-3DgXlirDQB+r+iDt/S3m1g65XZszEUIx+FWklmWi5h0LdANvDqHhMQiHZuODsKoo6UOkcraTLhweCg8H1SmUiQ==","shasum":"99160101558b827eeb51b82078ff95a7d192133c","tarball":"https://registry.npmjs.org/@circles-market/signers/-/signers-0.1.0.tgz","fileCount":11,"unpackedSize":21009,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIAj6DTD5fFnBekpd1iI7DH1Mqn1psbxFKEHOp4MKyL5ZAiAROF82E0SfKqO19o8TdsOGwLnXg3ZrIKKqu5F6rLbeLA=="}]},"_npmUser":{"name":"jaensen","email":"daniel@djanz.de"},"directories":{},"maintainers":[{"name":"jaensen","email":"daniel@djanz.de"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/signers_0.1.0_1768922714610_0.32951260947476624"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-20T15:25:14.510Z","0.1.0":"2026-01-20T15:25:14.748Z","modified":"2026-01-20T15:25:15.028Z"},"maintainers":[{"name":"jaensen","email":"daniel@djanz.de"}],"description":"Helpers for Safe-based signing used by Circles Market authentication and offer publishing.","readme":"# @circles-market/signers\n\nHelpers for Safe-based signing used by Circles Market authentication and offer publishing.\n\nIt builds EIP-712 typed data for `SafeMessage(bytes)` and signs it using an EIP-1193 provider (`eth_signTypedData_v4`).\n\n## Install\n\n```bash\npnpm add @circles-market/signers\n```\n\n## Quickstart\n\n```ts\nimport { SignersClientImpl } from \"@circles-market/signers\";\n\nasync function createSigner(ethereum: { request: (args: any) => Promise<any> }, avatar: string) {\n  const signers = new SignersClientImpl();\n\n  const signer = await signers.createSafeSignerForAvatar({\n    avatar,\n    ethereum,\n    chainId: 100n,\n    enforceChainId: true,\n  });\n\n  const sig = await signer.signBytes(new TextEncoder().encode(\"hello\"));\n  return sig;\n}\n```\n\n## Reference\n\n### Concepts\n\n* Safe-based SIWE-style signing using `SafeMessage(bytes)`.\n* Uses an EIP-1193-compatible wallet/provider to sign typed data (`eth_signTypedData_v4`).\n\n### API and return values\n\n* `createSafeSignerForAvatar({ avatar, ethereum, chainId, enforceChainId? })` → `Promise<AvatarSigner>`\n  * `avatar`: Safe/avatar address (lowercased internally)\n  * `chainId`: bigint chain id to bind the signer to\n  * `enforceChainId?`: when `true`, the wallet chain is checked via `eth_chainId`\n\nErrors you can see:\n* `Wrong chain. Expected ... got ...` → wallet on different chain while `enforceChainId: true`.\n * `No EOA account unlocked in wallet` → `eth_requestAccounts` returned empty.\n\n### Types\n\n`AvatarSigner` fields:\n- `avatar`: lowercased Safe address\n- `chainId`: bigint chain id\n- `signBytes(payload: Uint8Array)`: returns a hex signature string (`0x...`)\n\n### Runtime notes\n\n* `enforceChainId: true` will call `eth_chainId` and throw if the wallet is on the wrong chain.\n* The signer assumes the wallet can provide an owner EOA via `eth_requestAccounts`.\n\n## Related packages\n\n* `@circles-market/auth` uses an `AvatarSigner` to sign challenges\n* `@circles-market/offers` uses an `AvatarSigner` to publish/tombstone offers\n* `@circles-market/sdk` wires these together if you need a full client\n","readmeFilename":"README.md","_rev":"1-30ac39b7d489fc870dd22484fd2f9229"}