// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package browspr

import (
	"v.io/x/ref/services/identity"
	"v.io/x/ref/services/wspr/internal/account"
)

type StartMessage struct {
	CleanupBlessings      bool
	Identityd             string
	IdentitydBlessingRoot identity.BlessingRootResponse
	Proxy                 string
	NamespaceRoot         string
	LogLevel              int32
	LogModule             string
}

type AssociateAccountMessage struct {
	Account string
	Origin  string
	Caveats []account.Caveat
}

type CreateAccountMessage struct {
	Token string
}

type CleanupMessage struct {
	InstanceId int32
}

type OriginHasAccountMessage struct {
	Origin string
}

type GetAccountsMessage struct{}

type CreateInstanceMessage struct {
	InstanceId     int32
	Origin         string
	NamespaceRoots []string
	Proxy          string
}
