Skip to content

Commit

Permalink
feat: proof add --dry-run --json to view a delegation (#40)
Browse files Browse the repository at this point in the history
adds `--dry-run` so we can view info about a proof without adding it.
Useful for debugging, and as `proof add` changes local state, it's
always nice to have a dry run option.

```bash
$ w3 proof add ~/Downloads/did-key-z6MkvqaczH.ucan --dry-run
bafyreidzajq4jptufyiuhq7t7xtf2uiglgjb27rxf5acqtqpirmx3jvy54
  issuer: did:key:z4MXj1wBzi9jUstyPzbX4dasDsxqd7cRCPgpzRQJa9tkywBu3rouGzwWJt1rnvixptH54i4TA552Sq52asiZTBBaRJ2gjJagE9niiZawBBoKpBdZVCTrFPp2poAkyBezvTegXVWziimVftBUCymosNroW3TwApSYPXdczeU5WjEJFn9isdZuZcs99xYtV3f7Uri7tp3ymrXnioshMNgP1FqU5VgniuwA9oV1BFzjjPra7GLXxMoD6jv8j68v8McyGu4EyQ5AFhdLBVLiQg3TU14ew8hhrVaMnF5Csvf1KYpZ1ahBDo6KZ4ZYMDE4M4fPVfuCHZju4UN7aq996VJ3RpfBfhPrQLXwopZ3JcuBjzboMmzjAJNs2
  with: did:key:z6MksH388fHkXCsqDuzyVaHGHaKtwxaFESoL7vV6xqZRLz8R
  can: *
```

adds missing `--json` flag handling and updates deps so we can make use
of the new `toJSON` method on `Delegation`

```bash
$ w3 proof add ~/Downloads/did-key-z6MkvqaczH.ucan --dry-run --json
{"iss":"did:key:z4MXj1wBzi9jUstyPzbX4dasDsxqd7cRCPgpzRQJa9tkywBu3rouGzwWJt1rnvixptH54i4TA552Sq52asiZTBBaRJ2gjJagE9niiZawBBoKpBdZVCTrFPp2poAkyBezvTegXVWziimVftBUCymosNroW3TwApSYPXdczeU5WjEJFn9isdZuZcs99xYtV3f7Uri7tp3ymrXnioshMNgP1FqU5VgniuwA9oV1BFzjjPra7GLXxMoD6jv8j68v8McyGu4EyQ5AFhdLBVLiQg3TU14ew8hhrVaMnF5Csvf1KYpZ1ahBDo6KZ4ZYMDE4M4fPVfuCHZju4UN7aq996VJ3RpfBfhPrQLXwopZ3JcuBjzboMmzjAJNs2","aud":"did:key:z6MkvqaczHouddZ91gWNsuy2QFm419WFodXbVjBJykvzw1eK","v":"0.9.1","s":{"/":{"bytes":"haTABoACShdnoTAfihQ2lag5Caf4+P7TkLK/EFtfpX6EUEvI1Dp9MdoRIYDylpm8ovKXXS5FkziQHRJvGpBcGN25be9CegywiudM/bNB5rBcmgYGSSkGvoQZLTgckiezGMdKI1S6/SbYvTK4VShIsrxWXKhMLgH2JMHAXTo123mLdV3WIVzWbu0VJBm1pY6lRxDJcQbzrVL/yk6WLlmlDgCqSweqAMV+GDfWE+xaC3Mot/m+LIWAemNB/nMnyOwuaihfJ5C17nxdRDY0Kmkweq4+W4CiG7yK333wLM2vjJoJOmaIvAPJI8i5x8h8JZXwPJL/EEPzdPbfwujMY7FyUTZADHGnWQ"}},"exp":null,"att":[{"can":"*","with":"did:key:z6MksH388fHkXCsqDuzyVaHGHaKtwxaFESoL7vV6xqZRLz8R"}],"fct":[{"space":{"isRegistered":true,"name":"Shared with cli"}}],"prf":[{"iss":"did:key:z6MksH388fHkXCsqDuzyVaHGHaKtwxaFESoL7vV6xqZRLz8R","aud":"did:key:z4MXj1wBzi9jUstyPzbX4dasDsxqd7cRCPgpzRQJa9tkywBu3rouGzwWJt1rnvixptH54i4TA552Sq52asiZTBBaRJ2gjJagE9niiZawBBoKpBdZVCTrFPp2poAkyBezvTegXVWziimVftBUCymosNroW3TwApSYPXdczeU5WjEJFn9isdZuZcs99xYtV3f7Uri7tp3ymrXnioshMNgP1FqU5VgniuwA9oV1BFzjjPra7GLXxMoD6jv8j68v8McyGu4EyQ5AFhdLBVLiQg3TU14ew8hhrVaMnF5Csvf1KYpZ1ahBDo6KZ4ZYMDE4M4fPVfuCHZju4UN7aq996VJ3RpfBfhPrQLXwopZ3JcuBjzboMmzjAJNs2","v":"0.9.1","s":{"/":{"bytes":"7aEDQA53nQmLquoq3Xfu1o+L88SLMMGivLCNcLNvUO+B2opkHyIJs83RVFRMEL1mjrKJzVAiGzHmDd6AJTwHX4CTqg0"}},"exp":null,"att":[{"can":"*","with":"did:key:z6MksH388fHkXCsqDuzyVaHGHaKtwxaFESoL7vV6xqZRLz8R"}],"prf":[],"/":"bafyreihfyvjcrenryrexbyeddgntfbn2mjvx57hiiav2jbceqh2v2taame"}],"/":"bafyreidzajq4jptufyiuhq7t7xtf2uiglgjb27rxf5acqtqpirmx3jvy54"}
```

Convert any errors to a simple error message instead of dumping stack

```bash
$ w3 proof add ~/Downloads/w3cli.ucan 
Error: Delegation audience does not match required DID.
```

License: MIT
Signed-off-by: Oli Evans <oli@protocol.ai>
  • Loading branch information
olizilla authored Jan 27, 2023
1 parent 65f7f88 commit c32283a
Show file tree
Hide file tree
Showing 3 changed files with 960 additions and 388 deletions.
1 change: 1 addition & 0 deletions bin.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ cli.command('delegation ls')
cli.command('proof add <proof>')
.describe('Add a proof delegated to this agent.')
.option('--json', 'Format as newline delimted JSON')
.option('--dry-run', 'Decode and view the proof but do not add it')
.action(addProof)

cli.command('proof ls')
Expand Down
31 changes: 23 additions & 8 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -279,16 +279,31 @@ export async function listDelegations (opts) {

/**
* @param {string} proofPath
* @param {object} opts
* @param {boolean} [opts.json]
* @param {boolean} [opts.dry-run]
*/
export async function addProof (proofPath) {
export async function addProof (proofPath, opts) {
const client = await getClient()
const proof = await readProof(proofPath)
await client.addProof(proof)
console.log(proof.cid.toString())
console.log(` issuer: ${proof.issuer.did()}`)
for (const capability of proof.capabilities) {
console.log(` with: ${capability.with}`)
console.log(` can: ${capability.can}`)
let proof
try {
proof = await readProof(proofPath)
if (!opts['dry-run']) {
await client.addProof(proof)
}
} catch (err) {
console.log(`Error: ${err.message}`)
process.exit(1)
}
if (opts.json) {
console.log(JSON.stringify(proof.toJSON()))
} else {
console.log(proof.cid.toString())
console.log(` issuer: ${proof.issuer.did()}`)
for (const capability of proof.capabilities) {
console.log(` with: ${capability.with}`)
console.log(` can: ${capability.can}`)
}
}
}

Expand Down
Loading

0 comments on commit c32283a

Please sign in to comment.