syntax = "proto3";

package lnrpc;

option go_package = "github.com/lightningnetwork/lnd/lnrpc";

/*
 * Comments in this file will be directly parsed into the API
 * Documentation as descriptions of the associated method, message, or field.
 * These descriptions should go right above the definition of the object, and
 * can be in either block or // comment format.
 *
 * An RPC method can be matched to an lncli command by placing a line in the
 * beginning of the description in exactly the following format:
 * lncli: `methodname`
 *
 * Failure to specify the exact name of the command will cause documentation
 * generation to fail.
 *
 * More information on how exactly the gRPC documentation is generated from
 * this proto file can be found here:
 * https://github.com/lightninglabs/lightning-api
 */

// State service is a always running service that exposes the current state of
// the wallet and RPC server.
service State {
    // SubscribeState subscribes to the state of the wallet. The current wallet
    // state will always be delivered immediately.
    rpc SubscribeState (SubscribeStateRequest)
        returns (stream SubscribeStateResponse);

    // GetState returns the current wallet state without streaming further
    // changes.
    rpc GetState (GetStateRequest) returns (GetStateResponse);
}

enum WalletState {
    // NON_EXISTING means that the wallet has not yet been initialized.
    NON_EXISTING = 0;

    // LOCKED means that the wallet is locked and requires a password to unlock.
    LOCKED = 1;

    // UNLOCKED means that the wallet was unlocked successfully, but RPC server
    // isn't ready.
    UNLOCKED = 2;

    // RPC_ACTIVE means that the lnd server is active but not fully ready for
    // calls.
    RPC_ACTIVE = 3;

    // SERVER_ACTIVE means that the lnd server is ready to accept calls.
    SERVER_ACTIVE = 4;

    // WAITING_TO_START means that node is waiting to become the leader in a
    // cluster and is not started yet.
    WAITING_TO_START = 255;
}

message SubscribeStateRequest {
}

message SubscribeStateResponse {
    WalletState state = 1;
}

message GetStateRequest {
}

message GetStateResponse {
    WalletState state = 1;
}