|%
::  +provider: DNS service provider (gcloud only for now)
::
+$  provider
  $%  [%fcloud zone=@ta auth=[email=@t key=@t]]
      $:  %gcloud
          project=@ta
          zone=@ta
          ::  XX passed as params since we can't scry in +mule
          ::
          scry=[code=@t =hart:eyre secrets=@t]
          auth=(unit [access=@t refresh=@t])
      ==
  ==
::  +authority: responsibility for a DNS zone
::
+$  authority
  $:  :: dom: authority over a fully-qualified domain
      ::
      dom=turf
      :: pro: DNS service provider
      ::
      pro=provider
  ==
::  +target: a ship is bound to a ...
::
+$  target
  $%  :: %direct: an A record
      ::
      [%direct %if p=@if]
      :: %indirect: a CNAME record
      ::
      [%indirect p=ship]
  ==
::  +bound: an established binding, plus history
::
+$  bound
  $:  :: wen: established
      ::
      wen=@da
      ::  id:  binding UUID (unused by gcloud)
      ::
      id=@ta
      :: cur: current target
      ::
      cur=target
      :: hit: historical targets
      ::
      hit=(list (pair @da target))
  ==
::  +nameserver: a b s o l u t e  p o w e r
::
+$  nameserver
  $:  aut=authority
      bon=(map ship bound)
      dep=(jug ship (pair ship target))
  ==
--