// @generated by protoc-gen-es v1.10.0 with parameter "target=ts"
// @generated from file shared.proto (package api, syntax proto3)
/* eslint-disable */
// @ts-nocheck

import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf";
import { Message, proto3 } from "@bufbuild/protobuf";
import { Currency } from "./currencyCodes_pb.js";
import { Area, DimensionLess, Length, Volume, Weight } from "./unitOfMeasures_pb.js";

/**
 * List all data set in the model
 *
 * @generated from enum api.ModelDataSetEnum
 */
export enum ModelDataSetEnum {
  /**
   * @generated from enum value: ACTOR = 0;
   */
  ACTOR = 0,

  /**
   * @generated from enum value: EXECUTIONFLOW = 1;
   */
  EXECUTIONFLOW = 1,

  /**
   * @generated from enum value: HANDLINGUNIT = 2;
   */
  HANDLINGUNIT = 2,

  /**
   * @generated from enum value: ITEM = 3;
   */
  ITEM = 3,

  /**
   * @generated from enum value: METADATA = 4;
   */
  METADATA = 4,

  /**
   * @generated from enum value: MOVEMENT = 5;
   */
  MOVEMENT = 5,

  /**
   * @generated from enum value: ORDER = 6;
   */
  ORDER = 6,

  /**
   * @generated from enum value: PARTNER = 7;
   */
  PARTNER = 7,

  /**
   * @generated from enum value: STOCK = 8;
   */
  STOCK = 8,

  /**
   * @generated from enum value: TRACKING = 9;
   */
  TRACKING = 9,

  /**
   * @generated from enum value: CLAIM = 10;
   */
  CLAIM = 10,
}
// Retrieve enum metadata with: proto3.getEnumType(ModelDataSetEnum)
proto3.util.setEnumType(ModelDataSetEnum, "api.ModelDataSetEnum", [
  { no: 0, name: "ACTOR" },
  { no: 1, name: "EXECUTIONFLOW" },
  { no: 2, name: "HANDLINGUNIT" },
  { no: 3, name: "ITEM" },
  { no: 4, name: "METADATA" },
  { no: 5, name: "MOVEMENT" },
  { no: 6, name: "ORDER" },
  { no: 7, name: "PARTNER" },
  { no: 8, name: "STOCK" },
  { no: 9, name: "TRACKING" },
  { no: 10, name: "CLAIM" },
]);

/**
 * @generated from enum api.SeverityLevel
 */
export enum SeverityLevel {
  /**
   * @generated from enum value: SEVERITYLEVEL_UNKNOWN = 0;
   */
  SEVERITYLEVEL_UNKNOWN = 0,

  /**
   * Send info logs to client
   *
   * @generated from enum value: INFO = 1;
   */
  INFO = 1,

  /**
   * Send warning logs to client
   *
   * @generated from enum value: WARNING = 2;
   */
  WARNING = 2,

  /**
   * Send error logs to client
   *
   * @generated from enum value: ERROR = 3;
   */
  ERROR = 3,

  /**
   * Send security logs to client
   *
   * @generated from enum value: SECURITY = 4;
   */
  SECURITY = 4,
}
// Retrieve enum metadata with: proto3.getEnumType(SeverityLevel)
proto3.util.setEnumType(SeverityLevel, "api.SeverityLevel", [
  { no: 0, name: "SEVERITYLEVEL_UNKNOWN" },
  { no: 1, name: "INFO" },
  { no: 2, name: "WARNING" },
  { no: 3, name: "ERROR" },
  { no: 4, name: "SECURITY" },
]);

/**
 * @generated from enum api.ResponseStatus
 */
export enum ResponseStatus {
  /**
   * @generated from enum value: RESPONSESTATUS_UNKNOWN = 0;
   */
  RESPONSESTATUS_UNKNOWN = 0,

  /**
   * @generated from enum value: OK = 1;
   */
  OK = 1,

  /**
   * @generated from enum value: INTERNAL_ERROR = 2;
   */
  INTERNAL_ERROR = 2,

  /**
   * @generated from enum value: PAYLOAD_INCORRECT = 3;
   */
  PAYLOAD_INCORRECT = 3,

  /**
   * @generated from enum value: OBJECT_ID_NOT_FOUND = 4;
   */
  OBJECT_ID_NOT_FOUND = 4,

  /**
   * @generated from enum value: PROJECT_NOT_FOUND = 5;
   */
  PROJECT_NOT_FOUND = 5,

  /**
   * @generated from enum value: UNAUTHORIZED = 6;
   */
  UNAUTHORIZED = 6,

  /**
   * @generated from enum value: TIMEOUT = 7;
   */
  TIMEOUT = 7,
}
// Retrieve enum metadata with: proto3.getEnumType(ResponseStatus)
proto3.util.setEnumType(ResponseStatus, "api.ResponseStatus", [
  { no: 0, name: "RESPONSESTATUS_UNKNOWN" },
  { no: 1, name: "OK" },
  { no: 2, name: "INTERNAL_ERROR" },
  { no: 3, name: "PAYLOAD_INCORRECT" },
  { no: 4, name: "OBJECT_ID_NOT_FOUND" },
  { no: 5, name: "PROJECT_NOT_FOUND" },
  { no: 6, name: "UNAUTHORIZED" },
  { no: 7, name: "TIMEOUT" },
]);

/**
 * @generated from enum api.WorkflowTypeEnum
 */
export enum WorkflowTypeEnum {
  /**
   * @generated from enum value: CREATE_PROJECT = 0;
   */
  CREATE_PROJECT = 0,

  /**
   * @generated from enum value: DELETE_PROJECT = 1;
   */
  DELETE_PROJECT = 1,

  /**
   * @generated from enum value: DELETE_CORE = 2;
   */
  DELETE_CORE = 2,

  /**
   * @generated from enum value: DELETE_PARTNER_APP = 3;
   */
  DELETE_PARTNER_APP = 3,

  /**
   * @generated from enum value: DELETE_CONNECTION = 4;
   */
  DELETE_CONNECTION = 4,

  /**
   * @generated from enum value: BILLING = 5;
   */
  BILLING = 5,

  /**
   * @generated from enum value: EXTRACT_DATA = 6;
   */
  EXTRACT_DATA = 6,

  /**
   * @generated from enum value: STOP_FLINK = 7;
   */
  STOP_FLINK = 7,

  /**
   * @generated from enum value: START_FLINK = 8;
   */
  START_FLINK = 8,

  /**
   * @generated from enum value: STOP_IDLE_FLINK = 9;
   */
  STOP_IDLE_FLINK = 9,

  /**
   * @generated from enum value: OPTIMIZE_CLICKHOUSE = 10;
   */
  OPTIMIZE_CLICKHOUSE = 10,

  /**
   * @generated from enum value: WAKEUP_FLINK = 11;
   */
  WAKEUP_FLINK = 11,

  /**
   * @generated from enum value: CREATE_ORGANISATION = 12;
   */
  CREATE_ORGANISATION = 12,

  /**
   * @generated from enum value: DELETE_ORGANISATION = 13;
   */
  DELETE_ORGANISATION = 13,

  /**
   * @generated from enum value: PROVISION_PULSAR_DOMAIN = 14;
   */
  PROVISION_PULSAR_DOMAIN = 14,

  /**
   * @generated from enum value: DEPROVISION_PULSAR_DOMAIN = 15;
   */
  DEPROVISION_PULSAR_DOMAIN = 15,

  /**
   * @generated from enum value: PROVISION_PULSAR_ORGANISATION = 16;
   */
  PROVISION_PULSAR_ORGANISATION = 16,

  /**
   * @generated from enum value: DEPROVISION_PULSAR_ORGANISATION = 17;
   */
  DEPROVISION_PULSAR_ORGANISATION = 17,

  /**
   * @generated from enum value: RECOVER_DATA = 18;
   */
  RECOVER_DATA = 18,

  /**
   * @generated from enum value: DAILY_PROJECTS_OPERATIONS = 19;
   */
  DAILY_PROJECTS_OPERATIONS = 19,

  /**
   * @generated from enum value: HEALTH_CHECK_WORKFLOWS = 20;
   */
  HEALTH_CHECK_WORKFLOWS = 20,

  /**
   * @generated from enum value: EXTRACT_KPI_DATA = 21;
   */
  EXTRACT_KPI_DATA = 21,

  /**
   * @generated from enum value: UPDATE_MATERIALIZED_VIEW = 22;
   */
  UPDATE_MATERIALIZED_VIEW = 22,

  /**
   * @generated from enum value: PRUNE_DATA = 23;
   */
  PRUNE_DATA = 23,

  /**
   * @generated from enum value: CHECK_AND_LAUNCH_RECOVER_DATA = 24;
   */
  CHECK_AND_LAUNCH_RECOVER_DATA = 24,

  /**
   * @generated from enum value: SYNCHRONIZE_RULES_ON_GIT = 25;
   */
  SYNCHRONIZE_RULES_ON_GIT = 25,

  /**
   * @generated from enum value: ANONYMIZE_DATA = 26;
   */
  ANONYMIZE_DATA = 26,
}
// Retrieve enum metadata with: proto3.getEnumType(WorkflowTypeEnum)
proto3.util.setEnumType(WorkflowTypeEnum, "api.WorkflowTypeEnum", [
  { no: 0, name: "CREATE_PROJECT" },
  { no: 1, name: "DELETE_PROJECT" },
  { no: 2, name: "DELETE_CORE" },
  { no: 3, name: "DELETE_PARTNER_APP" },
  { no: 4, name: "DELETE_CONNECTION" },
  { no: 5, name: "BILLING" },
  { no: 6, name: "EXTRACT_DATA" },
  { no: 7, name: "STOP_FLINK" },
  { no: 8, name: "START_FLINK" },
  { no: 9, name: "STOP_IDLE_FLINK" },
  { no: 10, name: "OPTIMIZE_CLICKHOUSE" },
  { no: 11, name: "WAKEUP_FLINK" },
  { no: 12, name: "CREATE_ORGANISATION" },
  { no: 13, name: "DELETE_ORGANISATION" },
  { no: 14, name: "PROVISION_PULSAR_DOMAIN" },
  { no: 15, name: "DEPROVISION_PULSAR_DOMAIN" },
  { no: 16, name: "PROVISION_PULSAR_ORGANISATION" },
  { no: 17, name: "DEPROVISION_PULSAR_ORGANISATION" },
  { no: 18, name: "RECOVER_DATA" },
  { no: 19, name: "DAILY_PROJECTS_OPERATIONS" },
  { no: 20, name: "HEALTH_CHECK_WORKFLOWS" },
  { no: 21, name: "EXTRACT_KPI_DATA" },
  { no: 22, name: "UPDATE_MATERIALIZED_VIEW" },
  { no: 23, name: "PRUNE_DATA" },
  { no: 24, name: "CHECK_AND_LAUNCH_RECOVER_DATA" },
  { no: 25, name: "SYNCHRONIZE_RULES_ON_GIT" },
  { no: 26, name: "ANONYMIZE_DATA" },
]);

/**
 * @generated from enum api.ModuleWorkflowTypeEnum
 */
export enum ModuleWorkflowTypeEnum {
  /**
   * @generated from enum value: PRE_WORKFLOW = 0;
   */
  PRE_WORKFLOW = 0,

  /**
   * @generated from enum value: POST_WORKFLOW = 1;
   */
  POST_WORKFLOW = 1,
}
// Retrieve enum metadata with: proto3.getEnumType(ModuleWorkflowTypeEnum)
proto3.util.setEnumType(ModuleWorkflowTypeEnum, "api.ModuleWorkflowTypeEnum", [
  { no: 0, name: "PRE_WORKFLOW" },
  { no: 1, name: "POST_WORKFLOW" },
]);

/**
 * @generated from enum api.WorkflowSemaphore
 */
export enum WorkflowSemaphore {
  /**
   * @generated from enum value: WS_DB_OPERATION = 0;
   */
  WS_DB_OPERATION = 0,

  /**
   * @generated from enum value: WS_PROVISIONING = 1;
   */
  WS_PROVISIONING = 1,

  /**
   * @generated from enum value: WS_RECOVER_DATA = 2;
   */
  WS_RECOVER_DATA = 2,

  /**
   * @generated from enum value: WS_SYNCHRONIZE_RULES = 3;
   */
  WS_SYNCHRONIZE_RULES = 3,

  /**
   * @generated from enum value: WS_CHECK_AND_LAUNCH_RECOVER_DATA = 4;
   */
  WS_CHECK_AND_LAUNCH_RECOVER_DATA = 4,
}
// Retrieve enum metadata with: proto3.getEnumType(WorkflowSemaphore)
proto3.util.setEnumType(WorkflowSemaphore, "api.WorkflowSemaphore", [
  { no: 0, name: "WS_DB_OPERATION" },
  { no: 1, name: "WS_PROVISIONING" },
  { no: 2, name: "WS_RECOVER_DATA" },
  { no: 3, name: "WS_SYNCHRONIZE_RULES" },
  { no: 4, name: "WS_CHECK_AND_LAUNCH_RECOVER_DATA" },
]);

/**
 * @generated from enum api.SharePolicy
 */
export enum SharePolicy {
  /**
   * @generated from enum value: SHARE_POLICY_UNKNOWN = 0;
   */
  SHARE_POLICY_UNKNOWN = 0,

  /**
   * @generated from enum value: SHARE_POLICY_PRIVATE = 10;
   */
  SHARE_POLICY_PRIVATE = 10,

  /**
   * @generated from enum value: SHARE_POLICY_PUBLIC = 11;
   */
  SHARE_POLICY_PUBLIC = 11,

  /**
   * @generated from enum value: SHARE_POLICY_1DAY = 20;
   */
  SHARE_POLICY_1DAY = 20,

  /**
   * @generated from enum value: SHARE_POLICY_2DAYS = 21;
   */
  SHARE_POLICY_2DAYS = 21,

  /**
   * @generated from enum value: SHARE_POLICY_4DAYS = 22;
   */
  SHARE_POLICY_4DAYS = 22,

  /**
   * @generated from enum value: SHARE_POLICY_1WEEK = 23;
   */
  SHARE_POLICY_1WEEK = 23,

  /**
   * @generated from enum value: SHARE_POLICY_2WEEKS = 24;
   */
  SHARE_POLICY_2WEEKS = 24,

  /**
   * @generated from enum value: SHARE_POLICY_1MONTH = 25;
   */
  SHARE_POLICY_1MONTH = 25,
}
// Retrieve enum metadata with: proto3.getEnumType(SharePolicy)
proto3.util.setEnumType(SharePolicy, "api.SharePolicy", [
  { no: 0, name: "SHARE_POLICY_UNKNOWN" },
  { no: 10, name: "SHARE_POLICY_PRIVATE" },
  { no: 11, name: "SHARE_POLICY_PUBLIC" },
  { no: 20, name: "SHARE_POLICY_1DAY" },
  { no: 21, name: "SHARE_POLICY_2DAYS" },
  { no: 22, name: "SHARE_POLICY_4DAYS" },
  { no: 23, name: "SHARE_POLICY_1WEEK" },
  { no: 24, name: "SHARE_POLICY_2WEEKS" },
  { no: 25, name: "SHARE_POLICY_1MONTH" },
]);

/**
 * @generated from enum api.EntityType
 */
export enum EntityType {
  /**
   * @generated from enum value: ENTITY_TYPE_UNKNOWN = 0;
   */
  UNKNOWN = 0,

  /**
   * Trade
   *
   * @generated from enum value: ENTITY_TYPE_ACTOR = 1;
   */
  ACTOR = 1,

  /**
   * @generated from enum value: ENTITY_TYPE_EXECUTIONFLOW = 2;
   */
  EXECUTIONFLOW = 2,

  /**
   * @generated from enum value: ENTITY_TYPE_FAMILY = 3;
   */
  FAMILY = 3,

  /**
   * @generated from enum value: ENTITY_TYPE_HANDLINGUNIT = 4;
   */
  HANDLINGUNIT = 4,

  /**
   * @generated from enum value: ENTITY_TYPE_ITEM = 5;
   */
  ITEM = 5,

  /**
   * @generated from enum value: ENTITY_TYPE_ORDER = 6;
   */
  ORDER = 6,

  /**
   * @generated from enum value: ENTITY_TYPE_PARTNER = 7;
   */
  PARTNER = 7,

  /**
   * @generated from enum value: ENTITY_TYPE_STOCK = 8;
   */
  STOCK = 8,

  /**
   * @generated from enum value: ENTITY_TYPE_TRACKING = 9;
   */
  TRACKING = 9,

  /**
   * @generated from enum value: ENTITY_TYPE_MOVEMENT = 11;
   */
  MOVEMENT = 11,

  /**
   * Collab
   *
   * @generated from enum value: ENTITY_TYPE_CLAIM = 10;
   */
  CLAIM = 10,
}
// Retrieve enum metadata with: proto3.getEnumType(EntityType)
proto3.util.setEnumType(EntityType, "api.EntityType", [
  { no: 0, name: "ENTITY_TYPE_UNKNOWN" },
  { no: 1, name: "ENTITY_TYPE_ACTOR" },
  { no: 2, name: "ENTITY_TYPE_EXECUTIONFLOW" },
  { no: 3, name: "ENTITY_TYPE_FAMILY" },
  { no: 4, name: "ENTITY_TYPE_HANDLINGUNIT" },
  { no: 5, name: "ENTITY_TYPE_ITEM" },
  { no: 6, name: "ENTITY_TYPE_ORDER" },
  { no: 7, name: "ENTITY_TYPE_PARTNER" },
  { no: 8, name: "ENTITY_TYPE_STOCK" },
  { no: 9, name: "ENTITY_TYPE_TRACKING" },
  { no: 11, name: "ENTITY_TYPE_MOVEMENT" },
  { no: 10, name: "ENTITY_TYPE_CLAIM" },
]);

/**
 * @generated from enum api.ClaimEntityType
 */
export enum ClaimEntityType {
  /**
   * @generated from enum value: CLAIM_ENTITY_TYPE_UNKNOWN = 0;
   */
  UNKNOWN = 0,

  /**
   * Trade
   *
   * @generated from enum value: CLAIM_ENTITY_TYPE_ACTOR = 1;
   */
  ACTOR = 1,

  /**
   * @generated from enum value: CLAIM_ENTITY_TYPE_EXECUTIONFLOW = 2;
   */
  EXECUTIONFLOW = 2,

  /**
   * @generated from enum value: CLAIM_ENTITY_TYPE_HANDLINGUNIT = 3;
   */
  HANDLINGUNIT = 3,

  /**
   * @generated from enum value: CLAIM_ENTITY_TYPE_ORDER = 4;
   */
  ORDER = 4,

  /**
   * CLAIM_ENTITY_TYPE_TRACKING = 5;
   *
   * @generated from enum value: CLAIM_ENTITY_TYPE_MOVEMENT = 6;
   */
  MOVEMENT = 6,
}
// Retrieve enum metadata with: proto3.getEnumType(ClaimEntityType)
proto3.util.setEnumType(ClaimEntityType, "api.ClaimEntityType", [
  { no: 0, name: "CLAIM_ENTITY_TYPE_UNKNOWN" },
  { no: 1, name: "CLAIM_ENTITY_TYPE_ACTOR" },
  { no: 2, name: "CLAIM_ENTITY_TYPE_EXECUTIONFLOW" },
  { no: 3, name: "CLAIM_ENTITY_TYPE_HANDLINGUNIT" },
  { no: 4, name: "CLAIM_ENTITY_TYPE_ORDER" },
  { no: 6, name: "CLAIM_ENTITY_TYPE_MOVEMENT" },
]);

/**
 * @generated from enum api.ClaimSector
 */
export enum ClaimSector {
  /**
   * @generated from enum value: CLAIM_SECTOR_UNKNOWN = 0;
   */
  UNKNOWN = 0,

  /**
   * @generated from enum value: CLAIM_SECTOR_TRANSPORT = 1;
   */
  TRANSPORT = 1,

  /**
   * @generated from enum value: CLAIM_SECTOR_WAREHOUSING = 2;
   */
  WAREHOUSING = 2,

  /**
   * @generated from enum value: CLAIM_SECTOR_DELIVERY = 3;
   */
  DELIVERY = 3,

  /**
   * @generated from enum value: CLAIM_SECTOR_FINANCIAL = 4;
   */
  FINANCIAL = 4,

  /**
   * @generated from enum value: CLAIM_SECTOR_MISCELLANEOUS = 5;
   */
  MISCELLANEOUS = 5,
}
// Retrieve enum metadata with: proto3.getEnumType(ClaimSector)
proto3.util.setEnumType(ClaimSector, "api.ClaimSector", [
  { no: 0, name: "CLAIM_SECTOR_UNKNOWN" },
  { no: 1, name: "CLAIM_SECTOR_TRANSPORT" },
  { no: 2, name: "CLAIM_SECTOR_WAREHOUSING" },
  { no: 3, name: "CLAIM_SECTOR_DELIVERY" },
  { no: 4, name: "CLAIM_SECTOR_FINANCIAL" },
  { no: 5, name: "CLAIM_SECTOR_MISCELLANEOUS" },
]);

/**
 * Enum representing different statuses of a claim.
 * Includes a "category" for each status which is used to determine the color of the status in the UI.
 * For example : CLAIM_STATUS_START_NEW is in the "START" category and the status is "NEW".
 * A status should be "CLAIM_STATUS_<category>_<status>" with category and status being alphanumeric.
 *
 * @generated from enum api.ClaimStatus
 */
export enum ClaimStatus {
  /**
   * @generated from enum value: CLAIM_STATUS_UNKNOWN = 0;
   */
  UNKNOWN = 0,

  /**
   * @generated from enum value: CLAIM_STATUS_START_NEW = 100;
   */
  START_NEW = 100,

  /**
   * @generated from enum value: CLAIM_STATUS_START_TODO = 101;
   */
  START_TODO = 101,

  /**
   * @generated from enum value: CLAIM_STATUS_INPROGRESS_TREATMENT = 200;
   */
  INPROGRESS_TREATMENT = 200,

  /**
   * @generated from enum value: CLAIM_STATUS_INPROGRESS_RESOLUTION = 201;
   */
  INPROGRESS_RESOLUTION = 201,

  /**
   * @generated from enum value: CLAIM_STATUS_STANDBY_WAITINGFORINFO = 300;
   */
  STANDBY_WAITINGFORINFO = 300,

  /**
   * @generated from enum value: CLAIM_STATUS_STANDBY_PAUSE = 301;
   */
  STANDBY_PAUSE = 301,

  /**
   * @generated from enum value: CLAIM_STATUS_END_CANCELLED = 400;
   */
  END_CANCELLED = 400,

  /**
   * @generated from enum value: CLAIM_STATUS_END_SOLVED = 401;
   */
  END_SOLVED = 401,

  /**
   * @generated from enum value: CLAIM_STATUS_END_CLOSED = 402;
   */
  END_CLOSED = 402,

  /**
   * @generated from enum value: CLAIM_STATUS_END_REJECTED = 403;
   */
  END_REJECTED = 403,
}
// Retrieve enum metadata with: proto3.getEnumType(ClaimStatus)
proto3.util.setEnumType(ClaimStatus, "api.ClaimStatus", [
  { no: 0, name: "CLAIM_STATUS_UNKNOWN" },
  { no: 100, name: "CLAIM_STATUS_START_NEW" },
  { no: 101, name: "CLAIM_STATUS_START_TODO" },
  { no: 200, name: "CLAIM_STATUS_INPROGRESS_TREATMENT" },
  { no: 201, name: "CLAIM_STATUS_INPROGRESS_RESOLUTION" },
  { no: 300, name: "CLAIM_STATUS_STANDBY_WAITINGFORINFO" },
  { no: 301, name: "CLAIM_STATUS_STANDBY_PAUSE" },
  { no: 400, name: "CLAIM_STATUS_END_CANCELLED" },
  { no: 401, name: "CLAIM_STATUS_END_SOLVED" },
  { no: 402, name: "CLAIM_STATUS_END_CLOSED" },
  { no: 403, name: "CLAIM_STATUS_END_REJECTED" },
]);

/**
 * Enum representing the criticality levels of a claim.
 * The higher the criticality, the more important the claim is.
 *
 * @generated from enum api.ClaimCriticality
 */
export enum ClaimCriticality {
  /**
   * @generated from enum value: CLAIM_CRITICALITY_UNKNOWN = 0;
   */
  UNKNOWN = 0,

  /**
   * @generated from enum value: CLAIM_CRITICALITY_LOW = 10;
   */
  LOW = 10,

  /**
   * @generated from enum value: CLAIM_CRITICALITY_MEDIUM = 20;
   */
  MEDIUM = 20,

  /**
   * @generated from enum value: CLAIM_CRITICALITY_HIGH = 30;
   */
  HIGH = 30,

  /**
   * @generated from enum value: CLAIM_CRITICALITY_BLOCKING = 40;
   */
  BLOCKING = 40,
}
// Retrieve enum metadata with: proto3.getEnumType(ClaimCriticality)
proto3.util.setEnumType(ClaimCriticality, "api.ClaimCriticality", [
  { no: 0, name: "CLAIM_CRITICALITY_UNKNOWN" },
  { no: 10, name: "CLAIM_CRITICALITY_LOW" },
  { no: 20, name: "CLAIM_CRITICALITY_MEDIUM" },
  { no: 30, name: "CLAIM_CRITICALITY_HIGH" },
  { no: 40, name: "CLAIM_CRITICALITY_BLOCKING" },
]);

/**
 * @generated from enum api.EntityAdminPlatform
 */
export enum EntityAdminPlatform {
  /**
   * @generated from enum value: PROJECT_PLATFORM = 0;
   */
  PROJECT_PLATFORM = 0,

  /**
   * @generated from enum value: METRICS = 1;
   */
  METRICS = 1,

  /**
   * @generated from enum value: WAKEUP_ENTITY = 2;
   */
  WAKEUP_ENTITY = 2,

  /**
   * @generated from enum value: NOTIFICATION = 3;
   */
  NOTIFICATION = 3,
}
// Retrieve enum metadata with: proto3.getEnumType(EntityAdminPlatform)
proto3.util.setEnumType(EntityAdminPlatform, "api.EntityAdminPlatform", [
  { no: 0, name: "PROJECT_PLATFORM" },
  { no: 1, name: "METRICS" },
  { no: 2, name: "WAKEUP_ENTITY" },
  { no: 3, name: "NOTIFICATION" },
]);

/**
 * @generated from enum api.RecoverType
 */
export enum RecoverType {
  /**
   * @generated from enum value: RECOVER_OPENSEARCH = 0;
   */
  RECOVER_OPENSEARCH = 0,

  /**
   * @generated from enum value: RECOVER_CLICKHOUSE = 1;
   */
  RECOVER_CLICKHOUSE = 1,

  /**
   * @generated from enum value: RECOVER_ALL = 2;
   */
  RECOVER_ALL = 2,
}
// Retrieve enum metadata with: proto3.getEnumType(RecoverType)
proto3.util.setEnumType(RecoverType, "api.RecoverType", [
  { no: 0, name: "RECOVER_OPENSEARCH" },
  { no: 1, name: "RECOVER_CLICKHOUSE" },
  { no: 2, name: "RECOVER_ALL" },
]);

/**
 * Enum representing the different types of resources which can be created in the platform.
 *
 * @generated from enum api.ResourceType
 */
export enum ResourceType {
  /**
   * @generated from enum value: RESOURCE_TYPE_UNKNOWN = 0;
   */
  UNKNOWN = 0,

  /**
   * @generated from enum value: RESOURCE_TYPE_PLATFORM = 10;
   */
  PLATFORM = 10,

  /**
   * @generated from enum value: RESOURCE_TYPE_ORGANISATION = 20;
   */
  ORGANISATION = 20,

  /**
   * @generated from enum value: RESOURCE_TYPE_PROJECT = 30;
   */
  PROJECT = 30,

  /**
   * @generated from enum value: RESOURCE_TYPE_PARTNERAPP = 40;
   */
  PARTNERAPP = 40,

  /**
   * @generated from enum value: RESOURCE_TYPE_CONNECTION = 50;
   */
  CONNECTION = 50,

  /**
   * @generated from enum value: RESOURCE_TYPE_ATTACHMENTTYPE = 60;
   */
  ATTACHMENTTYPE = 60,

  /**
   * @generated from enum value: RESOURCE_TYPE_CLAIMTYPE = 70;
   */
  CLAIMTYPE = 70,
}
// Retrieve enum metadata with: proto3.getEnumType(ResourceType)
proto3.util.setEnumType(ResourceType, "api.ResourceType", [
  { no: 0, name: "RESOURCE_TYPE_UNKNOWN" },
  { no: 10, name: "RESOURCE_TYPE_PLATFORM" },
  { no: 20, name: "RESOURCE_TYPE_ORGANISATION" },
  { no: 30, name: "RESOURCE_TYPE_PROJECT" },
  { no: 40, name: "RESOURCE_TYPE_PARTNERAPP" },
  { no: 50, name: "RESOURCE_TYPE_CONNECTION" },
  { no: 60, name: "RESOURCE_TYPE_ATTACHMENTTYPE" },
  { no: 70, name: "RESOURCE_TYPE_CLAIMTYPE" },
]);

/**
 * Deprecated Header for all requests on project resource
 *
 * @generated from message api.RequestHeader
 */
export class RequestHeader extends Message<RequestHeader> {
  /**
   * Identifier of the project
   *
   * @generated from field: string Project = 1;
   */
  Project = "";

  constructor(data?: PartialMessage<RequestHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RequestHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Project", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RequestHeader {
    return new RequestHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RequestHeader {
    return new RequestHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RequestHeader {
    return new RequestHeader().fromJsonString(jsonString, options);
  }

  static equals(a: RequestHeader | PlainMessage<RequestHeader> | undefined, b: RequestHeader | PlainMessage<RequestHeader> | undefined): boolean {
    return proto3.util.equals(RequestHeader, a, b);
  }
}

/**
 * Header for all requests on project resources
 *
 * @generated from message api.RequestProjectHeader
 */
export class RequestProjectHeader extends Message<RequestProjectHeader> {
  /**
   * Identifier of the project
   *
   * @generated from field: string ProjectID = 1;
   */
  ProjectID = "";

  /**
   * DateTime ActualDate = 2 ;
   *
   * @generated from field: string CorrelationID = 3;
   */
  CorrelationID = "";

  /**
   * @generated from field: string TechnicalID = 4;
   */
  TechnicalID = "";

  constructor(data?: PartialMessage<RequestProjectHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RequestProjectHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ProjectID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "CorrelationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "TechnicalID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RequestProjectHeader {
    return new RequestProjectHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RequestProjectHeader {
    return new RequestProjectHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RequestProjectHeader {
    return new RequestProjectHeader().fromJsonString(jsonString, options);
  }

  static equals(a: RequestProjectHeader | PlainMessage<RequestProjectHeader> | undefined, b: RequestProjectHeader | PlainMessage<RequestProjectHeader> | undefined): boolean {
    return proto3.util.equals(RequestProjectHeader, a, b);
  }
}

/**
 * Header for all requests on organisation resources
 *
 * @generated from message api.RequestOrganisationHeader
 */
export class RequestOrganisationHeader extends Message<RequestOrganisationHeader> {
  /**
   * Identifier of the organisation
   *
   * @generated from field: string OrganisationID = 1;
   */
  OrganisationID = "";

  /**
   * @generated from field: string CorrelationID = 2;
   */
  CorrelationID = "";

  /**
   * @generated from field: string TechnicalID = 3;
   */
  TechnicalID = "";

  constructor(data?: PartialMessage<RequestOrganisationHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RequestOrganisationHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "OrganisationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "CorrelationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "TechnicalID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RequestOrganisationHeader {
    return new RequestOrganisationHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RequestOrganisationHeader {
    return new RequestOrganisationHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RequestOrganisationHeader {
    return new RequestOrganisationHeader().fromJsonString(jsonString, options);
  }

  static equals(a: RequestOrganisationHeader | PlainMessage<RequestOrganisationHeader> | undefined, b: RequestOrganisationHeader | PlainMessage<RequestOrganisationHeader> | undefined): boolean {
    return proto3.util.equals(RequestOrganisationHeader, a, b);
  }
}

/**
 * Header for all requests on bucket resources
 *
 * @generated from message api.RequestBucketHeader
 */
export class RequestBucketHeader extends Message<RequestBucketHeader> {
  /**
   * Identifier of the bucket
   *
   * @generated from field: string BucketID = 1;
   */
  BucketID = "";

  /**
   * @generated from field: string CorrelationID = 2;
   */
  CorrelationID = "";

  /**
   * @generated from field: string TechnicalID = 3;
   */
  TechnicalID = "";

  constructor(data?: PartialMessage<RequestBucketHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RequestBucketHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "BucketID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "CorrelationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "TechnicalID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RequestBucketHeader {
    return new RequestBucketHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RequestBucketHeader {
    return new RequestBucketHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RequestBucketHeader {
    return new RequestBucketHeader().fromJsonString(jsonString, options);
  }

  static equals(a: RequestBucketHeader | PlainMessage<RequestBucketHeader> | undefined, b: RequestBucketHeader | PlainMessage<RequestBucketHeader> | undefined): boolean {
    return proto3.util.equals(RequestBucketHeader, a, b);
  }
}

/**
 * Header for all requests on partnerApp resources
 *
 * @generated from message api.RequestPartnerAppHeader
 */
export class RequestPartnerAppHeader extends Message<RequestPartnerAppHeader> {
  /**
   * Identifier of the partnerApp
   *
   * @generated from field: string PartnerAppID = 1;
   */
  PartnerAppID = "";

  /**
   * @generated from field: string CorrelationID = 2;
   */
  CorrelationID = "";

  /**
   * @generated from field: string TechnicalID = 3;
   */
  TechnicalID = "";

  constructor(data?: PartialMessage<RequestPartnerAppHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RequestPartnerAppHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "PartnerAppID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "CorrelationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "TechnicalID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RequestPartnerAppHeader {
    return new RequestPartnerAppHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RequestPartnerAppHeader {
    return new RequestPartnerAppHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RequestPartnerAppHeader {
    return new RequestPartnerAppHeader().fromJsonString(jsonString, options);
  }

  static equals(a: RequestPartnerAppHeader | PlainMessage<RequestPartnerAppHeader> | undefined, b: RequestPartnerAppHeader | PlainMessage<RequestPartnerAppHeader> | undefined): boolean {
    return proto3.util.equals(RequestPartnerAppHeader, a, b);
  }
}

/**
 * Header for all requests on connection resources
 *
 * @generated from message api.RequestConnectionHeader
 */
export class RequestConnectionHeader extends Message<RequestConnectionHeader> {
  /**
   * Identifier of the connection
   *
   * @generated from field: string ConnectionID = 1;
   */
  ConnectionID = "";

  /**
   * @generated from field: string CorrelationID = 2;
   */
  CorrelationID = "";

  /**
   * @generated from field: string TechnicalID = 3;
   */
  TechnicalID = "";

  constructor(data?: PartialMessage<RequestConnectionHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RequestConnectionHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ConnectionID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "CorrelationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "TechnicalID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RequestConnectionHeader {
    return new RequestConnectionHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RequestConnectionHeader {
    return new RequestConnectionHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RequestConnectionHeader {
    return new RequestConnectionHeader().fromJsonString(jsonString, options);
  }

  static equals(a: RequestConnectionHeader | PlainMessage<RequestConnectionHeader> | undefined, b: RequestConnectionHeader | PlainMessage<RequestConnectionHeader> | undefined): boolean {
    return proto3.util.equals(RequestConnectionHeader, a, b);
  }
}

/**
 * Header for all requests on attachment type resources
 *
 * @generated from message api.RequestAttachmentTypeHeader
 */
export class RequestAttachmentTypeHeader extends Message<RequestAttachmentTypeHeader> {
  /**
   * Identifier of the attachment type
   *
   * @generated from field: string AttachmentTypeID = 1;
   */
  AttachmentTypeID = "";

  /**
   * @generated from field: string CorrelationID = 2;
   */
  CorrelationID = "";

  /**
   * @generated from field: string TechnicalID = 3;
   */
  TechnicalID = "";

  constructor(data?: PartialMessage<RequestAttachmentTypeHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RequestAttachmentTypeHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "AttachmentTypeID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "CorrelationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "TechnicalID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RequestAttachmentTypeHeader {
    return new RequestAttachmentTypeHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RequestAttachmentTypeHeader {
    return new RequestAttachmentTypeHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RequestAttachmentTypeHeader {
    return new RequestAttachmentTypeHeader().fromJsonString(jsonString, options);
  }

  static equals(a: RequestAttachmentTypeHeader | PlainMessage<RequestAttachmentTypeHeader> | undefined, b: RequestAttachmentTypeHeader | PlainMessage<RequestAttachmentTypeHeader> | undefined): boolean {
    return proto3.util.equals(RequestAttachmentTypeHeader, a, b);
  }
}

/**
 * Header for all response messages
 *
 * @generated from message api.ResponseHeader
 */
export class ResponseHeader extends Message<ResponseHeader> {
  /**
   * Identifier of the project
   *
   * @generated from field: string ProjectID = 1;
   */
  ProjectID = "";

  /**
   * @generated from field: string CorrelationID = 2;
   */
  CorrelationID = "";

  /**
   * @generated from field: string TechnicalID = 3;
   */
  TechnicalID = "";

  constructor(data?: PartialMessage<ResponseHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ResponseHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ProjectID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "CorrelationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "TechnicalID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ResponseHeader {
    return new ResponseHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ResponseHeader {
    return new ResponseHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ResponseHeader {
    return new ResponseHeader().fromJsonString(jsonString, options);
  }

  static equals(a: ResponseHeader | PlainMessage<ResponseHeader> | undefined, b: ResponseHeader | PlainMessage<ResponseHeader> | undefined): boolean {
    return proto3.util.equals(ResponseHeader, a, b);
  }
}

/**
 * Header for all response messages
 *
 * @generated from message api.AttachmentTypeResponseHeader
 */
export class AttachmentTypeResponseHeader extends Message<AttachmentTypeResponseHeader> {
  /**
   * Identifier of the AttachmentType
   *
   * @generated from field: string AttachmentTypeID = 1;
   */
  AttachmentTypeID = "";

  /**
   * @generated from field: string CorrelationID = 2;
   */
  CorrelationID = "";

  /**
   * @generated from field: string TechnicalID = 3;
   */
  TechnicalID = "";

  constructor(data?: PartialMessage<AttachmentTypeResponseHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.AttachmentTypeResponseHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "AttachmentTypeID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "CorrelationID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "TechnicalID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): AttachmentTypeResponseHeader {
    return new AttachmentTypeResponseHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): AttachmentTypeResponseHeader {
    return new AttachmentTypeResponseHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): AttachmentTypeResponseHeader {
    return new AttachmentTypeResponseHeader().fromJsonString(jsonString, options);
  }

  static equals(a: AttachmentTypeResponseHeader | PlainMessage<AttachmentTypeResponseHeader> | undefined, b: AttachmentTypeResponseHeader | PlainMessage<AttachmentTypeResponseHeader> | undefined): boolean {
    return proto3.util.equals(AttachmentTypeResponseHeader, a, b);
  }
}

/**
 * Header for all query messages
 *
 * @generated from message api.QueryHeader
 */
export class QueryHeader extends Message<QueryHeader> {
  /**
   * @generated from field: string Project = 1;
   */
  Project = "";

  /**
   * @generated from field: string PagingState = 3;
   */
  PagingState = "";

  /**
   * @generated from field: string Limit = 4;
   */
  Limit = "";

  /**
   * @generated from field: bool LocalizedLabel = 5;
   */
  LocalizedLabel = false;

  constructor(data?: PartialMessage<QueryHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QueryHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Project", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "PagingState", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "Limit", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "LocalizedLabel", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QueryHeader {
    return new QueryHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QueryHeader {
    return new QueryHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QueryHeader {
    return new QueryHeader().fromJsonString(jsonString, options);
  }

  static equals(a: QueryHeader | PlainMessage<QueryHeader> | undefined, b: QueryHeader | PlainMessage<QueryHeader> | undefined): boolean {
    return proto3.util.equals(QueryHeader, a, b);
  }
}

/**
 * Header for all query project messages
 *
 * @generated from message api.QueryProjectHeader
 */
export class QueryProjectHeader extends Message<QueryProjectHeader> {
  /**
   * Identifier of the project
   *
   * @generated from field: string ProjectID = 1;
   */
  ProjectID = "";

  /**
   * Number of elements displayed
   *
   * @generated from field: string PagingState = 3;
   */
  PagingState = "";

  /**
   * Number of additional elements to display
   *
   * @generated from field: string Limit = 4;
   */
  Limit = "";

  /**
   * Return the message in the user's language
   *
   * @generated from field: bool LocalizedLabel = 5;
   */
  LocalizedLabel = false;

  constructor(data?: PartialMessage<QueryProjectHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QueryProjectHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ProjectID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "PagingState", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "Limit", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "LocalizedLabel", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QueryProjectHeader {
    return new QueryProjectHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QueryProjectHeader {
    return new QueryProjectHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QueryProjectHeader {
    return new QueryProjectHeader().fromJsonString(jsonString, options);
  }

  static equals(a: QueryProjectHeader | PlainMessage<QueryProjectHeader> | undefined, b: QueryProjectHeader | PlainMessage<QueryProjectHeader> | undefined): boolean {
    return proto3.util.equals(QueryProjectHeader, a, b);
  }
}

/**
 * @generated from message api.ResultHeader
 */
export class ResultHeader extends Message<ResultHeader> {
  /**
   * Number of elements displayed
   *
   * @generated from field: string PagingState = 1;
   */
  PagingState = "";

  constructor(data?: PartialMessage<ResultHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ResultHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "PagingState", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ResultHeader {
    return new ResultHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ResultHeader {
    return new ResultHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ResultHeader {
    return new ResultHeader().fromJsonString(jsonString, options);
  }

  static equals(a: ResultHeader | PlainMessage<ResultHeader> | undefined, b: ResultHeader | PlainMessage<ResultHeader> | undefined): boolean {
    return proto3.util.equals(ResultHeader, a, b);
  }
}

/**
 * Header for all command messages
 *
 * @generated from message api.CommandHeader
 */
export class CommandHeader extends Message<CommandHeader> {
  /**
   * @generated from field: string ActionCommand = 1;
   */
  ActionCommand = "";

  /**
   * @generated from field: api.DateTime CommandTS = 2;
   */
  CommandTS?: DateTime;

  /**
   * @generated from field: string Project = 3;
   */
  Project = "";

  /**
   * @generated from field: string FromDomain = 4;
   */
  FromDomain = "";

  /**
   * @generated from field: string FromObject = 5;
   */
  FromObject = "";

  /**
   * @generated from field: string FromRule = 6;
   */
  FromRule = "";

  /**
   * @generated from field: string FromEvent = 7;
   */
  FromEvent = "";

  /**
   * @generated from field: string FromAuthor = 8;
   */
  FromAuthor = "";

  constructor(data?: PartialMessage<CommandHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.CommandHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ActionCommand", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "CommandTS", kind: "message", T: DateTime },
    { no: 3, name: "Project", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "FromDomain", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "FromObject", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 6, name: "FromRule", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 7, name: "FromEvent", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 8, name: "FromAuthor", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CommandHeader {
    return new CommandHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CommandHeader {
    return new CommandHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CommandHeader {
    return new CommandHeader().fromJsonString(jsonString, options);
  }

  static equals(a: CommandHeader | PlainMessage<CommandHeader> | undefined, b: CommandHeader | PlainMessage<CommandHeader> | undefined): boolean {
    return proto3.util.equals(CommandHeader, a, b);
  }
}

/**
 * Header for all event messages 
 *
 * @generated from message api.EventHeader
 */
export class EventHeader extends Message<EventHeader> {
  /**
   * @generated from field: string InputEvent = 1;
   */
  InputEvent = "";

  /**
   * @generated from field: api.DateTime EventTS = 2;
   */
  EventTS?: DateTime;

  /**
   * @generated from field: string Project = 3;
   */
  Project = "";

  /**
   * @generated from field: string Author = 4;
   */
  Author = "";

  /**
   * @generated from field: string EventID = 5;
   */
  EventID = "";

  /**
   * @generated from field: string CreatedBy = 6;
   */
  CreatedBy = "";

  constructor(data?: PartialMessage<EventHeader>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.EventHeader";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "InputEvent", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "EventTS", kind: "message", T: DateTime },
    { no: 3, name: "Project", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "Author", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "EventID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 6, name: "CreatedBy", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): EventHeader {
    return new EventHeader().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): EventHeader {
    return new EventHeader().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): EventHeader {
    return new EventHeader().fromJsonString(jsonString, options);
  }

  static equals(a: EventHeader | PlainMessage<EventHeader> | undefined, b: EventHeader | PlainMessage<EventHeader> | undefined): boolean {
    return proto3.util.equals(EventHeader, a, b);
  }
}

/**
 * Generic Object structures
 *
 * @generated from message api.EntityID
 */
export class EntityID extends Message<EntityID> {
  /**
   * Your identifier
   *
   * @generated from field: string RefID = 2;
   */
  RefID = "";

  /**
   * Your effective date. If your event triggers a status change, this date will be used into the status ActualDate
   *
   * @generated from field: api.DateTime RefDate = 3;
   */
  RefDate?: DateTime;

  constructor(data?: PartialMessage<EntityID>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.EntityID";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 2, name: "RefID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "RefDate", kind: "message", T: DateTime },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): EntityID {
    return new EntityID().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): EntityID {
    return new EntityID().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): EntityID {
    return new EntityID().fromJsonString(jsonString, options);
  }

  static equals(a: EntityID | PlainMessage<EntityID> | undefined, b: EntityID | PlainMessage<EntityID> | undefined): boolean {
    return proto3.util.equals(EntityID, a, b);
  }
}

/**
 * Specific Stock ID struct
 *
 * @generated from message api.StockID
 */
export class StockID extends Message<StockID> {
  /**
   * Your effective date
   *
   * @generated from field: api.DateTime RefDate = 3;
   */
  RefDate?: DateTime;

  constructor(data?: PartialMessage<StockID>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StockID";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 3, name: "RefDate", kind: "message", T: DateTime },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StockID {
    return new StockID().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StockID {
    return new StockID().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StockID {
    return new StockID().fromJsonString(jsonString, options);
  }

  static equals(a: StockID | PlainMessage<StockID> | undefined, b: StockID | PlainMessage<StockID> | undefined): boolean {
    return proto3.util.equals(StockID, a, b);
  }
}

/**
 * Specific ID struct when No refid
 *
 * @generated from message api.NoID
 */
export class NoID extends Message<NoID> {
  /**
   * Your effective date
   *
   * @generated from field: api.DateTime RefDate = 3;
   */
  RefDate?: DateTime;

  constructor(data?: PartialMessage<NoID>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.NoID";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 3, name: "RefDate", kind: "message", T: DateTime },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): NoID {
    return new NoID().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): NoID {
    return new NoID().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): NoID {
    return new NoID().fromJsonString(jsonString, options);
  }

  static equals(a: NoID | PlainMessage<NoID> | undefined, b: NoID | PlainMessage<NoID> | undefined): boolean {
    return proto3.util.equals(NoID, a, b);
  }
}

/**
 * @generated from message api.GenericObject
 */
export class GenericObject extends Message<GenericObject> {
  /**
   * @generated from field: api.EventHeader LastEventHeader = 1;
   */
  LastEventHeader?: EventHeader;

  /**
   * @generated from field: api.EntityID ID = 2;
   */
  ID?: EntityID;

  /**
   * @generated from field: api.GenericObjectPayload Payload = 3;
   */
  Payload?: GenericObjectPayload;

  constructor(data?: PartialMessage<GenericObject>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.GenericObject";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "LastEventHeader", kind: "message", T: EventHeader },
    { no: 2, name: "ID", kind: "message", T: EntityID },
    { no: 3, name: "Payload", kind: "message", T: GenericObjectPayload },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GenericObject {
    return new GenericObject().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GenericObject {
    return new GenericObject().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GenericObject {
    return new GenericObject().fromJsonString(jsonString, options);
  }

  static equals(a: GenericObject | PlainMessage<GenericObject> | undefined, b: GenericObject | PlainMessage<GenericObject> | undefined): boolean {
    return proto3.util.equals(GenericObject, a, b);
  }
}

/**
 * @generated from message api.GenericObjectPayload
 */
export class GenericObjectPayload extends Message<GenericObjectPayload> {
  constructor(data?: PartialMessage<GenericObjectPayload>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.GenericObjectPayload";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GenericObjectPayload {
    return new GenericObjectPayload().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GenericObjectPayload {
    return new GenericObjectPayload().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GenericObjectPayload {
    return new GenericObjectPayload().fromJsonString(jsonString, options);
  }

  static equals(a: GenericObjectPayload | PlainMessage<GenericObjectPayload> | undefined, b: GenericObjectPayload | PlainMessage<GenericObjectPayload> | undefined): boolean {
    return proto3.util.equals(GenericObjectPayload, a, b);
  }
}

/**
 * Common structures
 *
 * @generated from message api.DateTime
 */
export class DateTime extends Message<DateTime> {
  /**
   * UTC date/time in <a href='https://en.wikipedia.org/wiki/ISO_8601'>ISO 8601</a> format
   *
   * @generated from field: string DateTime = 1;
   */
  DateTime = "";

  /**
   * Time zone from where the author emits the event in this <a href='https://en.wikipedia.org/wiki/List_of_tz_database_time_zones'>format</a>
   *
   * @generated from field: string AuthorTimeZone = 2;
   */
  AuthorTimeZone = "";

  constructor(data?: PartialMessage<DateTime>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.DateTime";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "DateTime", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "AuthorTimeZone", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DateTime {
    return new DateTime().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DateTime {
    return new DateTime().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DateTime {
    return new DateTime().fromJsonString(jsonString, options);
  }

  static equals(a: DateTime | PlainMessage<DateTime> | undefined, b: DateTime | PlainMessage<DateTime> | undefined): boolean {
    return proto3.util.equals(DateTime, a, b);
  }
}

/**
 * @generated from message api.ValueType
 */
export class ValueType extends Message<ValueType> {
  /**
   * @generated from oneof api.ValueType.ValueType
   */
  ValueType: {
    /**
     * @generated from field: string String = 1;
     */
    value: string;
    case: "String";
  } | {
    /**
     * @generated from field: int64 Int = 2;
     */
    value: bigint;
    case: "Int";
  } | {
    /**
     * @generated from field: float Float = 3;
     */
    value: number;
    case: "Float";
  } | {
    /**
     * @generated from field: bool Bool = 4;
     */
    value: boolean;
    case: "Bool";
  } | {
    /**
     * @generated from field: api.DateTime Timestamp = 5;
     */
    value: DateTime;
    case: "Timestamp";
  } | { case: undefined; value?: undefined } = { case: undefined };

  constructor(data?: PartialMessage<ValueType>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ValueType";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "String", kind: "scalar", T: 9 /* ScalarType.STRING */, oneof: "ValueType" },
    { no: 2, name: "Int", kind: "scalar", T: 3 /* ScalarType.INT64 */, oneof: "ValueType" },
    { no: 3, name: "Float", kind: "scalar", T: 2 /* ScalarType.FLOAT */, oneof: "ValueType" },
    { no: 4, name: "Bool", kind: "scalar", T: 8 /* ScalarType.BOOL */, oneof: "ValueType" },
    { no: 5, name: "Timestamp", kind: "message", T: DateTime, oneof: "ValueType" },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ValueType {
    return new ValueType().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ValueType {
    return new ValueType().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ValueType {
    return new ValueType().fromJsonString(jsonString, options);
  }

  static equals(a: ValueType | PlainMessage<ValueType> | undefined, b: ValueType | PlainMessage<ValueType> | undefined): boolean {
    return proto3.util.equals(ValueType, a, b);
  }
}

/**
 * @generated from message api.Amount
 */
export class Amount extends Message<Amount> {
  /**
   * @generated from field: float Value = 1;
   */
  Value = 0;

  /**
   * <a href='https://en.wikipedia.org/wiki/ISO_4217'>ISO 4217</a> currency code
   *
   * @generated from field: api.Currency Currency = 2;
   */
  Currency = Currency.XXX;

  constructor(data?: PartialMessage<Amount>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.Amount";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Value", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
    { no: 2, name: "Currency", kind: "enum", T: proto3.getEnumType(Currency) },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Amount {
    return new Amount().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Amount {
    return new Amount().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Amount {
    return new Amount().fromJsonString(jsonString, options);
  }

  static equals(a: Amount | PlainMessage<Amount> | undefined, b: Amount | PlainMessage<Amount> | undefined): boolean {
    return proto3.util.equals(Amount, a, b);
  }
}

/**
 * @generated from message api.QuantityLength
 */
export class QuantityLength extends Message<QuantityLength> {
  /**
   * @generated from field: float Value = 1;
   */
  Value = 0;

  /**
   * @generated from field: api.Length Unit = 2;
   */
  Unit = Length.LENGTH_UNKNOWN;

  constructor(data?: PartialMessage<QuantityLength>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantityLength";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Value", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
    { no: 2, name: "Unit", kind: "enum", T: proto3.getEnumType(Length) },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantityLength {
    return new QuantityLength().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantityLength {
    return new QuantityLength().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantityLength {
    return new QuantityLength().fromJsonString(jsonString, options);
  }

  static equals(a: QuantityLength | PlainMessage<QuantityLength> | undefined, b: QuantityLength | PlainMessage<QuantityLength> | undefined): boolean {
    return proto3.util.equals(QuantityLength, a, b);
  }
}

/**
 * @generated from message api.QuantityVolume
 */
export class QuantityVolume extends Message<QuantityVolume> {
  /**
   * @generated from field: float Value = 1;
   */
  Value = 0;

  /**
   * @generated from field: api.Volume Unit = 2;
   */
  Unit = Volume.VOLUME_UNKNOWN;

  constructor(data?: PartialMessage<QuantityVolume>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantityVolume";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Value", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
    { no: 2, name: "Unit", kind: "enum", T: proto3.getEnumType(Volume) },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantityVolume {
    return new QuantityVolume().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantityVolume {
    return new QuantityVolume().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantityVolume {
    return new QuantityVolume().fromJsonString(jsonString, options);
  }

  static equals(a: QuantityVolume | PlainMessage<QuantityVolume> | undefined, b: QuantityVolume | PlainMessage<QuantityVolume> | undefined): boolean {
    return proto3.util.equals(QuantityVolume, a, b);
  }
}

/**
 * @generated from message api.QuantityWeight
 */
export class QuantityWeight extends Message<QuantityWeight> {
  /**
   * @generated from field: float Value = 1;
   */
  Value = 0;

  /**
   * @generated from field: api.Weight Unit = 2;
   */
  Unit = Weight.WEIGHT_UNKNOWN;

  constructor(data?: PartialMessage<QuantityWeight>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantityWeight";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Value", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
    { no: 2, name: "Unit", kind: "enum", T: proto3.getEnumType(Weight) },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantityWeight {
    return new QuantityWeight().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantityWeight {
    return new QuantityWeight().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantityWeight {
    return new QuantityWeight().fromJsonString(jsonString, options);
  }

  static equals(a: QuantityWeight | PlainMessage<QuantityWeight> | undefined, b: QuantityWeight | PlainMessage<QuantityWeight> | undefined): boolean {
    return proto3.util.equals(QuantityWeight, a, b);
  }
}

/**
 * @generated from message api.QuantityArea
 */
export class QuantityArea extends Message<QuantityArea> {
  /**
   * @generated from field: float Value = 1;
   */
  Value = 0;

  /**
   * @generated from field: api.Area Unit = 2;
   */
  Unit = Area.AREA_UNKNOWN;

  constructor(data?: PartialMessage<QuantityArea>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantityArea";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Value", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
    { no: 2, name: "Unit", kind: "enum", T: proto3.getEnumType(Area) },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantityArea {
    return new QuantityArea().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantityArea {
    return new QuantityArea().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantityArea {
    return new QuantityArea().fromJsonString(jsonString, options);
  }

  static equals(a: QuantityArea | PlainMessage<QuantityArea> | undefined, b: QuantityArea | PlainMessage<QuantityArea> | undefined): boolean {
    return proto3.util.equals(QuantityArea, a, b);
  }
}

/**
 * @generated from message api.QuantityUnit
 */
export class QuantityUnit extends Message<QuantityUnit> {
  /**
   * @generated from field: float Value = 1;
   */
  Value = 0;

  /**
   * @generated from field: api.DimensionLess Unit = 2;
   */
  Unit = DimensionLess.DIMENSIONLESS_UNKNOWN;

  constructor(data?: PartialMessage<QuantityUnit>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.QuantityUnit";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Value", kind: "scalar", T: 2 /* ScalarType.FLOAT */ },
    { no: 2, name: "Unit", kind: "enum", T: proto3.getEnumType(DimensionLess) },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): QuantityUnit {
    return new QuantityUnit().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): QuantityUnit {
    return new QuantityUnit().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): QuantityUnit {
    return new QuantityUnit().fromJsonString(jsonString, options);
  }

  static equals(a: QuantityUnit | PlainMessage<QuantityUnit> | undefined, b: QuantityUnit | PlainMessage<QuantityUnit> | undefined): boolean {
    return proto3.util.equals(QuantityUnit, a, b);
  }
}

/**
 * @generated from message api.DomainDescriptionRequest
 */
export class DomainDescriptionRequest extends Message<DomainDescriptionRequest> {
  constructor(data?: PartialMessage<DomainDescriptionRequest>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.DomainDescriptionRequest";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DomainDescriptionRequest {
    return new DomainDescriptionRequest().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DomainDescriptionRequest {
    return new DomainDescriptionRequest().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DomainDescriptionRequest {
    return new DomainDescriptionRequest().fromJsonString(jsonString, options);
  }

  static equals(a: DomainDescriptionRequest | PlainMessage<DomainDescriptionRequest> | undefined, b: DomainDescriptionRequest | PlainMessage<DomainDescriptionRequest> | undefined): boolean {
    return proto3.util.equals(DomainDescriptionRequest, a, b);
  }
}

/**
 * @generated from message api.DomainDescriptionResponse
 */
export class DomainDescriptionResponse extends Message<DomainDescriptionResponse> {
  /**
   * @generated from field: api.ResponseHeader Header = 1;
   */
  Header?: ResponseHeader;

  /**
   * @generated from field: api.DomainDescription Payload = 2;
   */
  Payload?: DomainDescription;

  constructor(data?: PartialMessage<DomainDescriptionResponse>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.DomainDescriptionResponse";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Header", kind: "message", T: ResponseHeader },
    { no: 2, name: "Payload", kind: "message", T: DomainDescription },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DomainDescriptionResponse {
    return new DomainDescriptionResponse().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DomainDescriptionResponse {
    return new DomainDescriptionResponse().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DomainDescriptionResponse {
    return new DomainDescriptionResponse().fromJsonString(jsonString, options);
  }

  static equals(a: DomainDescriptionResponse | PlainMessage<DomainDescriptionResponse> | undefined, b: DomainDescriptionResponse | PlainMessage<DomainDescriptionResponse> | undefined): boolean {
    return proto3.util.equals(DomainDescriptionResponse, a, b);
  }
}

/**
 * @generated from message api.DomainDescription
 */
export class DomainDescription extends Message<DomainDescription> {
  /**
   * @generated from field: string Name = 1;
   */
  Name = "";

  /**
   * @generated from field: repeated api.ObjectDescription ObjectDescription = 2;
   */
  ObjectDescription: ObjectDescription[] = [];

  constructor(data?: PartialMessage<DomainDescription>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.DomainDescription";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "ObjectDescription", kind: "message", T: ObjectDescription, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DomainDescription {
    return new DomainDescription().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DomainDescription {
    return new DomainDescription().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DomainDescription {
    return new DomainDescription().fromJsonString(jsonString, options);
  }

  static equals(a: DomainDescription | PlainMessage<DomainDescription> | undefined, b: DomainDescription | PlainMessage<DomainDescription> | undefined): boolean {
    return proto3.util.equals(DomainDescription, a, b);
  }
}

/**
 * @generated from message api.ObjectDescription
 */
export class ObjectDescription extends Message<ObjectDescription> {
  /**
   * @generated from field: string Name = 1;
   */
  Name = "";

  /**
   * @generated from field: repeated api.ObjectAction ApiAction = 2;
   */
  ApiAction: ObjectAction[] = [];

  /**
   * @generated from field: string PayloadJSON = 3;
   */
  PayloadJSON = "";

  /**
   * @generated from field: repeated api.ObjectAction ApiInput = 4;
   */
  ApiInput: ObjectAction[] = [];

  /**
   * @generated from field: repeated api.ObjectAction ApiQuery = 5;
   */
  ApiQuery: ObjectAction[] = [];

  constructor(data?: PartialMessage<ObjectDescription>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ObjectDescription";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "ApiAction", kind: "message", T: ObjectAction, repeated: true },
    { no: 3, name: "PayloadJSON", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "ApiInput", kind: "message", T: ObjectAction, repeated: true },
    { no: 5, name: "ApiQuery", kind: "message", T: ObjectAction, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ObjectDescription {
    return new ObjectDescription().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ObjectDescription {
    return new ObjectDescription().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ObjectDescription {
    return new ObjectDescription().fromJsonString(jsonString, options);
  }

  static equals(a: ObjectDescription | PlainMessage<ObjectDescription> | undefined, b: ObjectDescription | PlainMessage<ObjectDescription> | undefined): boolean {
    return proto3.util.equals(ObjectDescription, a, b);
  }
}

/**
 * @generated from message api.ObjectAction
 */
export class ObjectAction extends Message<ObjectAction> {
  /**
   * @generated from field: string Name = 1;
   */
  Name = "";

  /**
   * @generated from field: string JsonTemplate = 2;
   */
  JsonTemplate = "";

  constructor(data?: PartialMessage<ObjectAction>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ObjectAction";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Name", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "JsonTemplate", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ObjectAction {
    return new ObjectAction().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ObjectAction {
    return new ObjectAction().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ObjectAction {
    return new ObjectAction().fromJsonString(jsonString, options);
  }

  static equals(a: ObjectAction | PlainMessage<ObjectAction> | undefined, b: ObjectAction | PlainMessage<ObjectAction> | undefined): boolean {
    return proto3.util.equals(ObjectAction, a, b);
  }
}

/**
 * *
 * Message to store metadata definition
 *
 * @generated from message api.MetadataElement
 */
export class MetadataElement extends Message<MetadataElement> {
  /**
   * Key of the Metadata and Segmentation of the project
   *
   * @generated from field: string Key = 1;
   */
  Key = "";

  /**
   * Value of the Metadata and Segmentation of the project
   *
   * @generated from field: api.ValueType Value = 2;
   */
  Value?: ValueType;

  constructor(data?: PartialMessage<MetadataElement>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.MetadataElement";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Key", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Value", kind: "message", T: ValueType },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MetadataElement {
    return new MetadataElement().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): MetadataElement {
    return new MetadataElement().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): MetadataElement {
    return new MetadataElement().fromJsonString(jsonString, options);
  }

  static equals(a: MetadataElement | PlainMessage<MetadataElement> | undefined, b: MetadataElement | PlainMessage<MetadataElement> | undefined): boolean {
    return proto3.util.equals(MetadataElement, a, b);
  }
}

/**
 *
 * Simple filter structure for Find query
 *
 * @generated from message api.SimpleFilter
 */
export class SimpleFilter extends Message<SimpleFilter> {
  /**
   * Filter path
   *
   * @generated from field: string Attribute = 1;
   */
  Attribute = "";

  /**
   * Use this parameter if only one value
   *
   * @generated from field: string Value = 2;
   */
  Value = "";

  /**
   * Use this parameter if more than one value
   *
   * @generated from field: repeated string Values = 3;
   */
  Values: string[] = [];

  /**
   * Allowed values : \"\", \"not\"
   *
   * @generated from field: string Operator = 4;
   */
  Operator = "";

  /**
   * Metadata's key
   *
   * @generated from field: string CombinedID = 5;
   */
  CombinedID = "";

  constructor(data?: PartialMessage<SimpleFilter>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.SimpleFilter";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Attribute", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Value", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Values", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 4, name: "Operator", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "CombinedID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SimpleFilter {
    return new SimpleFilter().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SimpleFilter {
    return new SimpleFilter().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SimpleFilter {
    return new SimpleFilter().fromJsonString(jsonString, options);
  }

  static equals(a: SimpleFilter | PlainMessage<SimpleFilter> | undefined, b: SimpleFilter | PlainMessage<SimpleFilter> | undefined): boolean {
    return proto3.util.equals(SimpleFilter, a, b);
  }
}

/**
 *
 * Combined filter structure for Find query
 *
 * @generated from message api.CombinedFilter
 */
export class CombinedFilter extends Message<CombinedFilter> {
  /**
   * @generated from field: string Path = 1;
   */
  Path = "";

  /**
   * Simple filter structure for Find query
   *
   * @generated from field: repeated api.SimpleFilter simpleFilters = 2;
   */
  simpleFilters: SimpleFilter[] = [];

  /**
   * Range filter structure for Find query
   *
   * @generated from field: repeated api.RangeFilter rangeFilters = 3;
   */
  rangeFilters: RangeFilter[] = [];

  /**
   * @generated from field: string CombinedID = 4;
   */
  CombinedID = "";

  constructor(data?: PartialMessage<CombinedFilter>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.CombinedFilter";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Path", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "simpleFilters", kind: "message", T: SimpleFilter, repeated: true },
    { no: 3, name: "rangeFilters", kind: "message", T: RangeFilter, repeated: true },
    { no: 4, name: "CombinedID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CombinedFilter {
    return new CombinedFilter().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CombinedFilter {
    return new CombinedFilter().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CombinedFilter {
    return new CombinedFilter().fromJsonString(jsonString, options);
  }

  static equals(a: CombinedFilter | PlainMessage<CombinedFilter> | undefined, b: CombinedFilter | PlainMessage<CombinedFilter> | undefined): boolean {
    return proto3.util.equals(CombinedFilter, a, b);
  }
}

/**
 *
 * Range filter structure for Find query
 *
 * @generated from message api.RangeFilter
 */
export class RangeFilter extends Message<RangeFilter> {
  /**
   * Filter path
   *
   * @generated from field: string Attribute = 1;
   */
  Attribute = "";

  /**
   * Maximum value
   *
   * @generated from field: string valueLt = 2;
   */
  valueLt = "";

  /**
   * Minimum value
   *
   * @generated from field: string valueGt = 3;
   */
  valueGt = "";

  /**
   * Metadata's key
   *
   * @generated from field: string CombinedID = 4;
   */
  CombinedID = "";

  constructor(data?: PartialMessage<RangeFilter>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.RangeFilter";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Attribute", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "valueLt", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "valueGt", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "CombinedID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): RangeFilter {
    return new RangeFilter().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): RangeFilter {
    return new RangeFilter().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): RangeFilter {
    return new RangeFilter().fromJsonString(jsonString, options);
  }

  static equals(a: RangeFilter | PlainMessage<RangeFilter> | undefined, b: RangeFilter | PlainMessage<RangeFilter> | undefined): boolean {
    return proto3.util.equals(RangeFilter, a, b);
  }
}

/**
 *
 * Block filter structure for Find query, each element (SimpleFilter, RangeFilter & BlockFilter) is an "AND" part of the query
 *
 * @generated from message api.BlockFilter
 */
export class BlockFilter extends Message<BlockFilter> {
  /**
   * Simple filter structure for Find query
   *
   * @generated from field: repeated api.SimpleFilter simpleFilters = 1;
   */
  simpleFilters: SimpleFilter[] = [];

  /**
   * Range filter structure for Find query
   *
   * @generated from field: repeated api.RangeFilter rangeFilters = 2;
   */
  rangeFilters: RangeFilter[] = [];

  /**
   * block filter structure for Find query
   *
   * @generated from field: repeated api.BlockFilter BlockFilters = 3;
   */
  BlockFilters: BlockFilter[] = [];

  constructor(data?: PartialMessage<BlockFilter>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.BlockFilter";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "simpleFilters", kind: "message", T: SimpleFilter, repeated: true },
    { no: 2, name: "rangeFilters", kind: "message", T: RangeFilter, repeated: true },
    { no: 3, name: "BlockFilters", kind: "message", T: BlockFilter, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): BlockFilter {
    return new BlockFilter().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): BlockFilter {
    return new BlockFilter().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): BlockFilter {
    return new BlockFilter().fromJsonString(jsonString, options);
  }

  static equals(a: BlockFilter | PlainMessage<BlockFilter> | undefined, b: BlockFilter | PlainMessage<BlockFilter> | undefined): boolean {
    return proto3.util.equals(BlockFilter, a, b);
  }
}

/**
 *
 * MatchField structure, for FindMatching query
 *
 * @generated from message api.MatchField
 */
export class MatchField extends Message<MatchField> {
  /**
   * Filter path
   *
   * @generated from field: string Attribute = 1;
   */
  Attribute = "";

  /**
   * Filter path for metadata filter
   *
   * @generated from field: string AttributeCombined = 2;
   */
  AttributeCombined = "";

  /**
   * Metadata's key
   *
   * @generated from field: string CombinedID = 3;
   */
  CombinedID = "";

  constructor(data?: PartialMessage<MatchField>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.MatchField";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Attribute", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "AttributeCombined", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "CombinedID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MatchField {
    return new MatchField().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): MatchField {
    return new MatchField().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): MatchField {
    return new MatchField().fromJsonString(jsonString, options);
  }

  static equals(a: MatchField | PlainMessage<MatchField> | undefined, b: MatchField | PlainMessage<MatchField> | undefined): boolean {
    return proto3.util.equals(MatchField, a, b);
  }
}

/**
 *
 * Standard structure, having an attribute and a list of values 
 *
 * @generated from message api.MatchFieldResult
 */
export class MatchFieldResult extends Message<MatchFieldResult> {
  /**
   * @generated from field: string Attribute = 1;
   */
  Attribute = "";

  /**
   * @generated from field: repeated string Values = 2;
   */
  Values: string[] = [];

  constructor(data?: PartialMessage<MatchFieldResult>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.MatchFieldResult";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Attribute", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Values", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MatchFieldResult {
    return new MatchFieldResult().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): MatchFieldResult {
    return new MatchFieldResult().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): MatchFieldResult {
    return new MatchFieldResult().fromJsonString(jsonString, options);
  }

  static equals(a: MatchFieldResult | PlainMessage<MatchFieldResult> | undefined, b: MatchFieldResult | PlainMessage<MatchFieldResult> | undefined): boolean {
    return proto3.util.equals(MatchFieldResult, a, b);
  }
}

/**
 *
 * structure containing error key & value
 *
 * @generated from message api.ErrorDetail
 */
export class ErrorDetail extends Message<ErrorDetail> {
  /**
   * @generated from field: string Key = 1;
   */
  Key = "";

  /**
   * @generated from field: string Value = 2;
   */
  Value = "";

  constructor(data?: PartialMessage<ErrorDetail>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ErrorDetail";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Key", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Value", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ErrorDetail {
    return new ErrorDetail().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ErrorDetail {
    return new ErrorDetail().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ErrorDetail {
    return new ErrorDetail().fromJsonString(jsonString, options);
  }

  static equals(a: ErrorDetail | PlainMessage<ErrorDetail> | undefined, b: ErrorDetail | PlainMessage<ErrorDetail> | undefined): boolean {
    return proto3.util.equals(ErrorDetail, a, b);
  }
}

/**
 *
 * Error message to be found in all rpc responses
 *
 * @generated from message api.Errors
 */
export class Errors extends Message<Errors> {
  /**
   * n1error code (xxyyzzzz)
   *
   * @generated from field: string ErrorCode = 1;
   */
  ErrorCode = "";

  /**
   * generated error code, for debugging purposes(in logs)
   *
   * @generated from field: string ErrorTrace = 2;
   */
  ErrorTrace = "";

  /**
   * @generated from field: repeated api.ErrorDetail ErrorDetails = 3;
   */
  ErrorDetails: ErrorDetail[] = [];

  /**
   * Entity
   *
   * @generated from field: string ContextType = 4;
   */
  ContextType = "";

  /**
   * Method grpc
   *
   * @generated from field: string ContextProcess = 5;
   */
  ContextProcess = "";

  /**
   * Payload request
   *
   * @generated from field: string ContextPayload = 6;
   */
  ContextPayload = "";

  constructor(data?: PartialMessage<Errors>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.Errors";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ErrorCode", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "ErrorTrace", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "ErrorDetails", kind: "message", T: ErrorDetail, repeated: true },
    { no: 4, name: "ContextType", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "ContextProcess", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 6, name: "ContextPayload", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Errors {
    return new Errors().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Errors {
    return new Errors().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Errors {
    return new Errors().fromJsonString(jsonString, options);
  }

  static equals(a: Errors | PlainMessage<Errors> | undefined, b: Errors | PlainMessage<Errors> | undefined): boolean {
    return proto3.util.equals(Errors, a, b);
  }
}

/**
 * @generated from message api.ParamElement
 */
export class ParamElement extends Message<ParamElement> {
  /**
   * @generated from field: string Key = 1;
   */
  Key = "";

  /**
   * @generated from field: api.ValueType Value = 3;
   */
  Value?: ValueType;

  constructor(data?: PartialMessage<ParamElement>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ParamElement";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Key", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Value", kind: "message", T: ValueType },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ParamElement {
    return new ParamElement().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ParamElement {
    return new ParamElement().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ParamElement {
    return new ParamElement().fromJsonString(jsonString, options);
  }

  static equals(a: ParamElement | PlainMessage<ParamElement> | undefined, b: ParamElement | PlainMessage<ParamElement> | undefined): boolean {
    return proto3.util.equals(ParamElement, a, b);
  }
}

/**
 * @generated from message api.LabelStructure
 */
export class LabelStructure extends Message<LabelStructure> {
  /**
   * Code of the message
   *
   * @generated from field: string Code = 1;
   */
  Code = "";

  /**
   * Label of the message
   *
   * @generated from field: string Label = 2;
   */
  Label = "";

  /**
   * Map of parameter to be put/replaced in the error label
   * Parameters for label
   *
   * @generated from field: repeated api.ParamElement Params = 3;
   */
  Params: ParamElement[] = [];

  constructor(data?: PartialMessage<LabelStructure>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.LabelStructure";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Code", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Label", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Params", kind: "message", T: ParamElement, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): LabelStructure {
    return new LabelStructure().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): LabelStructure {
    return new LabelStructure().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): LabelStructure {
    return new LabelStructure().fromJsonString(jsonString, options);
  }

  static equals(a: LabelStructure | PlainMessage<LabelStructure> | undefined, b: LabelStructure | PlainMessage<LabelStructure> | undefined): boolean {
    return proto3.util.equals(LabelStructure, a, b);
  }
}

/**
 * CoreEndpoint represents the REST webservices of Reflex Platform
 *
 * @generated from message api.CoreEndpoint
 */
export class CoreEndpoint extends Message<CoreEndpoint> {
  /**
   * RestEndpoint is the URL to access REST webservices of Platform.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access REST services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string RestEndpoint = 1;
   */
  RestEndpoint = "";

  /**
   * GrpcInputEndpoint is the URL to access GRPC Input services of Platform.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcInputEndpoint = 2;
   */
  GrpcInputEndpoint = "";

  /**
   * GrpcQueryEndpoint is the URL to access GRPC Query services of Platform.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcQueryEndpoint = 3;
   */
  GrpcQueryEndpoint = "";

  /**
   * GrpcGcsEndpoint is the URL to access GRPC Gcs services of Platform.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcGcsEndpoint = 4;
   */
  GrpcGcsEndpoint = "";

  /**
   * GrpcLoggerEndpoint is the URL to access GRPC Logger services of Platform.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcLoggerEndpoint = 5;
   */
  GrpcLoggerEndpoint = "";

  /**
   * GrpcProjectModelEndpoint is the URL to access GRPC ProjectModel services of Platform which notably manages the metadata.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcProjectModelEndpoint = 6;
   */
  GrpcProjectModelEndpoint = "";

  /**
   * GrpcCoreCollabInputEndpoint is the URL to access GRPC Input services of Platform.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcCoreCollabInputEndpoint = 7;
   */
  GrpcCoreCollabInputEndpoint = "";

  /**
   * GrpcCoreCollabQueryEndpoint is the URL to access GRPC Query services of Platform.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcCoreCollabQueryEndpoint = 8;
   */
  GrpcCoreCollabQueryEndpoint = "";

  /**
   * GrpcCoreClaimTypeEndpoint is the URL to access GRPC Query services of Platform.
   * It is expected to include protocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcCoreClaimTypeEndpoint = 9;
   */
  GrpcCoreClaimTypeEndpoint = "";

  constructor(data?: PartialMessage<CoreEndpoint>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.CoreEndpoint";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "RestEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "GrpcInputEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "GrpcQueryEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "GrpcGcsEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "GrpcLoggerEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 6, name: "GrpcProjectModelEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 7, name: "GrpcCoreCollabInputEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 8, name: "GrpcCoreCollabQueryEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 9, name: "GrpcCoreClaimTypeEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CoreEndpoint {
    return new CoreEndpoint().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CoreEndpoint {
    return new CoreEndpoint().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CoreEndpoint {
    return new CoreEndpoint().fromJsonString(jsonString, options);
  }

  static equals(a: CoreEndpoint | PlainMessage<CoreEndpoint> | undefined, b: CoreEndpoint | PlainMessage<CoreEndpoint> | undefined): boolean {
    return proto3.util.equals(CoreEndpoint, a, b);
  }
}

/**
 * IntegrationEndpoint represents the different endpoints of the integration Platform
 * These services are notably used to manage integration processes / pipelines.
 *
 * @generated from message api.IntegrationEndpoint
 */
export class IntegrationEndpoint extends Message<IntegrationEndpoint> {
  /**
   * RestEndpoint is the URL to access REST webservices of Integration.
   * It is expected to include protocol.
   * the protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access REST services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string RestEndpoint = 1;
   */
  RestEndpoint = "";

  /**
   * GrpcEndpoint is the URL to access GRPC services of Integration
   * It is expected to include protocol and a port.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access gRPC services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string GrpcEndpoint = 2;
   */
  GrpcEndpoint = "";

  constructor(data?: PartialMessage<IntegrationEndpoint>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.IntegrationEndpoint";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "RestEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "GrpcEndpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): IntegrationEndpoint {
    return new IntegrationEndpoint().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): IntegrationEndpoint {
    return new IntegrationEndpoint().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): IntegrationEndpoint {
    return new IntegrationEndpoint().fromJsonString(jsonString, options);
  }

  static equals(a: IntegrationEndpoint | PlainMessage<IntegrationEndpoint> | undefined, b: IntegrationEndpoint | PlainMessage<IntegrationEndpoint> | undefined): boolean {
    return proto3.util.equals(IntegrationEndpoint, a, b);
  }
}

/**
 * StorageEndpoint represents the REST webservices of Google Cloud Storage
 * These REST services are notably used to upload and retrieve files from the storage.
 * In order to authenticate to it, a STS token is required and can be obtained from the CoreEndpoint /api.GcsApi/GetBucketSTS API.
 *
 * @generated from message api.StorageEndpoint
 */
export class StorageEndpoint extends Message<StorageEndpoint> {
  /**
   * Endpoint is the URL to access the REST webservices.
   * It is expected to include portocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access REST services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string Endpoint = 1;
   */
  Endpoint = "";

  /**
   * Bucket is the name of the bucket associated to this partner app.
   * It should look like <organisationID>/<projectID>/<partnerAppID>.
   *
   * @generated from field: string Bucket = 2;
   */
  Bucket = "";

  constructor(data?: PartialMessage<StorageEndpoint>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StorageEndpoint";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Endpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Bucket", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StorageEndpoint {
    return new StorageEndpoint().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StorageEndpoint {
    return new StorageEndpoint().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StorageEndpoint {
    return new StorageEndpoint().fromJsonString(jsonString, options);
  }

  static equals(a: StorageEndpoint | PlainMessage<StorageEndpoint> | undefined, b: StorageEndpoint | PlainMessage<StorageEndpoint> | undefined): boolean {
    return proto3.util.equals(StorageEndpoint, a, b);
  }
}

/**
 * Platform provides a JetStream-enabled account for these credential set.
 * The method to authenticate should comply with JWT decentralized auth. 
 *
 * @generated from message api.NatsCredentials
 */
export class NatsCredentials extends Message<NatsCredentials> {
  /**
   * EndPoint is the URL to connect to NATS.
   * This URL is expected to include protocol and port.
   * Protocol is expected to be "nats://".
   * Any port value SHOULD be acceptable.
   * Missing protocol, address, or port SHOULD raise an error.
   * Invalid protocol SHOULD raise an error.
   * Errors raised in this protocol SHOULD NOT prevent use of any other protocols. 
   *
   * @generated from field: string Endpoint = 1;
   */
  Endpoint = "";

  /**
   * RootSubject defines a namespace of which all subjects must be prefixed with
   * it is expected to be a dot-separated serries of "tokens" 
   *
   * @generated from field: string RootSubject = 2;
   */
  RootSubject = "";

  /**
   * Username is not used, but may help human readers to identify accounts. 
   *
   * @generated from field: string Username = 3;
   */
  Username = "";

  /**
   * The JWT part for the authentication. e.g. https://pkg.go.dev/github.com/nats-io/nats.go#UserJWTAndSeed 
   *
   * @generated from field: string UserJwt = 4;
   */
  UserJwt = "";

  /**
   * The seed part for the authentication. e.g. https://pkg.go.dev/github.com/nats-io/nats.go#UserJWTAndSeed 
   *
   * @generated from field: string UserNkeySeed = 5;
   */
  UserNkeySeed = "";

  constructor(data?: PartialMessage<NatsCredentials>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.NatsCredentials";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Endpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "RootSubject", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Username", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "UserJwt", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "UserNkeySeed", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): NatsCredentials {
    return new NatsCredentials().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): NatsCredentials {
    return new NatsCredentials().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): NatsCredentials {
    return new NatsCredentials().fromJsonString(jsonString, options);
  }

  static equals(a: NatsCredentials | PlainMessage<NatsCredentials> | undefined, b: NatsCredentials | PlainMessage<NatsCredentials> | undefined): boolean {
    return proto3.util.equals(NatsCredentials, a, b);
  }
}

/**
 * OpenSearchCredentials holds the configuration for interacting with Platform integration's OpenSearch
 *
 * @generated from message api.OpenSearchCredentials
 */
export class OpenSearchCredentials extends Message<OpenSearchCredentials> {
  /**
   * Endpoint is the URL to access the OpenSearch dashboard.
   * It is expected to include portocol.
   * The protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access REST services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string Endpoint = 1;
   */
  Endpoint = "";

  /**
   * Username is the provided username to use for authentication
   *
   * @generated from field: string Username = 2;
   */
  Username = "";

  /**
   * Password is the provided password to use for authentication
   *
   * @generated from field: string Password = 3;
   */
  Password = "";

  /**
   * Index is the name of the index the partner app is allowed to use
   *
   * @generated from field: string Index = 4;
   */
  Index = "";

  constructor(data?: PartialMessage<OpenSearchCredentials>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.OpenSearchCredentials";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Endpoint", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Username", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Password", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "Index", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OpenSearchCredentials {
    return new OpenSearchCredentials().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OpenSearchCredentials {
    return new OpenSearchCredentials().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OpenSearchCredentials {
    return new OpenSearchCredentials().fromJsonString(jsonString, options);
  }

  static equals(a: OpenSearchCredentials | PlainMessage<OpenSearchCredentials> | undefined, b: OpenSearchCredentials | PlainMessage<OpenSearchCredentials> | undefined): boolean {
    return proto3.util.equals(OpenSearchCredentials, a, b);
  }
}

/**
 * OpenIDCredentials holds the configuration for interacting with Platform's OpenID Connect server
 * This is used to authenticate to the CoreEndpoint and IntegrationEndpoint by providing a JWT token.
 *
 * @generated from message api.OpenIDCredentials
 */
export class OpenIDCredentials extends Message<OpenIDCredentials> {
  /**
   * WellKnownURI is the URL to access the OpenID Connect server's well-known configuration
   * It is expected to include protocol.
   * the protocol is expected to be "https://".
   * Empty protocol MUST raise an error.
   * Empty protocol or empty value MUST prevent attempts to access REST services.
   * Empty value or protocol SHOULD NOT prevent normal use of other functions.
   *
   * @generated from field: string WellKnownURI = 1;
   */
  WellKnownURI = "";

  /**
   * ServiceAccountName is the name that identifies the service account.
   * It is not used for authentication, but may help human readers to identify accounts.
   *
   * @generated from field: string ServiceAccountName = 2;
   */
  ServiceAccountName = "";

  /**
   * ServiceAccountPEM is the PEM-encoded private key of the service account that is used for authentication.
   *
   * @generated from field: string ServiceAccountPEM = 3;
   */
  ServiceAccountPEM = "";

  constructor(data?: PartialMessage<OpenIDCredentials>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.OpenIDCredentials";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "WellKnownURI", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "ServiceAccountName", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "ServiceAccountPEM", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): OpenIDCredentials {
    return new OpenIDCredentials().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): OpenIDCredentials {
    return new OpenIDCredentials().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): OpenIDCredentials {
    return new OpenIDCredentials().fromJsonString(jsonString, options);
  }

  static equals(a: OpenIDCredentials | PlainMessage<OpenIDCredentials> | undefined, b: OpenIDCredentials | PlainMessage<OpenIDCredentials> | undefined): boolean {
    return proto3.util.equals(OpenIDCredentials, a, b);
  }
}

/**
 *
 * Basic messages (int, bool, string ,etc ) encapsulation inside a message
 * we can use these message to escape default values of basic messages, and have the possibility to put an empty
 * ex: not sending a string in a payload is the same as sending an empty string -> solution: use StringObject
 *
 * @generated from message api.Int32Object
 */
export class Int32Object extends Message<Int32Object> {
  /**
   * @generated from field: int32 Int32 = 1;
   */
  Int32 = 0;

  constructor(data?: PartialMessage<Int32Object>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.Int32Object";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Int32", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Int32Object {
    return new Int32Object().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Int32Object {
    return new Int32Object().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Int32Object {
    return new Int32Object().fromJsonString(jsonString, options);
  }

  static equals(a: Int32Object | PlainMessage<Int32Object> | undefined, b: Int32Object | PlainMessage<Int32Object> | undefined): boolean {
    return proto3.util.equals(Int32Object, a, b);
  }
}

/**
 * @generated from message api.BoolObject
 */
export class BoolObject extends Message<BoolObject> {
  /**
   * @generated from field: bool Bool = 1;
   */
  Bool = false;

  constructor(data?: PartialMessage<BoolObject>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.BoolObject";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Bool", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): BoolObject {
    return new BoolObject().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): BoolObject {
    return new BoolObject().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): BoolObject {
    return new BoolObject().fromJsonString(jsonString, options);
  }

  static equals(a: BoolObject | PlainMessage<BoolObject> | undefined, b: BoolObject | PlainMessage<BoolObject> | undefined): boolean {
    return proto3.util.equals(BoolObject, a, b);
  }
}

/**
 * @generated from message api.StringObject
 */
export class StringObject extends Message<StringObject> {
  /**
   * @generated from field: string String = 1;
   */
  String = "";

  constructor(data?: PartialMessage<StringObject>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StringObject";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "String", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StringObject {
    return new StringObject().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StringObject {
    return new StringObject().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StringObject {
    return new StringObject().fromJsonString(jsonString, options);
  }

  static equals(a: StringObject | PlainMessage<StringObject> | undefined, b: StringObject | PlainMessage<StringObject> | undefined): boolean {
    return proto3.util.equals(StringObject, a, b);
  }
}

/**
 * @generated from message api.StringDateObject
 */
export class StringDateObject extends Message<StringDateObject> {
  /**
   * UTC date/time in <a href='https://en.wikipedia.org/wiki/ISO_8601'>ISO 8601</a> format
   *
   * @generated from field: string DateTime = 10;
   */
  DateTime = "";

  constructor(data?: PartialMessage<StringDateObject>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.StringDateObject";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 10, name: "DateTime", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): StringDateObject {
    return new StringDateObject().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): StringDateObject {
    return new StringDateObject().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): StringDateObject {
    return new StringDateObject().fromJsonString(jsonString, options);
  }

  static equals(a: StringDateObject | PlainMessage<StringDateObject> | undefined, b: StringDateObject | PlainMessage<StringDateObject> | undefined): boolean {
    return proto3.util.equals(StringDateObject, a, b);
  }
}

/**
 * @generated from message api.WorkflowExecutionResult
 */
export class WorkflowExecutionResult extends Message<WorkflowExecutionResult> {
  /**
   * @generated from field: string WorkflowId = 1;
   */
  WorkflowId = "";

  /**
   * @generated from field: string RunId = 2;
   */
  RunId = "";

  /**
   * @generated from field: string Domain = 3;
   */
  Domain = "";

  constructor(data?: PartialMessage<WorkflowExecutionResult>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.WorkflowExecutionResult";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "WorkflowId", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "RunId", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Domain", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): WorkflowExecutionResult {
    return new WorkflowExecutionResult().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): WorkflowExecutionResult {
    return new WorkflowExecutionResult().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): WorkflowExecutionResult {
    return new WorkflowExecutionResult().fromJsonString(jsonString, options);
  }

  static equals(a: WorkflowExecutionResult | PlainMessage<WorkflowExecutionResult> | undefined, b: WorkflowExecutionResult | PlainMessage<WorkflowExecutionResult> | undefined): boolean {
    return proto3.util.equals(WorkflowExecutionResult, a, b);
  }
}

/**
 * @generated from message api.ModuleRegistration
 */
export class ModuleRegistration extends Message<ModuleRegistration> {
  /**
   * @generated from field: api.WorkflowTypeEnum WorkflowTarget = 1;
   */
  WorkflowTarget = WorkflowTypeEnum.CREATE_PROJECT;

  /**
   * @generated from field: string WorkflowPath = 2;
   */
  WorkflowPath = "";

  /**
   * @generated from field: api.ModuleWorkflowTypeEnum Type = 3;
   */
  Type = ModuleWorkflowTypeEnum.PRE_WORKFLOW;

  /**
   * @generated from field: int32 Timeout = 4;
   */
  Timeout = 0;

  constructor(data?: PartialMessage<ModuleRegistration>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ModuleRegistration";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "WorkflowTarget", kind: "enum", T: proto3.getEnumType(WorkflowTypeEnum) },
    { no: 2, name: "WorkflowPath", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Type", kind: "enum", T: proto3.getEnumType(ModuleWorkflowTypeEnum) },
    { no: 4, name: "Timeout", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ModuleRegistration {
    return new ModuleRegistration().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ModuleRegistration {
    return new ModuleRegistration().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ModuleRegistration {
    return new ModuleRegistration().fromJsonString(jsonString, options);
  }

  static equals(a: ModuleRegistration | PlainMessage<ModuleRegistration> | undefined, b: ModuleRegistration | PlainMessage<ModuleRegistration> | undefined): boolean {
    return proto3.util.equals(ModuleRegistration, a, b);
  }
}

/**
 * @generated from message api.ModuleDeregistration
 */
export class ModuleDeregistration extends Message<ModuleDeregistration> {
  /**
   * @generated from field: api.WorkflowTypeEnum WorkflowTarget = 1;
   */
  WorkflowTarget = WorkflowTypeEnum.CREATE_PROJECT;

  /**
   * @generated from field: string WorkflowPath = 2;
   */
  WorkflowPath = "";

  /**
   * @generated from field: api.ModuleWorkflowTypeEnum Type = 3;
   */
  Type = ModuleWorkflowTypeEnum.PRE_WORKFLOW;

  constructor(data?: PartialMessage<ModuleDeregistration>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ModuleDeregistration";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "WorkflowTarget", kind: "enum", T: proto3.getEnumType(WorkflowTypeEnum) },
    { no: 2, name: "WorkflowPath", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Type", kind: "enum", T: proto3.getEnumType(ModuleWorkflowTypeEnum) },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ModuleDeregistration {
    return new ModuleDeregistration().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ModuleDeregistration {
    return new ModuleDeregistration().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ModuleDeregistration {
    return new ModuleDeregistration().fromJsonString(jsonString, options);
  }

  static equals(a: ModuleDeregistration | PlainMessage<ModuleDeregistration> | undefined, b: ModuleDeregistration | PlainMessage<ModuleDeregistration> | undefined): boolean {
    return proto3.util.equals(ModuleDeregistration, a, b);
  }
}

/**
 * Message defining the structure of a ClaimType.
 *
 * @generated from message api.ClaimType
 */
export class ClaimType extends Message<ClaimType> {
  /**
   * Unique identifier for the claim type. (formatted as such: "CLAIMTYPE_<ProjectID>_<UUID>")
   *
   * @generated from field: string ID = 1;
   */
  ID = "";

  /**
   * Identifier for the project associated with the claim.
   *
   * @generated from field: string ProjectID = 2;
   */
  ProjectID = "";

  /**
   * Reason or description for the claim.
   *
   * @generated from field: string Reason = 3;
   */
  Reason = "";

  /**
   * Code for the reason of the claim.
   *
   * @generated from field: string ReasonCode = 4;
   */
  ReasonCode = "";

  /**
   * Type of entity associated with the claim.
   *
   * @generated from field: api.ClaimEntityType EntityType = 5;
   */
  EntityType = ClaimEntityType.UNKNOWN;

  /**
   * Default criticality level for the claim which is set upon its creation.
   *
   * @generated from field: api.ClaimCriticality DefaultCriticality = 6;
   */
  DefaultCriticality = ClaimCriticality.UNKNOWN;

  /**
   * List of possible transitions between claim statuses.
   *
   * @generated from field: repeated api.ClaimTransition Transitions = 7;
   */
  Transitions: ClaimTransition[] = [];

  /**
   * List of possible closures for the claim.
   *
   * @generated from field: repeated api.ClaimTypeClosure PossibleClosures = 8;
   */
  PossibleClosures: ClaimTypeClosure[] = [];

  /**
   * Roles allowed to set criticality.
   *
   * @generated from field: repeated string CriticalityAllowedRoles = 9;
   */
  CriticalityAllowedRoles: string[] = [];

  /**
   * Roles allowed to read/view the claim.
   *
   * @generated from field: repeated string ReadAllowedRoles = 10;
   */
  ReadAllowedRoles: string[] = [];

  /**
   * Roles allowed to write/edit the claim.
   *
   * @generated from field: repeated string WriteAllowedRoles = 11;
   */
  WriteAllowedRoles: string[] = [];

  /**
   * Roles allowed to assign the claim.
   *
   * @generated from field: repeated string AssignAllowedRoles = 12;
   */
  AssignAllowedRoles: string[] = [];

  /**
   * List of allowed statuses for the claim.
   *
   * @generated from field: repeated api.ClaimStatus AllowedStatuses = 13;
   */
  AllowedStatuses: ClaimStatus[] = [];

  /**
   * Default status for the claim which is set upon its creation.
   *
   * @generated from field: api.ClaimStatus DefaultStatus = 14;
   */
  DefaultStatus = ClaimStatus.UNKNOWN;

  /**
   * Sector of the claim.
   *
   * @generated from field: api.ClaimSector Sector = 15;
   */
  Sector = ClaimSector.UNKNOWN;

  /**
   * Default assignees of the claim.
   *
   * @generated from field: repeated string DefaultAssignees = 16;
   */
  DefaultAssignees: string[] = [];

  constructor(data?: PartialMessage<ClaimType>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ClaimType";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "ProjectID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Reason", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "ReasonCode", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 5, name: "EntityType", kind: "enum", T: proto3.getEnumType(ClaimEntityType) },
    { no: 6, name: "DefaultCriticality", kind: "enum", T: proto3.getEnumType(ClaimCriticality) },
    { no: 7, name: "Transitions", kind: "message", T: ClaimTransition, repeated: true },
    { no: 8, name: "PossibleClosures", kind: "message", T: ClaimTypeClosure, repeated: true },
    { no: 9, name: "CriticalityAllowedRoles", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 10, name: "ReadAllowedRoles", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 11, name: "WriteAllowedRoles", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 12, name: "AssignAllowedRoles", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 13, name: "AllowedStatuses", kind: "enum", T: proto3.getEnumType(ClaimStatus), repeated: true },
    { no: 14, name: "DefaultStatus", kind: "enum", T: proto3.getEnumType(ClaimStatus) },
    { no: 15, name: "Sector", kind: "enum", T: proto3.getEnumType(ClaimSector) },
    { no: 16, name: "DefaultAssignees", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ClaimType {
    return new ClaimType().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ClaimType {
    return new ClaimType().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ClaimType {
    return new ClaimType().fromJsonString(jsonString, options);
  }

  static equals(a: ClaimType | PlainMessage<ClaimType> | undefined, b: ClaimType | PlainMessage<ClaimType> | undefined): boolean {
    return proto3.util.equals(ClaimType, a, b);
  }
}

/**
 * Message defining the structure of a ClaimTransition.
 *
 * @generated from message api.ClaimTransition
 */
export class ClaimTransition extends Message<ClaimTransition> {
  /**
   * Starting status of the transition.
   *
   * @generated from field: api.ClaimStatus FromStatus = 1;
   */
  FromStatus = ClaimStatus.UNKNOWN;

  /**
   * Ending status of the transition.
   *
   * @generated from field: api.ClaimStatus ToStatus = 2;
   */
  ToStatus = ClaimStatus.UNKNOWN;

  /**
   * Roles allowed to perform this transition.
   *
   * @generated from field: repeated string AllowedRoles = 3;
   */
  AllowedRoles: string[] = [];

  /**
   * Indicates whether notification should be sent to the claim's assignees after this transition.
   *
   * @generated from field: bool ShouldNotify = 4;
   */
  ShouldNotify = false;

  constructor(data?: PartialMessage<ClaimTransition>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ClaimTransition";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "FromStatus", kind: "enum", T: proto3.getEnumType(ClaimStatus) },
    { no: 2, name: "ToStatus", kind: "enum", T: proto3.getEnumType(ClaimStatus) },
    { no: 3, name: "AllowedRoles", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 4, name: "ShouldNotify", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ClaimTransition {
    return new ClaimTransition().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ClaimTransition {
    return new ClaimTransition().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ClaimTransition {
    return new ClaimTransition().fromJsonString(jsonString, options);
  }

  static equals(a: ClaimTransition | PlainMessage<ClaimTransition> | undefined, b: ClaimTransition | PlainMessage<ClaimTransition> | undefined): boolean {
    return proto3.util.equals(ClaimTransition, a, b);
  }
}

/**
 * Message defining the structure of a ClaimTypeClosure for ClaimTypes.
 *
 * @generated from message api.ClaimTypeClosure
 */
export class ClaimTypeClosure extends Message<ClaimTypeClosure> {
  /**
   * Person or entity responsible for the closure.
   *
   * @generated from field: string Responsible = 1;
   */
  Responsible = "";

  /**
   * List of possible causes associated with the closure for a given responsible. Array is multi-valued for claim types but single-valued for claim instances (only one cause per claim closure).
   *
   * @generated from field: repeated string Causes = 2;
   */
  Causes: string[] = [];

  constructor(data?: PartialMessage<ClaimTypeClosure>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ClaimTypeClosure";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Responsible", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Causes", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ClaimTypeClosure {
    return new ClaimTypeClosure().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ClaimTypeClosure {
    return new ClaimTypeClosure().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ClaimTypeClosure {
    return new ClaimTypeClosure().fromJsonString(jsonString, options);
  }

  static equals(a: ClaimTypeClosure | PlainMessage<ClaimTypeClosure> | undefined, b: ClaimTypeClosure | PlainMessage<ClaimTypeClosure> | undefined): boolean {
    return proto3.util.equals(ClaimTypeClosure, a, b);
  }
}

/**
 * Message defining the structure of a ClaimClosure for Claim instances.
 *
 * @generated from message api.ClaimClosure
 */
export class ClaimClosure extends Message<ClaimClosure> {
  /**
   * Person or entity responsible for the closure.
   *
   * @generated from field: string Responsible = 1;
   */
  Responsible = "";

  /**
   * Cause associated with the closure.
   *
   * @generated from field: string Cause = 2;
   */
  Cause = "";

  constructor(data?: PartialMessage<ClaimClosure>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ClaimClosure";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Responsible", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Cause", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ClaimClosure {
    return new ClaimClosure().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ClaimClosure {
    return new ClaimClosure().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ClaimClosure {
    return new ClaimClosure().fromJsonString(jsonString, options);
  }

  static equals(a: ClaimClosure | PlainMessage<ClaimClosure> | undefined, b: ClaimClosure | PlainMessage<ClaimClosure> | undefined): boolean {
    return proto3.util.equals(ClaimClosure, a, b);
  }
}

/**
 * Message defining the claim attached to entity
 *
 * @generated from message api.ClaimSummary
 */
export class ClaimSummary extends Message<ClaimSummary> {
  /**
   * Identifier of the claim type
   *
   * @generated from field: string ClaimTypeID = 1;
   */
  ClaimTypeID = "";

  /**
   * Code of the claim type
   *
   * @generated from field: string ClaimTypeReason = 2;
   */
  ClaimTypeReason = "";

  /**
   * @generated from field: int32 Number = 3;
   */
  Number = 0;

  constructor(data?: PartialMessage<ClaimSummary>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ClaimSummary";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ClaimTypeID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "ClaimTypeReason", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Number", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ClaimSummary {
    return new ClaimSummary().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ClaimSummary {
    return new ClaimSummary().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ClaimSummary {
    return new ClaimSummary().fromJsonString(jsonString, options);
  }

  static equals(a: ClaimSummary | PlainMessage<ClaimSummary> | undefined, b: ClaimSummary | PlainMessage<ClaimSummary> | undefined): boolean {
    return proto3.util.equals(ClaimSummary, a, b);
  }
}

/**
 * @generated from message api.AttachmentType
 */
export class AttachmentType extends Message<AttachmentType> {
  /**
   * @generated from field: string ID = 1;
   */
  ID = "";

  /**
   * @generated from field: string ProjectID = 2;
   */
  ProjectID = "";

  /**
   * @generated from field: string Code = 3;
   */
  Code = "";

  /**
   * @generated from field: api.EntityType Entity = 4;
   */
  Entity = EntityType.UNKNOWN;

  /**
   * @generated from field: string Label = 5;
   */
  Label = "";

  /**
   * @generated from field: api.SharePolicy SharePolicy = 6;
   */
  SharePolicy = SharePolicy.SHARE_POLICY_UNKNOWN;

  constructor(data?: PartialMessage<AttachmentType>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.AttachmentType";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "ProjectID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Code", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 4, name: "Entity", kind: "enum", T: proto3.getEnumType(EntityType) },
    { no: 5, name: "Label", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 6, name: "SharePolicy", kind: "enum", T: proto3.getEnumType(SharePolicy) },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): AttachmentType {
    return new AttachmentType().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): AttachmentType {
    return new AttachmentType().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): AttachmentType {
    return new AttachmentType().fromJsonString(jsonString, options);
  }

  static equals(a: AttachmentType | PlainMessage<AttachmentType> | undefined, b: AttachmentType | PlainMessage<AttachmentType> | undefined): boolean {
    return proto3.util.equals(AttachmentType, a, b);
  }
}

/**
 * @generated from message api.AttachmentSummary
 */
export class AttachmentSummary extends Message<AttachmentSummary> {
  /**
   * @generated from field: string AttachmentTypeID = 1;
   */
  AttachmentTypeID = "";

  /**
   * @generated from field: string AttachmentTypeCode = 2;
   */
  AttachmentTypeCode = "";

  /**
   * @generated from field: int32 Number = 3;
   */
  Number = 0;

  constructor(data?: PartialMessage<AttachmentSummary>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.AttachmentSummary";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "AttachmentTypeID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "AttachmentTypeCode", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Number", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): AttachmentSummary {
    return new AttachmentSummary().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): AttachmentSummary {
    return new AttachmentSummary().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): AttachmentSummary {
    return new AttachmentSummary().fromJsonString(jsonString, options);
  }

  static equals(a: AttachmentSummary | PlainMessage<AttachmentSummary> | undefined, b: AttachmentSummary | PlainMessage<AttachmentSummary> | undefined): boolean {
    return proto3.util.equals(AttachmentSummary, a, b);
  }
}

/**
 * @generated from message api.TranslationMap
 */
export class TranslationMap extends Message<TranslationMap> {
  /**
   * @generated from field: map<string, string> data = 1;
   */
  data: { [key: string]: string } = {};

  constructor(data?: PartialMessage<TranslationMap>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.TranslationMap";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "data", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TranslationMap {
    return new TranslationMap().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TranslationMap {
    return new TranslationMap().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TranslationMap {
    return new TranslationMap().fromJsonString(jsonString, options);
  }

  static equals(a: TranslationMap | PlainMessage<TranslationMap> | undefined, b: TranslationMap | PlainMessage<TranslationMap> | undefined): boolean {
    return proto3.util.equals(TranslationMap, a, b);
  }
}

/**
 * @generated from message api.ExtractColumnFormat
 */
export class ExtractColumnFormat extends Message<ExtractColumnFormat> {
  /**
   * @generated from field: api.ExtractColumnFormat.type Type = 1;
   */
  Type = ExtractColumnFormat_type.UNKNOWN;

  /**
   * @generated from field: string Format = 2;
   */
  Format = "";

  constructor(data?: PartialMessage<ExtractColumnFormat>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ExtractColumnFormat";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Type", kind: "enum", T: proto3.getEnumType(ExtractColumnFormat_type) },
    { no: 2, name: "Format", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ExtractColumnFormat {
    return new ExtractColumnFormat().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ExtractColumnFormat {
    return new ExtractColumnFormat().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ExtractColumnFormat {
    return new ExtractColumnFormat().fromJsonString(jsonString, options);
  }

  static equals(a: ExtractColumnFormat | PlainMessage<ExtractColumnFormat> | undefined, b: ExtractColumnFormat | PlainMessage<ExtractColumnFormat> | undefined): boolean {
    return proto3.util.equals(ExtractColumnFormat, a, b);
  }
}

/**
 * @generated from enum api.ExtractColumnFormat.type
 */
export enum ExtractColumnFormat_type {
  /**
   * @generated from enum value: UNKNOWN = 0;
   */
  UNKNOWN = 0,

  /**
   * @generated from enum value: DATE = 1;
   */
  DATE = 1,

  /**
   * @generated from enum value: SUFFIX = 2;
   */
  SUFFIX = 2,
}
// Retrieve enum metadata with: proto3.getEnumType(ExtractColumnFormat_type)
proto3.util.setEnumType(ExtractColumnFormat_type, "api.ExtractColumnFormat.type", [
  { no: 0, name: "UNKNOWN" },
  { no: 1, name: "DATE" },
  { no: 2, name: "SUFFIX" },
]);

/**
 * @generated from message api.ExtractQuery
 */
export class ExtractQuery extends Message<ExtractQuery> {
  /**
   * @generated from field: api.QueryProjectHeader Header = 1;
   */
  Header?: QueryProjectHeader;

  /**
   * @generated from field: string UserId = 2;
   */
  UserId = "";

  /**
   * @generated from field: repeated api.BlockFilter BlockFilters = 3;
   */
  BlockFilters: BlockFilter[] = [];

  /**
   * @generated from field: repeated string Fields = 4;
   */
  Fields: string[] = [];

  /**
   * @generated from field: string ListSeparator = 5;
   */
  ListSeparator = "";

  /**
   * @generated from field: string DecimalSeparator = 6;
   */
  DecimalSeparator = "";

  /**
   * @generated from field: repeated string ColumnNames = 7;
   */
  ColumnNames: string[] = [];

  /**
   * @generated from field: map<string, api.TranslationMap> ColumnTranslationMaps = 8;
   */
  ColumnTranslationMaps: { [key: string]: TranslationMap } = {};

  /**
   * @generated from field: map<int32, api.ExtractColumnFormat> ColumnFormats = 9;
   */
  ColumnFormats: { [key: number]: ExtractColumnFormat } = {};

  /**
   * @generated from field: string TargetTimeZone = 10;
   */
  TargetTimeZone = "";

  constructor(data?: PartialMessage<ExtractQuery>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ExtractQuery";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Header", kind: "message", T: QueryProjectHeader },
    { no: 2, name: "UserId", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "BlockFilters", kind: "message", T: BlockFilter, repeated: true },
    { no: 4, name: "Fields", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 5, name: "ListSeparator", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 6, name: "DecimalSeparator", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 7, name: "ColumnNames", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 8, name: "ColumnTranslationMaps", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "message", T: TranslationMap} },
    { no: 9, name: "ColumnFormats", kind: "map", K: 5 /* ScalarType.INT32 */, V: {kind: "message", T: ExtractColumnFormat} },
    { no: 10, name: "TargetTimeZone", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ExtractQuery {
    return new ExtractQuery().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ExtractQuery {
    return new ExtractQuery().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ExtractQuery {
    return new ExtractQuery().fromJsonString(jsonString, options);
  }

  static equals(a: ExtractQuery | PlainMessage<ExtractQuery> | undefined, b: ExtractQuery | PlainMessage<ExtractQuery> | undefined): boolean {
    return proto3.util.equals(ExtractQuery, a, b);
  }
}

/**
 * @generated from message api.ExtractResult
 */
export class ExtractResult extends Message<ExtractResult> {
  /**
   * @generated from field: api.WorkflowExecutionResult WorkflowExecution = 1;
   */
  WorkflowExecution?: WorkflowExecutionResult;

  constructor(data?: PartialMessage<ExtractResult>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ExtractResult";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "WorkflowExecution", kind: "message", T: WorkflowExecutionResult },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ExtractResult {
    return new ExtractResult().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ExtractResult {
    return new ExtractResult().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ExtractResult {
    return new ExtractResult().fromJsonString(jsonString, options);
  }

  static equals(a: ExtractResult | PlainMessage<ExtractResult> | undefined, b: ExtractResult | PlainMessage<ExtractResult> | undefined): boolean {
    return proto3.util.equals(ExtractResult, a, b);
  }
}

/**
 * @generated from message api.CountLinesQuery
 */
export class CountLinesQuery extends Message<CountLinesQuery> {
  /**
   * @generated from field: string ProjectID = 1;
   */
  ProjectID = "";

  /**
   * @generated from field: int32 Partition = 2;
   */
  Partition = 0;

  constructor(data?: PartialMessage<CountLinesQuery>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.CountLinesQuery";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "ProjectID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Partition", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CountLinesQuery {
    return new CountLinesQuery().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CountLinesQuery {
    return new CountLinesQuery().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CountLinesQuery {
    return new CountLinesQuery().fromJsonString(jsonString, options);
  }

  static equals(a: CountLinesQuery | PlainMessage<CountLinesQuery> | undefined, b: CountLinesQuery | PlainMessage<CountLinesQuery> | undefined): boolean {
    return proto3.util.equals(CountLinesQuery, a, b);
  }
}

/**
 * @generated from message api.CountLinesResult
 */
export class CountLinesResult extends Message<CountLinesResult> {
  /**
   * @generated from field: int32 NbLines = 1;
   */
  NbLines = 0;

  constructor(data?: PartialMessage<CountLinesResult>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.CountLinesResult";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "NbLines", kind: "scalar", T: 5 /* ScalarType.INT32 */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CountLinesResult {
    return new CountLinesResult().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CountLinesResult {
    return new CountLinesResult().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CountLinesResult {
    return new CountLinesResult().fromJsonString(jsonString, options);
  }

  static equals(a: CountLinesResult | PlainMessage<CountLinesResult> | undefined, b: CountLinesResult | PlainMessage<CountLinesResult> | undefined): boolean {
    return proto3.util.equals(CountLinesResult, a, b);
  }
}

/**
 * @generated from message api.Scope
 */
export class Scope extends Message<Scope> {
  /**
   * Service name
   *
   * @generated from field: string Service = 1;
   */
  Service = "";

  /**
   * Method name
   *
   * @generated from field: string Method = 2;
   */
  Method = "";

  /**
   * Resource type of the method
   *
   * @generated from field: api.ResourceType RscType = 3;
   */
  RscType = ResourceType.UNKNOWN;

  /**
   * Reserved for platform usage
   *
   * @generated from field: bool PlatformReserved = 4;
   */
  PlatformReserved = false;

  /**
   * Transient permissions (for UI scopes)
   *
   * @generated from field: repeated api.Permission TransientPermissions = 5;
   */
  TransientPermissions: Permission[] = [];

  /**
   * Resource ID of the method (if any).
   *
   * @generated from field: string RscID = 6;
   */
  RscID = "";

  /**
   * This field is used only for roles definition, not scope registration. List of resource IDs on which the role's scope applies. If none is specified, the scope applies on all resources of the given type. It implies that the resource ids are of the same type as the resource type of the scope (or they won't be taken into account).
   *
   * @generated from field: repeated string AppliesOnIDs = 7;
   */
  AppliesOnIDs: string[] = [];

  /**
   * Module ID which the scope belongs to
   *
   * @generated from field: string ModuleID = 8;
   */
  ModuleID = "";

  /**
   * If mandatory, the scope will always be added to roles of the same RscType. For instance, a UI role "Project-Viewer" will inherit mandatory "Project" UI scopes.
   *
   * @generated from field: bool Mandatory = 9;
   */
  Mandatory = false;

  constructor(data?: PartialMessage<Scope>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.Scope";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Service", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Method", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "RscType", kind: "enum", T: proto3.getEnumType(ResourceType) },
    { no: 4, name: "PlatformReserved", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
    { no: 5, name: "TransientPermissions", kind: "message", T: Permission, repeated: true },
    { no: 6, name: "RscID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 7, name: "AppliesOnIDs", kind: "scalar", T: 9 /* ScalarType.STRING */, repeated: true },
    { no: 8, name: "ModuleID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 9, name: "Mandatory", kind: "scalar", T: 8 /* ScalarType.BOOL */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Scope {
    return new Scope().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Scope {
    return new Scope().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Scope {
    return new Scope().fromJsonString(jsonString, options);
  }

  static equals(a: Scope | PlainMessage<Scope> | undefined, b: Scope | PlainMessage<Scope> | undefined): boolean {
    return proto3.util.equals(Scope, a, b);
  }
}

/**
 * @generated from message api.ClientAPI
 */
export class ClientAPI extends Message<ClientAPI> {
  /**
   * @generated from field: string Client = 1;
   */
  Client = "";

  /**
   * @generated from field: repeated api.Scope APIs = 2;
   */
  APIs: Scope[] = [];

  /**
   * @generated from field: string Roles = 3;
   */
  Roles = "";

  constructor(data?: PartialMessage<ClientAPI>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ClientAPI";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Client", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "APIs", kind: "message", T: Scope, repeated: true },
    { no: 3, name: "Roles", kind: "scalar", T: 9 /* ScalarType.STRING */ },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ClientAPI {
    return new ClientAPI().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ClientAPI {
    return new ClientAPI().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ClientAPI {
    return new ClientAPI().fromJsonString(jsonString, options);
  }

  static equals(a: ClientAPI | PlainMessage<ClientAPI> | undefined, b: ClientAPI | PlainMessage<ClientAPI> | undefined): boolean {
    return proto3.util.equals(ClientAPI, a, b);
  }
}

/**
 * @generated from message api.Permission
 */
export class Permission extends Message<Permission> {
  /**
   * @generated from field: string Client = 1;
   */
  Client = "";

  /**
   * @generated from field: repeated api.Scope Scopes = 2;
   */
  Scopes: Scope[] = [];

  constructor(data?: PartialMessage<Permission>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.Permission";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Client", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "Scopes", kind: "message", T: Scope, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Permission {
    return new Permission().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Permission {
    return new Permission().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Permission {
    return new Permission().fromJsonString(jsonString, options);
  }

  static equals(a: Permission | PlainMessage<Permission> | undefined, b: Permission | PlainMessage<Permission> | undefined): boolean {
    return proto3.util.equals(Permission, a, b);
  }
}

/**
 * @generated from message api.UserUIPermissions
 */
export class UserUIPermissions extends Message<UserUIPermissions> {
  /**
   * @generated from field: api.ResourceType RscType = 1;
   */
  RscType = ResourceType.UNKNOWN;

  /**
   * @generated from field: string RscID = 2;
   */
  RscID = "";

  /**
   * @generated from field: repeated api.Scope Scopes = 3;
   */
  Scopes: Scope[] = [];

  constructor(data?: PartialMessage<UserUIPermissions>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.UserUIPermissions";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "RscType", kind: "enum", T: proto3.getEnumType(ResourceType) },
    { no: 2, name: "RscID", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 3, name: "Scopes", kind: "message", T: Scope, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UserUIPermissions {
    return new UserUIPermissions().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UserUIPermissions {
    return new UserUIPermissions().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UserUIPermissions {
    return new UserUIPermissions().fromJsonString(jsonString, options);
  }

  static equals(a: UserUIPermissions | PlainMessage<UserUIPermissions> | undefined, b: UserUIPermissions | PlainMessage<UserUIPermissions> | undefined): boolean {
    return proto3.util.equals(UserUIPermissions, a, b);
  }
}

/**
 * @generated from message api.ElementByMatchQuery
 */
export class ElementByMatchQuery extends Message<ElementByMatchQuery> {
  /**
   * @generated from field: api.QueryProjectHeader Header = 1;
   */
  Header?: QueryProjectHeader;

  /**
   * list of blockFilters structure for Find query, each element (BlockFilter) in the list is an "OR" part of the query
   *
   * @generated from field: repeated api.BlockFilter BlockFilters = 2;
   */
  BlockFilters: BlockFilter[] = [];

  /**
   * MatchElementField structure, containing wanted match string, and the fields to get.
   *
   * @generated from field: api.MatchElementField MatchElementField = 3;
   */
  MatchElementField?: MatchElementField;

  constructor(data?: PartialMessage<ElementByMatchQuery>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ElementByMatchQuery";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Header", kind: "message", T: QueryProjectHeader },
    { no: 2, name: "BlockFilters", kind: "message", T: BlockFilter, repeated: true },
    { no: 3, name: "MatchElementField", kind: "message", T: MatchElementField },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ElementByMatchQuery {
    return new ElementByMatchQuery().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ElementByMatchQuery {
    return new ElementByMatchQuery().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ElementByMatchQuery {
    return new ElementByMatchQuery().fromJsonString(jsonString, options);
  }

  static equals(a: ElementByMatchQuery | PlainMessage<ElementByMatchQuery> | undefined, b: ElementByMatchQuery | PlainMessage<ElementByMatchQuery> | undefined): boolean {
    return proto3.util.equals(ElementByMatchQuery, a, b);
  }
}

/**
 * @generated from message api.ElementByMatchResult
 */
export class ElementByMatchResult extends Message<ElementByMatchResult> {
  /**
   * @generated from field: repeated api.MatchFieldElementResult MatchResults = 1;
   */
  MatchResults: MatchFieldElementResult[] = [];

  constructor(data?: PartialMessage<ElementByMatchResult>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.ElementByMatchResult";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "MatchResults", kind: "message", T: MatchFieldElementResult, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ElementByMatchResult {
    return new ElementByMatchResult().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ElementByMatchResult {
    return new ElementByMatchResult().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ElementByMatchResult {
    return new ElementByMatchResult().fromJsonString(jsonString, options);
  }

  static equals(a: ElementByMatchResult | PlainMessage<ElementByMatchResult> | undefined, b: ElementByMatchResult | PlainMessage<ElementByMatchResult> | undefined): boolean {
    return proto3.util.equals(ElementByMatchResult, a, b);
  }
}

/**
 * @generated from message api.MatchElementField
 */
export class MatchElementField extends Message<MatchElementField> {
  /**
   * @generated from field: string Match = 1;
   */
  Match = "";

  /**
   * MatchField list structure, for FindMatching query
   *
   * @generated from field: repeated api.MatchField MatchFields = 2;
   */
  MatchFields: MatchField[] = [];

  constructor(data?: PartialMessage<MatchElementField>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.MatchElementField";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 1, name: "Match", kind: "scalar", T: 9 /* ScalarType.STRING */ },
    { no: 2, name: "MatchFields", kind: "message", T: MatchField, repeated: true },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MatchElementField {
    return new MatchElementField().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): MatchElementField {
    return new MatchElementField().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): MatchElementField {
    return new MatchElementField().fromJsonString(jsonString, options);
  }

  static equals(a: MatchElementField | PlainMessage<MatchElementField> | undefined, b: MatchElementField | PlainMessage<MatchElementField> | undefined): boolean {
    return proto3.util.equals(MatchElementField, a, b);
  }
}

/**
 *
 * Standard structure, having an map of elements (key,value) 
 *
 * @generated from message api.MatchFieldElementResult
 */
export class MatchFieldElementResult extends Message<MatchFieldElementResult> {
  /**
   * @generated from field: map<string, string> MatchingElements = 3;
   */
  MatchingElements: { [key: string]: string } = {};

  constructor(data?: PartialMessage<MatchFieldElementResult>) {
    super();
    proto3.util.initPartial(data, this);
  }

  static readonly runtime: typeof proto3 = proto3;
  static readonly typeName = "api.MatchFieldElementResult";
  static readonly fields: FieldList = proto3.util.newFieldList(() => [
    { no: 3, name: "MatchingElements", kind: "map", K: 9 /* ScalarType.STRING */, V: {kind: "scalar", T: 9 /* ScalarType.STRING */} },
  ]);

  static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): MatchFieldElementResult {
    return new MatchFieldElementResult().fromBinary(bytes, options);
  }

  static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): MatchFieldElementResult {
    return new MatchFieldElementResult().fromJson(jsonValue, options);
  }

  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): MatchFieldElementResult {
    return new MatchFieldElementResult().fromJsonString(jsonString, options);
  }

  static equals(a: MatchFieldElementResult | PlainMessage<MatchFieldElementResult> | undefined, b: MatchFieldElementResult | PlainMessage<MatchFieldElementResult> | undefined): boolean {
    return proto3.util.equals(MatchFieldElementResult, a, b);
  }
}

