From d28d09875533d1dcf6f39f30a52c5ddca86b9777 Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Mon, 25 Nov 2024 16:03:13 -0600 Subject: [PATCH 1/5] Update proto --- prefab.proto | 10 +++ prefab_pb2.py | 194 ++++++++++++++++++++++++------------------------- prefab_pb2.pyi | 20 +++++ 3 files changed, 127 insertions(+), 97 deletions(-) diff --git a/prefab.proto b/prefab.proto index 6106692..7af693f 100644 --- a/prefab.proto +++ b/prefab.proto @@ -166,6 +166,16 @@ message Criterion { PROP_DOES_NOT_END_WITH_ONE_OF = 9; HIERARCHICAL_MATCH = 10; IN_INT_RANGE = 11; + PROP_STARTS_WITH_ONE_OF = 12; + PROP_DOES_NOT_START_WITH_ONE_OF =13; + PROP_CONTAINS_ONE_OF = 14; + PROP_DOES_NOT_CONTAIN_ONE_OF = 15; + PROP_LESS_THAN = 16; + PROP_LESS_THAN_OR_EQUAL = 17; + PROP_GREATER_THAN = 18; + PROP_GREATER_THAN_OR_EQUAL = 19; + PROP_BEFORE = 20; + PROP_AFTER = 21; } string property_name = 1; CriterionOperator operator = 2; diff --git a/prefab_pb2.py b/prefab_pb2.py index 33ffb9d..6f3018d 100644 --- a/prefab_pb2.py +++ b/prefab_pb2.py @@ -13,7 +13,7 @@ -DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cprefab.proto\x12\x06prefab\"{\n\x14\x43onfigServicePointer\x12\x1d\n\nproject_id\x18\x01 \x01(\x03R\tprojectId\x12\x1e\n\x0bstart_at_id\x18\x02 \x01(\x03R\tstartAtId\x12$\n\x0eproject_env_id\x18\x03 \x01(\x03R\x0cprojectEnvId\"\xa7\x05\n\x0b\x43onfigValue\x12\x12\n\x03int\x18\x01 \x01(\x03H\x00R\x03int\x12\x18\n\x06string\x18\x02 \x01(\tH\x00R\x06string\x12\x16\n\x05\x62ytes\x18\x03 \x01(\x0cH\x00R\x05\x62ytes\x12\x18\n\x06\x64ouble\x18\x04 \x01(\x01H\x00R\x06\x64ouble\x12\x14\n\x04\x62ool\x18\x05 \x01(\x08H\x00R\x04\x62ool\x12\x41\n\x0fweighted_values\x18\x06 \x01(\x0b\x32\x16.prefab.WeightedValuesH\x00R\x0eweightedValues\x12\x44\n\x10limit_definition\x18\x07 \x01(\x0b\x32\x17.prefab.LimitDefinitionH\x00R\x0flimitDefinition\x12/\n\tlog_level\x18\t \x01(\x0e\x32\x10.prefab.LogLevelH\x00R\x08logLevel\x12\x35\n\x0bstring_list\x18\n \x01(\x0b\x32\x12.prefab.StringListH\x00R\nstringList\x12/\n\tint_range\x18\x0b \x01(\x0b\x32\x10.prefab.IntRangeH\x00R\x08intRange\x12.\n\x08provided\x18\x0c \x01(\x0b\x32\x10.prefab.ProvidedH\x00R\x08provided\x12\x31\n\x08\x64uration\x18\x0f \x01(\x0b\x32\x13.prefab.IsoDurationH\x00R\x08\x64uration\x12\"\n\x04json\x18\x10 \x01(\x0b\x32\x0c.prefab.JsonH\x00R\x04json\x12\'\n\x0c\x63onfidential\x18\r \x01(\x08H\x01R\x0c\x63onfidential\x88\x01\x01\x12&\n\x0c\x64\x65\x63rypt_with\x18\x0e \x01(\tH\x02R\x0b\x64\x65\x63ryptWith\x88\x01\x01\x42\x06\n\x04typeB\x0f\n\r_confidentialB\x0f\n\r_decrypt_with\"\x1a\n\x04Json\x12\x12\n\x04json\x18\x01 \x01(\tR\x04json\"-\n\x0bIsoDuration\x12\x1e\n\ndefinition\x18\x01 \x01(\tR\ndefinition\"r\n\x08Provided\x12\x33\n\x06source\x18\x01 \x01(\x0e\x32\x16.prefab.ProvidedSourceH\x00R\x06source\x88\x01\x01\x12\x1b\n\x06lookup\x18\x02 \x01(\tH\x01R\x06lookup\x88\x01\x01\x42\t\n\x07_sourceB\t\n\x07_lookup\"N\n\x08IntRange\x12\x19\n\x05start\x18\x01 \x01(\x03H\x00R\x05start\x88\x01\x01\x12\x15\n\x03\x65nd\x18\x02 \x01(\x03H\x01R\x03\x65nd\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_end\"$\n\nStringList\x12\x16\n\x06values\x18\x01 \x03(\tR\x06values\"R\n\rWeightedValue\x12\x16\n\x06weight\x18\x01 \x01(\x05R\x06weight\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.prefab.ConfigValueR\x05value\"\xa2\x01\n\x0eWeightedValues\x12>\n\x0fweighted_values\x18\x01 \x03(\x0b\x32\x15.prefab.WeightedValueR\x0eweightedValues\x12\x36\n\x15hash_by_property_name\x18\x02 \x01(\tH\x00R\x12hashByPropertyName\x88\x01\x01\x42\x18\n\x16_hash_by_property_name\"g\n\x0e\x41piKeyMetadata\x12\x1a\n\x06key_id\x18\x01 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12\x1c\n\x07user_id\x18\x03 \x01(\tH\x01R\x06userId\x88\x01\x01\x42\t\n\x07_key_idB\n\n\x08_user_idJ\x04\x08\x02\x10\x03\"\xea\x02\n\x07\x43onfigs\x12(\n\x07\x63onfigs\x18\x01 \x03(\x0b\x32\x0e.prefab.ConfigR\x07\x63onfigs\x12R\n\x16\x63onfig_service_pointer\x18\x02 \x01(\x0b\x32\x1c.prefab.ConfigServicePointerR\x14\x63onfigServicePointer\x12\x44\n\x0f\x61pikey_metadata\x18\x03 \x01(\x0b\x32\x16.prefab.ApiKeyMetadataH\x00R\x0e\x61pikeyMetadata\x88\x01\x01\x12@\n\x0f\x64\x65\x66\x61ult_context\x18\x04 \x01(\x0b\x32\x12.prefab.ContextSetH\x01R\x0e\x64\x65\x66\x61ultContext\x88\x01\x01\x12\"\n\nkeep_alive\x18\x05 \x01(\x08H\x02R\tkeepAlive\x88\x01\x01\x42\x12\n\x10_apikey_metadataB\x12\n\x10_default_contextB\r\n\x0b_keep_alive\"\xe3\x04\n\x06\x43onfig\x12\x0e\n\x02id\x18\x01 \x01(\x03R\x02id\x12\x1d\n\nproject_id\x18\x02 \x01(\x03R\tprojectId\x12\x10\n\x03key\x18\x03 \x01(\tR\x03key\x12\x30\n\nchanged_by\x18\x04 \x01(\x0b\x32\x11.prefab.ChangedByR\tchangedBy\x12%\n\x04rows\x18\x05 \x03(\x0b\x32\x11.prefab.ConfigRowR\x04rows\x12>\n\x10\x61llowable_values\x18\x06 \x03(\x0b\x32\x13.prefab.ConfigValueR\x0f\x61llowableValues\x12\x33\n\x0b\x63onfig_type\x18\x07 \x01(\x0e\x32\x12.prefab.ConfigTypeR\nconfigType\x12\x1e\n\x08\x64raft_id\x18\x08 \x01(\x03H\x00R\x07\x64raftId\x88\x01\x01\x12\x37\n\nvalue_type\x18\t \x01(\x0e\x32\x18.prefab.Config.ValueTypeR\tvalueType\x12+\n\x12send_to_client_sdk\x18\n \x01(\x08R\x0fsendToClientSdk\"\xb6\x01\n\tValueType\x12\x16\n\x12NOT_SET_VALUE_TYPE\x10\x00\x12\x07\n\x03INT\x10\x01\x12\n\n\x06STRING\x10\x02\x12\t\n\x05\x42YTES\x10\x03\x12\n\n\x06\x44OUBLE\x10\x04\x12\x08\n\x04\x42OOL\x10\x05\x12\x14\n\x10LIMIT_DEFINITION\x10\x07\x12\r\n\tLOG_LEVEL\x10\t\x12\x0f\n\x0bSTRING_LIST\x10\n\x12\r\n\tINT_RANGE\x10\x0b\x12\x0c\n\x08\x44URATION\x10\x0c\x12\x08\n\x04JSON\x10\rB\x0b\n\t_draft_id\"X\n\tChangedBy\x12\x17\n\x07user_id\x18\x01 \x01(\x03R\x06userId\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12\x1c\n\napi_key_id\x18\x03 \x01(\tR\x08\x61piKeyId\"\x92\x02\n\tConfigRow\x12)\n\x0eproject_env_id\x18\x01 \x01(\x03H\x00R\x0cprojectEnvId\x88\x01\x01\x12\x30\n\x06values\x18\x02 \x03(\x0b\x32\x18.prefab.ConditionalValueR\x06values\x12\x41\n\nproperties\x18\x03 \x03(\x0b\x32!.prefab.ConfigRow.PropertiesEntryR\nproperties\x1aR\n\x0fPropertiesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.prefab.ConfigValueR\x05value:\x02\x38\x01\x42\x11\n\x0f_project_env_id\"l\n\x10\x43onditionalValue\x12-\n\x08\x63riteria\x18\x01 \x03(\x0b\x32\x11.prefab.CriterionR\x08\x63riteria\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.prefab.ConfigValueR\x05value\"\xba\x03\n\tCriterion\x12#\n\rproperty_name\x18\x01 \x01(\tR\x0cpropertyName\x12?\n\x08operator\x18\x02 \x01(\x0e\x32#.prefab.Criterion.CriterionOperatorR\x08operator\x12\x39\n\x0evalue_to_match\x18\x03 \x01(\x0b\x32\x13.prefab.ConfigValueR\x0cvalueToMatch\"\x8b\x02\n\x11\x43riterionOperator\x12\x0b\n\x07NOT_SET\x10\x00\x12\x11\n\rLOOKUP_KEY_IN\x10\x01\x12\x15\n\x11LOOKUP_KEY_NOT_IN\x10\x02\x12\n\n\x06IN_SEG\x10\x03\x12\x0e\n\nNOT_IN_SEG\x10\x04\x12\x0f\n\x0b\x41LWAYS_TRUE\x10\x05\x12\x12\n\x0ePROP_IS_ONE_OF\x10\x06\x12\x16\n\x12PROP_IS_NOT_ONE_OF\x10\x07\x12\x19\n\x15PROP_ENDS_WITH_ONE_OF\x10\x08\x12!\n\x1dPROP_DOES_NOT_END_WITH_ONE_OF\x10\t\x12\x16\n\x12HIERARCHICAL_MATCH\x10\n\x12\x10\n\x0cIN_INT_RANGE\x10\x0b\"\xbb\x01\n\x07Loggers\x12(\n\x07loggers\x18\x01 \x03(\x0b\x32\x0e.prefab.LoggerR\x07loggers\x12\x19\n\x08start_at\x18\x02 \x01(\x03R\x07startAt\x12\x15\n\x06\x65nd_at\x18\x03 \x01(\x03R\x05\x65ndAt\x12#\n\rinstance_hash\x18\x04 \x01(\tR\x0cinstanceHash\x12!\n\tnamespace\x18\x05 \x01(\tH\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"\x93\x02\n\x06Logger\x12\x1f\n\x0blogger_name\x18\x01 \x01(\tR\nloggerName\x12\x1b\n\x06traces\x18\x02 \x01(\x03H\x00R\x06traces\x88\x01\x01\x12\x1b\n\x06\x64\x65\x62ugs\x18\x03 \x01(\x03H\x01R\x06\x64\x65\x62ugs\x88\x01\x01\x12\x19\n\x05infos\x18\x04 \x01(\x03H\x02R\x05infos\x88\x01\x01\x12\x19\n\x05warns\x18\x05 \x01(\x03H\x03R\x05warns\x88\x01\x01\x12\x1b\n\x06\x65rrors\x18\x06 \x01(\x03H\x04R\x06\x65rrors\x88\x01\x01\x12\x1b\n\x06\x66\x61tals\x18\x07 \x01(\x03H\x05R\x06\x66\x61tals\x88\x01\x01\x42\t\n\x07_tracesB\t\n\x07_debugsB\x08\n\x06_infosB\x08\n\x06_warnsB\t\n\x07_errorsB\t\n\x07_fatals\"\x16\n\x14LoggerReportResponse\"\xd5\x04\n\rLimitResponse\x12\x16\n\x06passed\x18\x01 \x01(\x08R\x06passed\x12\x1d\n\nexpires_at\x18\x02 \x01(\x03R\texpiresAt\x12%\n\x0e\x65nforced_group\x18\x03 \x01(\tR\renforcedGroup\x12%\n\x0e\x63urrent_bucket\x18\x04 \x01(\x03R\rcurrentBucket\x12!\n\x0cpolicy_group\x18\x05 \x01(\tR\x0bpolicyGroup\x12G\n\x0bpolicy_name\x18\x06 \x01(\x0e\x32&.prefab.LimitResponse.LimitPolicyNamesR\npolicyName\x12!\n\x0cpolicy_limit\x18\x07 \x01(\x05R\x0bpolicyLimit\x12\x16\n\x06\x61mount\x18\x08 \x01(\x03R\x06\x61mount\x12$\n\x0elimit_reset_at\x18\t \x01(\x03R\x0climitResetAt\x12\x46\n\x0csafety_level\x18\n \x01(\x0e\x32#.prefab.LimitDefinition.SafetyLevelR\x0bsafetyLevel\"\xa9\x01\n\x10LimitPolicyNames\x12\x0b\n\x07NOT_SET\x10\x00\x12\x14\n\x10SECONDLY_ROLLING\x10\x01\x12\x14\n\x10MINUTELY_ROLLING\x10\x03\x12\x12\n\x0eHOURLY_ROLLING\x10\x05\x12\x11\n\rDAILY_ROLLING\x10\x07\x12\x13\n\x0fMONTHLY_ROLLING\x10\x08\x12\x0c\n\x08INFINITE\x10\t\x12\x12\n\x0eYEARLY_ROLLING\x10\n\"\xed\x02\n\x0cLimitRequest\x12\x1d\n\naccount_id\x18\x01 \x01(\x03R\taccountId\x12%\n\x0e\x61\x63quire_amount\x18\x02 \x01(\x05R\racquireAmount\x12\x16\n\x06groups\x18\x03 \x03(\tR\x06groups\x12I\n\x0elimit_combiner\x18\x04 \x01(\x0e\x32\".prefab.LimitRequest.LimitCombinerR\rlimitCombiner\x12\x34\n\x16\x61llow_partial_response\x18\x05 \x01(\x08R\x14\x61llowPartialResponse\x12\x46\n\x0csafety_level\x18\x06 \x01(\x0e\x32#.prefab.LimitDefinition.SafetyLevelR\x0bsafetyLevel\"6\n\rLimitCombiner\x12\x0b\n\x07NOT_SET\x10\x00\x12\x0b\n\x07MINIMUM\x10\x01\x12\x0b\n\x07MAXIMUM\x10\x02\"9\n\nContextSet\x12+\n\x08\x63ontexts\x18\x01 \x03(\x0b\x32\x0f.prefab.ContextR\x08\x63ontexts\"\xb0\x01\n\x07\x43ontext\x12\x17\n\x04type\x18\x01 \x01(\tH\x00R\x04type\x88\x01\x01\x12\x33\n\x06values\x18\x02 \x03(\x0b\x32\x1b.prefab.Context.ValuesEntryR\x06values\x1aN\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.prefab.ConfigValueR\x05value:\x02\x38\x01\x42\x07\n\x05_type\"\xb3\x01\n\x08Identity\x12\x1b\n\x06lookup\x18\x01 \x01(\tH\x00R\x06lookup\x88\x01\x01\x12@\n\nattributes\x18\x02 \x03(\x0b\x32 .prefab.Identity.AttributesEntryR\nattributes\x1a=\n\x0f\x41ttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\t\n\x07_lookup\"\xa6\x03\n\x18\x43onfigEvaluationMetaData\x12-\n\x10\x63onfig_row_index\x18\x01 \x01(\x03H\x00R\x0e\x63onfigRowIndex\x88\x01\x01\x12;\n\x17\x63onditional_value_index\x18\x02 \x01(\x03H\x01R\x15\x63onditionalValueIndex\x88\x01\x01\x12\x35\n\x14weighted_value_index\x18\x03 \x01(\x03H\x02R\x12weightedValueIndex\x88\x01\x01\x12+\n\x04type\x18\x04 \x01(\x0e\x32\x12.prefab.ConfigTypeH\x03R\x04type\x88\x01\x01\x12\x13\n\x02id\x18\x05 \x01(\x03H\x04R\x02id\x88\x01\x01\x12<\n\nvalue_type\x18\x06 \x01(\x0e\x32\x18.prefab.Config.ValueTypeH\x05R\tvalueType\x88\x01\x01\x42\x13\n\x11_config_row_indexB\x1a\n\x18_conditional_value_indexB\x17\n\x15_weighted_value_indexB\x07\n\x05_typeB\x05\n\x03_idB\r\n\x0b_value_type\"\xf0\x03\n\x11\x43lientConfigValue\x12\x12\n\x03int\x18\x01 \x01(\x03H\x00R\x03int\x12\x18\n\x06string\x18\x02 \x01(\tH\x00R\x06string\x12\x18\n\x06\x64ouble\x18\x03 \x01(\x01H\x00R\x06\x64ouble\x12\x14\n\x04\x62ool\x18\x04 \x01(\x08H\x00R\x04\x62ool\x12/\n\tlog_level\x18\x05 \x01(\x0e\x32\x10.prefab.LogLevelH\x00R\x08logLevel\x12\x35\n\x0bstring_list\x18\x07 \x01(\x0b\x32\x12.prefab.StringListH\x00R\nstringList\x12/\n\tint_range\x18\x08 \x01(\x0b\x32\x10.prefab.IntRangeH\x00R\x08intRange\x12\x34\n\x08\x64uration\x18\t \x01(\x0b\x32\x16.prefab.ClientDurationH\x00R\x08\x64uration\x12\"\n\x04json\x18\n \x01(\x0b\x32\x0c.prefab.JsonH\x00R\x04json\x12\x63\n\x1a\x63onfig_evaluation_metadata\x18\x06 \x01(\x0b\x32 .prefab.ConfigEvaluationMetaDataH\x01R\x18\x63onfigEvaluationMetadata\x88\x01\x01\x42\x06\n\x04typeB\x1d\n\x1b_config_evaluation_metadata\"`\n\x0e\x43lientDuration\x12\x18\n\x07seconds\x18\x01 \x01(\x03R\x07seconds\x12\x14\n\x05nanos\x18\x02 \x01(\x05R\x05nanos\x12\x1e\n\ndefinition\x18\x03 \x01(\tR\ndefinition\"\xd8\x02\n\x11\x43onfigEvaluations\x12=\n\x06values\x18\x01 \x03(\x0b\x32%.prefab.ConfigEvaluations.ValuesEntryR\x06values\x12\x44\n\x0f\x61pikey_metadata\x18\x02 \x01(\x0b\x32\x16.prefab.ApiKeyMetadataH\x00R\x0e\x61pikeyMetadata\x88\x01\x01\x12@\n\x0f\x64\x65\x66\x61ult_context\x18\x03 \x01(\x0b\x32\x12.prefab.ContextSetH\x01R\x0e\x64\x65\x66\x61ultContext\x88\x01\x01\x1aT\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12/\n\x05value\x18\x02 \x01(\x0b\x32\x19.prefab.ClientConfigValueR\x05value:\x02\x38\x01\x42\x12\n\x10_apikey_metadataB\x12\n\x10_default_context\"\xf4\x02\n\x0fLimitDefinition\x12G\n\x0bpolicy_name\x18\x02 \x01(\x0e\x32&.prefab.LimitResponse.LimitPolicyNamesR\npolicyName\x12\x14\n\x05limit\x18\x03 \x01(\x05R\x05limit\x12\x14\n\x05\x62urst\x18\x04 \x01(\x05R\x05\x62urst\x12\x1d\n\naccount_id\x18\x05 \x01(\x03R\taccountId\x12#\n\rlast_modified\x18\x06 \x01(\x03R\x0clastModified\x12\x1e\n\nreturnable\x18\x07 \x01(\x08R\nreturnable\x12\x46\n\x0csafety_level\x18\x08 \x01(\x0e\x32#.prefab.LimitDefinition.SafetyLevelR\x0bsafetyLevel\"@\n\x0bSafetyLevel\x12\x0b\n\x07NOT_SET\x10\x00\x12\x12\n\x0eL4_BEST_EFFORT\x10\x04\x12\x10\n\x0cL5_BOMBPROOF\x10\x05\"M\n\x10LimitDefinitions\x12\x39\n\x0b\x64\x65\x66initions\x18\x01 \x03(\x0b\x32\x17.prefab.LimitDefinitionR\x0b\x64\x65\x66initions\"\xc8\x01\n\x0f\x42ufferedRequest\x12\x1d\n\naccount_id\x18\x01 \x01(\x03R\taccountId\x12\x16\n\x06method\x18\x02 \x01(\tR\x06method\x12\x10\n\x03uri\x18\x03 \x01(\tR\x03uri\x12\x12\n\x04\x62ody\x18\x04 \x01(\tR\x04\x62ody\x12!\n\x0climit_groups\x18\x05 \x03(\tR\x0blimitGroups\x12!\n\x0c\x63ontent_type\x18\x06 \x01(\tR\x0b\x63ontentType\x12\x12\n\x04\x66ifo\x18\x07 \x01(\x08R\x04\x66ifo\"\xde\x01\n\x0c\x42\x61tchRequest\x12\x1d\n\naccount_id\x18\x01 \x01(\x03R\taccountId\x12\x16\n\x06method\x18\x02 \x01(\tR\x06method\x12\x10\n\x03uri\x18\x03 \x01(\tR\x03uri\x12\x12\n\x04\x62ody\x18\x04 \x01(\tR\x04\x62ody\x12!\n\x0climit_groups\x18\x05 \x03(\tR\x0blimitGroups\x12%\n\x0e\x62\x61tch_template\x18\x06 \x01(\tR\rbatchTemplate\x12\'\n\x0f\x62\x61tch_separator\x18\x07 \x01(\tR\x0e\x62\x61tchSeparator\")\n\rBasicResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"C\n\x10\x43reationResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x15\n\x06new_id\x18\x02 \x01(\x03R\x05newId\"\x9b\x01\n\x07IdBlock\x12\x1d\n\nproject_id\x18\x01 \x01(\x03R\tprojectId\x12$\n\x0eproject_env_id\x18\x02 \x01(\x03R\x0cprojectEnvId\x12#\n\rsequence_name\x18\x03 \x01(\tR\x0csequenceName\x12\x14\n\x05start\x18\x04 \x01(\x03R\x05start\x12\x10\n\x03\x65nd\x18\x05 \x01(\x03R\x03\x65nd\"\x8e\x01\n\x0eIdBlockRequest\x12\x1d\n\nproject_id\x18\x01 \x01(\x03R\tprojectId\x12$\n\x0eproject_env_id\x18\x02 \x01(\x03R\x0cprojectEnvId\x12#\n\rsequence_name\x18\x03 \x01(\tR\x0csequenceName\x12\x12\n\x04size\x18\x04 \x01(\x03R\x04size\"\xa8\x01\n\x0c\x43ontextShape\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x45\n\x0b\x66ield_types\x18\x02 \x03(\x0b\x32$.prefab.ContextShape.FieldTypesEntryR\nfieldTypes\x1a=\n\x0f\x46ieldTypesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\"n\n\rContextShapes\x12,\n\x06shapes\x18\x01 \x03(\x0b\x32\x14.prefab.ContextShapeR\x06shapes\x12!\n\tnamespace\x18\x02 \x01(\tH\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"T\n\rEvaluatedKeys\x12\x12\n\x04keys\x18\x01 \x03(\tR\x04keys\x12!\n\tnamespace\x18\x02 \x01(\tH\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"\xc3\x01\n\x0f\x45valuatedConfig\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12%\n\x0e\x63onfig_version\x18\x02 \x01(\x03R\rconfigVersion\x12+\n\x06result\x18\x03 \x01(\x0b\x32\x13.prefab.ConfigValueR\x06result\x12,\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x12.prefab.ContextSetR\x07\x63ontext\x12\x1c\n\ttimestamp\x18\x05 \x01(\x03R\ttimestamp\"E\n\x10\x45valuatedConfigs\x12\x31\n\x07\x63onfigs\x18\x01 \x03(\x0b\x32\x17.prefab.EvaluatedConfigR\x07\x63onfigs\"\xb6\x04\n\x17\x43onfigEvaluationCounter\x12\x14\n\x05\x63ount\x18\x01 \x01(\x03R\x05\x63ount\x12 \n\tconfig_id\x18\x02 \x01(\x03H\x00R\x08\x63onfigId\x88\x01\x01\x12*\n\x0eselected_index\x18\x03 \x01(\rH\x01R\rselectedIndex\x88\x01\x01\x12?\n\x0eselected_value\x18\x04 \x01(\x0b\x32\x13.prefab.ConfigValueH\x02R\rselectedValue\x88\x01\x01\x12-\n\x10\x63onfig_row_index\x18\x05 \x01(\rH\x03R\x0e\x63onfigRowIndex\x88\x01\x01\x12;\n\x17\x63onditional_value_index\x18\x06 \x01(\rH\x04R\x15\x63onditionalValueIndex\x88\x01\x01\x12\x35\n\x14weighted_value_index\x18\x07 \x01(\rH\x05R\x12weightedValueIndex\x88\x01\x01\x12>\n\x06reason\x18\x08 \x01(\x0e\x32&.prefab.ConfigEvaluationCounter.ReasonR\x06reason\"\x15\n\x06Reason\x12\x0b\n\x07UNKNOWN\x10\x00\x42\x0c\n\n_config_idB\x11\n\x0f_selected_indexB\x11\n\x0f_selected_valueB\x13\n\x11_config_row_indexB\x1a\n\x18_conditional_value_indexB\x17\n\x15_weighted_value_index\"\x90\x01\n\x17\x43onfigEvaluationSummary\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12&\n\x04type\x18\x02 \x01(\x0e\x32\x12.prefab.ConfigTypeR\x04type\x12;\n\x08\x63ounters\x18\x03 \x03(\x0b\x32\x1f.prefab.ConfigEvaluationCounterR\x08\x63ounters\"\x82\x01\n\x19\x43onfigEvaluationSummaries\x12\x14\n\x05start\x18\x01 \x01(\x03R\x05start\x12\x10\n\x03\x65nd\x18\x02 \x01(\x03R\x03\x65nd\x12=\n\tsummaries\x18\x03 \x03(\x0b\x32\x1f.prefab.ConfigEvaluationSummaryR\tsummaries\"s\n\x15LoggersTelemetryEvent\x12(\n\x07loggers\x18\x01 \x03(\x0b\x32\x0e.prefab.LoggerR\x07loggers\x12\x19\n\x08start_at\x18\x02 \x01(\x03R\x07startAt\x12\x15\n\x06\x65nd_at\x18\x03 \x01(\x03R\x05\x65ndAt\"\xd9\x02\n\x0eTelemetryEvent\x12\x41\n\tsummaries\x18\x02 \x01(\x0b\x32!.prefab.ConfigEvaluationSummariesH\x00R\tsummaries\x12\x44\n\x10\x65xample_contexts\x18\x03 \x01(\x0b\x32\x17.prefab.ExampleContextsH\x00R\x0f\x65xampleContexts\x12\x38\n\x0c\x63lient_stats\x18\x04 \x01(\x0b\x32\x13.prefab.ClientStatsH\x00R\x0b\x63lientStats\x12\x39\n\x07loggers\x18\x05 \x01(\x0b\x32\x1d.prefab.LoggersTelemetryEventH\x00R\x07loggers\x12>\n\x0e\x63ontext_shapes\x18\x06 \x01(\x0b\x32\x15.prefab.ContextShapesH\x00R\rcontextShapesB\t\n\x07payload\"f\n\x0fTelemetryEvents\x12#\n\rinstance_hash\x18\x01 \x01(\tR\x0cinstanceHash\x12.\n\x06\x65vents\x18\x02 \x03(\x0b\x32\x16.prefab.TelemetryEventR\x06\x65vents\"3\n\x17TelemetryEventsResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\"E\n\x0f\x45xampleContexts\x12\x32\n\x08\x65xamples\x18\x01 \x03(\x0b\x32\x16.prefab.ExampleContextR\x08\x65xamples\"b\n\x0e\x45xampleContext\x12\x1c\n\ttimestamp\x18\x01 \x01(\x03R\ttimestamp\x12\x32\n\ncontextSet\x18\x02 \x01(\x0b\x32\x12.prefab.ContextSetR\ncontextSet\"e\n\x0b\x43lientStats\x12\x14\n\x05start\x18\x01 \x01(\x03R\x05start\x12\x10\n\x03\x65nd\x18\x02 \x01(\x03R\x03\x65nd\x12.\n\x13\x64ropped_event_count\x18\x03 \x01(\x04R\x11\x64roppedEventCount*:\n\x0eProvidedSource\x12\x1b\n\x17PROVIDED_SOURCE_NOT_SET\x10\x00\x12\x0b\n\x07\x45NV_VAR\x10\x01*\x82\x01\n\nConfigType\x12\x17\n\x13NOT_SET_CONFIG_TYPE\x10\x00\x12\n\n\x06\x43ONFIG\x10\x01\x12\x10\n\x0c\x46\x45\x41TURE_FLAG\x10\x02\x12\r\n\tLOG_LEVEL\x10\x03\x12\x0b\n\x07SEGMENT\x10\x04\x12\x14\n\x10LIMIT_DEFINITION\x10\x05\x12\x0b\n\x07\x44\x45LETED\x10\x06*a\n\x08LogLevel\x12\x15\n\x11NOT_SET_LOG_LEVEL\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x08\n\x04WARN\x10\x05\x12\t\n\x05\x45RROR\x10\x06\x12\t\n\x05\x46\x41TAL\x10\t*G\n\tOnFailure\x12\x0b\n\x07NOT_SET\x10\x00\x12\x10\n\x0cLOG_AND_PASS\x10\x01\x12\x10\n\x0cLOG_AND_FAIL\x10\x02\x12\t\n\x05THROW\x10\x03\x42L\n\x13\x63loud.prefab.domainB\x06PrefabZ-github.com/prefab-cloud/prefab-cloud-go/protob\x06proto3') +DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0cprefab.proto\x12\x06prefab\"{\n\x14\x43onfigServicePointer\x12\x1d\n\nproject_id\x18\x01 \x01(\x03R\tprojectId\x12\x1e\n\x0bstart_at_id\x18\x02 \x01(\x03R\tstartAtId\x12$\n\x0eproject_env_id\x18\x03 \x01(\x03R\x0cprojectEnvId\"\xa7\x05\n\x0b\x43onfigValue\x12\x12\n\x03int\x18\x01 \x01(\x03H\x00R\x03int\x12\x18\n\x06string\x18\x02 \x01(\tH\x00R\x06string\x12\x16\n\x05\x62ytes\x18\x03 \x01(\x0cH\x00R\x05\x62ytes\x12\x18\n\x06\x64ouble\x18\x04 \x01(\x01H\x00R\x06\x64ouble\x12\x14\n\x04\x62ool\x18\x05 \x01(\x08H\x00R\x04\x62ool\x12\x41\n\x0fweighted_values\x18\x06 \x01(\x0b\x32\x16.prefab.WeightedValuesH\x00R\x0eweightedValues\x12\x44\n\x10limit_definition\x18\x07 \x01(\x0b\x32\x17.prefab.LimitDefinitionH\x00R\x0flimitDefinition\x12/\n\tlog_level\x18\t \x01(\x0e\x32\x10.prefab.LogLevelH\x00R\x08logLevel\x12\x35\n\x0bstring_list\x18\n \x01(\x0b\x32\x12.prefab.StringListH\x00R\nstringList\x12/\n\tint_range\x18\x0b \x01(\x0b\x32\x10.prefab.IntRangeH\x00R\x08intRange\x12.\n\x08provided\x18\x0c \x01(\x0b\x32\x10.prefab.ProvidedH\x00R\x08provided\x12\x31\n\x08\x64uration\x18\x0f \x01(\x0b\x32\x13.prefab.IsoDurationH\x00R\x08\x64uration\x12\"\n\x04json\x18\x10 \x01(\x0b\x32\x0c.prefab.JsonH\x00R\x04json\x12\'\n\x0c\x63onfidential\x18\r \x01(\x08H\x01R\x0c\x63onfidential\x88\x01\x01\x12&\n\x0c\x64\x65\x63rypt_with\x18\x0e \x01(\tH\x02R\x0b\x64\x65\x63ryptWith\x88\x01\x01\x42\x06\n\x04typeB\x0f\n\r_confidentialB\x0f\n\r_decrypt_with\"\x1a\n\x04Json\x12\x12\n\x04json\x18\x01 \x01(\tR\x04json\"-\n\x0bIsoDuration\x12\x1e\n\ndefinition\x18\x01 \x01(\tR\ndefinition\"r\n\x08Provided\x12\x33\n\x06source\x18\x01 \x01(\x0e\x32\x16.prefab.ProvidedSourceH\x00R\x06source\x88\x01\x01\x12\x1b\n\x06lookup\x18\x02 \x01(\tH\x01R\x06lookup\x88\x01\x01\x42\t\n\x07_sourceB\t\n\x07_lookup\"N\n\x08IntRange\x12\x19\n\x05start\x18\x01 \x01(\x03H\x00R\x05start\x88\x01\x01\x12\x15\n\x03\x65nd\x18\x02 \x01(\x03H\x01R\x03\x65nd\x88\x01\x01\x42\x08\n\x06_startB\x06\n\x04_end\"$\n\nStringList\x12\x16\n\x06values\x18\x01 \x03(\tR\x06values\"R\n\rWeightedValue\x12\x16\n\x06weight\x18\x01 \x01(\x05R\x06weight\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.prefab.ConfigValueR\x05value\"\xa2\x01\n\x0eWeightedValues\x12>\n\x0fweighted_values\x18\x01 \x03(\x0b\x32\x15.prefab.WeightedValueR\x0eweightedValues\x12\x36\n\x15hash_by_property_name\x18\x02 \x01(\tH\x00R\x12hashByPropertyName\x88\x01\x01\x42\x18\n\x16_hash_by_property_name\"g\n\x0e\x41piKeyMetadata\x12\x1a\n\x06key_id\x18\x01 \x01(\tH\x00R\x05keyId\x88\x01\x01\x12\x1c\n\x07user_id\x18\x03 \x01(\tH\x01R\x06userId\x88\x01\x01\x42\t\n\x07_key_idB\n\n\x08_user_idJ\x04\x08\x02\x10\x03\"\xea\x02\n\x07\x43onfigs\x12(\n\x07\x63onfigs\x18\x01 \x03(\x0b\x32\x0e.prefab.ConfigR\x07\x63onfigs\x12R\n\x16\x63onfig_service_pointer\x18\x02 \x01(\x0b\x32\x1c.prefab.ConfigServicePointerR\x14\x63onfigServicePointer\x12\x44\n\x0f\x61pikey_metadata\x18\x03 \x01(\x0b\x32\x16.prefab.ApiKeyMetadataH\x00R\x0e\x61pikeyMetadata\x88\x01\x01\x12@\n\x0f\x64\x65\x66\x61ult_context\x18\x04 \x01(\x0b\x32\x12.prefab.ContextSetH\x01R\x0e\x64\x65\x66\x61ultContext\x88\x01\x01\x12\"\n\nkeep_alive\x18\x05 \x01(\x08H\x02R\tkeepAlive\x88\x01\x01\x42\x12\n\x10_apikey_metadataB\x12\n\x10_default_contextB\r\n\x0b_keep_alive\"\xe3\x04\n\x06\x43onfig\x12\x0e\n\x02id\x18\x01 \x01(\x03R\x02id\x12\x1d\n\nproject_id\x18\x02 \x01(\x03R\tprojectId\x12\x10\n\x03key\x18\x03 \x01(\tR\x03key\x12\x30\n\nchanged_by\x18\x04 \x01(\x0b\x32\x11.prefab.ChangedByR\tchangedBy\x12%\n\x04rows\x18\x05 \x03(\x0b\x32\x11.prefab.ConfigRowR\x04rows\x12>\n\x10\x61llowable_values\x18\x06 \x03(\x0b\x32\x13.prefab.ConfigValueR\x0f\x61llowableValues\x12\x33\n\x0b\x63onfig_type\x18\x07 \x01(\x0e\x32\x12.prefab.ConfigTypeR\nconfigType\x12\x1e\n\x08\x64raft_id\x18\x08 \x01(\x03H\x00R\x07\x64raftId\x88\x01\x01\x12\x37\n\nvalue_type\x18\t \x01(\x0e\x32\x18.prefab.Config.ValueTypeR\tvalueType\x12+\n\x12send_to_client_sdk\x18\n \x01(\x08R\x0fsendToClientSdk\"\xb6\x01\n\tValueType\x12\x16\n\x12NOT_SET_VALUE_TYPE\x10\x00\x12\x07\n\x03INT\x10\x01\x12\n\n\x06STRING\x10\x02\x12\t\n\x05\x42YTES\x10\x03\x12\n\n\x06\x44OUBLE\x10\x04\x12\x08\n\x04\x42OOL\x10\x05\x12\x14\n\x10LIMIT_DEFINITION\x10\x07\x12\r\n\tLOG_LEVEL\x10\t\x12\x0f\n\x0bSTRING_LIST\x10\n\x12\r\n\tINT_RANGE\x10\x0b\x12\x0c\n\x08\x44URATION\x10\x0c\x12\x08\n\x04JSON\x10\rB\x0b\n\t_draft_id\"X\n\tChangedBy\x12\x17\n\x07user_id\x18\x01 \x01(\x03R\x06userId\x12\x14\n\x05\x65mail\x18\x02 \x01(\tR\x05\x65mail\x12\x1c\n\napi_key_id\x18\x03 \x01(\tR\x08\x61piKeyId\"\x92\x02\n\tConfigRow\x12)\n\x0eproject_env_id\x18\x01 \x01(\x03H\x00R\x0cprojectEnvId\x88\x01\x01\x12\x30\n\x06values\x18\x02 \x03(\x0b\x32\x18.prefab.ConditionalValueR\x06values\x12\x41\n\nproperties\x18\x03 \x03(\x0b\x32!.prefab.ConfigRow.PropertiesEntryR\nproperties\x1aR\n\x0fPropertiesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.prefab.ConfigValueR\x05value:\x02\x38\x01\x42\x11\n\x0f_project_env_id\"l\n\x10\x43onditionalValue\x12-\n\x08\x63riteria\x18\x01 \x03(\x0b\x32\x11.prefab.CriterionR\x08\x63riteria\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.prefab.ConfigValueR\x05value\"\xc1\x05\n\tCriterion\x12#\n\rproperty_name\x18\x01 \x01(\tR\x0cpropertyName\x12?\n\x08operator\x18\x02 \x01(\x0e\x32#.prefab.Criterion.CriterionOperatorR\x08operator\x12\x39\n\x0evalue_to_match\x18\x03 \x01(\x0b\x32\x13.prefab.ConfigValueR\x0cvalueToMatch\"\x92\x04\n\x11\x43riterionOperator\x12\x0b\n\x07NOT_SET\x10\x00\x12\x11\n\rLOOKUP_KEY_IN\x10\x01\x12\x15\n\x11LOOKUP_KEY_NOT_IN\x10\x02\x12\n\n\x06IN_SEG\x10\x03\x12\x0e\n\nNOT_IN_SEG\x10\x04\x12\x0f\n\x0b\x41LWAYS_TRUE\x10\x05\x12\x12\n\x0ePROP_IS_ONE_OF\x10\x06\x12\x16\n\x12PROP_IS_NOT_ONE_OF\x10\x07\x12\x19\n\x15PROP_ENDS_WITH_ONE_OF\x10\x08\x12!\n\x1dPROP_DOES_NOT_END_WITH_ONE_OF\x10\t\x12\x16\n\x12HIERARCHICAL_MATCH\x10\n\x12\x10\n\x0cIN_INT_RANGE\x10\x0b\x12\x1b\n\x17PROP_STARTS_WITH_ONE_OF\x10\x0c\x12#\n\x1fPROP_DOES_NOT_START_WITH_ONE_OF\x10\r\x12\x18\n\x14PROP_CONTAINS_ONE_OF\x10\x0e\x12 \n\x1cPROP_DOES_NOT_CONTAIN_ONE_OF\x10\x0f\x12\x12\n\x0ePROP_LESS_THAN\x10\x10\x12\x1b\n\x17PROP_LESS_THAN_OR_EQUAL\x10\x11\x12\x15\n\x11PROP_GREATER_THAN\x10\x12\x12\x1e\n\x1aPROP_GREATER_THAN_OR_EQUAL\x10\x13\x12\x0f\n\x0bPROP_BEFORE\x10\x14\x12\x0e\n\nPROP_AFTER\x10\x15\"\xbb\x01\n\x07Loggers\x12(\n\x07loggers\x18\x01 \x03(\x0b\x32\x0e.prefab.LoggerR\x07loggers\x12\x19\n\x08start_at\x18\x02 \x01(\x03R\x07startAt\x12\x15\n\x06\x65nd_at\x18\x03 \x01(\x03R\x05\x65ndAt\x12#\n\rinstance_hash\x18\x04 \x01(\tR\x0cinstanceHash\x12!\n\tnamespace\x18\x05 \x01(\tH\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"\x93\x02\n\x06Logger\x12\x1f\n\x0blogger_name\x18\x01 \x01(\tR\nloggerName\x12\x1b\n\x06traces\x18\x02 \x01(\x03H\x00R\x06traces\x88\x01\x01\x12\x1b\n\x06\x64\x65\x62ugs\x18\x03 \x01(\x03H\x01R\x06\x64\x65\x62ugs\x88\x01\x01\x12\x19\n\x05infos\x18\x04 \x01(\x03H\x02R\x05infos\x88\x01\x01\x12\x19\n\x05warns\x18\x05 \x01(\x03H\x03R\x05warns\x88\x01\x01\x12\x1b\n\x06\x65rrors\x18\x06 \x01(\x03H\x04R\x06\x65rrors\x88\x01\x01\x12\x1b\n\x06\x66\x61tals\x18\x07 \x01(\x03H\x05R\x06\x66\x61tals\x88\x01\x01\x42\t\n\x07_tracesB\t\n\x07_debugsB\x08\n\x06_infosB\x08\n\x06_warnsB\t\n\x07_errorsB\t\n\x07_fatals\"\x16\n\x14LoggerReportResponse\"\xd5\x04\n\rLimitResponse\x12\x16\n\x06passed\x18\x01 \x01(\x08R\x06passed\x12\x1d\n\nexpires_at\x18\x02 \x01(\x03R\texpiresAt\x12%\n\x0e\x65nforced_group\x18\x03 \x01(\tR\renforcedGroup\x12%\n\x0e\x63urrent_bucket\x18\x04 \x01(\x03R\rcurrentBucket\x12!\n\x0cpolicy_group\x18\x05 \x01(\tR\x0bpolicyGroup\x12G\n\x0bpolicy_name\x18\x06 \x01(\x0e\x32&.prefab.LimitResponse.LimitPolicyNamesR\npolicyName\x12!\n\x0cpolicy_limit\x18\x07 \x01(\x05R\x0bpolicyLimit\x12\x16\n\x06\x61mount\x18\x08 \x01(\x03R\x06\x61mount\x12$\n\x0elimit_reset_at\x18\t \x01(\x03R\x0climitResetAt\x12\x46\n\x0csafety_level\x18\n \x01(\x0e\x32#.prefab.LimitDefinition.SafetyLevelR\x0bsafetyLevel\"\xa9\x01\n\x10LimitPolicyNames\x12\x0b\n\x07NOT_SET\x10\x00\x12\x14\n\x10SECONDLY_ROLLING\x10\x01\x12\x14\n\x10MINUTELY_ROLLING\x10\x03\x12\x12\n\x0eHOURLY_ROLLING\x10\x05\x12\x11\n\rDAILY_ROLLING\x10\x07\x12\x13\n\x0fMONTHLY_ROLLING\x10\x08\x12\x0c\n\x08INFINITE\x10\t\x12\x12\n\x0eYEARLY_ROLLING\x10\n\"\xed\x02\n\x0cLimitRequest\x12\x1d\n\naccount_id\x18\x01 \x01(\x03R\taccountId\x12%\n\x0e\x61\x63quire_amount\x18\x02 \x01(\x05R\racquireAmount\x12\x16\n\x06groups\x18\x03 \x03(\tR\x06groups\x12I\n\x0elimit_combiner\x18\x04 \x01(\x0e\x32\".prefab.LimitRequest.LimitCombinerR\rlimitCombiner\x12\x34\n\x16\x61llow_partial_response\x18\x05 \x01(\x08R\x14\x61llowPartialResponse\x12\x46\n\x0csafety_level\x18\x06 \x01(\x0e\x32#.prefab.LimitDefinition.SafetyLevelR\x0bsafetyLevel\"6\n\rLimitCombiner\x12\x0b\n\x07NOT_SET\x10\x00\x12\x0b\n\x07MINIMUM\x10\x01\x12\x0b\n\x07MAXIMUM\x10\x02\"9\n\nContextSet\x12+\n\x08\x63ontexts\x18\x01 \x03(\x0b\x32\x0f.prefab.ContextR\x08\x63ontexts\"\xb0\x01\n\x07\x43ontext\x12\x17\n\x04type\x18\x01 \x01(\tH\x00R\x04type\x88\x01\x01\x12\x33\n\x06values\x18\x02 \x03(\x0b\x32\x1b.prefab.Context.ValuesEntryR\x06values\x1aN\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12)\n\x05value\x18\x02 \x01(\x0b\x32\x13.prefab.ConfigValueR\x05value:\x02\x38\x01\x42\x07\n\x05_type\"\xb3\x01\n\x08Identity\x12\x1b\n\x06lookup\x18\x01 \x01(\tH\x00R\x06lookup\x88\x01\x01\x12@\n\nattributes\x18\x02 \x03(\x0b\x32 .prefab.Identity.AttributesEntryR\nattributes\x1a=\n\x0f\x41ttributesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\tR\x05value:\x02\x38\x01\x42\t\n\x07_lookup\"\xa6\x03\n\x18\x43onfigEvaluationMetaData\x12-\n\x10\x63onfig_row_index\x18\x01 \x01(\x03H\x00R\x0e\x63onfigRowIndex\x88\x01\x01\x12;\n\x17\x63onditional_value_index\x18\x02 \x01(\x03H\x01R\x15\x63onditionalValueIndex\x88\x01\x01\x12\x35\n\x14weighted_value_index\x18\x03 \x01(\x03H\x02R\x12weightedValueIndex\x88\x01\x01\x12+\n\x04type\x18\x04 \x01(\x0e\x32\x12.prefab.ConfigTypeH\x03R\x04type\x88\x01\x01\x12\x13\n\x02id\x18\x05 \x01(\x03H\x04R\x02id\x88\x01\x01\x12<\n\nvalue_type\x18\x06 \x01(\x0e\x32\x18.prefab.Config.ValueTypeH\x05R\tvalueType\x88\x01\x01\x42\x13\n\x11_config_row_indexB\x1a\n\x18_conditional_value_indexB\x17\n\x15_weighted_value_indexB\x07\n\x05_typeB\x05\n\x03_idB\r\n\x0b_value_type\"\xf0\x03\n\x11\x43lientConfigValue\x12\x12\n\x03int\x18\x01 \x01(\x03H\x00R\x03int\x12\x18\n\x06string\x18\x02 \x01(\tH\x00R\x06string\x12\x18\n\x06\x64ouble\x18\x03 \x01(\x01H\x00R\x06\x64ouble\x12\x14\n\x04\x62ool\x18\x04 \x01(\x08H\x00R\x04\x62ool\x12/\n\tlog_level\x18\x05 \x01(\x0e\x32\x10.prefab.LogLevelH\x00R\x08logLevel\x12\x35\n\x0bstring_list\x18\x07 \x01(\x0b\x32\x12.prefab.StringListH\x00R\nstringList\x12/\n\tint_range\x18\x08 \x01(\x0b\x32\x10.prefab.IntRangeH\x00R\x08intRange\x12\x34\n\x08\x64uration\x18\t \x01(\x0b\x32\x16.prefab.ClientDurationH\x00R\x08\x64uration\x12\"\n\x04json\x18\n \x01(\x0b\x32\x0c.prefab.JsonH\x00R\x04json\x12\x63\n\x1a\x63onfig_evaluation_metadata\x18\x06 \x01(\x0b\x32 .prefab.ConfigEvaluationMetaDataH\x01R\x18\x63onfigEvaluationMetadata\x88\x01\x01\x42\x06\n\x04typeB\x1d\n\x1b_config_evaluation_metadata\"`\n\x0e\x43lientDuration\x12\x18\n\x07seconds\x18\x01 \x01(\x03R\x07seconds\x12\x14\n\x05nanos\x18\x02 \x01(\x05R\x05nanos\x12\x1e\n\ndefinition\x18\x03 \x01(\tR\ndefinition\"\xd8\x02\n\x11\x43onfigEvaluations\x12=\n\x06values\x18\x01 \x03(\x0b\x32%.prefab.ConfigEvaluations.ValuesEntryR\x06values\x12\x44\n\x0f\x61pikey_metadata\x18\x02 \x01(\x0b\x32\x16.prefab.ApiKeyMetadataH\x00R\x0e\x61pikeyMetadata\x88\x01\x01\x12@\n\x0f\x64\x65\x66\x61ult_context\x18\x03 \x01(\x0b\x32\x12.prefab.ContextSetH\x01R\x0e\x64\x65\x66\x61ultContext\x88\x01\x01\x1aT\n\x0bValuesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12/\n\x05value\x18\x02 \x01(\x0b\x32\x19.prefab.ClientConfigValueR\x05value:\x02\x38\x01\x42\x12\n\x10_apikey_metadataB\x12\n\x10_default_context\"\xf4\x02\n\x0fLimitDefinition\x12G\n\x0bpolicy_name\x18\x02 \x01(\x0e\x32&.prefab.LimitResponse.LimitPolicyNamesR\npolicyName\x12\x14\n\x05limit\x18\x03 \x01(\x05R\x05limit\x12\x14\n\x05\x62urst\x18\x04 \x01(\x05R\x05\x62urst\x12\x1d\n\naccount_id\x18\x05 \x01(\x03R\taccountId\x12#\n\rlast_modified\x18\x06 \x01(\x03R\x0clastModified\x12\x1e\n\nreturnable\x18\x07 \x01(\x08R\nreturnable\x12\x46\n\x0csafety_level\x18\x08 \x01(\x0e\x32#.prefab.LimitDefinition.SafetyLevelR\x0bsafetyLevel\"@\n\x0bSafetyLevel\x12\x0b\n\x07NOT_SET\x10\x00\x12\x12\n\x0eL4_BEST_EFFORT\x10\x04\x12\x10\n\x0cL5_BOMBPROOF\x10\x05\"M\n\x10LimitDefinitions\x12\x39\n\x0b\x64\x65\x66initions\x18\x01 \x03(\x0b\x32\x17.prefab.LimitDefinitionR\x0b\x64\x65\x66initions\"\xc8\x01\n\x0f\x42ufferedRequest\x12\x1d\n\naccount_id\x18\x01 \x01(\x03R\taccountId\x12\x16\n\x06method\x18\x02 \x01(\tR\x06method\x12\x10\n\x03uri\x18\x03 \x01(\tR\x03uri\x12\x12\n\x04\x62ody\x18\x04 \x01(\tR\x04\x62ody\x12!\n\x0climit_groups\x18\x05 \x03(\tR\x0blimitGroups\x12!\n\x0c\x63ontent_type\x18\x06 \x01(\tR\x0b\x63ontentType\x12\x12\n\x04\x66ifo\x18\x07 \x01(\x08R\x04\x66ifo\"\xde\x01\n\x0c\x42\x61tchRequest\x12\x1d\n\naccount_id\x18\x01 \x01(\x03R\taccountId\x12\x16\n\x06method\x18\x02 \x01(\tR\x06method\x12\x10\n\x03uri\x18\x03 \x01(\tR\x03uri\x12\x12\n\x04\x62ody\x18\x04 \x01(\tR\x04\x62ody\x12!\n\x0climit_groups\x18\x05 \x03(\tR\x0blimitGroups\x12%\n\x0e\x62\x61tch_template\x18\x06 \x01(\tR\rbatchTemplate\x12\'\n\x0f\x62\x61tch_separator\x18\x07 \x01(\tR\x0e\x62\x61tchSeparator\")\n\rBasicResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\"C\n\x10\x43reationResponse\x12\x18\n\x07message\x18\x01 \x01(\tR\x07message\x12\x15\n\x06new_id\x18\x02 \x01(\x03R\x05newId\"\x9b\x01\n\x07IdBlock\x12\x1d\n\nproject_id\x18\x01 \x01(\x03R\tprojectId\x12$\n\x0eproject_env_id\x18\x02 \x01(\x03R\x0cprojectEnvId\x12#\n\rsequence_name\x18\x03 \x01(\tR\x0csequenceName\x12\x14\n\x05start\x18\x04 \x01(\x03R\x05start\x12\x10\n\x03\x65nd\x18\x05 \x01(\x03R\x03\x65nd\"\x8e\x01\n\x0eIdBlockRequest\x12\x1d\n\nproject_id\x18\x01 \x01(\x03R\tprojectId\x12$\n\x0eproject_env_id\x18\x02 \x01(\x03R\x0cprojectEnvId\x12#\n\rsequence_name\x18\x03 \x01(\tR\x0csequenceName\x12\x12\n\x04size\x18\x04 \x01(\x03R\x04size\"\xa8\x01\n\x0c\x43ontextShape\x12\x12\n\x04name\x18\x01 \x01(\tR\x04name\x12\x45\n\x0b\x66ield_types\x18\x02 \x03(\x0b\x32$.prefab.ContextShape.FieldTypesEntryR\nfieldTypes\x1a=\n\x0f\x46ieldTypesEntry\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n\x05value\x18\x02 \x01(\x05R\x05value:\x02\x38\x01\"n\n\rContextShapes\x12,\n\x06shapes\x18\x01 \x03(\x0b\x32\x14.prefab.ContextShapeR\x06shapes\x12!\n\tnamespace\x18\x02 \x01(\tH\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"T\n\rEvaluatedKeys\x12\x12\n\x04keys\x18\x01 \x03(\tR\x04keys\x12!\n\tnamespace\x18\x02 \x01(\tH\x00R\tnamespace\x88\x01\x01\x42\x0c\n\n_namespace\"\xc3\x01\n\x0f\x45valuatedConfig\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12%\n\x0e\x63onfig_version\x18\x02 \x01(\x03R\rconfigVersion\x12+\n\x06result\x18\x03 \x01(\x0b\x32\x13.prefab.ConfigValueR\x06result\x12,\n\x07\x63ontext\x18\x04 \x01(\x0b\x32\x12.prefab.ContextSetR\x07\x63ontext\x12\x1c\n\ttimestamp\x18\x05 \x01(\x03R\ttimestamp\"E\n\x10\x45valuatedConfigs\x12\x31\n\x07\x63onfigs\x18\x01 \x03(\x0b\x32\x17.prefab.EvaluatedConfigR\x07\x63onfigs\"\xb6\x04\n\x17\x43onfigEvaluationCounter\x12\x14\n\x05\x63ount\x18\x01 \x01(\x03R\x05\x63ount\x12 \n\tconfig_id\x18\x02 \x01(\x03H\x00R\x08\x63onfigId\x88\x01\x01\x12*\n\x0eselected_index\x18\x03 \x01(\rH\x01R\rselectedIndex\x88\x01\x01\x12?\n\x0eselected_value\x18\x04 \x01(\x0b\x32\x13.prefab.ConfigValueH\x02R\rselectedValue\x88\x01\x01\x12-\n\x10\x63onfig_row_index\x18\x05 \x01(\rH\x03R\x0e\x63onfigRowIndex\x88\x01\x01\x12;\n\x17\x63onditional_value_index\x18\x06 \x01(\rH\x04R\x15\x63onditionalValueIndex\x88\x01\x01\x12\x35\n\x14weighted_value_index\x18\x07 \x01(\rH\x05R\x12weightedValueIndex\x88\x01\x01\x12>\n\x06reason\x18\x08 \x01(\x0e\x32&.prefab.ConfigEvaluationCounter.ReasonR\x06reason\"\x15\n\x06Reason\x12\x0b\n\x07UNKNOWN\x10\x00\x42\x0c\n\n_config_idB\x11\n\x0f_selected_indexB\x11\n\x0f_selected_valueB\x13\n\x11_config_row_indexB\x1a\n\x18_conditional_value_indexB\x17\n\x15_weighted_value_index\"\x90\x01\n\x17\x43onfigEvaluationSummary\x12\x10\n\x03key\x18\x01 \x01(\tR\x03key\x12&\n\x04type\x18\x02 \x01(\x0e\x32\x12.prefab.ConfigTypeR\x04type\x12;\n\x08\x63ounters\x18\x03 \x03(\x0b\x32\x1f.prefab.ConfigEvaluationCounterR\x08\x63ounters\"\x82\x01\n\x19\x43onfigEvaluationSummaries\x12\x14\n\x05start\x18\x01 \x01(\x03R\x05start\x12\x10\n\x03\x65nd\x18\x02 \x01(\x03R\x03\x65nd\x12=\n\tsummaries\x18\x03 \x03(\x0b\x32\x1f.prefab.ConfigEvaluationSummaryR\tsummaries\"s\n\x15LoggersTelemetryEvent\x12(\n\x07loggers\x18\x01 \x03(\x0b\x32\x0e.prefab.LoggerR\x07loggers\x12\x19\n\x08start_at\x18\x02 \x01(\x03R\x07startAt\x12\x15\n\x06\x65nd_at\x18\x03 \x01(\x03R\x05\x65ndAt\"\xd9\x02\n\x0eTelemetryEvent\x12\x41\n\tsummaries\x18\x02 \x01(\x0b\x32!.prefab.ConfigEvaluationSummariesH\x00R\tsummaries\x12\x44\n\x10\x65xample_contexts\x18\x03 \x01(\x0b\x32\x17.prefab.ExampleContextsH\x00R\x0f\x65xampleContexts\x12\x38\n\x0c\x63lient_stats\x18\x04 \x01(\x0b\x32\x13.prefab.ClientStatsH\x00R\x0b\x63lientStats\x12\x39\n\x07loggers\x18\x05 \x01(\x0b\x32\x1d.prefab.LoggersTelemetryEventH\x00R\x07loggers\x12>\n\x0e\x63ontext_shapes\x18\x06 \x01(\x0b\x32\x15.prefab.ContextShapesH\x00R\rcontextShapesB\t\n\x07payload\"f\n\x0fTelemetryEvents\x12#\n\rinstance_hash\x18\x01 \x01(\tR\x0cinstanceHash\x12.\n\x06\x65vents\x18\x02 \x03(\x0b\x32\x16.prefab.TelemetryEventR\x06\x65vents\"3\n\x17TelemetryEventsResponse\x12\x18\n\x07success\x18\x01 \x01(\x08R\x07success\"E\n\x0f\x45xampleContexts\x12\x32\n\x08\x65xamples\x18\x01 \x03(\x0b\x32\x16.prefab.ExampleContextR\x08\x65xamples\"b\n\x0e\x45xampleContext\x12\x1c\n\ttimestamp\x18\x01 \x01(\x03R\ttimestamp\x12\x32\n\ncontextSet\x18\x02 \x01(\x0b\x32\x12.prefab.ContextSetR\ncontextSet\"e\n\x0b\x43lientStats\x12\x14\n\x05start\x18\x01 \x01(\x03R\x05start\x12\x10\n\x03\x65nd\x18\x02 \x01(\x03R\x03\x65nd\x12.\n\x13\x64ropped_event_count\x18\x03 \x01(\x04R\x11\x64roppedEventCount*:\n\x0eProvidedSource\x12\x1b\n\x17PROVIDED_SOURCE_NOT_SET\x10\x00\x12\x0b\n\x07\x45NV_VAR\x10\x01*\x82\x01\n\nConfigType\x12\x17\n\x13NOT_SET_CONFIG_TYPE\x10\x00\x12\n\n\x06\x43ONFIG\x10\x01\x12\x10\n\x0c\x46\x45\x41TURE_FLAG\x10\x02\x12\r\n\tLOG_LEVEL\x10\x03\x12\x0b\n\x07SEGMENT\x10\x04\x12\x14\n\x10LIMIT_DEFINITION\x10\x05\x12\x0b\n\x07\x44\x45LETED\x10\x06*a\n\x08LogLevel\x12\x15\n\x11NOT_SET_LOG_LEVEL\x10\x00\x12\t\n\x05TRACE\x10\x01\x12\t\n\x05\x44\x45\x42UG\x10\x02\x12\x08\n\x04INFO\x10\x03\x12\x08\n\x04WARN\x10\x05\x12\t\n\x05\x45RROR\x10\x06\x12\t\n\x05\x46\x41TAL\x10\t*G\n\tOnFailure\x12\x0b\n\x07NOT_SET\x10\x00\x12\x10\n\x0cLOG_AND_PASS\x10\x01\x12\x10\n\x0cLOG_AND_FAIL\x10\x02\x12\t\n\x05THROW\x10\x03\x42L\n\x13\x63loud.prefab.domainB\x06PrefabZ-github.com/prefab-cloud/prefab-cloud-go/protob\x06proto3') _globals = globals() _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals) @@ -32,14 +32,14 @@ _CONFIGEVALUATIONS_VALUESENTRY._serialized_options = b'8\001' _CONTEXTSHAPE_FIELDTYPESENTRY._options = None _CONTEXTSHAPE_FIELDTYPESENTRY._serialized_options = b'8\001' - _globals['_PROVIDEDSOURCE']._serialized_start=10324 - _globals['_PROVIDEDSOURCE']._serialized_end=10382 - _globals['_CONFIGTYPE']._serialized_start=10385 - _globals['_CONFIGTYPE']._serialized_end=10515 - _globals['_LOGLEVEL']._serialized_start=10517 - _globals['_LOGLEVEL']._serialized_end=10614 - _globals['_ONFAILURE']._serialized_start=10616 - _globals['_ONFAILURE']._serialized_end=10687 + _globals['_PROVIDEDSOURCE']._serialized_start=10587 + _globals['_PROVIDEDSOURCE']._serialized_end=10645 + _globals['_CONFIGTYPE']._serialized_start=10648 + _globals['_CONFIGTYPE']._serialized_end=10778 + _globals['_LOGLEVEL']._serialized_start=10780 + _globals['_LOGLEVEL']._serialized_end=10877 + _globals['_ONFAILURE']._serialized_start=10879 + _globals['_ONFAILURE']._serialized_end=10950 _globals['_CONFIGSERVICEPOINTER']._serialized_start=24 _globals['_CONFIGSERVICEPOINTER']._serialized_end=147 _globals['_CONFIGVALUE']._serialized_start=150 @@ -75,93 +75,93 @@ _globals['_CONDITIONALVALUE']._serialized_start=2840 _globals['_CONDITIONALVALUE']._serialized_end=2948 _globals['_CRITERION']._serialized_start=2951 - _globals['_CRITERION']._serialized_end=3393 + _globals['_CRITERION']._serialized_end=3656 _globals['_CRITERION_CRITERIONOPERATOR']._serialized_start=3126 - _globals['_CRITERION_CRITERIONOPERATOR']._serialized_end=3393 - _globals['_LOGGERS']._serialized_start=3396 - _globals['_LOGGERS']._serialized_end=3583 - _globals['_LOGGER']._serialized_start=3586 - _globals['_LOGGER']._serialized_end=3861 - _globals['_LOGGERREPORTRESPONSE']._serialized_start=3863 - _globals['_LOGGERREPORTRESPONSE']._serialized_end=3885 - _globals['_LIMITRESPONSE']._serialized_start=3888 - _globals['_LIMITRESPONSE']._serialized_end=4485 - _globals['_LIMITRESPONSE_LIMITPOLICYNAMES']._serialized_start=4316 - _globals['_LIMITRESPONSE_LIMITPOLICYNAMES']._serialized_end=4485 - _globals['_LIMITREQUEST']._serialized_start=4488 - _globals['_LIMITREQUEST']._serialized_end=4853 - _globals['_LIMITREQUEST_LIMITCOMBINER']._serialized_start=4799 - _globals['_LIMITREQUEST_LIMITCOMBINER']._serialized_end=4853 - _globals['_CONTEXTSET']._serialized_start=4855 - _globals['_CONTEXTSET']._serialized_end=4912 - _globals['_CONTEXT']._serialized_start=4915 - _globals['_CONTEXT']._serialized_end=5091 - _globals['_CONTEXT_VALUESENTRY']._serialized_start=5004 - _globals['_CONTEXT_VALUESENTRY']._serialized_end=5082 - _globals['_IDENTITY']._serialized_start=5094 - _globals['_IDENTITY']._serialized_end=5273 - _globals['_IDENTITY_ATTRIBUTESENTRY']._serialized_start=5201 - _globals['_IDENTITY_ATTRIBUTESENTRY']._serialized_end=5262 - _globals['_CONFIGEVALUATIONMETADATA']._serialized_start=5276 - _globals['_CONFIGEVALUATIONMETADATA']._serialized_end=5698 - _globals['_CLIENTCONFIGVALUE']._serialized_start=5701 - _globals['_CLIENTCONFIGVALUE']._serialized_end=6197 - _globals['_CLIENTDURATION']._serialized_start=6199 - _globals['_CLIENTDURATION']._serialized_end=6295 - _globals['_CONFIGEVALUATIONS']._serialized_start=6298 - _globals['_CONFIGEVALUATIONS']._serialized_end=6642 - _globals['_CONFIGEVALUATIONS_VALUESENTRY']._serialized_start=6518 - _globals['_CONFIGEVALUATIONS_VALUESENTRY']._serialized_end=6602 - _globals['_LIMITDEFINITION']._serialized_start=6645 - _globals['_LIMITDEFINITION']._serialized_end=7017 - _globals['_LIMITDEFINITION_SAFETYLEVEL']._serialized_start=6953 - _globals['_LIMITDEFINITION_SAFETYLEVEL']._serialized_end=7017 - _globals['_LIMITDEFINITIONS']._serialized_start=7019 - _globals['_LIMITDEFINITIONS']._serialized_end=7096 - _globals['_BUFFEREDREQUEST']._serialized_start=7099 - _globals['_BUFFEREDREQUEST']._serialized_end=7299 - _globals['_BATCHREQUEST']._serialized_start=7302 - _globals['_BATCHREQUEST']._serialized_end=7524 - _globals['_BASICRESPONSE']._serialized_start=7526 - _globals['_BASICRESPONSE']._serialized_end=7567 - _globals['_CREATIONRESPONSE']._serialized_start=7569 - _globals['_CREATIONRESPONSE']._serialized_end=7636 - _globals['_IDBLOCK']._serialized_start=7639 - _globals['_IDBLOCK']._serialized_end=7794 - _globals['_IDBLOCKREQUEST']._serialized_start=7797 - _globals['_IDBLOCKREQUEST']._serialized_end=7939 - _globals['_CONTEXTSHAPE']._serialized_start=7942 - _globals['_CONTEXTSHAPE']._serialized_end=8110 - _globals['_CONTEXTSHAPE_FIELDTYPESENTRY']._serialized_start=8049 - _globals['_CONTEXTSHAPE_FIELDTYPESENTRY']._serialized_end=8110 - _globals['_CONTEXTSHAPES']._serialized_start=8112 - _globals['_CONTEXTSHAPES']._serialized_end=8222 - _globals['_EVALUATEDKEYS']._serialized_start=8224 - _globals['_EVALUATEDKEYS']._serialized_end=8308 - _globals['_EVALUATEDCONFIG']._serialized_start=8311 - _globals['_EVALUATEDCONFIG']._serialized_end=8506 - _globals['_EVALUATEDCONFIGS']._serialized_start=8508 - _globals['_EVALUATEDCONFIGS']._serialized_end=8577 - _globals['_CONFIGEVALUATIONCOUNTER']._serialized_start=8580 - _globals['_CONFIGEVALUATIONCOUNTER']._serialized_end=9146 - _globals['_CONFIGEVALUATIONCOUNTER_REASON']._serialized_start=8999 - _globals['_CONFIGEVALUATIONCOUNTER_REASON']._serialized_end=9020 - _globals['_CONFIGEVALUATIONSUMMARY']._serialized_start=9149 - _globals['_CONFIGEVALUATIONSUMMARY']._serialized_end=9293 - _globals['_CONFIGEVALUATIONSUMMARIES']._serialized_start=9296 - _globals['_CONFIGEVALUATIONSUMMARIES']._serialized_end=9426 - _globals['_LOGGERSTELEMETRYEVENT']._serialized_start=9428 - _globals['_LOGGERSTELEMETRYEVENT']._serialized_end=9543 - _globals['_TELEMETRYEVENT']._serialized_start=9546 - _globals['_TELEMETRYEVENT']._serialized_end=9891 - _globals['_TELEMETRYEVENTS']._serialized_start=9893 - _globals['_TELEMETRYEVENTS']._serialized_end=9995 - _globals['_TELEMETRYEVENTSRESPONSE']._serialized_start=9997 - _globals['_TELEMETRYEVENTSRESPONSE']._serialized_end=10048 - _globals['_EXAMPLECONTEXTS']._serialized_start=10050 - _globals['_EXAMPLECONTEXTS']._serialized_end=10119 - _globals['_EXAMPLECONTEXT']._serialized_start=10121 - _globals['_EXAMPLECONTEXT']._serialized_end=10219 - _globals['_CLIENTSTATS']._serialized_start=10221 - _globals['_CLIENTSTATS']._serialized_end=10322 + _globals['_CRITERION_CRITERIONOPERATOR']._serialized_end=3656 + _globals['_LOGGERS']._serialized_start=3659 + _globals['_LOGGERS']._serialized_end=3846 + _globals['_LOGGER']._serialized_start=3849 + _globals['_LOGGER']._serialized_end=4124 + _globals['_LOGGERREPORTRESPONSE']._serialized_start=4126 + _globals['_LOGGERREPORTRESPONSE']._serialized_end=4148 + _globals['_LIMITRESPONSE']._serialized_start=4151 + _globals['_LIMITRESPONSE']._serialized_end=4748 + _globals['_LIMITRESPONSE_LIMITPOLICYNAMES']._serialized_start=4579 + _globals['_LIMITRESPONSE_LIMITPOLICYNAMES']._serialized_end=4748 + _globals['_LIMITREQUEST']._serialized_start=4751 + _globals['_LIMITREQUEST']._serialized_end=5116 + _globals['_LIMITREQUEST_LIMITCOMBINER']._serialized_start=5062 + _globals['_LIMITREQUEST_LIMITCOMBINER']._serialized_end=5116 + _globals['_CONTEXTSET']._serialized_start=5118 + _globals['_CONTEXTSET']._serialized_end=5175 + _globals['_CONTEXT']._serialized_start=5178 + _globals['_CONTEXT']._serialized_end=5354 + _globals['_CONTEXT_VALUESENTRY']._serialized_start=5267 + _globals['_CONTEXT_VALUESENTRY']._serialized_end=5345 + _globals['_IDENTITY']._serialized_start=5357 + _globals['_IDENTITY']._serialized_end=5536 + _globals['_IDENTITY_ATTRIBUTESENTRY']._serialized_start=5464 + _globals['_IDENTITY_ATTRIBUTESENTRY']._serialized_end=5525 + _globals['_CONFIGEVALUATIONMETADATA']._serialized_start=5539 + _globals['_CONFIGEVALUATIONMETADATA']._serialized_end=5961 + _globals['_CLIENTCONFIGVALUE']._serialized_start=5964 + _globals['_CLIENTCONFIGVALUE']._serialized_end=6460 + _globals['_CLIENTDURATION']._serialized_start=6462 + _globals['_CLIENTDURATION']._serialized_end=6558 + _globals['_CONFIGEVALUATIONS']._serialized_start=6561 + _globals['_CONFIGEVALUATIONS']._serialized_end=6905 + _globals['_CONFIGEVALUATIONS_VALUESENTRY']._serialized_start=6781 + _globals['_CONFIGEVALUATIONS_VALUESENTRY']._serialized_end=6865 + _globals['_LIMITDEFINITION']._serialized_start=6908 + _globals['_LIMITDEFINITION']._serialized_end=7280 + _globals['_LIMITDEFINITION_SAFETYLEVEL']._serialized_start=7216 + _globals['_LIMITDEFINITION_SAFETYLEVEL']._serialized_end=7280 + _globals['_LIMITDEFINITIONS']._serialized_start=7282 + _globals['_LIMITDEFINITIONS']._serialized_end=7359 + _globals['_BUFFEREDREQUEST']._serialized_start=7362 + _globals['_BUFFEREDREQUEST']._serialized_end=7562 + _globals['_BATCHREQUEST']._serialized_start=7565 + _globals['_BATCHREQUEST']._serialized_end=7787 + _globals['_BASICRESPONSE']._serialized_start=7789 + _globals['_BASICRESPONSE']._serialized_end=7830 + _globals['_CREATIONRESPONSE']._serialized_start=7832 + _globals['_CREATIONRESPONSE']._serialized_end=7899 + _globals['_IDBLOCK']._serialized_start=7902 + _globals['_IDBLOCK']._serialized_end=8057 + _globals['_IDBLOCKREQUEST']._serialized_start=8060 + _globals['_IDBLOCKREQUEST']._serialized_end=8202 + _globals['_CONTEXTSHAPE']._serialized_start=8205 + _globals['_CONTEXTSHAPE']._serialized_end=8373 + _globals['_CONTEXTSHAPE_FIELDTYPESENTRY']._serialized_start=8312 + _globals['_CONTEXTSHAPE_FIELDTYPESENTRY']._serialized_end=8373 + _globals['_CONTEXTSHAPES']._serialized_start=8375 + _globals['_CONTEXTSHAPES']._serialized_end=8485 + _globals['_EVALUATEDKEYS']._serialized_start=8487 + _globals['_EVALUATEDKEYS']._serialized_end=8571 + _globals['_EVALUATEDCONFIG']._serialized_start=8574 + _globals['_EVALUATEDCONFIG']._serialized_end=8769 + _globals['_EVALUATEDCONFIGS']._serialized_start=8771 + _globals['_EVALUATEDCONFIGS']._serialized_end=8840 + _globals['_CONFIGEVALUATIONCOUNTER']._serialized_start=8843 + _globals['_CONFIGEVALUATIONCOUNTER']._serialized_end=9409 + _globals['_CONFIGEVALUATIONCOUNTER_REASON']._serialized_start=9262 + _globals['_CONFIGEVALUATIONCOUNTER_REASON']._serialized_end=9283 + _globals['_CONFIGEVALUATIONSUMMARY']._serialized_start=9412 + _globals['_CONFIGEVALUATIONSUMMARY']._serialized_end=9556 + _globals['_CONFIGEVALUATIONSUMMARIES']._serialized_start=9559 + _globals['_CONFIGEVALUATIONSUMMARIES']._serialized_end=9689 + _globals['_LOGGERSTELEMETRYEVENT']._serialized_start=9691 + _globals['_LOGGERSTELEMETRYEVENT']._serialized_end=9806 + _globals['_TELEMETRYEVENT']._serialized_start=9809 + _globals['_TELEMETRYEVENT']._serialized_end=10154 + _globals['_TELEMETRYEVENTS']._serialized_start=10156 + _globals['_TELEMETRYEVENTS']._serialized_end=10258 + _globals['_TELEMETRYEVENTSRESPONSE']._serialized_start=10260 + _globals['_TELEMETRYEVENTSRESPONSE']._serialized_end=10311 + _globals['_EXAMPLECONTEXTS']._serialized_start=10313 + _globals['_EXAMPLECONTEXTS']._serialized_end=10382 + _globals['_EXAMPLECONTEXT']._serialized_start=10384 + _globals['_EXAMPLECONTEXT']._serialized_end=10482 + _globals['_CLIENTSTATS']._serialized_start=10484 + _globals['_CLIENTSTATS']._serialized_end=10585 # @@protoc_insertion_point(module_scope) diff --git a/prefab_pb2.pyi b/prefab_pb2.pyi index 466a597..4aeb3c4 100644 --- a/prefab_pb2.pyi +++ b/prefab_pb2.pyi @@ -601,6 +601,16 @@ class Criterion(google.protobuf.message.Message): PROP_DOES_NOT_END_WITH_ONE_OF: Criterion._CriterionOperator.ValueType # 9 HIERARCHICAL_MATCH: Criterion._CriterionOperator.ValueType # 10 IN_INT_RANGE: Criterion._CriterionOperator.ValueType # 11 + PROP_STARTS_WITH_ONE_OF: Criterion._CriterionOperator.ValueType # 12 + PROP_DOES_NOT_START_WITH_ONE_OF: Criterion._CriterionOperator.ValueType # 13 + PROP_CONTAINS_ONE_OF: Criterion._CriterionOperator.ValueType # 14 + PROP_DOES_NOT_CONTAIN_ONE_OF: Criterion._CriterionOperator.ValueType # 15 + PROP_LESS_THAN: Criterion._CriterionOperator.ValueType # 16 + PROP_LESS_THAN_OR_EQUAL: Criterion._CriterionOperator.ValueType # 17 + PROP_GREATER_THAN: Criterion._CriterionOperator.ValueType # 18 + PROP_GREATER_THAN_OR_EQUAL: Criterion._CriterionOperator.ValueType # 19 + PROP_BEFORE: Criterion._CriterionOperator.ValueType # 20 + PROP_AFTER: Criterion._CriterionOperator.ValueType # 21 class CriterionOperator(_CriterionOperator, metaclass=_CriterionOperatorEnumTypeWrapper): ... NOT_SET: Criterion.CriterionOperator.ValueType # 0 @@ -616,6 +626,16 @@ class Criterion(google.protobuf.message.Message): PROP_DOES_NOT_END_WITH_ONE_OF: Criterion.CriterionOperator.ValueType # 9 HIERARCHICAL_MATCH: Criterion.CriterionOperator.ValueType # 10 IN_INT_RANGE: Criterion.CriterionOperator.ValueType # 11 + PROP_STARTS_WITH_ONE_OF: Criterion.CriterionOperator.ValueType # 12 + PROP_DOES_NOT_START_WITH_ONE_OF: Criterion.CriterionOperator.ValueType # 13 + PROP_CONTAINS_ONE_OF: Criterion.CriterionOperator.ValueType # 14 + PROP_DOES_NOT_CONTAIN_ONE_OF: Criterion.CriterionOperator.ValueType # 15 + PROP_LESS_THAN: Criterion.CriterionOperator.ValueType # 16 + PROP_LESS_THAN_OR_EQUAL: Criterion.CriterionOperator.ValueType # 17 + PROP_GREATER_THAN: Criterion.CriterionOperator.ValueType # 18 + PROP_GREATER_THAN_OR_EQUAL: Criterion.CriterionOperator.ValueType # 19 + PROP_BEFORE: Criterion.CriterionOperator.ValueType # 20 + PROP_AFTER: Criterion.CriterionOperator.ValueType # 21 PROPERTY_NAME_FIELD_NUMBER: builtins.int OPERATOR_FIELD_NUMBER: builtins.int From 5f062f1ae749a021dc322fddbc99110a6ee77a13 Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Mon, 25 Nov 2024 16:03:37 -0600 Subject: [PATCH 2/5] collapse the ENDS_WITH/NOT_ENDS_WITH code --- prefab_cloud_python/config_resolver.py | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/prefab_cloud_python/config_resolver.py b/prefab_cloud_python/config_resolver.py index cf885cb..73e28bd 100644 --- a/prefab_cloud_python/config_resolver.py +++ b/prefab_cloud_python/config_resolver.py @@ -132,24 +132,16 @@ def evaluate_criterion(self, criterion, properties): return self.in_segment(criterion, properties) if criterion.operator == OPS.NOT_IN_SEG: return not self.in_segment(criterion, properties) - if criterion.operator == OPS.PROP_ENDS_WITH_ONE_OF: + if criterion.operator in [OPS.PROP_ENDS_WITH_ONE_OF, OPS.PROP_DOES_NOT_END_WITH_ONE_OF]: + negative = criterion.operator == OPS.PROP_DOES_NOT_END_WITH_ONE_OF if value_from_properties is None: - return False - return any( + return self.negate(negative, False) + return self.negate(negative, any( [ str(value_from_properties).endswith(ending) for ending in criterion.value_to_match.string_list.values ] - ) - if criterion.operator == OPS.PROP_DOES_NOT_END_WITH_ONE_OF: - if value_from_properties is None: - return True - return not any( - [ - str(value_from_properties).endswith(ending) - for ending in criterion.value_to_match.string_list.values - ] - ) + )) if criterion.operator == OPS.HIERARCHICAL_MATCH: return value_from_properties.startswith(criterion.value_to_match.string) if criterion.operator == OPS.ALWAYS_TRUE: @@ -158,6 +150,10 @@ def evaluate_criterion(self, criterion, properties): logger.info(f"Unknown criterion operator {criterion.operator}") return False + @staticmethod + def negate(negate, value): + return not value if negate else value + def matches(self, criterion, value, properties): criterion_value_or_values = ConfigValueUnwrapper.deepest_value( criterion.value_to_match, self.config.key, properties From 537a93f436cec3614b460ad136f03fdf7ff01916 Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Mon, 25 Nov 2024 16:18:11 -0600 Subject: [PATCH 3/5] Add support for startsWith/contains and their negations --- prefab_cloud_python/config_resolver.py | 20 +++ tests/test_criteria_evaluator.py | 181 +++++++++++++++++++++++++ 2 files changed, 201 insertions(+) diff --git a/prefab_cloud_python/config_resolver.py b/prefab_cloud_python/config_resolver.py index 73e28bd..d137b85 100644 --- a/prefab_cloud_python/config_resolver.py +++ b/prefab_cloud_python/config_resolver.py @@ -142,6 +142,26 @@ def evaluate_criterion(self, criterion, properties): for ending in criterion.value_to_match.string_list.values ] )) + if criterion.operator in [OPS.PROP_STARTS_WITH_ONE_OF, OPS.PROP_DOES_NOT_START_WITH_ONE_OF]: + negative = criterion.operator == OPS.PROP_DOES_NOT_START_WITH_ONE_OF + if value_from_properties is None: + return self.negate(negative, False) + return self.negate(negative, any( + [ + str(value_from_properties).startswith(beginning) + for beginning in criterion.value_to_match.string_list.values + ] + )) + if criterion.operator in [OPS.PROP_CONTAINS_ONE_OF, OPS.PROP_DOES_NOT_CONTAIN_ONE_OF]: + negative = criterion.operator == OPS.PROP_DOES_NOT_CONTAIN_ONE_OF + if value_from_properties is None: + return self.negate(negative, False) + return self.negate(negative, any( + [ + string in str(value_from_properties) + for string in criterion.value_to_match.string_list.values + ] + )) if criterion.operator == OPS.HIERARCHICAL_MATCH: return value_from_properties.startswith(criterion.value_to_match.string) if criterion.operator == OPS.ALWAYS_TRUE: diff --git a/tests/test_criteria_evaluator.py b/tests/test_criteria_evaluator.py index 16bfae9..ecfe9e9 100644 --- a/tests/test_criteria_evaluator.py +++ b/tests/test_criteria_evaluator.py @@ -343,6 +343,187 @@ def test_prop_does_not_end_with_one_of(self): == default_value ) + def test_prop_starts_with_one_of(self): + config = Prefab.Config( + key=key, + rows=[ + default_row, + Prefab.ConfigRow( + project_env_id=project_env_id, + values=[ + Prefab.ConditionalValue( + criteria=[ + Prefab.Criterion( + operator="PROP_STARTS_WITH_ONE_OF", + value_to_match=Prefab.ConfigValue( + string_list=Prefab.StringList( + values=["one", "two", "three"] + ) + ), + property_name="user.email", + ) + ], + value=Prefab.ConfigValue(string=desired_value), + ) + ], + ), + ], + ) + + evaluator = CriteriaEvaluator( + config, project_env_id, resolver=None, base_client=None + ) + + assert evaluator.evaluate({}).raw_config_value().string == default_value + assert ( + evaluator.evaluate(context({"user": {"email": "nope"}})) + .raw_config_value() + .string + == default_value + ) + assert ( + evaluator.evaluate(context({"user": {"email": "two"}})) + .raw_config_value() + .string + == desired_value + ) + + def test_prop_does_not_start_with_one_of(self): + config = Prefab.Config( + key=key, + rows=[ + default_row, + Prefab.ConfigRow( + project_env_id=project_env_id, + values=[ + Prefab.ConditionalValue( + criteria=[ + Prefab.Criterion( + operator=Prefab.Criterion.CriterionOperator.PROP_DOES_NOT_START_WITH_ONE_OF, + value_to_match=Prefab.ConfigValue( + string_list=Prefab.StringList( + values=["one", "two", "three"] + ) + ), + property_name="user.email", + ) + ], + value=Prefab.ConfigValue(string=desired_value), + ) + ], + ), + ], + ) + + evaluator = CriteriaEvaluator( + config, project_env_id, resolver=None, base_client=None + ) + + assert evaluator.evaluate({}).raw_config_value().string == desired_value + assert ( + evaluator.evaluate(context({"user": {"email": "nope"}})) + .raw_config_value() + .string + == desired_value + ) + assert ( + evaluator.evaluate(context({"user": {"email": "two"}})) + .raw_config_value() + .string + == default_value + ) + + + def test_prop_contains_one_of(self): + config = Prefab.Config( + key=key, + rows=[ + default_row, + Prefab.ConfigRow( + project_env_id=project_env_id, + values=[ + Prefab.ConditionalValue( + criteria=[ + Prefab.Criterion( + operator=Prefab.Criterion.CriterionOperator.PROP_CONTAINS_ONE_OF, + value_to_match=Prefab.ConfigValue( + string_list=Prefab.StringList( + values=["one", "two", "three"] + ) + ), + property_name="user.email", + ) + ], + value=Prefab.ConfigValue(string=desired_value), + ) + ], + ), + ], + ) + + evaluator = CriteriaEvaluator( + config, project_env_id, resolver=None, base_client=None + ) + + assert evaluator.evaluate({}).raw_config_value().string == default_value + assert ( + evaluator.evaluate(context({"user": {"email": "nope"}})) + .raw_config_value() + .string + == default_value + ) + assert ( + evaluator.evaluate(context({"user": {"email": "foo two bar"}})) + .raw_config_value() + .string + == desired_value + ) + + def test_prop_does_not_contain_one_of(self): + config = Prefab.Config( + key=key, + rows=[ + default_row, + Prefab.ConfigRow( + project_env_id=project_env_id, + values=[ + Prefab.ConditionalValue( + criteria=[ + Prefab.Criterion( + operator=Prefab.Criterion.CriterionOperator.PROP_DOES_NOT_CONTAIN_ONE_OF, + value_to_match=Prefab.ConfigValue( + string_list=Prefab.StringList( + values=["one", "two", "three"] + ) + ), + property_name="user.email", + ) + ], + value=Prefab.ConfigValue(string=desired_value), + ) + ], + ), + ], + ) + + evaluator = CriteriaEvaluator( + config, project_env_id, resolver=None, base_client=None + ) + + assert evaluator.evaluate({}).raw_config_value().string == desired_value + assert ( + evaluator.evaluate(context({"user": {"email": "nope"}})) + .raw_config_value() + .string + == desired_value + ) + assert ( + evaluator.evaluate(context({"user": {"email": "foo two bar"}})) + .raw_config_value() + .string + == default_value + ) + def test_in_seg(self): segment_key = "segment_key" From 199359caa84f6877ffab7435afb3688f94a3764a Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Mon, 25 Nov 2024 16:39:55 -0600 Subject: [PATCH 4/5] fix formatting --- prefab_cloud_python/config_resolver.py | 60 +++++++++++++++--------- tests/test_criteria_evaluator.py | 65 +++++++++++++------------- 2 files changed, 71 insertions(+), 54 deletions(-) diff --git a/prefab_cloud_python/config_resolver.py b/prefab_cloud_python/config_resolver.py index d137b85..2fa15d4 100644 --- a/prefab_cloud_python/config_resolver.py +++ b/prefab_cloud_python/config_resolver.py @@ -132,36 +132,54 @@ def evaluate_criterion(self, criterion, properties): return self.in_segment(criterion, properties) if criterion.operator == OPS.NOT_IN_SEG: return not self.in_segment(criterion, properties) - if criterion.operator in [OPS.PROP_ENDS_WITH_ONE_OF, OPS.PROP_DOES_NOT_END_WITH_ONE_OF]: + if criterion.operator in [ + OPS.PROP_ENDS_WITH_ONE_OF, + OPS.PROP_DOES_NOT_END_WITH_ONE_OF, + ]: negative = criterion.operator == OPS.PROP_DOES_NOT_END_WITH_ONE_OF if value_from_properties is None: return self.negate(negative, False) - return self.negate(negative, any( - [ - str(value_from_properties).endswith(ending) - for ending in criterion.value_to_match.string_list.values - ] - )) - if criterion.operator in [OPS.PROP_STARTS_WITH_ONE_OF, OPS.PROP_DOES_NOT_START_WITH_ONE_OF]: + return self.negate( + negative, + any( + [ + str(value_from_properties).endswith(ending) + for ending in criterion.value_to_match.string_list.values + ] + ), + ) + if criterion.operator in [ + OPS.PROP_STARTS_WITH_ONE_OF, + OPS.PROP_DOES_NOT_START_WITH_ONE_OF, + ]: negative = criterion.operator == OPS.PROP_DOES_NOT_START_WITH_ONE_OF if value_from_properties is None: return self.negate(negative, False) - return self.negate(negative, any( - [ - str(value_from_properties).startswith(beginning) - for beginning in criterion.value_to_match.string_list.values - ] - )) - if criterion.operator in [OPS.PROP_CONTAINS_ONE_OF, OPS.PROP_DOES_NOT_CONTAIN_ONE_OF]: + return self.negate( + negative, + any( + [ + str(value_from_properties).startswith(beginning) + for beginning in criterion.value_to_match.string_list.values + ] + ), + ) + if criterion.operator in [ + OPS.PROP_CONTAINS_ONE_OF, + OPS.PROP_DOES_NOT_CONTAIN_ONE_OF, + ]: negative = criterion.operator == OPS.PROP_DOES_NOT_CONTAIN_ONE_OF if value_from_properties is None: return self.negate(negative, False) - return self.negate(negative, any( - [ - string in str(value_from_properties) - for string in criterion.value_to_match.string_list.values - ] - )) + return self.negate( + negative, + any( + [ + string in str(value_from_properties) + for string in criterion.value_to_match.string_list.values + ] + ), + ) if criterion.operator == OPS.HIERARCHICAL_MATCH: return value_from_properties.startswith(criterion.value_to_match.string) if criterion.operator == OPS.ALWAYS_TRUE: diff --git a/tests/test_criteria_evaluator.py b/tests/test_criteria_evaluator.py index ecfe9e9..a0cdeb3 100644 --- a/tests/test_criteria_evaluator.py +++ b/tests/test_criteria_evaluator.py @@ -376,16 +376,16 @@ def test_prop_starts_with_one_of(self): assert evaluator.evaluate({}).raw_config_value().string == default_value assert ( - evaluator.evaluate(context({"user": {"email": "nope"}})) - .raw_config_value() - .string - == default_value + evaluator.evaluate(context({"user": {"email": "nope"}})) + .raw_config_value() + .string + == default_value ) assert ( - evaluator.evaluate(context({"user": {"email": "two"}})) - .raw_config_value() - .string - == desired_value + evaluator.evaluate(context({"user": {"email": "two"}})) + .raw_config_value() + .string + == desired_value ) def test_prop_does_not_start_with_one_of(self): @@ -421,19 +421,18 @@ def test_prop_does_not_start_with_one_of(self): assert evaluator.evaluate({}).raw_config_value().string == desired_value assert ( - evaluator.evaluate(context({"user": {"email": "nope"}})) - .raw_config_value() - .string - == desired_value + evaluator.evaluate(context({"user": {"email": "nope"}})) + .raw_config_value() + .string + == desired_value ) assert ( - evaluator.evaluate(context({"user": {"email": "two"}})) - .raw_config_value() - .string - == default_value + evaluator.evaluate(context({"user": {"email": "two"}})) + .raw_config_value() + .string + == default_value ) - def test_prop_contains_one_of(self): config = Prefab.Config( key=key, @@ -467,16 +466,16 @@ def test_prop_contains_one_of(self): assert evaluator.evaluate({}).raw_config_value().string == default_value assert ( - evaluator.evaluate(context({"user": {"email": "nope"}})) - .raw_config_value() - .string - == default_value + evaluator.evaluate(context({"user": {"email": "nope"}})) + .raw_config_value() + .string + == default_value ) assert ( - evaluator.evaluate(context({"user": {"email": "foo two bar"}})) - .raw_config_value() - .string - == desired_value + evaluator.evaluate(context({"user": {"email": "foo two bar"}})) + .raw_config_value() + .string + == desired_value ) def test_prop_does_not_contain_one_of(self): @@ -512,16 +511,16 @@ def test_prop_does_not_contain_one_of(self): assert evaluator.evaluate({}).raw_config_value().string == desired_value assert ( - evaluator.evaluate(context({"user": {"email": "nope"}})) - .raw_config_value() - .string - == desired_value + evaluator.evaluate(context({"user": {"email": "nope"}})) + .raw_config_value() + .string + == desired_value ) assert ( - evaluator.evaluate(context({"user": {"email": "foo two bar"}})) - .raw_config_value() - .string - == default_value + evaluator.evaluate(context({"user": {"email": "foo two bar"}})) + .raw_config_value() + .string + == default_value ) def test_in_seg(self): From b50a0c00e1fb34053272b4c16618d956ee258d0a Mon Sep 17 00:00:00 2001 From: James Kebinger Date: Wed, 4 Dec 2024 16:28:03 -0600 Subject: [PATCH 5/5] Get updated integration test data --- tests/prefab-cloud-integration-test-data | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/prefab-cloud-integration-test-data b/tests/prefab-cloud-integration-test-data index f89c219..1f1da6c 160000 --- a/tests/prefab-cloud-integration-test-data +++ b/tests/prefab-cloud-integration-test-data @@ -1 +1 @@ -Subproject commit f89c2190cc462059cc35795126773732d7f08c24 +Subproject commit 1f1da6c72bd962f4003dffd64622b9913219e189