syntax = "proto3";
package macaroon.v1;

import "amino/amino.proto";
import "did/v1/tx.proto";
import "gogoproto/gogo.proto";

option go_package = "github.com/onsonr/sonr/x/macaroon/types";

// GenesisState defines the module genesis state
message GenesisState {
  // Params defines all the parameters of the module.
  Params params = 1 [(gogoproto.nullable) = false];
}

// Params defines the set of module parameters.
message Params {
  option (amino.name) = "macaroon/params";
  option (gogoproto.equal) = true;
  option (gogoproto.goproto_stringer) = false;

  // The list of methods
  Methods methods = 1;

  // The list of scopes
  Scopes scopes = 2;

  // The list of caveats
  Caveats caveats = 3;
}

// Methods defines the available DID methods
message Methods {
  option (amino.name) = "macaroon/methods";
  option (gogoproto.equal) = true;
  string default = 1;
  repeated string supported = 2;
}

// Scopes defines the set of scopes
message Scopes {
  option (amino.name) = "macaroon/scopes";
  option (gogoproto.equal) = true;
  string base = 1;
  repeated string supported = 2;
}

// Caveats defines the available caveats
message Caveats {
  option (amino.name) = "macaroon/caveats";
  option (gogoproto.equal) = true;

  repeated Caveat supported_first_party = 1;
  repeated Caveat supported_third_party = 2;
}

// Transactions defines the allowlist,denylist for transactions which can be
// broadcasted to the network with the Sonr DWN Signed macaroon.
message Transactions {
  option (amino.name) = "macaroon/transactions";
  option (gogoproto.equal) = true;

  repeated string allowlist = 1;
  repeated string denylist = 2;
}

message Caveat {
  repeated string scopes = 1;
  string caveat = 2;
  string description = 3;
}
