// autogenerated file

import * as grpc from 'grpc';
import { util } from 'protobufjs';
import Long = util.Long;
import * as events from 'events';
import { Session } from '../../../index.js';

import * as protobuf from '../../../contrib/google/protobuf';

/**
 * The canonical error codes for Google APIs.
 *
 *
 * Sometimes multiple error codes may apply.  Services should return
 * the most specific error code that applies.  For example, prefer
 * `OUT_OF_RANGE` over `FAILED_PRECONDITION` if both codes apply.
 * Similarly prefer `NOT_FOUND` or `ALREADY_EXISTS` over `FAILED_PRECONDITION`.
 */
export enum Code {
    /**
     * Not an error; returned on success
     *
     * HTTP Mapping: 200 OK
     */
    OK = 0,

    /**
     * The operation was cancelled, typically by the caller.
     *
     * HTTP Mapping: 499 Client Closed Request
     */
    CANCELLED = 1,

    /**
     * Unknown error.  For example, this error may be returned when
     * a `Status` value received from another address space belongs to
     * an error space that is not known in this address space.  Also
     * errors raised by APIs that do not return enough error information
     * may be converted to this error.
     *
     * HTTP Mapping: 500 Internal Server Error
     */
    UNKNOWN = 2,

    /**
     * The client specified an invalid argument.  Note that this differs
     * from `FAILED_PRECONDITION`.  `INVALID_ARGUMENT` indicates arguments
     * that are problematic regardless of the state of the system
     * (e.g., a malformed file name).
     *
     * HTTP Mapping: 400 Bad Request
     */
    INVALID_ARGUMENT = 3,

    /**
     * The deadline expired before the operation could complete. For operations
     * that change the state of the system, this error may be returned
     * even if the operation has completed successfully.  For example, a
     * successful response from a server could have been delayed long
     * enough for the deadline to expire.
     *
     * HTTP Mapping: 504 Gateway Timeout
     */
    DEADLINE_EXCEEDED = 4,

    /**
     * Some requested entity (e.g., file or directory) was not found.
     *
     * Note to server developers: if a request is denied for an entire class
     * of users, such as gradual feature rollout or undocumented whitelist,
     * `NOT_FOUND` may be used. If a request is denied for some users within
     * a class of users, such as user-based access control, `PERMISSION_DENIED`
     * must be used.
     *
     * HTTP Mapping: 404 Not Found
     */
    NOT_FOUND = 5,

    /**
     * The entity that a client attempted to create (e.g., file or directory)
     * already exists.
     *
     * HTTP Mapping: 409 Conflict
     */
    ALREADY_EXISTS = 6,

    /**
     * The caller does not have permission to execute the specified
     * operation. `PERMISSION_DENIED` must not be used for rejections
     * caused by exhausting some resource (use `RESOURCE_EXHAUSTED`
     * instead for those errors). `PERMISSION_DENIED` must not be
     * used if the caller can not be identified (use `UNAUTHENTICATED`
     * instead for those errors). This error code does not imply the
     * request is valid or the requested entity exists or satisfies
     * other pre-conditions.
     *
     * HTTP Mapping: 403 Forbidden
     */
    PERMISSION_DENIED = 7,

    /**
     * The request does not have valid authentication credentials for the
     * operation.
     *
     * HTTP Mapping: 401 Unauthorized
     */
    UNAUTHENTICATED = 16,

    /**
     * Some resource has been exhausted, perhaps a per-user quota, or
     * perhaps the entire file system is out of space.
     *
     * HTTP Mapping: 429 Too Many Requests
     */
    RESOURCE_EXHAUSTED = 8,

    /**
     * The operation was rejected because the system is not in a state
     * required for the operation's execution.  For example, the directory
     * to be deleted is non-empty, an rmdir operation is applied to
     * a non-directory, etc.
     *
     * Service implementors can use the following guidelines to decide
     * between `FAILED_PRECONDITION`, `ABORTED`, and `UNAVAILABLE`:
     * (a) Use `UNAVAILABLE` if the client can retry just the failing call.
     * (b) Use `ABORTED` if the client should retry at a higher level
     * (e.g., when a client-specified test-and-set fails, indicating the
     * client should restart a read-modify-write sequence).
     * (c) Use `FAILED_PRECONDITION` if the client should not retry until
     * the system state has been explicitly fixed.  E.g., if an "rmdir"
     * fails because the directory is non-empty, `FAILED_PRECONDITION`
     * should be returned since the client should not retry unless
     * the files are deleted from the directory.
     *
     * HTTP Mapping: 400 Bad Request
     */
    FAILED_PRECONDITION = 9,

    /**
     * The operation was aborted, typically due to a concurrency issue such as
     * a sequencer check failure or transaction abort.
     *
     * See the guidelines above for deciding between `FAILED_PRECONDITION`,
     * `ABORTED`, and `UNAVAILABLE`.
     *
     * HTTP Mapping: 409 Conflict
     */
    ABORTED = 10,

    /**
     * The operation was attempted past the valid range.  E.g., seeking or
     * reading past end-of-file.
     *
     * Unlike `INVALID_ARGUMENT`, this error indicates a problem that may
     * be fixed if the system state changes. For example, a 32-bit file
     * system will generate `INVALID_ARGUMENT` if asked to read at an
     * offset that is not in the range [0,2^32-1], but it will generate
     * `OUT_OF_RANGE` if asked to read from an offset past the current
     * file size.
     *
     * There is a fair bit of overlap between `FAILED_PRECONDITION` and
     * `OUT_OF_RANGE`.  We recommend using `OUT_OF_RANGE` (the more specific
     * error) when it applies so that callers who are iterating through
     * a space can easily look for an `OUT_OF_RANGE` error to detect when
     * they are done.
     *
     * HTTP Mapping: 400 Bad Request
     */
    OUT_OF_RANGE = 11,

    /**
     * The operation is not implemented or is not supported/enabled in this
     * service.
     *
     * HTTP Mapping: 501 Not Implemented
     */
    UNIMPLEMENTED = 12,

    /**
     * Internal errors.  This means that some invariants expected by the
     * underlying system have been broken.  This error code is reserved
     * for serious errors.
     *
     * HTTP Mapping: 500 Internal Server Error
     */
    INTERNAL = 13,

    /**
     * The service is currently unavailable.  This is most likely a
     * transient condition, which can be corrected by retrying with
     * a backoff.
     *
     * See the guidelines above for deciding between `FAILED_PRECONDITION`,
     * `ABORTED`, and `UNAVAILABLE`.
     *
     * HTTP Mapping: 503 Service Unavailable
     */
    UNAVAILABLE = 14,

    /**
     * Unrecoverable data loss or corruption.
     *
     * HTTP Mapping: 500 Internal Server Error
     */
    DATA_LOSS = 15,
}

/**
 * Describes when the clients can retry a failed request. Clients could ignore
 * the recommendation here or retry when this information is missing from error
 * responses.
 *
 * It's always recommended that clients should use exponential backoff when
 * retrying.
 *
 * Clients should wait until `retry_delay` amount of time has passed since
 * receiving the error response before retrying.  If retrying requests also
 * fail, clients should use an exponential backoff scheme to gradually increase
 * the delay between retries based on `retry_delay`, until either a maximum
 * number of retires have been reached or a maximum retry delay cap has been
 * reached.
 */
export interface RetryInfo {
    /**
     * Clients should wait at least this long between retrying the same request.
     */
    retryDelay?: protobuf.Duration;
}

/**
 * Describes additional debugging info.
 */
export interface DebugInfo {
    /**
     * The stack trace entries indicating where the error occurred.
     */
    stackEntries?: string[];

    /**
     * Additional debugging information provided by the server.
     */
    detail?: string;
}

/**
 * Describes how a quota check failed.
 *
 * For example if a daily limit was exceeded for the calling project,
 * a service could respond with a QuotaFailure detail containing the project
 * id and the description of the quota limit that was exceeded.  If the
 * calling project hasn't enabled the service in the developer console, then
 * a service could respond with the project id and set `service_disabled`
 * to true.
 *
 * Also see RetryDetail and Help types for other details about handling a
 * quota failure.
 */
export interface QuotaFailure {
    /**
     * Describes all quota violations.
     */
    violations?: QuotaFailure.Violation[];
}

export namespace QuotaFailure {
    /**
     * A message type used to describe a single quota violation.  For example, a
     * daily quota or a custom quota that was exceeded.
     */
    export interface Violation {
        /**
         * The subject on which the quota check failed.
         * For example, "clientip:<ip address of client>" or "project:<Google
         * developer project id>".
         */
        subject?: string;

        /**
         * A description of how the quota check failed. Clients can use this
         * description to find more about the quota configuration in the service's
         * public documentation, or find the relevant quota limit to adjust through
         * developer console.
         *
         * For example: "Service disabled" or "Daily Limit for read operations
         * exceeded".
         */
        description?: string;
    }
}

/**
 * Describes what preconditions have failed.
 *
 * For example, if an RPC failed because it required the Terms of Service to be
 * acknowledged, it could list the terms of service violation in the
 * PreconditionFailure message.
 */
export interface PreconditionFailure {
    /**
     * Describes all precondition violations.
     */
    violations?: PreconditionFailure.Violation[];
}

export namespace PreconditionFailure {
    /**
     * A message type used to describe a single precondition failure.
     */
    export interface Violation {
        /**
         * The type of PreconditionFailure. We recommend using a service-specific
         * enum type to define the supported precondition violation types. For
         * example, "TOS" for "Terms of Service violation".
         */
        type?: string;

        /**
         * The subject, relative to the type, that failed.
         * For example, "google.com/cloud" relative to the "TOS" type would
         * indicate which terms of service is being referenced.
         */
        subject?: string;

        /**
         * A description of how the precondition failed. Developers can use this
         * description to understand how to fix the failure.
         *
         * For example: "Terms of service not accepted".
         */
        description?: string;
    }
}

/**
 * Describes violations in a client request. This error type focuses on the
 * syntactic aspects of the request.
 */
export interface BadRequest {
    /**
     * Describes all violations in a client request.
     */
    fieldViolations?: BadRequest.FieldViolation[];
}

export namespace BadRequest {
    /**
     * A message type used to describe a single bad request field.
     */
    export interface FieldViolation {
        /**
         * A path leading to a field in the request body. The value will be a
         * sequence of dot-separated identifiers that identify a protocol buffer
         * field. E.g., "field_violations.field" would identify this field.
         */
        field?: string;

        /**
         * A description of why the request element is bad.
         */
        description?: string;
    }
}

/**
 * Contains metadata about the request that clients can attach when filing a bug
 * or providing other forms of feedback.
 */
export interface RequestInfo {
    /**
     * An opaque string that should only be interpreted by the service generating
     * it. For example, it can be used to identify requests in the service's logs.
     */
    requestId?: string;

    /**
     * Any data that was used to serve this request. For example, an encrypted
     * stack trace that can be sent back to the service provider for debugging.
     */
    servingData?: string;
}

/**
 * Describes the resource that is being accessed.
 */
export interface ResourceInfo {
    /**
     * A name for the type of resource being accessed, e.g. "sql table",
     * "cloud storage bucket", "file", "Google calendar"; or the type URL
     * of the resource: e.g. "type.googleapis.com/google.pubsub.v1.Topic".
     */
    resourceType?: string;

    /**
     * The name of the resource being accessed.  For example, a shared calendar
     * name: "example.com_4fghdhgsrgh@group.calendar.google.com", if the current
     * error is [google.rpc.Code.PERMISSION_DENIED][google.rpc.Code.PERMISSION_DENIED].
     */
    resourceName?: string;

    /**
     * The owner of the resource (optional).
     * For example, "user:<owner email>" or "project:<Google developer project
     * id>".
     */
    owner?: string;

    /**
     * Describes what error is encountered when accessing this resource.
     * For example, updating a cloud project may require the `writer` permission
     * on the developer console project.
     */
    description?: string;
}

/**
 * Provides links to documentation or for performing an out of band action.
 *
 * For example, if a quota check failed with an error indicating the calling
 * project hasn't enabled the accessed service, this can contain a URL pointing
 * directly to the right place in the developer console to flip the bit.
 */
export interface Help {
    /**
     * URL(s) pointing to additional information on handling the current error.
     */
    links?: Help.Link[];
}

export namespace Help {
    /**
     * Describes a URL link.
     */
    export interface Link {
        /**
         * Describes what the link offers.
         */
        description?: string;

        /**
         * The URL of the link.
         */
        url?: string;
    }
}

/**
 * Provides a localized error message that is safe to return to the user
 * which can be attached to an RPC error.
 */
export interface LocalizedMessage {
    /**
     * The locale used following the specification defined at
     * http://www.rfc-editor.org/rfc/bcp/bcp47.txt.
     * Examples are: "en-US", "fr-CH", "es-MX"
     */
    locale?: string;

    /**
     * The localized error message in the above locale.
     */
    message?: string;
}

/**
 * The `Status` type defines a logical error model that is suitable for different
 * programming environments, including REST APIs and RPC APIs. It is used by
 * [gRPC](https://github.com/grpc). The error model is designed to be:
 *
 * - Simple to use and understand for most users
 * - Flexible enough to meet unexpected needs
 *
 * # Overview
 *
 * The `Status` message contains three pieces of data: error code, error message,
 * and error details. The error code should be an enum value of
 * [google.rpc.Code][google.rpc.Code], but it may accept additional error codes if needed.  The
 * error message should be a developer-facing English message that helps
 * developers *understand* and *resolve* the error. If a localized user-facing
 * error message is needed, put the localized message in the error details or
 * localize it in the client. The optional error details may contain arbitrary
 * information about the error. There is a predefined set of error detail types
 * in the package `google.rpc` that can be used for common error conditions.
 *
 * # Language mapping
 *
 * The `Status` message is the logical representation of the error model, but it
 * is not necessarily the actual wire format. When the `Status` message is
 * exposed in different client libraries and different wire protocols, it can be
 * mapped differently. For example, it will likely be mapped to some exceptions
 * in Java, but more likely mapped to some error codes in C.
 *
 * # Other uses
 *
 * The error model and the `Status` message can be used in a variety of
 * environments, either with or without APIs, to provide a
 * consistent developer experience across different environments.
 *
 * Example uses of this error model include:
 *
 * - Partial errors. If a service needs to return partial errors to the client,
 * it may embed the `Status` in the normal response to indicate the partial
 * errors.
 *
 * - Workflow errors. A typical workflow has multiple steps. Each step may
 * have a `Status` message for error reporting.
 *
 * - Batch operations. If a client uses batch request and batch response, the
 * `Status` message should be used directly inside batch response, one for
 * each error sub-response.
 *
 * - Asynchronous operations. If an API call embeds asynchronous operation
 * results in its response, the status of those operations should be
 * represented directly using the `Status` message.
 *
 * - Logging. If some API errors are stored in logs, the message `Status` could
 * be used directly after any stripping needed for security/privacy reasons.
 */
export interface Status {
    /**
     * The status code, which should be an enum value of [google.rpc.Code][google.rpc.Code].
     */
    code?: Long;

    /**
     * A developer-facing error message, which should be in English. Any
     * user-facing error message should be localized and sent in the
     * [google.rpc.Status.details][google.rpc.Status.details] field, or localized by the client.
     */
    message?: string;

    /**
     * A list of messages that carry the error details.  There is a common set of
     * message types for APIs to use.
     */
    details?: protobuf.Any[];
}
