syntax = "proto3";
package vault.v1;

import "cosmos/msg/v1/msg.proto";
import "cosmos_proto/cosmos.proto";
import "gogoproto/gogo.proto";
import "google/api/annotations.proto";
import "vault/v1/genesis.proto";

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

// Msg defines the Msg service.
service Msg {
  option (cosmos.msg.v1.service) = true;
  // AllocateVault assembles a sqlite3 database in a local directory and returns
  // the CID of the database. this operation is called by services initiating a
  // controller registration.
  rpc AllocateVault(MsgAllocateVault) returns (MsgAllocateVaultResponse) {
    option (google.api.http).post = "/vault/v1/allocate";
  }

  // UpdateParams defines a governance operation for updating the parameters.
  //
  // Since: cosmos-sdk 0.47
  rpc UpdateParams(MsgUpdateParams) returns (MsgUpdateParamsResponse);
}

// MsgUpdateParams is the Msg/UpdateParams request type.
//
// Since: cosmos-sdk 0.47
message MsgUpdateParams {
  option (cosmos.msg.v1.signer) = "authority";

  // authority is the address of the governance account.
  string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];

  // params defines the parameters to update.
  //
  // NOTE: All parameters must be supplied.
  Params params = 2 [(gogoproto.nullable) = false];
}

// MsgUpdateParamsResponse defines the response structure for executing a
// MsgUpdateParams message.
//
// Since: cosmos-sdk 0.47
message MsgUpdateParamsResponse {}

// MsgAllocateVault is the message type for the AllocateVault RPC.
message MsgAllocateVault {
  option (cosmos.msg.v1.signer) = "authority";

  // authority is the address of the service account.
  string authority = 1 [(cosmos_proto.scalar) = "cosmos.AddressString"];

  // subject is a unique human-defined identifier to associate with the vault.
  string subject = 2;

  // origin is the origin of the request in wildcard form.
  string origin = 3;
}

// MsgAllocateVaultResponse is the response type for the AllocateVault RPC.
message MsgAllocateVaultResponse {
  // CID is the content identifier of the vault.
  string cid = 1;

  // ExpiryBlock is the block number at which the vault will expire.
  int64 expiry_block = 2;

  // RegistrationOptions is a json string of the
  // PublicKeyCredentialCreationOptions for WebAuthn
  string token = 3;

  // IsLocalhost is a flag to indicate if the vault is localhost
  bool localhost = 4;
}
