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

/// Defines the protocols used to interface with the core Fuchsia identity
/// system.
///
/// Clients may use these protocols to access, maintain, and authenticate the
/// Fuchsia accounts and personae defined by the identity system.
///
/// The entry point is the discoverable `AccountManager` protocol. This provides
/// access to all accounts of the device and should only be accessible to a
/// small number of privileged clients. `AccountManager` may be used to acquire
/// less powerful `Account` and `Persona` handles that may then be passed to
/// other parts of the system.
library fuchsia.identity.account;
