// 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.

library fuchsia.factory;
using fuchsia.io;

// NOTE: This API will be completely removed when components v2 is implemented.
// TODO(mbrunson): Add link to factory scaffolding library when available to
// allow easier transition to components v2 for clients.

/// This protocol is a base protocol for all providers of factory store
/// directories. It exposes a single method to allow clients to establish a
/// connection to a directory containing the relevant factory data. All files
/// surfaced by a component that implements FactoryStoreProvider (or any
/// protocol that depends on it) are expected to be validated for consistency
/// before being exposed to clients.
protocol FactoryStoreProvider {
    GetFactoryStore(request<fuchsia.io.Directory> dir);
};

/// This protocol exposes a method to connect to a directory containing
/// Cast-specific factory data: public certificates and keys for
/// authentication with Cast servers.
[Discoverable]
protocol CastCredentialsFactoryStoreProvider {
  compose FactoryStoreProvider;
};

/// This protocol exposes a method to connect to a directory containing
/// Widevine-specific factory data: public certificates and keys for
/// authentication with Widevine systems.
[Discoverable]
protocol WidevineFactoryStoreProvider {
  compose FactoryStoreProvider;
};

/// This protocol exposes a method to connect to a directory containing
/// PlayReady-specific factory data: public certificates and keys for
/// authentication with PlayReady systems.
[Discoverable]
protocol PlayReadyFactoryStoreProvider {
  compose FactoryStoreProvider;
};

/// This protocol  exposes a method to connect to a directory containing
/// Weave-specific factory data: public certificates, signing keys, and
/// identity files for interoperation with a Weave-based home-area-network.
[Discoverable]
protocol WeaveFactoryStoreProvider {
  compose FactoryStoreProvider;
};

/// This protocol exposes a method to connect to a directory containing
/// miscellaneous factory data such as tuning/calibration files, region-specific
/// audio files, factory process metadata files, and more. Any raw files not
/// covered by other FactoryStoreProviders or methods in fuchsia.hwinfo will
/// appear here.
[Discoverable]
protocol MiscFactoryStoreProvider {
  compose FactoryStoreProvider;
};
