# Path 1: Wallet-only (JavaScript)

**Question:** "Is this wallet acting for a verified human?"

Use this when you only need a yes/no (e.g. MCP servers, connection handshakes, rate limiting). No JWS or JWT required.

The ProofPack library uses `IsDelegateAttestationVerifier` and a config object (`delegationSchemaUid`, `acceptedRoots`, `preferredSubjectSchemas`, `schemaPayloadValidators`, `maxDepth`). For the full config shape and schema UIDs, see the [ProofPack repo](https://github.com/zipwireapp/ProofPack) — [JavaScript Ethereum: GraphQL lookup and verifyByWallet](https://github.com/zipwireapp/ProofPack/blob/main/javascript/packages/ethereum/README.md#graphql-lookup-and-verifybywallet-no-rpc).

```javascript
import { IsDelegateAttestationVerifier } from '@zipwire/proofpack-ethereum';
import { PrivateDataPayloadValidator } from '@zipwire/proofpack-ethereum';

// Full config (delegationSchemaUid, acceptedRoots, preferredSubjectSchemas, schemaPayloadValidators) — see ProofPack repo
const config = {
  delegationSchemaUid: '0x...',   // IsDelegate schema UID
  acceptedRoots: [{ schemaUid: '0x...', attesters: ['0xZipwireAttester...'] }],
  preferredSubjectSchemas: [{ schemaUid: '0x...', attesters: ['0xZipwire...'] }],
  schemaPayloadValidators: new Map([['0x...', new PrivateDataPayloadValidator()]]),
  maxDepth: 32
};

const verifier = new IsDelegateAttestationVerifier({ chains: ['base-sepolia', 'base'] }, config);
const result = await verifier.verifyByWallet('0xAgentWallet...');

if (result.isValid) {
  console.log('Agent is human-authorized');
} else {
  console.log('Agent is not in a valid delegation chain:', result.message);
}
```

`verifyByWallet` returns an **AttestationResult** (with `isValid`, `message`, `reasonCode`), not a plain boolean. For the REST API alternative, see [ProofPack & Agent Delegation](https://docs.zipwire.io/tools-and-integrations/proofpack-agent-delegation) and [IsDelegate REST API](https://docs.zipwire.io/fundamentals/security/attestations/is-delegate-rest-api).
