ucan-wg / invocation

UCAN Invocation & Pipelining
Other
12 stars 5 forks source link

await with selectors #32

Open Gozala opened 6 months ago

Gozala commented 6 months ago

We have discussed this in side channel, but I wanted to capture in the issue so it's available for others to followup on.

I have proposed that we replace await/ok, await/error, await/* custom promise pipelining operators with combination of general ucan/await that can work with jq like selectors that are been introduces into UCAN spec here https://github.com/ucan-wg/delegation/issues/5

Expectation is that selectors will behave as described in the table, if task selector result in output marked as ⛔️ (per table in the linked issue) failure supposed to propagate. Otherwise arguments supposed to substituted with the output of the selector.

Here is a proposed syntax for invocation spec

type Await union {
   AwaitOperand   "ucan/await"
} representation keyed

type AwaitOperand struct {
  selector String
  source   Any    
} representation tuple

here is example from the spec

{
  "bafy...getMailingList": {
    "sub": "did:key:zAlice",
    "cmd": "crud/read",
    "args": {
        "url": "https://exmaple.com/mailinglist"
     }
  },
  "bafy...sendEmail": {
    "sub": "did:key:zAlice",
    "cmd": "msg/send",
    "args": {
      "email": "alice@example.com",
      "to": { "ucan/await": [".out.ok.email", { "/": "bafy...getMailingList" }] }
      "title": "hello",
      "body": "world"
    }
  }
}
expede commented 6 months ago

Works for me 👍