@eide/foir-proto-ts 0.43.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eide/foir-proto-ts",
3
- "version": "0.43.0",
3
+ "version": "0.45.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./analytics/v1/analytics_pb": "./src/analytics/v1/analytics_pb.js",
@@ -687,30 +687,57 @@ export declare type GetExperimentConversionsResponse = Message<"analytics.v1.Get
687
687
  export declare const GetExperimentConversionsResponseSchema: GenMessage<GetExperimentConversionsResponse>;
688
688
 
689
689
  /**
690
- * @generated from message analytics.v1.FunnelStep
690
+ * FunnelStepStat is one (step, variant) cell in the funnel breakdown.
691
+ * step_index is 0-based against the experiment's declared funnel_steps in
692
+ * order. unique_count is the number of distinct identities (customer_id
693
+ * or viewer_key, whichever the conversion event carried) who recorded an
694
+ * event matching this step. drop_off_rate is computed against the same
695
+ * variant's previous step; for step_index=0 it is always 0.
696
+ *
697
+ * @generated from message analytics.v1.FunnelStepStat
691
698
  */
692
- export declare type FunnelStep = Message<"analytics.v1.FunnelStep"> & {
699
+ export declare type FunnelStepStat = Message<"analytics.v1.FunnelStepStat"> & {
700
+ /**
701
+ * @generated from field: string variant_key = 1;
702
+ */
703
+ variantKey: string;
704
+
693
705
  /**
694
- * @generated from field: string step_name = 1;
706
+ * @generated from field: int32 step_index = 2;
707
+ */
708
+ stepIndex: number;
709
+
710
+ /**
711
+ * @generated from field: string step_key = 3;
712
+ */
713
+ stepKey: string;
714
+
715
+ /**
716
+ * @generated from field: string step_name = 4;
695
717
  */
696
718
  stepName: string;
697
719
 
698
720
  /**
699
- * @generated from field: int64 count = 2;
721
+ * @generated from field: int64 unique_count = 5;
722
+ */
723
+ uniqueCount: bigint;
724
+
725
+ /**
726
+ * @generated from field: int64 event_count = 6;
700
727
  */
701
- count: bigint;
728
+ eventCount: bigint;
702
729
 
703
730
  /**
704
- * @generated from field: double drop_off_rate = 3;
731
+ * @generated from field: double drop_off_rate = 7;
705
732
  */
706
733
  dropOffRate: number;
707
734
  };
708
735
 
709
736
  /**
710
- * Describes the message analytics.v1.FunnelStep.
711
- * Use `create(FunnelStepSchema)` to create a new message.
737
+ * Describes the message analytics.v1.FunnelStepStat.
738
+ * Use `create(FunnelStepStatSchema)` to create a new message.
712
739
  */
713
- export declare const FunnelStepSchema: GenMessage<FunnelStep>;
740
+ export declare const FunnelStepStatSchema: GenMessage<FunnelStepStat>;
714
741
 
715
742
  /**
716
743
  * @generated from message analytics.v1.GetExperimentFunnelAnalysisRequest
@@ -743,9 +770,9 @@ export declare const GetExperimentFunnelAnalysisRequestSchema: GenMessage<GetExp
743
770
  */
744
771
  export declare type GetExperimentFunnelAnalysisResponse = Message<"analytics.v1.GetExperimentFunnelAnalysisResponse"> & {
745
772
  /**
746
- * @generated from field: repeated analytics.v1.FunnelStep steps = 1;
773
+ * @generated from field: repeated analytics.v1.FunnelStepStat stats = 1;
747
774
  */
748
- steps: FunnelStep[];
775
+ stats: FunnelStepStat[];
749
776
  };
750
777
 
751
778
  /**
@@ -9,7 +9,7 @@ import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bu
9
9
  * Describes the file analytics/v1/analytics.proto.
10
10
  */
11
11
  export const file_analytics_v1_analytics = /*@__PURE__*/
12
- fileDesc("ChxhbmFseXRpY3MvdjEvYW5hbHl0aWNzLnByb3RvEgxhbmFseXRpY3MudjEiogEKEEFuYWx5dGljc1N1bW1hcnkSFQoNdG90YWxfcmVjb3JkcxgBIAEoBRIUCgx0b3RhbF9tb2RlbHMYAiABKAUSFwoPdG90YWxfY3VzdG9tZXJzGAMgASgFEhMKC3RvdGFsX3VzZXJzGAQgASgFEhoKEmFjdGl2ZV9leHBlcmltZW50cxgFIAEoBRIXCg9hY3RpdmVfc2VnbWVudHMYBiABKAUiKQoKVHJlbmRQb2ludBIMCgRkYXRlGAEgASgJEg0KBXZhbHVlGAIgASgDIi4KEERpc3RyaWJ1dGlvbkl0ZW0SCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgDInAKD1NlY3VyaXR5U3VtbWFyeRIUCgx0b3RhbF9sb2dpbnMYASABKAUSFQoNZmFpbGVkX2xvZ2lucxgCIAEoBRIYChBhY2NvdW50X2xvY2tvdXRzGAMgASgFEhYKDnN1c3BpY2lvdXNfaXBzGAQgASgFIm4KD1N1c3BpY2lvdXNMb2dpbhINCgVlbWFpbBgBIAEoCRIQCghpcF9jb3VudBgCIAEoBRILCgNpcHMYAyADKAkSLQoJbGFzdF9zZWVuGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJiCgtGYWlsZWRMb2dpbhISCgppZGVudGlmaWVyGAEgASgJEg0KBWNvdW50GAIgASgFEjAKDGxhc3RfYXR0ZW1wdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAibgoOQWNjb3VudExvY2tvdXQSDQoFZW1haWwYASABKAkSLQoJbG9ja2VkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgZyZWFzb24YAyABKAlIAIgBAUIJCgdfcmVhc29uIogBChpHZXRBbmFseXRpY3NTdW1tYXJ5UmVxdWVzdBItCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBQgcKBV9mcm9tQgUKA190byJOChtHZXRBbmFseXRpY3NTdW1tYXJ5UmVzcG9uc2USLwoHc3VtbWFyeRgBIAEoCzIeLmFuYWx5dGljcy52MS5BbmFseXRpY3NTdW1tYXJ5IrcBCg9HZXRUcmVuZFJlcXVlc3QSDgoGbWV0cmljGAEgASgJEi0KBGZyb20YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESKwoCdG8YAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESGAoLZ3JhbnVsYXJpdHkYBCABKAlIAogBAUIHCgVfZnJvbUIFCgNfdG9CDgoMX2dyYW51bGFyaXR5IjwKEEdldFRyZW5kUmVzcG9uc2USKAoGcG9pbnRzGAEgAygLMhguYW5hbHl0aWNzLnYxLlRyZW5kUG9pbnQiNwoWR2V0RGlzdHJpYnV0aW9uUmVxdWVzdBIOCgZtZXRyaWMYASABKAkSDQoFbGltaXQYCiABKAUiSAoXR2V0RGlzdHJpYnV0aW9uUmVzcG9uc2USLQoFaXRlbXMYASADKAsyHi5hbmFseXRpY3MudjEuRGlzdHJpYnV0aW9uSXRlbSKtAQoZR2V0U2VjdXJpdHlTdW1tYXJ5UmVxdWVzdBItCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEhYKCXRlbmFudF9pZBgDIAEoCUgCiAEBQgcKBV9mcm9tQgUKA190b0IMCgpfdGVuYW50X2lkIkwKGkdldFNlY3VyaXR5U3VtbWFyeVJlc3BvbnNlEi4KB3N1bW1hcnkYASABKAsyHS5hbmFseXRpY3MudjEuU2VjdXJpdHlTdW1tYXJ5IlEKGkdldFN1c3BpY2lvdXNMb2dpbnNSZXF1ZXN0Eg0KBWxpbWl0GAEgASgFEhYKCXRlbmFudF9pZBgCIAEoCUgAiAEBQgwKCl90ZW5hbnRfaWQiTAobR2V0U3VzcGljaW91c0xvZ2luc1Jlc3BvbnNlEi0KBmxvZ2lucxgBIAMoCzIdLmFuYWx5dGljcy52MS5TdXNwaWNpb3VzTG9naW4iZQoWR2V0RmFpbGVkTG9naW5zUmVxdWVzdBIPCgJieRgBIAEoCUgAiAEBEg0KBWxpbWl0GAogASgFEhYKCXRlbmFudF9pZBgDIAEoCUgBiAEBQgUKA19ieUIMCgpfdGVuYW50X2lkIkUKF0dldEZhaWxlZExvZ2luc1Jlc3BvbnNlEioKB2VudHJpZXMYASADKAsyGS5hbmFseXRpY3MudjEuRmFpbGVkTG9naW4iUAoZR2V0QWNjb3VudExvY2tvdXRzUmVxdWVzdBINCgVsaW1pdBgBIAEoBRIWCgl0ZW5hbnRfaWQYAiABKAlIAIgBAUIMCgpfdGVuYW50X2lkIkwKGkdldEFjY291bnRMb2Nrb3V0c1Jlc3BvbnNlEi4KCGxvY2tvdXRzGAEgAygLMhwuYW5hbHl0aWNzLnYxLkFjY291bnRMb2Nrb3V0IlwKFlZhcmlhbnRQZXJmb3JtYW5jZUl0ZW0SEwoLdmFyaWFudF9rZXkYASABKAkSEwoLcmVzb2x1dGlvbnMYAiABKAMSGAoQdW5pcXVlX2N1c3RvbWVycxgDIAEoAyKKAQocR2V0VmFyaWFudFBlcmZvcm1hbmNlUmVxdWVzdBItCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBQgcKBV9mcm9tQgUKA190byJUCh1HZXRWYXJpYW50UGVyZm9ybWFuY2VSZXNwb25zZRIzCgVpdGVtcxgBIAMoCzIkLmFuYWx5dGljcy52MS5WYXJpYW50UGVyZm9ybWFuY2VJdGVtIlgKFVNlZ21lbnRFbmdhZ2VtZW50SXRlbRITCgtzZWdtZW50X2tleRgBIAEoCRIUCgxtZW1iZXJfY291bnQYAiABKAMSFAoMYWN0aXZlX2NvdW50GAMgASgDIokBChtHZXRTZWdtZW50RW5nYWdlbWVudFJlcXVlc3QSLQoEZnJvbRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIrCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBAUIHCgVfZnJvbUIFCgNfdG8iUgocR2V0U2VnbWVudEVuZ2FnZW1lbnRSZXNwb25zZRIyCgVpdGVtcxgBIAMoCzIjLmFuYWx5dGljcy52MS5TZWdtZW50RW5nYWdlbWVudEl0ZW0idAoYRXhwZXJpbWVudENvbnZlcnNpb25JdGVtEhUKDWV4cGVyaW1lbnRfaWQYASABKAkSEwoLdmFyaWFudF9rZXkYAiABKAkSEwoLY29udmVyc2lvbnMYAyABKAMSFwoPY29udmVyc2lvbl9yYXRlGAQgASgBIrsBCh9HZXRFeHBlcmltZW50Q29udmVyc2lvbnNSZXF1ZXN0EhoKDWV4cGVyaW1lbnRfaWQYASABKAlIAIgBARItCgRmcm9tGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEisKAnRvGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgCiAEBQhAKDl9leHBlcmltZW50X2lkQgcKBV9mcm9tQgUKA190byJZCiBHZXRFeHBlcmltZW50Q29udmVyc2lvbnNSZXNwb25zZRI1CgVpdGVtcxgBIAMoCzImLmFuYWx5dGljcy52MS5FeHBlcmltZW50Q29udmVyc2lvbkl0ZW0iRQoKRnVubmVsU3RlcBIRCglzdGVwX25hbWUYASABKAkSDQoFY291bnQYAiABKAMSFQoNZHJvcF9vZmZfcmF0ZRgDIAEoASKnAQoiR2V0RXhwZXJpbWVudEZ1bm5lbEFuYWx5c2lzUmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJEi0KBGZyb20YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESKwoCdG8YAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQFCBwoFX2Zyb21CBQoDX3RvIk4KI0dldEV4cGVyaW1lbnRGdW5uZWxBbmFseXNpc1Jlc3BvbnNlEicKBXN0ZXBzGAEgAygLMhguYW5hbHl0aWNzLnYxLkZ1bm5lbFN0ZXAiggIKHFJlY29yZENvbnZlcnNpb25FdmVudFJlcXVlc3QSFgoOZXhwZXJpbWVudF9rZXkYASABKAkSEwoLdmFyaWFudF9rZXkYAiABKAkSEgoKaXNfY29udHJvbBgDIAEoCBISCgpldmVudF9uYW1lGAQgASgJEhgKC2N1c3RvbWVyX2lkGAUgASgJSACIAQESFwoKdmlld2VyX2tleRgGIAEoCUgBiAEBEi4KCG1ldGFkYXRhGAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgCiAEBQg4KDF9jdXN0b21lcl9pZEINCgtfdmlld2VyX2tleUILCglfbWV0YWRhdGEiMAodUmVjb3JkQ29udmVyc2lvbkV2ZW50UmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCDKaCgoQQW5hbHl0aWNzU2VydmljZRJqChNHZXRBbmFseXRpY3NTdW1tYXJ5EiguYW5hbHl0aWNzLnYxLkdldEFuYWx5dGljc1N1bW1hcnlSZXF1ZXN0GikuYW5hbHl0aWNzLnYxLkdldEFuYWx5dGljc1N1bW1hcnlSZXNwb25zZRJJCghHZXRUcmVuZBIdLmFuYWx5dGljcy52MS5HZXRUcmVuZFJlcXVlc3QaHi5hbmFseXRpY3MudjEuR2V0VHJlbmRSZXNwb25zZRJeCg9HZXREaXN0cmlidXRpb24SJC5hbmFseXRpY3MudjEuR2V0RGlzdHJpYnV0aW9uUmVxdWVzdBolLmFuYWx5dGljcy52MS5HZXREaXN0cmlidXRpb25SZXNwb25zZRJnChJHZXRTZWN1cml0eVN1bW1hcnkSJy5hbmFseXRpY3MudjEuR2V0U2VjdXJpdHlTdW1tYXJ5UmVxdWVzdBooLmFuYWx5dGljcy52MS5HZXRTZWN1cml0eVN1bW1hcnlSZXNwb25zZRJqChNHZXRTdXNwaWNpb3VzTG9naW5zEiguYW5hbHl0aWNzLnYxLkdldFN1c3BpY2lvdXNMb2dpbnNSZXF1ZXN0GikuYW5hbHl0aWNzLnYxLkdldFN1c3BpY2lvdXNMb2dpbnNSZXNwb25zZRJeCg9HZXRGYWlsZWRMb2dpbnMSJC5hbmFseXRpY3MudjEuR2V0RmFpbGVkTG9naW5zUmVxdWVzdBolLmFuYWx5dGljcy52MS5HZXRGYWlsZWRMb2dpbnNSZXNwb25zZRJnChJHZXRBY2NvdW50TG9ja291dHMSJy5hbmFseXRpY3MudjEuR2V0QWNjb3VudExvY2tvdXRzUmVxdWVzdBooLmFuYWx5dGljcy52MS5HZXRBY2NvdW50TG9ja291dHNSZXNwb25zZRJwChVHZXRWYXJpYW50UGVyZm9ybWFuY2USKi5hbmFseXRpY3MudjEuR2V0VmFyaWFudFBlcmZvcm1hbmNlUmVxdWVzdBorLmFuYWx5dGljcy52MS5HZXRWYXJpYW50UGVyZm9ybWFuY2VSZXNwb25zZRJtChRHZXRTZWdtZW50RW5nYWdlbWVudBIpLmFuYWx5dGljcy52MS5HZXRTZWdtZW50RW5nYWdlbWVudFJlcXVlc3QaKi5hbmFseXRpY3MudjEuR2V0U2VnbWVudEVuZ2FnZW1lbnRSZXNwb25zZRJ5ChhHZXRFeHBlcmltZW50Q29udmVyc2lvbnMSLS5hbmFseXRpY3MudjEuR2V0RXhwZXJpbWVudENvbnZlcnNpb25zUmVxdWVzdBouLmFuYWx5dGljcy52MS5HZXRFeHBlcmltZW50Q29udmVyc2lvbnNSZXNwb25zZRKCAQobR2V0RXhwZXJpbWVudEZ1bm5lbEFuYWx5c2lzEjAuYW5hbHl0aWNzLnYxLkdldEV4cGVyaW1lbnRGdW5uZWxBbmFseXNpc1JlcXVlc3QaMS5hbmFseXRpY3MudjEuR2V0RXhwZXJpbWVudEZ1bm5lbEFuYWx5c2lzUmVzcG9uc2UScAoVUmVjb3JkQ29udmVyc2lvbkV2ZW50EiouYW5hbHl0aWNzLnYxLlJlY29yZENvbnZlcnNpb25FdmVudFJlcXVlc3QaKy5hbmFseXRpY3MudjEuUmVjb3JkQ29udmVyc2lvbkV2ZW50UmVzcG9uc2VCP1o9Z2l0aHViLmNvbS9laWRlc3R1ZGlvL2ZvaXIvZ2VuL3Byb3RvL2FuYWx5dGljcy92MTthbmFseXRpY3N2MWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp]);
12
+ fileDesc("ChxhbmFseXRpY3MvdjEvYW5hbHl0aWNzLnByb3RvEgxhbmFseXRpY3MudjEiogEKEEFuYWx5dGljc1N1bW1hcnkSFQoNdG90YWxfcmVjb3JkcxgBIAEoBRIUCgx0b3RhbF9tb2RlbHMYAiABKAUSFwoPdG90YWxfY3VzdG9tZXJzGAMgASgFEhMKC3RvdGFsX3VzZXJzGAQgASgFEhoKEmFjdGl2ZV9leHBlcmltZW50cxgFIAEoBRIXCg9hY3RpdmVfc2VnbWVudHMYBiABKAUiKQoKVHJlbmRQb2ludBIMCgRkYXRlGAEgASgJEg0KBXZhbHVlGAIgASgDIi4KEERpc3RyaWJ1dGlvbkl0ZW0SCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgDInAKD1NlY3VyaXR5U3VtbWFyeRIUCgx0b3RhbF9sb2dpbnMYASABKAUSFQoNZmFpbGVkX2xvZ2lucxgCIAEoBRIYChBhY2NvdW50X2xvY2tvdXRzGAMgASgFEhYKDnN1c3BpY2lvdXNfaXBzGAQgASgFIm4KD1N1c3BpY2lvdXNMb2dpbhINCgVlbWFpbBgBIAEoCRIQCghpcF9jb3VudBgCIAEoBRILCgNpcHMYAyADKAkSLQoJbGFzdF9zZWVuGAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJiCgtGYWlsZWRMb2dpbhISCgppZGVudGlmaWVyGAEgASgJEg0KBWNvdW50GAIgASgFEjAKDGxhc3RfYXR0ZW1wdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAibgoOQWNjb3VudExvY2tvdXQSDQoFZW1haWwYASABKAkSLQoJbG9ja2VkX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgZyZWFzb24YAyABKAlIAIgBAUIJCgdfcmVhc29uIogBChpHZXRBbmFseXRpY3NTdW1tYXJ5UmVxdWVzdBItCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBQgcKBV9mcm9tQgUKA190byJOChtHZXRBbmFseXRpY3NTdW1tYXJ5UmVzcG9uc2USLwoHc3VtbWFyeRgBIAEoCzIeLmFuYWx5dGljcy52MS5BbmFseXRpY3NTdW1tYXJ5IrcBCg9HZXRUcmVuZFJlcXVlc3QSDgoGbWV0cmljGAEgASgJEi0KBGZyb20YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESKwoCdG8YAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESGAoLZ3JhbnVsYXJpdHkYBCABKAlIAogBAUIHCgVfZnJvbUIFCgNfdG9CDgoMX2dyYW51bGFyaXR5IjwKEEdldFRyZW5kUmVzcG9uc2USKAoGcG9pbnRzGAEgAygLMhguYW5hbHl0aWNzLnYxLlRyZW5kUG9pbnQiNwoWR2V0RGlzdHJpYnV0aW9uUmVxdWVzdBIOCgZtZXRyaWMYASABKAkSDQoFbGltaXQYCiABKAUiSAoXR2V0RGlzdHJpYnV0aW9uUmVzcG9uc2USLQoFaXRlbXMYASADKAsyHi5hbmFseXRpY3MudjEuRGlzdHJpYnV0aW9uSXRlbSKtAQoZR2V0U2VjdXJpdHlTdW1tYXJ5UmVxdWVzdBItCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEhYKCXRlbmFudF9pZBgDIAEoCUgCiAEBQgcKBV9mcm9tQgUKA190b0IMCgpfdGVuYW50X2lkIkwKGkdldFNlY3VyaXR5U3VtbWFyeVJlc3BvbnNlEi4KB3N1bW1hcnkYASABKAsyHS5hbmFseXRpY3MudjEuU2VjdXJpdHlTdW1tYXJ5IlEKGkdldFN1c3BpY2lvdXNMb2dpbnNSZXF1ZXN0Eg0KBWxpbWl0GAEgASgFEhYKCXRlbmFudF9pZBgCIAEoCUgAiAEBQgwKCl90ZW5hbnRfaWQiTAobR2V0U3VzcGljaW91c0xvZ2luc1Jlc3BvbnNlEi0KBmxvZ2lucxgBIAMoCzIdLmFuYWx5dGljcy52MS5TdXNwaWNpb3VzTG9naW4iZQoWR2V0RmFpbGVkTG9naW5zUmVxdWVzdBIPCgJieRgBIAEoCUgAiAEBEg0KBWxpbWl0GAogASgFEhYKCXRlbmFudF9pZBgDIAEoCUgBiAEBQgUKA19ieUIMCgpfdGVuYW50X2lkIkUKF0dldEZhaWxlZExvZ2luc1Jlc3BvbnNlEioKB2VudHJpZXMYASADKAsyGS5hbmFseXRpY3MudjEuRmFpbGVkTG9naW4iUAoZR2V0QWNjb3VudExvY2tvdXRzUmVxdWVzdBINCgVsaW1pdBgBIAEoBRIWCgl0ZW5hbnRfaWQYAiABKAlIAIgBAUIMCgpfdGVuYW50X2lkIkwKGkdldEFjY291bnRMb2Nrb3V0c1Jlc3BvbnNlEi4KCGxvY2tvdXRzGAEgAygLMhwuYW5hbHl0aWNzLnYxLkFjY291bnRMb2Nrb3V0IlwKFlZhcmlhbnRQZXJmb3JtYW5jZUl0ZW0SEwoLdmFyaWFudF9rZXkYASABKAkSEwoLcmVzb2x1dGlvbnMYAiABKAMSGAoQdW5pcXVlX2N1c3RvbWVycxgDIAEoAyKKAQocR2V0VmFyaWFudFBlcmZvcm1hbmNlUmVxdWVzdBItCgRmcm9tGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBEisKAnRvGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBQgcKBV9mcm9tQgUKA190byJUCh1HZXRWYXJpYW50UGVyZm9ybWFuY2VSZXNwb25zZRIzCgVpdGVtcxgBIAMoCzIkLmFuYWx5dGljcy52MS5WYXJpYW50UGVyZm9ybWFuY2VJdGVtIlgKFVNlZ21lbnRFbmdhZ2VtZW50SXRlbRITCgtzZWdtZW50X2tleRgBIAEoCRIUCgxtZW1iZXJfY291bnQYAiABKAMSFAoMYWN0aXZlX2NvdW50GAMgASgDIokBChtHZXRTZWdtZW50RW5nYWdlbWVudFJlcXVlc3QSLQoEZnJvbRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIrCgJ0bxgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBAUIHCgVfZnJvbUIFCgNfdG8iUgocR2V0U2VnbWVudEVuZ2FnZW1lbnRSZXNwb25zZRIyCgVpdGVtcxgBIAMoCzIjLmFuYWx5dGljcy52MS5TZWdtZW50RW5nYWdlbWVudEl0ZW0idAoYRXhwZXJpbWVudENvbnZlcnNpb25JdGVtEhUKDWV4cGVyaW1lbnRfaWQYASABKAkSEwoLdmFyaWFudF9rZXkYAiABKAkSEwoLY29udmVyc2lvbnMYAyABKAMSFwoPY29udmVyc2lvbl9yYXRlGAQgASgBIrsBCh9HZXRFeHBlcmltZW50Q29udmVyc2lvbnNSZXF1ZXN0EhoKDWV4cGVyaW1lbnRfaWQYASABKAlIAIgBARItCgRmcm9tGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEisKAnRvGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgCiAEBQhAKDl9leHBlcmltZW50X2lkQgcKBV9mcm9tQgUKA190byJZCiBHZXRFeHBlcmltZW50Q29udmVyc2lvbnNSZXNwb25zZRI1CgVpdGVtcxgBIAMoCzImLmFuYWx5dGljcy52MS5FeHBlcmltZW50Q29udmVyc2lvbkl0ZW0ioAEKDkZ1bm5lbFN0ZXBTdGF0EhMKC3ZhcmlhbnRfa2V5GAEgASgJEhIKCnN0ZXBfaW5kZXgYAiABKAUSEAoIc3RlcF9rZXkYAyABKAkSEQoJc3RlcF9uYW1lGAQgASgJEhQKDHVuaXF1ZV9jb3VudBgFIAEoAxITCgtldmVudF9jb3VudBgGIAEoAxIVCg1kcm9wX29mZl9yYXRlGAcgASgBIqcBCiJHZXRFeHBlcmltZW50RnVubmVsQW5hbHlzaXNSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkSLQoEZnJvbRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIrCgJ0bxgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBAUIHCgVfZnJvbUIFCgNfdG8iUgojR2V0RXhwZXJpbWVudEZ1bm5lbEFuYWx5c2lzUmVzcG9uc2USKwoFc3RhdHMYASADKAsyHC5hbmFseXRpY3MudjEuRnVubmVsU3RlcFN0YXQiggIKHFJlY29yZENvbnZlcnNpb25FdmVudFJlcXVlc3QSFgoOZXhwZXJpbWVudF9rZXkYASABKAkSEwoLdmFyaWFudF9rZXkYAiABKAkSEgoKaXNfY29udHJvbBgDIAEoCBISCgpldmVudF9uYW1lGAQgASgJEhgKC2N1c3RvbWVyX2lkGAUgASgJSACIAQESFwoKdmlld2VyX2tleRgGIAEoCUgBiAEBEi4KCG1ldGFkYXRhGAcgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgCiAEBQg4KDF9jdXN0b21lcl9pZEINCgtfdmlld2VyX2tleUILCglfbWV0YWRhdGEiMAodUmVjb3JkQ29udmVyc2lvbkV2ZW50UmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCDKaCgoQQW5hbHl0aWNzU2VydmljZRJqChNHZXRBbmFseXRpY3NTdW1tYXJ5EiguYW5hbHl0aWNzLnYxLkdldEFuYWx5dGljc1N1bW1hcnlSZXF1ZXN0GikuYW5hbHl0aWNzLnYxLkdldEFuYWx5dGljc1N1bW1hcnlSZXNwb25zZRJJCghHZXRUcmVuZBIdLmFuYWx5dGljcy52MS5HZXRUcmVuZFJlcXVlc3QaHi5hbmFseXRpY3MudjEuR2V0VHJlbmRSZXNwb25zZRJeCg9HZXREaXN0cmlidXRpb24SJC5hbmFseXRpY3MudjEuR2V0RGlzdHJpYnV0aW9uUmVxdWVzdBolLmFuYWx5dGljcy52MS5HZXREaXN0cmlidXRpb25SZXNwb25zZRJnChJHZXRTZWN1cml0eVN1bW1hcnkSJy5hbmFseXRpY3MudjEuR2V0U2VjdXJpdHlTdW1tYXJ5UmVxdWVzdBooLmFuYWx5dGljcy52MS5HZXRTZWN1cml0eVN1bW1hcnlSZXNwb25zZRJqChNHZXRTdXNwaWNpb3VzTG9naW5zEiguYW5hbHl0aWNzLnYxLkdldFN1c3BpY2lvdXNMb2dpbnNSZXF1ZXN0GikuYW5hbHl0aWNzLnYxLkdldFN1c3BpY2lvdXNMb2dpbnNSZXNwb25zZRJeCg9HZXRGYWlsZWRMb2dpbnMSJC5hbmFseXRpY3MudjEuR2V0RmFpbGVkTG9naW5zUmVxdWVzdBolLmFuYWx5dGljcy52MS5HZXRGYWlsZWRMb2dpbnNSZXNwb25zZRJnChJHZXRBY2NvdW50TG9ja291dHMSJy5hbmFseXRpY3MudjEuR2V0QWNjb3VudExvY2tvdXRzUmVxdWVzdBooLmFuYWx5dGljcy52MS5HZXRBY2NvdW50TG9ja291dHNSZXNwb25zZRJwChVHZXRWYXJpYW50UGVyZm9ybWFuY2USKi5hbmFseXRpY3MudjEuR2V0VmFyaWFudFBlcmZvcm1hbmNlUmVxdWVzdBorLmFuYWx5dGljcy52MS5HZXRWYXJpYW50UGVyZm9ybWFuY2VSZXNwb25zZRJtChRHZXRTZWdtZW50RW5nYWdlbWVudBIpLmFuYWx5dGljcy52MS5HZXRTZWdtZW50RW5nYWdlbWVudFJlcXVlc3QaKi5hbmFseXRpY3MudjEuR2V0U2VnbWVudEVuZ2FnZW1lbnRSZXNwb25zZRJ5ChhHZXRFeHBlcmltZW50Q29udmVyc2lvbnMSLS5hbmFseXRpY3MudjEuR2V0RXhwZXJpbWVudENvbnZlcnNpb25zUmVxdWVzdBouLmFuYWx5dGljcy52MS5HZXRFeHBlcmltZW50Q29udmVyc2lvbnNSZXNwb25zZRKCAQobR2V0RXhwZXJpbWVudEZ1bm5lbEFuYWx5c2lzEjAuYW5hbHl0aWNzLnYxLkdldEV4cGVyaW1lbnRGdW5uZWxBbmFseXNpc1JlcXVlc3QaMS5hbmFseXRpY3MudjEuR2V0RXhwZXJpbWVudEZ1bm5lbEFuYWx5c2lzUmVzcG9uc2UScAoVUmVjb3JkQ29udmVyc2lvbkV2ZW50EiouYW5hbHl0aWNzLnYxLlJlY29yZENvbnZlcnNpb25FdmVudFJlcXVlc3QaKy5hbmFseXRpY3MudjEuUmVjb3JkQ29udmVyc2lvbkV2ZW50UmVzcG9uc2VCP1o9Z2l0aHViLmNvbS9laWRlc3R1ZGlvL2ZvaXIvZ2VuL3Byb3RvL2FuYWx5dGljcy92MTthbmFseXRpY3N2MWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp]);
13
13
 
14
14
  /**
15
15
  * Describes the message analytics.v1.AnalyticsSummary.
@@ -222,10 +222,10 @@ export const GetExperimentConversionsResponseSchema = /*@__PURE__*/
222
222
  messageDesc(file_analytics_v1_analytics, 29);
223
223
 
224
224
  /**
225
- * Describes the message analytics.v1.FunnelStep.
226
- * Use `create(FunnelStepSchema)` to create a new message.
225
+ * Describes the message analytics.v1.FunnelStepStat.
226
+ * Use `create(FunnelStepStatSchema)` to create a new message.
227
227
  */
228
- export const FunnelStepSchema = /*@__PURE__*/
228
+ export const FunnelStepStatSchema = /*@__PURE__*/
229
229
  messageDesc(file_analytics_v1_analytics, 30);
230
230
 
231
231
  /**
@@ -85,6 +85,11 @@ export declare const ExperimentVariantSchema: GenMessage<ExperimentVariant>;
85
85
  * An experiment with zero goals declared accepts any event_name (no
86
86
  * goal-match enforcement).
87
87
  *
88
+ * At most one goal per experiment may be marked is_primary=true. The primary
89
+ * goal is the metric the admin dashboard surfaces by default in the
90
+ * experiment list and uses to highlight winning variants; secondary goals
91
+ * are tracked but don't drive the headline number.
92
+ *
88
93
  * @generated from message experiments.v1.ExperimentGoal
89
94
  */
90
95
  export declare type ExperimentGoal = Message<"experiments.v1.ExperimentGoal"> & {
@@ -102,6 +107,11 @@ export declare type ExperimentGoal = Message<"experiments.v1.ExperimentGoal"> &
102
107
  * @generated from field: optional string description = 3;
103
108
  */
104
109
  description?: string | undefined;
110
+
111
+ /**
112
+ * @generated from field: bool is_primary = 4;
113
+ */
114
+ isPrimary: boolean;
105
115
  };
106
116
 
107
117
  /**
@@ -110,6 +120,43 @@ export declare type ExperimentGoal = Message<"experiments.v1.ExperimentGoal"> &
110
120
  */
111
121
  export declare const ExperimentGoalSchema: GenMessage<ExperimentGoal>;
112
122
 
123
+ /**
124
+ * ExperimentFunnelStep is one step in the conversion funnel for an
125
+ * experiment. Steps are evaluated in declaration order: a visitor counts
126
+ * toward step N's unique-count only after they've recorded an event
127
+ * matching some prior step's goal_key. Drop-off rate at step N is reported
128
+ * per variant relative to step N-1.
129
+ *
130
+ * goal_key is the event_name a recordConversion call must carry to advance
131
+ * the funnel. It need not match a top-level Experiment.goals entry — the
132
+ * funnel exists in parallel with goals and acts as its own accept-list for
133
+ * recordConversion when goals is empty.
134
+ *
135
+ * @generated from message experiments.v1.ExperimentFunnelStep
136
+ */
137
+ export declare type ExperimentFunnelStep = Message<"experiments.v1.ExperimentFunnelStep"> & {
138
+ /**
139
+ * @generated from field: string goal_key = 1;
140
+ */
141
+ goalKey: string;
142
+
143
+ /**
144
+ * @generated from field: string name = 2;
145
+ */
146
+ name: string;
147
+
148
+ /**
149
+ * @generated from field: optional string description = 3;
150
+ */
151
+ description?: string | undefined;
152
+ };
153
+
154
+ /**
155
+ * Describes the message experiments.v1.ExperimentFunnelStep.
156
+ * Use `create(ExperimentFunnelStepSchema)` to create a new message.
157
+ */
158
+ export declare const ExperimentFunnelStepSchema: GenMessage<ExperimentFunnelStep>;
159
+
113
160
  /**
114
161
  * @generated from message experiments.v1.Experiment
115
162
  */
@@ -168,6 +215,17 @@ export declare type Experiment = Message<"experiments.v1.Experiment"> & {
168
215
  */
169
216
  assignmentPersistence: string;
170
217
 
218
+ /**
219
+ * Mutual exclusion: experiments sharing a non-empty exclusion_group_key
220
+ * are mutually exclusive — a visitor bucketed into one of them is
221
+ * ineligible for the others. Empty/unset means the experiment runs
222
+ * independently and a visitor can be in it concurrently with any other
223
+ * experiment.
224
+ *
225
+ * @generated from field: optional string exclusion_group_key = 24;
226
+ */
227
+ exclusionGroupKey?: string | undefined;
228
+
171
229
  /**
172
230
  * Scheduling.
173
231
  *
@@ -192,6 +250,11 @@ export declare type Experiment = Message<"experiments.v1.Experiment"> & {
192
250
  */
193
251
  goals: ExperimentGoal[];
194
252
 
253
+ /**
254
+ * @generated from field: repeated experiments.v1.ExperimentFunnelStep funnel_steps = 37;
255
+ */
256
+ funnelSteps: ExperimentFunnelStep[];
257
+
195
258
  /**
196
259
  * Ownership.
197
260
  *
@@ -355,6 +418,209 @@ export declare type ExperimentDeclaration = Message<"experiments.v1.ExperimentDe
355
418
  export declare const ExperimentDeclarationSchema: GenMessage<ExperimentDeclaration>;
356
419
 
357
420
  /**
421
+ * ExperimentMetricSpec is a caller-supplied request to aggregate a
422
+ * numeric metadata value over the experiment's conversion events.
423
+ *
424
+ * path is a dot-separated list of object keys ("a.b.c") into the
425
+ * metadata JSONB, validated server-side against
426
+ * ^[A-Za-z_][A-Za-z0-9_]*(\.[A-Za-z_][A-Za-z0-9_]*)*$ — no array
427
+ * indexing, no JSONPath operators. Keys are bound as parameters in the
428
+ * aggregation SQL so even invalid paths cannot become injection
429
+ * vectors.
430
+ *
431
+ * Path target must be a JSON number. Rows where the target is a
432
+ * non-numeric JSON value (string, bool, null, missing) are excluded
433
+ * from the aggregation and counted in skipped_row_count.
434
+ *
435
+ * goal_key, when set, scopes the aggregation to events of that goal —
436
+ * useful for "average cart value among users who completed checkout"
437
+ * without bleeding cart-abandonment events into the AVG.
438
+ *
439
+ * @generated from message experiments.v1.ExperimentMetricSpec
440
+ */
441
+ export declare type ExperimentMetricSpec = Message<"experiments.v1.ExperimentMetricSpec"> & {
442
+ /**
443
+ * @generated from field: string name = 1;
444
+ */
445
+ name: string;
446
+
447
+ /**
448
+ * @generated from field: string path = 2;
449
+ */
450
+ path: string;
451
+
452
+ /**
453
+ * @generated from field: experiments.v1.MetricAggregator aggregator = 3;
454
+ */
455
+ aggregator: MetricAggregator;
456
+
457
+ /**
458
+ * @generated from field: optional string goal_key = 4;
459
+ */
460
+ goalKey?: string | undefined;
461
+ };
462
+
463
+ /**
464
+ * Describes the message experiments.v1.ExperimentMetricSpec.
465
+ * Use `create(ExperimentMetricSpecSchema)` to create a new message.
466
+ */
467
+ export declare const ExperimentMetricSpecSchema: GenMessage<ExperimentMetricSpec>;
468
+
469
+ /**
470
+ * SignificanceResult is a frequentist two-proportion comparison of a
471
+ * variant's conversion rate against the control's. Computed
472
+ * server-side from assignment_count and unique_converters via the
473
+ * two-proportion z-test. Returned per (variant, goal) for non-control
474
+ * variants only — control's slot is omitted because there's no
475
+ * comparison to compute.
476
+ *
477
+ * p_value is the raw two-sided value; consumers running multiple
478
+ * simultaneous comparisons (e.g. 3 variants × 4 goals = 12 tests)
479
+ * should apply their own multiple-testing correction. The CLI human
480
+ * renderer applies Bonferroni across the visible test family because
481
+ * it knows the family size; the wire response stays raw because the
482
+ * server doesn't know what other queries the consumer is running.
483
+ *
484
+ * is_significant gates p_value < 0.05 on minimum sample size per arm
485
+ * (default 100, overridable via GetExperimentStatsRequest.min_sample_size)
486
+ * to prevent false positives at low n.
487
+ *
488
+ * @generated from message experiments.v1.SignificanceResult
489
+ */
490
+ export declare type SignificanceResult = Message<"experiments.v1.SignificanceResult"> & {
491
+ /**
492
+ * @generated from field: double p_value = 1;
493
+ */
494
+ pValue: number;
495
+
496
+ /**
497
+ * @generated from field: double relative_lift = 2;
498
+ */
499
+ relativeLift: number;
500
+
501
+ /**
502
+ * @generated from field: double absolute_lift = 3;
503
+ */
504
+ absoluteLift: number;
505
+
506
+ /**
507
+ * @generated from field: double ci_lower = 4;
508
+ */
509
+ ciLower: number;
510
+
511
+ /**
512
+ * @generated from field: double ci_upper = 5;
513
+ */
514
+ ciUpper: number;
515
+
516
+ /**
517
+ * @generated from field: bool is_significant = 6;
518
+ */
519
+ isSignificant: boolean;
520
+
521
+ /**
522
+ * @generated from field: int32 min_sample_size = 7;
523
+ */
524
+ minSampleSize: number;
525
+ };
526
+
527
+ /**
528
+ * Describes the message experiments.v1.SignificanceResult.
529
+ * Use `create(SignificanceResultSchema)` to create a new message.
530
+ */
531
+ export declare const SignificanceResultSchema: GenMessage<SignificanceResult>;
532
+
533
+ /**
534
+ * MetricSignificanceResult is the metric counterpart of
535
+ * SignificanceResult. p_value comes from Welch's t-test (SUM/AVG) or
536
+ * the percentile bootstrap (P50/P95). MIN/MAX/COUNT have no meaningful
537
+ * significance test and this message is omitted on those aggregators.
538
+ *
539
+ * @generated from message experiments.v1.MetricSignificanceResult
540
+ */
541
+ export declare type MetricSignificanceResult = Message<"experiments.v1.MetricSignificanceResult"> & {
542
+ /**
543
+ * @generated from field: double p_value = 1;
544
+ */
545
+ pValue: number;
546
+
547
+ /**
548
+ * @generated from field: double relative_lift = 2;
549
+ */
550
+ relativeLift: number;
551
+
552
+ /**
553
+ * @generated from field: double absolute_lift = 3;
554
+ */
555
+ absoluteLift: number;
556
+
557
+ /**
558
+ * @generated from field: double ci_lower = 4;
559
+ */
560
+ ciLower: number;
561
+
562
+ /**
563
+ * @generated from field: double ci_upper = 5;
564
+ */
565
+ ciUpper: number;
566
+
567
+ /**
568
+ * @generated from field: bool is_significant = 6;
569
+ */
570
+ isSignificant: boolean;
571
+ };
572
+
573
+ /**
574
+ * Describes the message experiments.v1.MetricSignificanceResult.
575
+ * Use `create(MetricSignificanceResultSchema)` to create a new message.
576
+ */
577
+ export declare const MetricSignificanceResultSchema: GenMessage<MetricSignificanceResult>;
578
+
579
+ /**
580
+ * VariantGoalStats is one (variant, goal) cell of the experimentStats
581
+ * matrix. unique_converters de-duplicates by COALESCE(customer_id,
582
+ * viewer_key) — a user converting twice on the same goal counts as 1
583
+ * unique. conversion_rate = unique_converters / assignment_count
584
+ * (zero-safe — returns 0.0 when no assignments).
585
+ *
586
+ * @generated from message experiments.v1.VariantGoalStats
587
+ */
588
+ export declare type VariantGoalStats = Message<"experiments.v1.VariantGoalStats"> & {
589
+ /**
590
+ * @generated from field: string goal_key = 1;
591
+ */
592
+ goalKey: string;
593
+
594
+ /**
595
+ * @generated from field: int32 conversion_event_count = 2;
596
+ */
597
+ conversionEventCount: number;
598
+
599
+ /**
600
+ * @generated from field: int32 unique_converters = 3;
601
+ */
602
+ uniqueConverters: number;
603
+
604
+ /**
605
+ * @generated from field: double conversion_rate = 4;
606
+ */
607
+ conversionRate: number;
608
+
609
+ /**
610
+ * @generated from field: optional experiments.v1.SignificanceResult significance = 5;
611
+ */
612
+ significance?: SignificanceResult | undefined;
613
+ };
614
+
615
+ /**
616
+ * Describes the message experiments.v1.VariantGoalStats.
617
+ * Use `create(VariantGoalStatsSchema)` to create a new message.
618
+ */
619
+ export declare const VariantGoalStatsSchema: GenMessage<VariantGoalStats>;
620
+
621
+ /**
622
+ * VariantStats aggregates one variant across its declared goals.
623
+ *
358
624
  * @generated from message experiments.v1.VariantStats
359
625
  */
360
626
  export declare type VariantStats = Message<"experiments.v1.VariantStats"> & {
@@ -364,19 +630,19 @@ export declare type VariantStats = Message<"experiments.v1.VariantStats"> & {
364
630
  variantKey: string;
365
631
 
366
632
  /**
367
- * @generated from field: int32 assignment_count = 2;
633
+ * @generated from field: bool is_control = 2;
368
634
  */
369
- assignmentCount: number;
635
+ isControl: boolean;
370
636
 
371
637
  /**
372
- * @generated from field: double conversion_rate = 3;
638
+ * @generated from field: int32 assignment_count = 3;
373
639
  */
374
- conversionRate: number;
640
+ assignmentCount: number;
375
641
 
376
642
  /**
377
- * @generated from field: optional google.protobuf.Struct additional_metrics = 4;
643
+ * @generated from field: repeated experiments.v1.VariantGoalStats goal_stats = 4;
378
644
  */
379
- additionalMetrics?: JsonObject | undefined;
645
+ goalStats: VariantGoalStats[];
380
646
  };
381
647
 
382
648
  /**
@@ -386,18 +652,195 @@ export declare type VariantStats = Message<"experiments.v1.VariantStats"> & {
386
652
  export declare const VariantStatsSchema: GenMessage<VariantStats>;
387
653
 
388
654
  /**
655
+ * GoalStats summarises one goal across all variants.
656
+ *
657
+ * @generated from message experiments.v1.GoalStats
658
+ */
659
+ export declare type GoalStats = Message<"experiments.v1.GoalStats"> & {
660
+ /**
661
+ * @generated from field: string goal_key = 1;
662
+ */
663
+ goalKey: string;
664
+
665
+ /**
666
+ * @generated from field: string goal_name = 2;
667
+ */
668
+ goalName: string;
669
+
670
+ /**
671
+ * @generated from field: bool is_primary = 3;
672
+ */
673
+ isPrimary: boolean;
674
+
675
+ /**
676
+ * @generated from field: int32 total_conversions = 4;
677
+ */
678
+ totalConversions: number;
679
+
680
+ /**
681
+ * @generated from field: int32 total_unique_converters = 5;
682
+ */
683
+ totalUniqueConverters: number;
684
+ };
685
+
686
+ /**
687
+ * Describes the message experiments.v1.GoalStats.
688
+ * Use `create(GoalStatsSchema)` to create a new message.
689
+ */
690
+ export declare const GoalStatsSchema: GenMessage<GoalStats>;
691
+
692
+ /**
693
+ * DailyStatsPoint is one (variant, goal, day) row of the time series.
694
+ * stat_date is "YYYY-MM-DD" in UTC. unique_converters is per-day —
695
+ * summing the daily uniques does NOT equal the cumulative unique
696
+ * (a user who converts on day 1 and day 3 counts as 1 unique each
697
+ * day, but 1 cumulative).
698
+ *
699
+ * @generated from message experiments.v1.DailyStatsPoint
700
+ */
701
+ export declare type DailyStatsPoint = Message<"experiments.v1.DailyStatsPoint"> & {
702
+ /**
703
+ * @generated from field: string variant_key = 1;
704
+ */
705
+ variantKey: string;
706
+
707
+ /**
708
+ * @generated from field: string goal_key = 2;
709
+ */
710
+ goalKey: string;
711
+
712
+ /**
713
+ * @generated from field: string stat_date = 3;
714
+ */
715
+ statDate: string;
716
+
717
+ /**
718
+ * @generated from field: int32 conversion_event_count = 4;
719
+ */
720
+ conversionEventCount: number;
721
+
722
+ /**
723
+ * @generated from field: int32 unique_converters = 5;
724
+ */
725
+ uniqueConverters: number;
726
+ };
727
+
728
+ /**
729
+ * Describes the message experiments.v1.DailyStatsPoint.
730
+ * Use `create(DailyStatsPointSchema)` to create a new message.
731
+ */
732
+ export declare const DailyStatsPointSchema: GenMessage<DailyStatsPoint>;
733
+
734
+ /**
735
+ * VariantMetricStats is one (variant, metric) cell of the metric
736
+ * aggregation matrix.
737
+ *
738
+ * @generated from message experiments.v1.VariantMetricStats
739
+ */
740
+ export declare type VariantMetricStats = Message<"experiments.v1.VariantMetricStats"> & {
741
+ /**
742
+ * @generated from field: string variant_key = 1;
743
+ */
744
+ variantKey: string;
745
+
746
+ /**
747
+ * @generated from field: string metric_name = 2;
748
+ */
749
+ metricName: string;
750
+
751
+ /**
752
+ * @generated from field: double value = 3;
753
+ */
754
+ value: number;
755
+
756
+ /**
757
+ * @generated from field: int32 sample_size = 4;
758
+ */
759
+ sampleSize: number;
760
+
761
+ /**
762
+ * @generated from field: int32 skipped_row_count = 5;
763
+ */
764
+ skippedRowCount: number;
765
+
766
+ /**
767
+ * @generated from field: optional experiments.v1.MetricSignificanceResult significance = 6;
768
+ */
769
+ significance?: MetricSignificanceResult | undefined;
770
+ };
771
+
772
+ /**
773
+ * Describes the message experiments.v1.VariantMetricStats.
774
+ * Use `create(VariantMetricStatsSchema)` to create a new message.
775
+ */
776
+ export declare const VariantMetricStatsSchema: GenMessage<VariantMetricStats>;
777
+
778
+ /**
779
+ * ExperimentStats is the complete decision-grade response. variants
780
+ * gives per-variant assignment counts + per-goal breakdowns; goals
781
+ * gives experiment-wide totals; daily gives a time-series for charts;
782
+ * metric_stats holds optional caller-requested metadata aggregations.
783
+ *
784
+ * window_from / window_to echo the effective aggregation window the
785
+ * server used (caller-supplied or default).
786
+ *
787
+ * daily_grain is "day" for windows ≤ 365 days and "week" for longer
788
+ * windows — the handler downsamples automatically to keep the daily
789
+ * payload bounded. Consumers should use this to label their chart
790
+ * axis correctly.
791
+ *
389
792
  * @generated from message experiments.v1.ExperimentStats
390
793
  */
391
794
  export declare type ExperimentStats = Message<"experiments.v1.ExperimentStats"> & {
392
795
  /**
393
- * @generated from field: repeated experiments.v1.VariantStats variant_stats = 1;
796
+ * @generated from field: string experiment_id = 1;
797
+ */
798
+ experimentId: string;
799
+
800
+ /**
801
+ * @generated from field: string experiment_key = 2;
394
802
  */
395
- variantStats: VariantStats[];
803
+ experimentKey: string;
396
804
 
397
805
  /**
398
- * @generated from field: int32 total_assignments = 2;
806
+ * @generated from field: int32 total_assignments = 3;
399
807
  */
400
808
  totalAssignments: number;
809
+
810
+ /**
811
+ * @generated from field: repeated experiments.v1.VariantStats variants = 4;
812
+ */
813
+ variants: VariantStats[];
814
+
815
+ /**
816
+ * @generated from field: repeated experiments.v1.GoalStats goals = 5;
817
+ */
818
+ goals: GoalStats[];
819
+
820
+ /**
821
+ * @generated from field: google.protobuf.Timestamp window_from = 6;
822
+ */
823
+ windowFrom?: Timestamp | undefined;
824
+
825
+ /**
826
+ * @generated from field: google.protobuf.Timestamp window_to = 7;
827
+ */
828
+ windowTo?: Timestamp | undefined;
829
+
830
+ /**
831
+ * @generated from field: repeated experiments.v1.DailyStatsPoint daily = 8;
832
+ */
833
+ daily: DailyStatsPoint[];
834
+
835
+ /**
836
+ * @generated from field: string daily_grain = 9;
837
+ */
838
+ dailyGrain: string;
839
+
840
+ /**
841
+ * @generated from field: repeated experiments.v1.VariantMetricStats metric_stats = 10;
842
+ */
843
+ metricStats: VariantMetricStats[];
401
844
  };
402
845
 
403
846
  /**
@@ -459,6 +902,16 @@ export declare type CreateExperimentRequest = Message<"experiments.v1.CreateExpe
459
902
  * @generated from field: repeated experiments.v1.ExperimentGoal goals = 10;
460
903
  */
461
904
  goals: ExperimentGoal[];
905
+
906
+ /**
907
+ * @generated from field: repeated experiments.v1.ExperimentFunnelStep funnel_steps = 11;
908
+ */
909
+ funnelSteps: ExperimentFunnelStep[];
910
+
911
+ /**
912
+ * @generated from field: optional string exclusion_group_key = 12;
913
+ */
914
+ exclusionGroupKey?: string | undefined;
462
915
  };
463
916
 
464
917
  /**
@@ -660,6 +1113,30 @@ export declare type UpdateExperimentRequest = Message<"experiments.v1.UpdateExpe
660
1113
  * @generated from field: bool goals_clear = 11;
661
1114
  */
662
1115
  goalsClear: boolean;
1116
+
1117
+ /**
1118
+ * Same pattern for funnel_steps and exclusion_group_key — repeated and
1119
+ * optional scalar fields need an explicit clear flag because the unset/
1120
+ * empty wire shape is indistinguishable from "no change."
1121
+ *
1122
+ * @generated from field: repeated experiments.v1.ExperimentFunnelStep funnel_steps = 12;
1123
+ */
1124
+ funnelSteps: ExperimentFunnelStep[];
1125
+
1126
+ /**
1127
+ * @generated from field: bool funnel_steps_clear = 13;
1128
+ */
1129
+ funnelStepsClear: boolean;
1130
+
1131
+ /**
1132
+ * @generated from field: optional string exclusion_group_key = 14;
1133
+ */
1134
+ exclusionGroupKey?: string | undefined;
1135
+
1136
+ /**
1137
+ * @generated from field: bool exclusion_group_key_clear = 15;
1138
+ */
1139
+ exclusionGroupKeyClear: boolean;
663
1140
  };
664
1141
 
665
1142
  /**
@@ -852,6 +1329,41 @@ export declare type GetExperimentStatsRequest = Message<"experiments.v1.GetExper
852
1329
  * @generated from field: string experiment_id = 1;
853
1330
  */
854
1331
  experimentId: string;
1332
+
1333
+ /**
1334
+ * Caller-supplied time window. Both bounds are inclusive on
1335
+ * converted_at. Each may be set independently — the server fills
1336
+ * unset bounds with the defaults: from = experiment.start_date (or
1337
+ * earliest event when start_date is unset); to = NOW().
1338
+ *
1339
+ * @generated from field: optional google.protobuf.Timestamp from = 2;
1340
+ */
1341
+ from?: Timestamp | undefined;
1342
+
1343
+ /**
1344
+ * @generated from field: optional google.protobuf.Timestamp to = 3;
1345
+ */
1346
+ to?: Timestamp | undefined;
1347
+
1348
+ /**
1349
+ * Optional per-call metric aggregations over conversion_events.metadata.
1350
+ * Capped at 10 specs per request — past the cap the handler returns
1351
+ * InvalidArgument. Each spec produces one VariantMetricStats row per
1352
+ * variant in the response.
1353
+ *
1354
+ * @generated from field: repeated experiments.v1.ExperimentMetricSpec metrics = 4;
1355
+ */
1356
+ metrics: ExperimentMetricSpec[];
1357
+
1358
+ /**
1359
+ * Override for the SignificanceResult.is_significant sample-size gate.
1360
+ * Defaults to 100 per arm. Tenants running early-stage experiments
1361
+ * can lower this; the value used is echoed back on every per-goal
1362
+ * SignificanceResult so callers see the gate that was applied.
1363
+ *
1364
+ * @generated from field: optional int32 min_sample_size = 5;
1365
+ */
1366
+ minSampleSize?: number | undefined;
855
1367
  };
856
1368
 
857
1369
  /**
@@ -1359,6 +1871,61 @@ export enum ExperimentStatus {
1359
1871
  */
1360
1872
  export declare const ExperimentStatusSchema: GenEnum<ExperimentStatus>;
1361
1873
 
1874
+ /**
1875
+ * MetricAggregator names the aggregation operation applied to a JSONB
1876
+ * path on conversion_events.metadata. SUM/AVG/COUNT/MIN/MAX map to the
1877
+ * native Postgres aggregates; P50/P95 use percentile_cont(0.5|0.95)
1878
+ * WITHIN GROUP (ORDER BY value).
1879
+ *
1880
+ * @generated from enum experiments.v1.MetricAggregator
1881
+ */
1882
+ export enum MetricAggregator {
1883
+ /**
1884
+ * @generated from enum value: METRIC_AGGREGATOR_UNSPECIFIED = 0;
1885
+ */
1886
+ UNSPECIFIED = 0,
1887
+
1888
+ /**
1889
+ * @generated from enum value: METRIC_AGGREGATOR_SUM = 1;
1890
+ */
1891
+ SUM = 1,
1892
+
1893
+ /**
1894
+ * @generated from enum value: METRIC_AGGREGATOR_AVG = 2;
1895
+ */
1896
+ AVG = 2,
1897
+
1898
+ /**
1899
+ * @generated from enum value: METRIC_AGGREGATOR_COUNT = 3;
1900
+ */
1901
+ COUNT = 3,
1902
+
1903
+ /**
1904
+ * @generated from enum value: METRIC_AGGREGATOR_MIN = 4;
1905
+ */
1906
+ MIN = 4,
1907
+
1908
+ /**
1909
+ * @generated from enum value: METRIC_AGGREGATOR_MAX = 5;
1910
+ */
1911
+ MAX = 5,
1912
+
1913
+ /**
1914
+ * @generated from enum value: METRIC_AGGREGATOR_P50 = 6;
1915
+ */
1916
+ P50 = 6,
1917
+
1918
+ /**
1919
+ * @generated from enum value: METRIC_AGGREGATOR_P95 = 7;
1920
+ */
1921
+ P95 = 7,
1922
+ }
1923
+
1924
+ /**
1925
+ * Describes the enum experiments.v1.MetricAggregator.
1926
+ */
1927
+ export declare const MetricAggregatorSchema: GenEnum<MetricAggregator>;
1928
+
1362
1929
  /**
1363
1930
  * @generated from service experiments.v1.ExperimentsService
1364
1931
  */
@@ -10,7 +10,7 @@ import { file_expressions_v1_expressions } from "../../expressions/v1/expression
10
10
  * Describes the file experiments/v1/experiments.proto.
11
11
  */
12
12
  export const file_experiments_v1_experiments = /*@__PURE__*/
13
- fileDesc("CiBleHBlcmltZW50cy92MS9leHBlcmltZW50cy5wcm90bxIOZXhwZXJpbWVudHMudjEiswEKE0V4cGVyaW1lbnRUYXJnZXRpbmcSDAoEdHlwZRgBIAEoCRIXCgpzZWdtZW50X2lkGAIgASgJSACIAQESGAoLc2VnbWVudF9rZXkYAyABKAlIAYgBARIyCgVydWxlcxgEIAEoCzIeLmV4cHJlc3Npb25zLnYxLlJ1bGVFeHByZXNzaW9uSAKIAQFCDQoLX3NlZ21lbnRfaWRCDgoMX3NlZ21lbnRfa2V5QggKBl9ydWxlcyJ4ChFFeHBlcmltZW50VmFyaWFudBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIPCgdwZXJjZW50GAMgASgFEiwKBmNvbmZpZxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIJCgdfY29uZmlnIlUKDkV4cGVyaW1lbnRHb2FsEgsKA2tleRgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQFCDgoMX2Rlc2NyaXB0aW9uIo0GCgpFeHBlcmltZW50EgoKAmlkGAEgASgJEgsKA2tleRgCIAEoCRIMCgRuYW1lGAMgASgJEhgKC2Rlc2NyaXB0aW9uGAQgASgJSACIAQESMAoGc3RhdHVzGAogASgOMiAuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFN0YXR1cxIRCglpc19hY3RpdmUYCyABKAgSNgoJdGFyZ2V0aW5nGBQgASgLMiMuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFRhcmdldGluZxIXCg9jb250cm9sX3BlcmNlbnQYFSABKAUSMwoIdmFyaWFudHMYFiADKAsyIS5leHBlcmltZW50cy52MS5FeHBlcmltZW50VmFyaWFudBIeChZhc3NpZ25tZW50X3BlcnNpc3RlbmNlGBcgASgJEjMKCnN0YXJ0X2RhdGUYHiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESMQoIZW5kX2RhdGUYHyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQESLQoHbWV0cmljcxgjIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIA4gBARItCgVnb2FscxgkIAMoCzIeLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRHb2FsEhEKCXRlbmFudF9pZBgoIAEoCRISCgpwcm9qZWN0X2lkGCkgASgJEhcKCmNyZWF0ZWRfYnkYLSABKAlIBIgBARIXCgp1cGRhdGVkX2J5GC4gASgJSAWIAQESLgoKY3JlYXRlZF9hdBgyIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKdXBkYXRlZF9hdBgzIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCDgoMX2Rlc2NyaXB0aW9uQg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIKCghfbWV0cmljc0INCgtfY3JlYXRlZF9ieUINCgtfdXBkYXRlZF9ieSLUAwoURXhwZXJpbWVudEFzc2lnbm1lbnQSCgoCaWQYASABKAkSFQoNZXhwZXJpbWVudF9pZBgCIAEoCRIYCgtjdXN0b21lcl9pZBgDIAEoCUgAiAEBEhMKC3ZhcmlhbnRfa2V5GAQgASgJEhkKEWFzc2lnbm1lbnRfbWV0aG9kGAUgASgJEhYKDmV4cGVyaW1lbnRfa2V5GAYgASgJEhcKCnZpZXdlcl9rZXkYByABKAlIAYgBARIRCgl0ZW5hbnRfaWQYCiABKAkSEgoKcHJvamVjdF9pZBgLIAEoCRIvCgthc3NpZ25lZF9hdBgUIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMQoNZmlyc3Rfc2Vlbl9hdBgVIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMAoMbGFzdF9zZWVuX2F0GBYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCgpleHBpcmVzX2F0GBcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgCiAEBQg4KDF9jdXN0b21lcl9pZEINCgtfdmlld2VyX2tleUINCgtfZXhwaXJlc19hdCJFChVFeHBlcmltZW50RGVjbGFyYXRpb24SFgoOZXhwZXJpbWVudF9rZXkYASABKAkSFAoMdmFyaWFudF9rZXlzGAIgAygJIqcBCgxWYXJpYW50U3RhdHMSEwoLdmFyaWFudF9rZXkYASABKAkSGAoQYXNzaWdubWVudF9jb3VudBgCIAEoBRIXCg9jb252ZXJzaW9uX3JhdGUYAyABKAESOAoSYWRkaXRpb25hbF9tZXRyaWNzGAQgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAiAEBQhUKE19hZGRpdGlvbmFsX21ldHJpY3MiYQoPRXhwZXJpbWVudFN0YXRzEjMKDXZhcmlhbnRfc3RhdHMYASADKAsyHC5leHBlcmltZW50cy52MS5WYXJpYW50U3RhdHMSGQoRdG90YWxfYXNzaWdubWVudHMYAiABKAUigwQKF0NyZWF0ZUV4cGVyaW1lbnRSZXF1ZXN0EgsKA2tleRgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESOwoJdGFyZ2V0aW5nGAQgASgLMiMuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFRhcmdldGluZ0gBiAEBEhwKD2NvbnRyb2xfcGVyY2VudBgFIAEoBUgCiAEBEjMKCHZhcmlhbnRzGAYgAygLMiEuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFZhcmlhbnQSMwoKc3RhcnRfZGF0ZRgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIA4gBARIxCghlbmRfZGF0ZRgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBIgBARIjChZhc3NpZ25tZW50X3BlcnNpc3RlbmNlGAkgASgJSAWIAQESLQoFZ29hbHMYCiADKAsyHi5leHBlcmltZW50cy52MS5FeHBlcmltZW50R29hbEIOCgxfZGVzY3JpcHRpb25CDAoKX3RhcmdldGluZ0ISChBfY29udHJvbF9wZXJjZW50Qg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIZChdfYXNzaWdubWVudF9wZXJzaXN0ZW5jZSJKChhDcmVhdGVFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiIgoUR2V0RXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkiRwoVR2V0RXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50IigKGUdldEV4cGVyaW1lbnRCeUtleVJlcXVlc3QSCwoDa2V5GAEgASgJIkwKGkdldEV4cGVyaW1lbnRCeUtleVJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Ip8BChZMaXN0RXhwZXJpbWVudHNSZXF1ZXN0EjUKBnN0YXR1cxgBIAEoDjIgLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRTdGF0dXNIAIgBARIWCglpc19hY3RpdmUYAiABKAhIAYgBARINCgVsaW1pdBgKIAEoBRIOCgZvZmZzZXQYCyABKAVCCQoHX3N0YXR1c0IMCgpfaXNfYWN0aXZlIlkKF0xpc3RFeHBlcmltZW50c1Jlc3BvbnNlEi8KC2V4cGVyaW1lbnRzGAEgAygLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudBINCgV0b3RhbBgCIAEoBSKlBAoXVXBkYXRlRXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkSEQoEbmFtZRgCIAEoCUgAiAEBEhgKC2Rlc2NyaXB0aW9uGAMgASgJSAGIAQESOwoJdGFyZ2V0aW5nGAQgASgLMiMuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFRhcmdldGluZ0gCiAEBEhwKD2NvbnRyb2xfcGVyY2VudBgFIAEoBUgDiAEBEjMKCHZhcmlhbnRzGAYgAygLMiEuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFZhcmlhbnQSMwoKc3RhcnRfZGF0ZRgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBIgBARIxCghlbmRfZGF0ZRgIIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIBYgBARIjChZhc3NpZ25tZW50X3BlcnNpc3RlbmNlGAkgASgJSAaIAQESLQoFZ29hbHMYCiADKAsyHi5leHBlcmltZW50cy52MS5FeHBlcmltZW50R29hbBITCgtnb2Fsc19jbGVhchgLIAEoCEIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX3RhcmdldGluZ0ISChBfY29udHJvbF9wZXJjZW50Qg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIZChdfYXNzaWdubWVudF9wZXJzaXN0ZW5jZSJKChhVcGRhdGVFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiJQoXRGVsZXRlRXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkiKwoYRGVsZXRlRXhwZXJpbWVudFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiLwoWU3RhcnRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkkKF1N0YXJ0RXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Ii8KFlBhdXNlRXhwZXJpbWVudFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCSJJChdQYXVzZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIwChdSZXN1bWVFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkoKGFJlc3VtZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCItChRFbmRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkcKFUVuZEV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIyChlHZXRFeHBlcmltZW50U3RhdHNSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkiTAoaR2V0RXhwZXJpbWVudFN0YXRzUmVzcG9uc2USLgoFc3RhdHMYASABKAsyHy5leHBlcmltZW50cy52MS5FeHBlcmltZW50U3RhdHMinAEKHEZvcmNlQXNzaWduRXhwZXJpbWVudFJlcXVlc3QSGAoLY3VzdG9tZXJfaWQYASABKAlIAIgBARIVCg1leHBlcmltZW50X2lkGAIgASgJEhMKC3ZhcmlhbnRfa2V5GAMgASgJEhcKCnZpZXdlcl9rZXkYBCABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkiWQodRm9yY2VBc3NpZ25FeHBlcmltZW50UmVzcG9uc2USOAoKYXNzaWdubWVudBgBIAEoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRBc3NpZ25tZW50IowBCiFSZW1vdmVFeHBlcmltZW50QXNzaWdubWVudFJlcXVlc3QSGAoLY3VzdG9tZXJfaWQYASABKAlIAIgBARIVCg1leHBlcmltZW50X2lkGAIgASgJEhcKCnZpZXdlcl9rZXkYAyABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkiNQoiUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIlEKHEFwcGx5RXhwZXJpbWVudFdpbm5lclJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCRIaChJ3aW5uZXJfdmFyaWFudF9rZXkYAiABKAkijQEKHUFwcGx5RXhwZXJpbWVudFdpbm5lclJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Eh0KFWFmZmVjdGVkX3JlY29yZF9jb3VudBgCIAEoBRIdChVjbGVhcmVkX3ZhcmlhbnRfY291bnQYAyABKAUiWgolUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJEhoKEndpbm5lcl92YXJpYW50X2tleRgCIAEoCSJnCg5BZmZlY3RlZFJlY29yZBIRCglyZWNvcmRfaWQYASABKAkSIgoaY3VycmVudF9kZWZhdWx0X3ZhcmlhbnRfaWQYAiABKAkSHgoWbmV3X2RlZmF1bHRfdmFyaWFudF9pZBgDIAEoCSKBAQomUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0UmVzcG9uc2USOAoQYWZmZWN0ZWRfcmVjb3JkcxgBIAMoCzIeLmV4cGVyaW1lbnRzLnYxLkFmZmVjdGVkUmVjb3JkEh0KFWNsZWFyZWRfdmFyaWFudF9jb3VudBgCIAEoBSIyChlSb2xsYmFja0V4cGVyaW1lbnRSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkiiwEKGlJvbGxiYWNrRXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Eh0KFXJlc3RvcmVkX3JlY29yZF9jb3VudBgCIAEoBRIeChZyZXN0b3JlZF92YXJpYW50X2NvdW50GAMgASgFImkKFUdldEFzc2lnbm1lbnRzUmVxdWVzdBIYCgtjdXN0b21lcl9pZBgBIAEoCUgAiAEBEhcKCnZpZXdlcl9rZXkYAiABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkiUwoWR2V0QXNzaWdubWVudHNSZXNwb25zZRI5Cgthc3NpZ25tZW50cxgBIAMoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRBc3NpZ25tZW50IiMKIUxpc3RFeHBlcmltZW50RGVjbGFyYXRpb25zUmVxdWVzdCJhCiJMaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1Jlc3BvbnNlEjsKDGRlY2xhcmF0aW9ucxgBIAMoCzIlLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnREZWNsYXJhdGlvbiKCAQoWUmVzb2x2ZUV4cG9zdXJlUmVxdWVzdBIWCg5leHBlcmltZW50X2tleRgBIAEoCRIYCgtjdXN0b21lcl9pZBgCIAEoCUgAiAEBEhcKCnZpZXdlcl9rZXkYAyABKAlIAYgBAUIOCgxfY3VzdG9tZXJfaWRCDQoLX3ZpZXdlcl9rZXkipAEKF1Jlc29sdmVFeHBvc3VyZVJlc3BvbnNlEhYKDmV4cGVyaW1lbnRfa2V5GAEgASgJEhMKC3ZhcmlhbnRfa2V5GAIgASgJEhIKCmlzX2NvbnRyb2wYAyABKAgSEgoKaXNfZXhwb3NlZBgEIAEoCBIZChFhc3NpZ25tZW50X21ldGhvZBgFIAEoCRIZChFpc19uZXdfYXNzaWdubWVudBgGIAEoCCqwAQoQRXhwZXJpbWVudFN0YXR1cxIhCh1FWFBFUklNRU5UX1NUQVRVU19VTlNQRUNJRklFRBAAEhsKF0VYUEVSSU1FTlRfU1RBVFVTX0RSQUZUEAESHQoZRVhQRVJJTUVOVF9TVEFUVVNfUlVOTklORxACEhwKGEVYUEVSSU1FTlRfU1RBVFVTX1BBVVNFRBADEh8KG0VYUEVSSU1FTlRfU1RBVFVTX0NPTVBMRVRFRBAEMq4QChJFeHBlcmltZW50c1NlcnZpY2USXAoNR2V0RXhwZXJpbWVudBIkLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRSZXF1ZXN0GiUuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudFJlc3BvbnNlEmsKEkdldEV4cGVyaW1lbnRCeUtleRIpLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRCeUtleVJlcXVlc3QaKi5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50QnlLZXlSZXNwb25zZRJiCg9MaXN0RXhwZXJpbWVudHMSJi5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudHNSZXF1ZXN0GicuZXhwZXJpbWVudHMudjEuTGlzdEV4cGVyaW1lbnRzUmVzcG9uc2USZQoQQ3JlYXRlRXhwZXJpbWVudBInLmV4cGVyaW1lbnRzLnYxLkNyZWF0ZUV4cGVyaW1lbnRSZXF1ZXN0GiguZXhwZXJpbWVudHMudjEuQ3JlYXRlRXhwZXJpbWVudFJlc3BvbnNlEmUKEFVwZGF0ZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5VcGRhdGVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLlVwZGF0ZUV4cGVyaW1lbnRSZXNwb25zZRJlChBEZWxldGVFeHBlcmltZW50EicuZXhwZXJpbWVudHMudjEuRGVsZXRlRXhwZXJpbWVudFJlcXVlc3QaKC5leHBlcmltZW50cy52MS5EZWxldGVFeHBlcmltZW50UmVzcG9uc2USYgoPU3RhcnRFeHBlcmltZW50EiYuZXhwZXJpbWVudHMudjEuU3RhcnRFeHBlcmltZW50UmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLlN0YXJ0RXhwZXJpbWVudFJlc3BvbnNlEmIKD1BhdXNlRXhwZXJpbWVudBImLmV4cGVyaW1lbnRzLnYxLlBhdXNlRXhwZXJpbWVudFJlcXVlc3QaJy5leHBlcmltZW50cy52MS5QYXVzZUV4cGVyaW1lbnRSZXNwb25zZRJlChBSZXN1bWVFeHBlcmltZW50EicuZXhwZXJpbWVudHMudjEuUmVzdW1lRXhwZXJpbWVudFJlcXVlc3QaKC5leHBlcmltZW50cy52MS5SZXN1bWVFeHBlcmltZW50UmVzcG9uc2USXAoNRW5kRXhwZXJpbWVudBIkLmV4cGVyaW1lbnRzLnYxLkVuZEV4cGVyaW1lbnRSZXF1ZXN0GiUuZXhwZXJpbWVudHMudjEuRW5kRXhwZXJpbWVudFJlc3BvbnNlEnQKFUFwcGx5RXhwZXJpbWVudFdpbm5lchIsLmV4cGVyaW1lbnRzLnYxLkFwcGx5RXhwZXJpbWVudFdpbm5lclJlcXVlc3QaLS5leHBlcmltZW50cy52MS5BcHBseUV4cGVyaW1lbnRXaW5uZXJSZXNwb25zZRKPAQoeUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0EjUuZXhwZXJpbWVudHMudjEuUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0UmVxdWVzdBo2LmV4cGVyaW1lbnRzLnYxLlByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlc3BvbnNlEmsKElJvbGxiYWNrRXhwZXJpbWVudBIpLmV4cGVyaW1lbnRzLnYxLlJvbGxiYWNrRXhwZXJpbWVudFJlcXVlc3QaKi5leHBlcmltZW50cy52MS5Sb2xsYmFja0V4cGVyaW1lbnRSZXNwb25zZRJrChJHZXRFeHBlcmltZW50U3RhdHMSKS5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50U3RhdHNSZXF1ZXN0GiouZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudFN0YXRzUmVzcG9uc2USdAoVRm9yY2VBc3NpZ25FeHBlcmltZW50EiwuZXhwZXJpbWVudHMudjEuRm9yY2VBc3NpZ25FeHBlcmltZW50UmVxdWVzdBotLmV4cGVyaW1lbnRzLnYxLkZvcmNlQXNzaWduRXhwZXJpbWVudFJlc3BvbnNlEoMBChpSZW1vdmVFeHBlcmltZW50QXNzaWdubWVudBIxLmV4cGVyaW1lbnRzLnYxLlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50UmVxdWVzdBoyLmV4cGVyaW1lbnRzLnYxLlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50UmVzcG9uc2USXwoOR2V0QXNzaWdubWVudHMSJS5leHBlcmltZW50cy52MS5HZXRBc3NpZ25tZW50c1JlcXVlc3QaJi5leHBlcmltZW50cy52MS5HZXRBc3NpZ25tZW50c1Jlc3BvbnNlEmIKD1Jlc29sdmVFeHBvc3VyZRImLmV4cGVyaW1lbnRzLnYxLlJlc29sdmVFeHBvc3VyZVJlcXVlc3QaJy5leHBlcmltZW50cy52MS5SZXNvbHZlRXhwb3N1cmVSZXNwb25zZRKDAQoaTGlzdEV4cGVyaW1lbnREZWNsYXJhdGlvbnMSMS5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1JlcXVlc3QaMi5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1Jlc3BvbnNlQkNaQWdpdGh1Yi5jb20vZWlkZXN0dWRpby9mb2lyL2dlbi9wcm90by9leHBlcmltZW50cy92MTtleHBlcmltZW50c3YxYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_expressions_v1_expressions]);
13
+ fileDesc("CiBleHBlcmltZW50cy92MS9leHBlcmltZW50cy5wcm90bxIOZXhwZXJpbWVudHMudjEiswEKE0V4cGVyaW1lbnRUYXJnZXRpbmcSDAoEdHlwZRgBIAEoCRIXCgpzZWdtZW50X2lkGAIgASgJSACIAQESGAoLc2VnbWVudF9rZXkYAyABKAlIAYgBARIyCgVydWxlcxgEIAEoCzIeLmV4cHJlc3Npb25zLnYxLlJ1bGVFeHByZXNzaW9uSAKIAQFCDQoLX3NlZ21lbnRfaWRCDgoMX3NlZ21lbnRfa2V5QggKBl9ydWxlcyJ4ChFFeHBlcmltZW50VmFyaWFudBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIPCgdwZXJjZW50GAMgASgFEiwKBmNvbmZpZxgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3RIAIgBAUIJCgdfY29uZmlnImkKDkV4cGVyaW1lbnRHb2FsEgsKA2tleRgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESEgoKaXNfcHJpbWFyeRgEIAEoCEIOCgxfZGVzY3JpcHRpb24iYAoURXhwZXJpbWVudEZ1bm5lbFN0ZXASEAoIZ29hbF9rZXkYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBQg4KDF9kZXNjcmlwdGlvbiKDBwoKRXhwZXJpbWVudBIKCgJpZBgBIAEoCRILCgNrZXkYAiABKAkSDAoEbmFtZRgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEjAKBnN0YXR1cxgKIAEoDjIgLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRTdGF0dXMSEQoJaXNfYWN0aXZlGAsgASgIEjYKCXRhcmdldGluZxgUIAEoCzIjLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRUYXJnZXRpbmcSFwoPY29udHJvbF9wZXJjZW50GBUgASgFEjMKCHZhcmlhbnRzGBYgAygLMiEuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFZhcmlhbnQSHgoWYXNzaWdubWVudF9wZXJzaXN0ZW5jZRgXIAEoCRIgChNleGNsdXNpb25fZ3JvdXBfa2V5GBggASgJSAGIAQESMwoKc3RhcnRfZGF0ZRgeIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAogBARIxCghlbmRfZGF0ZRgfIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIA4gBARItCgdtZXRyaWNzGCMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgEiAEBEi0KBWdvYWxzGCQgAygLMh4uZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEdvYWwSOgoMZnVubmVsX3N0ZXBzGCUgAygLMiQuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEZ1bm5lbFN0ZXASEQoJdGVuYW50X2lkGCggASgJEhIKCnByb2plY3RfaWQYKSABKAkSFwoKY3JlYXRlZF9ieRgtIAEoCUgFiAEBEhcKCnVwZGF0ZWRfYnkYLiABKAlIBogBARIuCgpjcmVhdGVkX2F0GDIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GDMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIOCgxfZGVzY3JpcHRpb25CFgoUX2V4Y2x1c2lvbl9ncm91cF9rZXlCDQoLX3N0YXJ0X2RhdGVCCwoJX2VuZF9kYXRlQgoKCF9tZXRyaWNzQg0KC19jcmVhdGVkX2J5Qg0KC191cGRhdGVkX2J5ItQDChRFeHBlcmltZW50QXNzaWdubWVudBIKCgJpZBgBIAEoCRIVCg1leHBlcmltZW50X2lkGAIgASgJEhgKC2N1c3RvbWVyX2lkGAMgASgJSACIAQESEwoLdmFyaWFudF9rZXkYBCABKAkSGQoRYXNzaWdubWVudF9tZXRob2QYBSABKAkSFgoOZXhwZXJpbWVudF9rZXkYBiABKAkSFwoKdmlld2VyX2tleRgHIAEoCUgBiAEBEhEKCXRlbmFudF9pZBgKIAEoCRISCgpwcm9qZWN0X2lkGAsgASgJEi8KC2Fzc2lnbmVkX2F0GBQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIxCg1maXJzdF9zZWVuX2F0GBUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIwCgxsYXN0X3NlZW5fYXQYFiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEjMKCmV4cGlyZXNfYXQYFyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5Qg0KC19leHBpcmVzX2F0IkUKFUV4cGVyaW1lbnREZWNsYXJhdGlvbhIWCg5leHBlcmltZW50X2tleRgBIAEoCRIUCgx2YXJpYW50X2tleXMYAiADKAkijAEKFEV4cGVyaW1lbnRNZXRyaWNTcGVjEgwKBG5hbWUYASABKAkSDAoEcGF0aBgCIAEoCRI0CgphZ2dyZWdhdG9yGAMgASgOMiAuZXhwZXJpbWVudHMudjEuTWV0cmljQWdncmVnYXRvchIVCghnb2FsX2tleRgEIAEoCUgAiAEBQgsKCV9nb2FsX2tleSKoAQoSU2lnbmlmaWNhbmNlUmVzdWx0Eg8KB3BfdmFsdWUYASABKAESFQoNcmVsYXRpdmVfbGlmdBgCIAEoARIVCg1hYnNvbHV0ZV9saWZ0GAMgASgBEhAKCGNpX2xvd2VyGAQgASgBEhAKCGNpX3VwcGVyGAUgASgBEhYKDmlzX3NpZ25pZmljYW50GAYgASgIEhcKD21pbl9zYW1wbGVfc2l6ZRgHIAEoBSKVAQoYTWV0cmljU2lnbmlmaWNhbmNlUmVzdWx0Eg8KB3BfdmFsdWUYASABKAESFQoNcmVsYXRpdmVfbGlmdBgCIAEoARIVCg1hYnNvbHV0ZV9saWZ0GAMgASgBEhAKCGNpX2xvd2VyGAQgASgBEhAKCGNpX3VwcGVyGAUgASgBEhYKDmlzX3NpZ25pZmljYW50GAYgASgIIsgBChBWYXJpYW50R29hbFN0YXRzEhAKCGdvYWxfa2V5GAEgASgJEh4KFmNvbnZlcnNpb25fZXZlbnRfY291bnQYAiABKAUSGQoRdW5pcXVlX2NvbnZlcnRlcnMYAyABKAUSFwoPY29udmVyc2lvbl9yYXRlGAQgASgBEj0KDHNpZ25pZmljYW5jZRgFIAEoCzIiLmV4cGVyaW1lbnRzLnYxLlNpZ25pZmljYW5jZVJlc3VsdEgAiAEBQg8KDV9zaWduaWZpY2FuY2UihwEKDFZhcmlhbnRTdGF0cxITCgt2YXJpYW50X2tleRgBIAEoCRISCgppc19jb250cm9sGAIgASgIEhgKEGFzc2lnbm1lbnRfY291bnQYAyABKAUSNAoKZ29hbF9zdGF0cxgEIAMoCzIgLmV4cGVyaW1lbnRzLnYxLlZhcmlhbnRHb2FsU3RhdHMigAEKCUdvYWxTdGF0cxIQCghnb2FsX2tleRgBIAEoCRIRCglnb2FsX25hbWUYAiABKAkSEgoKaXNfcHJpbWFyeRgDIAEoCBIZChF0b3RhbF9jb252ZXJzaW9ucxgEIAEoBRIfChd0b3RhbF91bmlxdWVfY29udmVydGVycxgFIAEoBSKGAQoPRGFpbHlTdGF0c1BvaW50EhMKC3ZhcmlhbnRfa2V5GAEgASgJEhAKCGdvYWxfa2V5GAIgASgJEhEKCXN0YXRfZGF0ZRgDIAEoCRIeChZjb252ZXJzaW9uX2V2ZW50X2NvdW50GAQgASgFEhkKEXVuaXF1ZV9jb252ZXJ0ZXJzGAUgASgFItMBChJWYXJpYW50TWV0cmljU3RhdHMSEwoLdmFyaWFudF9rZXkYASABKAkSEwoLbWV0cmljX25hbWUYAiABKAkSDQoFdmFsdWUYAyABKAESEwoLc2FtcGxlX3NpemUYBCABKAUSGQoRc2tpcHBlZF9yb3dfY291bnQYBSABKAUSQwoMc2lnbmlmaWNhbmNlGAYgASgLMiguZXhwZXJpbWVudHMudjEuTWV0cmljU2lnbmlmaWNhbmNlUmVzdWx0SACIAQFCDwoNX3NpZ25pZmljYW5jZSKUAwoPRXhwZXJpbWVudFN0YXRzEhUKDWV4cGVyaW1lbnRfaWQYASABKAkSFgoOZXhwZXJpbWVudF9rZXkYAiABKAkSGQoRdG90YWxfYXNzaWdubWVudHMYAyABKAUSLgoIdmFyaWFudHMYBCADKAsyHC5leHBlcmltZW50cy52MS5WYXJpYW50U3RhdHMSKAoFZ29hbHMYBSADKAsyGS5leHBlcmltZW50cy52MS5Hb2FsU3RhdHMSLwoLd2luZG93X2Zyb20YBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi0KCXdpbmRvd190bxgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoFZGFpbHkYCCADKAsyHy5leHBlcmltZW50cy52MS5EYWlseVN0YXRzUG9pbnQSEwoLZGFpbHlfZ3JhaW4YCSABKAkSOAoMbWV0cmljX3N0YXRzGAogAygLMiIuZXhwZXJpbWVudHMudjEuVmFyaWFudE1ldHJpY1N0YXRzIvkEChdDcmVhdGVFeHBlcmltZW50UmVxdWVzdBILCgNrZXkYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEjsKCXRhcmdldGluZxgEIAEoCzIjLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRUYXJnZXRpbmdIAYgBARIcCg9jb250cm9sX3BlcmNlbnQYBSABKAVIAogBARIzCgh2YXJpYW50cxgGIAMoCzIhLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRWYXJpYW50EjMKCnN0YXJ0X2RhdGUYByABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAOIAQESMQoIZW5kX2RhdGUYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSASIAQESIwoWYXNzaWdubWVudF9wZXJzaXN0ZW5jZRgJIAEoCUgFiAEBEi0KBWdvYWxzGAogAygLMh4uZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEdvYWwSOgoMZnVubmVsX3N0ZXBzGAsgAygLMiQuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudEZ1bm5lbFN0ZXASIAoTZXhjbHVzaW9uX2dyb3VwX2tleRgMIAEoCUgGiAEBQg4KDF9kZXNjcmlwdGlvbkIMCgpfdGFyZ2V0aW5nQhIKEF9jb250cm9sX3BlcmNlbnRCDQoLX3N0YXJ0X2RhdGVCCwoJX2VuZF9kYXRlQhkKF19hc3NpZ25tZW50X3BlcnNpc3RlbmNlQhYKFF9leGNsdXNpb25fZ3JvdXBfa2V5IkoKGENyZWF0ZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIiChRHZXRFeHBlcmltZW50UmVxdWVzdBIKCgJpZBgBIAEoCSJHChVHZXRFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiKAoZR2V0RXhwZXJpbWVudEJ5S2V5UmVxdWVzdBILCgNrZXkYASABKAkiTAoaR2V0RXhwZXJpbWVudEJ5S2V5UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQinwEKFkxpc3RFeHBlcmltZW50c1JlcXVlc3QSNQoGc3RhdHVzGAEgASgOMiAuZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFN0YXR1c0gAiAEBEhYKCWlzX2FjdGl2ZRgCIAEoCEgBiAEBEg0KBWxpbWl0GAogASgFEg4KBm9mZnNldBgLIAEoBUIJCgdfc3RhdHVzQgwKCl9pc19hY3RpdmUiWQoXTGlzdEV4cGVyaW1lbnRzUmVzcG9uc2USLwoLZXhwZXJpbWVudHMYASADKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Eg0KBXRvdGFsGAIgASgFItoFChdVcGRhdGVFeHBlcmltZW50UmVxdWVzdBIKCgJpZBgBIAEoCRIRCgRuYW1lGAIgASgJSACIAQESGAoLZGVzY3JpcHRpb24YAyABKAlIAYgBARI7Cgl0YXJnZXRpbmcYBCABKAsyIy5leHBlcmltZW50cy52MS5FeHBlcmltZW50VGFyZ2V0aW5nSAKIAQESHAoPY29udHJvbF9wZXJjZW50GAUgASgFSAOIAQESMwoIdmFyaWFudHMYBiADKAsyIS5leHBlcmltZW50cy52MS5FeHBlcmltZW50VmFyaWFudBIzCgpzdGFydF9kYXRlGAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgEiAEBEjEKCGVuZF9kYXRlGAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgFiAEBEiMKFmFzc2lnbm1lbnRfcGVyc2lzdGVuY2UYCSABKAlIBogBARItCgVnb2FscxgKIAMoCzIeLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRHb2FsEhMKC2dvYWxzX2NsZWFyGAsgASgIEjoKDGZ1bm5lbF9zdGVwcxgMIAMoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRGdW5uZWxTdGVwEhoKEmZ1bm5lbF9zdGVwc19jbGVhchgNIAEoCBIgChNleGNsdXNpb25fZ3JvdXBfa2V5GA4gASgJSAeIAQESIQoZZXhjbHVzaW9uX2dyb3VwX2tleV9jbGVhchgPIAEoCEIHCgVfbmFtZUIOCgxfZGVzY3JpcHRpb25CDAoKX3RhcmdldGluZ0ISChBfY29udHJvbF9wZXJjZW50Qg0KC19zdGFydF9kYXRlQgsKCV9lbmRfZGF0ZUIZChdfYXNzaWdubWVudF9wZXJzaXN0ZW5jZUIWChRfZXhjbHVzaW9uX2dyb3VwX2tleSJKChhVcGRhdGVFeHBlcmltZW50UmVzcG9uc2USLgoKZXhwZXJpbWVudBgBIAEoCzIaLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnQiJQoXRGVsZXRlRXhwZXJpbWVudFJlcXVlc3QSCgoCaWQYASABKAkiKwoYRGVsZXRlRXhwZXJpbWVudFJlc3BvbnNlEg8KB3N1Y2Nlc3MYASABKAgiLwoWU3RhcnRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkkKF1N0YXJ0RXhwZXJpbWVudFJlc3BvbnNlEi4KCmV4cGVyaW1lbnQYASABKAsyGi5leHBlcmltZW50cy52MS5FeHBlcmltZW50Ii8KFlBhdXNlRXhwZXJpbWVudFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCSJJChdQYXVzZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCIwChdSZXN1bWVFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkoKGFJlc3VtZUV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCItChRFbmRFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIkcKFUVuZEV4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudCKHAgoZR2V0RXhwZXJpbWVudFN0YXRzUmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJEi0KBGZyb20YAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESKwoCdG8YAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESNQoHbWV0cmljcxgEIAMoCzIkLmV4cGVyaW1lbnRzLnYxLkV4cGVyaW1lbnRNZXRyaWNTcGVjEhwKD21pbl9zYW1wbGVfc2l6ZRgFIAEoBUgCiAEBQgcKBV9mcm9tQgUKA190b0ISChBfbWluX3NhbXBsZV9zaXplIkwKGkdldEV4cGVyaW1lbnRTdGF0c1Jlc3BvbnNlEi4KBXN0YXRzGAEgASgLMh8uZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudFN0YXRzIpwBChxGb3JjZUFzc2lnbkV4cGVyaW1lbnRSZXF1ZXN0EhgKC2N1c3RvbWVyX2lkGAEgASgJSACIAQESFQoNZXhwZXJpbWVudF9pZBgCIAEoCRITCgt2YXJpYW50X2tleRgDIAEoCRIXCgp2aWV3ZXJfa2V5GAQgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IlkKHUZvcmNlQXNzaWduRXhwZXJpbWVudFJlc3BvbnNlEjgKCmFzc2lnbm1lbnQYASABKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50QXNzaWdubWVudCKMAQohUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXF1ZXN0EhgKC2N1c3RvbWVyX2lkGAEgASgJSACIAQESFQoNZXhwZXJpbWVudF9pZBgCIAEoCRIXCgp2aWV3ZXJfa2V5GAMgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IjUKIlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50UmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJRChxBcHBseUV4cGVyaW1lbnRXaW5uZXJSZXF1ZXN0EhUKDWV4cGVyaW1lbnRfaWQYASABKAkSGgoSd2lubmVyX3ZhcmlhbnRfa2V5GAIgASgJIo0BCh1BcHBseUV4cGVyaW1lbnRXaW5uZXJSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudBIdChVhZmZlY3RlZF9yZWNvcmRfY291bnQYAiABKAUSHQoVY2xlYXJlZF92YXJpYW50X2NvdW50GAMgASgFIloKJVByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlcXVlc3QSFQoNZXhwZXJpbWVudF9pZBgBIAEoCRIaChJ3aW5uZXJfdmFyaWFudF9rZXkYAiABKAkiZwoOQWZmZWN0ZWRSZWNvcmQSEQoJcmVjb3JkX2lkGAEgASgJEiIKGmN1cnJlbnRfZGVmYXVsdF92YXJpYW50X2lkGAIgASgJEh4KFm5ld19kZWZhdWx0X3ZhcmlhbnRfaWQYAyABKAkigQEKJlByZXZpZXdFeHBlcmltZW50V2lubmVyUm9sbG91dFJlc3BvbnNlEjgKEGFmZmVjdGVkX3JlY29yZHMYASADKAsyHi5leHBlcmltZW50cy52MS5BZmZlY3RlZFJlY29yZBIdChVjbGVhcmVkX3ZhcmlhbnRfY291bnQYAiABKAUiMgoZUm9sbGJhY2tFeHBlcmltZW50UmVxdWVzdBIVCg1leHBlcmltZW50X2lkGAEgASgJIosBChpSb2xsYmFja0V4cGVyaW1lbnRSZXNwb25zZRIuCgpleHBlcmltZW50GAEgASgLMhouZXhwZXJpbWVudHMudjEuRXhwZXJpbWVudBIdChVyZXN0b3JlZF9yZWNvcmRfY291bnQYAiABKAUSHgoWcmVzdG9yZWRfdmFyaWFudF9jb3VudBgDIAEoBSJpChVHZXRBc3NpZ25tZW50c1JlcXVlc3QSGAoLY3VzdG9tZXJfaWQYASABKAlIAIgBARIXCgp2aWV3ZXJfa2V5GAIgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IlMKFkdldEFzc2lnbm1lbnRzUmVzcG9uc2USOQoLYXNzaWdubWVudHMYASADKAsyJC5leHBlcmltZW50cy52MS5FeHBlcmltZW50QXNzaWdubWVudCIjCiFMaXN0RXhwZXJpbWVudERlY2xhcmF0aW9uc1JlcXVlc3QiYQoiTGlzdEV4cGVyaW1lbnREZWNsYXJhdGlvbnNSZXNwb25zZRI7CgxkZWNsYXJhdGlvbnMYASADKAsyJS5leHBlcmltZW50cy52MS5FeHBlcmltZW50RGVjbGFyYXRpb24iggEKFlJlc29sdmVFeHBvc3VyZVJlcXVlc3QSFgoOZXhwZXJpbWVudF9rZXkYASABKAkSGAoLY3VzdG9tZXJfaWQYAiABKAlIAIgBARIXCgp2aWV3ZXJfa2V5GAMgASgJSAGIAQFCDgoMX2N1c3RvbWVyX2lkQg0KC192aWV3ZXJfa2V5IqQBChdSZXNvbHZlRXhwb3N1cmVSZXNwb25zZRIWCg5leHBlcmltZW50X2tleRgBIAEoCRITCgt2YXJpYW50X2tleRgCIAEoCRISCgppc19jb250cm9sGAMgASgIEhIKCmlzX2V4cG9zZWQYBCABKAgSGQoRYXNzaWdubWVudF9tZXRob2QYBSABKAkSGQoRaXNfbmV3X2Fzc2lnbm1lbnQYBiABKAgqsAEKEEV4cGVyaW1lbnRTdGF0dXMSIQodRVhQRVJJTUVOVF9TVEFUVVNfVU5TUEVDSUZJRUQQABIbChdFWFBFUklNRU5UX1NUQVRVU19EUkFGVBABEh0KGUVYUEVSSU1FTlRfU1RBVFVTX1JVTk5JTkcQAhIcChhFWFBFUklNRU5UX1NUQVRVU19QQVVTRUQQAxIfChtFWFBFUklNRU5UX1NUQVRVU19DT01QTEVURUQQBCr0AQoQTWV0cmljQWdncmVnYXRvchIhCh1NRVRSSUNfQUdHUkVHQVRPUl9VTlNQRUNJRklFRBAAEhkKFU1FVFJJQ19BR0dSRUdBVE9SX1NVTRABEhkKFU1FVFJJQ19BR0dSRUdBVE9SX0FWRxACEhsKF01FVFJJQ19BR0dSRUdBVE9SX0NPVU5UEAMSGQoVTUVUUklDX0FHR1JFR0FUT1JfTUlOEAQSGQoVTUVUUklDX0FHR1JFR0FUT1JfTUFYEAUSGQoVTUVUUklDX0FHR1JFR0FUT1JfUDUwEAYSGQoVTUVUUklDX0FHR1JFR0FUT1JfUDk1EAcyrhAKEkV4cGVyaW1lbnRzU2VydmljZRJcCg1HZXRFeHBlcmltZW50EiQuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudFJlcXVlc3QaJS5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50UmVzcG9uc2USawoSR2V0RXhwZXJpbWVudEJ5S2V5EikuZXhwZXJpbWVudHMudjEuR2V0RXhwZXJpbWVudEJ5S2V5UmVxdWVzdBoqLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRCeUtleVJlc3BvbnNlEmIKD0xpc3RFeHBlcmltZW50cxImLmV4cGVyaW1lbnRzLnYxLkxpc3RFeHBlcmltZW50c1JlcXVlc3QaJy5leHBlcmltZW50cy52MS5MaXN0RXhwZXJpbWVudHNSZXNwb25zZRJlChBDcmVhdGVFeHBlcmltZW50EicuZXhwZXJpbWVudHMudjEuQ3JlYXRlRXhwZXJpbWVudFJlcXVlc3QaKC5leHBlcmltZW50cy52MS5DcmVhdGVFeHBlcmltZW50UmVzcG9uc2USZQoQVXBkYXRlRXhwZXJpbWVudBInLmV4cGVyaW1lbnRzLnYxLlVwZGF0ZUV4cGVyaW1lbnRSZXF1ZXN0GiguZXhwZXJpbWVudHMudjEuVXBkYXRlRXhwZXJpbWVudFJlc3BvbnNlEmUKEERlbGV0ZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5EZWxldGVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLkRlbGV0ZUV4cGVyaW1lbnRSZXNwb25zZRJiCg9TdGFydEV4cGVyaW1lbnQSJi5leHBlcmltZW50cy52MS5TdGFydEV4cGVyaW1lbnRSZXF1ZXN0GicuZXhwZXJpbWVudHMudjEuU3RhcnRFeHBlcmltZW50UmVzcG9uc2USYgoPUGF1c2VFeHBlcmltZW50EiYuZXhwZXJpbWVudHMudjEuUGF1c2VFeHBlcmltZW50UmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLlBhdXNlRXhwZXJpbWVudFJlc3BvbnNlEmUKEFJlc3VtZUV4cGVyaW1lbnQSJy5leHBlcmltZW50cy52MS5SZXN1bWVFeHBlcmltZW50UmVxdWVzdBooLmV4cGVyaW1lbnRzLnYxLlJlc3VtZUV4cGVyaW1lbnRSZXNwb25zZRJcCg1FbmRFeHBlcmltZW50EiQuZXhwZXJpbWVudHMudjEuRW5kRXhwZXJpbWVudFJlcXVlc3QaJS5leHBlcmltZW50cy52MS5FbmRFeHBlcmltZW50UmVzcG9uc2USdAoVQXBwbHlFeHBlcmltZW50V2lubmVyEiwuZXhwZXJpbWVudHMudjEuQXBwbHlFeHBlcmltZW50V2lubmVyUmVxdWVzdBotLmV4cGVyaW1lbnRzLnYxLkFwcGx5RXhwZXJpbWVudFdpbm5lclJlc3BvbnNlEo8BCh5QcmV2aWV3RXhwZXJpbWVudFdpbm5lclJvbGxvdXQSNS5leHBlcmltZW50cy52MS5QcmV2aWV3RXhwZXJpbWVudFdpbm5lclJvbGxvdXRSZXF1ZXN0GjYuZXhwZXJpbWVudHMudjEuUHJldmlld0V4cGVyaW1lbnRXaW5uZXJSb2xsb3V0UmVzcG9uc2USawoSUm9sbGJhY2tFeHBlcmltZW50EikuZXhwZXJpbWVudHMudjEuUm9sbGJhY2tFeHBlcmltZW50UmVxdWVzdBoqLmV4cGVyaW1lbnRzLnYxLlJvbGxiYWNrRXhwZXJpbWVudFJlc3BvbnNlEmsKEkdldEV4cGVyaW1lbnRTdGF0cxIpLmV4cGVyaW1lbnRzLnYxLkdldEV4cGVyaW1lbnRTdGF0c1JlcXVlc3QaKi5leHBlcmltZW50cy52MS5HZXRFeHBlcmltZW50U3RhdHNSZXNwb25zZRJ0ChVGb3JjZUFzc2lnbkV4cGVyaW1lbnQSLC5leHBlcmltZW50cy52MS5Gb3JjZUFzc2lnbkV4cGVyaW1lbnRSZXF1ZXN0Gi0uZXhwZXJpbWVudHMudjEuRm9yY2VBc3NpZ25FeHBlcmltZW50UmVzcG9uc2USgwEKGlJlbW92ZUV4cGVyaW1lbnRBc3NpZ25tZW50EjEuZXhwZXJpbWVudHMudjEuUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXF1ZXN0GjIuZXhwZXJpbWVudHMudjEuUmVtb3ZlRXhwZXJpbWVudEFzc2lnbm1lbnRSZXNwb25zZRJfCg5HZXRBc3NpZ25tZW50cxIlLmV4cGVyaW1lbnRzLnYxLkdldEFzc2lnbm1lbnRzUmVxdWVzdBomLmV4cGVyaW1lbnRzLnYxLkdldEFzc2lnbm1lbnRzUmVzcG9uc2USYgoPUmVzb2x2ZUV4cG9zdXJlEiYuZXhwZXJpbWVudHMudjEuUmVzb2x2ZUV4cG9zdXJlUmVxdWVzdBonLmV4cGVyaW1lbnRzLnYxLlJlc29sdmVFeHBvc3VyZVJlc3BvbnNlEoMBChpMaXN0RXhwZXJpbWVudERlY2xhcmF0aW9ucxIxLmV4cGVyaW1lbnRzLnYxLkxpc3RFeHBlcmltZW50RGVjbGFyYXRpb25zUmVxdWVzdBoyLmV4cGVyaW1lbnRzLnYxLkxpc3RFeHBlcmltZW50RGVjbGFyYXRpb25zUmVzcG9uc2VCQ1pBZ2l0aHViLmNvbS9laWRlc3R1ZGlvL2ZvaXIvZ2VuL3Byb3RvL2V4cGVyaW1lbnRzL3YxO2V4cGVyaW1lbnRzdjFiBnByb3RvMw", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_expressions_v1_expressions]);
14
14
 
15
15
  /**
16
16
  * Describes the message experiments.v1.ExperimentTargeting.
@@ -33,313 +33,369 @@ export const ExperimentVariantSchema = /*@__PURE__*/
33
33
  export const ExperimentGoalSchema = /*@__PURE__*/
34
34
  messageDesc(file_experiments_v1_experiments, 2);
35
35
 
36
+ /**
37
+ * Describes the message experiments.v1.ExperimentFunnelStep.
38
+ * Use `create(ExperimentFunnelStepSchema)` to create a new message.
39
+ */
40
+ export const ExperimentFunnelStepSchema = /*@__PURE__*/
41
+ messageDesc(file_experiments_v1_experiments, 3);
42
+
36
43
  /**
37
44
  * Describes the message experiments.v1.Experiment.
38
45
  * Use `create(ExperimentSchema)` to create a new message.
39
46
  */
40
47
  export const ExperimentSchema = /*@__PURE__*/
41
- messageDesc(file_experiments_v1_experiments, 3);
48
+ messageDesc(file_experiments_v1_experiments, 4);
42
49
 
43
50
  /**
44
51
  * Describes the message experiments.v1.ExperimentAssignment.
45
52
  * Use `create(ExperimentAssignmentSchema)` to create a new message.
46
53
  */
47
54
  export const ExperimentAssignmentSchema = /*@__PURE__*/
48
- messageDesc(file_experiments_v1_experiments, 4);
55
+ messageDesc(file_experiments_v1_experiments, 5);
49
56
 
50
57
  /**
51
58
  * Describes the message experiments.v1.ExperimentDeclaration.
52
59
  * Use `create(ExperimentDeclarationSchema)` to create a new message.
53
60
  */
54
61
  export const ExperimentDeclarationSchema = /*@__PURE__*/
55
- messageDesc(file_experiments_v1_experiments, 5);
62
+ messageDesc(file_experiments_v1_experiments, 6);
63
+
64
+ /**
65
+ * Describes the message experiments.v1.ExperimentMetricSpec.
66
+ * Use `create(ExperimentMetricSpecSchema)` to create a new message.
67
+ */
68
+ export const ExperimentMetricSpecSchema = /*@__PURE__*/
69
+ messageDesc(file_experiments_v1_experiments, 7);
70
+
71
+ /**
72
+ * Describes the message experiments.v1.SignificanceResult.
73
+ * Use `create(SignificanceResultSchema)` to create a new message.
74
+ */
75
+ export const SignificanceResultSchema = /*@__PURE__*/
76
+ messageDesc(file_experiments_v1_experiments, 8);
77
+
78
+ /**
79
+ * Describes the message experiments.v1.MetricSignificanceResult.
80
+ * Use `create(MetricSignificanceResultSchema)` to create a new message.
81
+ */
82
+ export const MetricSignificanceResultSchema = /*@__PURE__*/
83
+ messageDesc(file_experiments_v1_experiments, 9);
84
+
85
+ /**
86
+ * Describes the message experiments.v1.VariantGoalStats.
87
+ * Use `create(VariantGoalStatsSchema)` to create a new message.
88
+ */
89
+ export const VariantGoalStatsSchema = /*@__PURE__*/
90
+ messageDesc(file_experiments_v1_experiments, 10);
56
91
 
57
92
  /**
58
93
  * Describes the message experiments.v1.VariantStats.
59
94
  * Use `create(VariantStatsSchema)` to create a new message.
60
95
  */
61
96
  export const VariantStatsSchema = /*@__PURE__*/
62
- messageDesc(file_experiments_v1_experiments, 6);
97
+ messageDesc(file_experiments_v1_experiments, 11);
98
+
99
+ /**
100
+ * Describes the message experiments.v1.GoalStats.
101
+ * Use `create(GoalStatsSchema)` to create a new message.
102
+ */
103
+ export const GoalStatsSchema = /*@__PURE__*/
104
+ messageDesc(file_experiments_v1_experiments, 12);
105
+
106
+ /**
107
+ * Describes the message experiments.v1.DailyStatsPoint.
108
+ * Use `create(DailyStatsPointSchema)` to create a new message.
109
+ */
110
+ export const DailyStatsPointSchema = /*@__PURE__*/
111
+ messageDesc(file_experiments_v1_experiments, 13);
112
+
113
+ /**
114
+ * Describes the message experiments.v1.VariantMetricStats.
115
+ * Use `create(VariantMetricStatsSchema)` to create a new message.
116
+ */
117
+ export const VariantMetricStatsSchema = /*@__PURE__*/
118
+ messageDesc(file_experiments_v1_experiments, 14);
63
119
 
64
120
  /**
65
121
  * Describes the message experiments.v1.ExperimentStats.
66
122
  * Use `create(ExperimentStatsSchema)` to create a new message.
67
123
  */
68
124
  export const ExperimentStatsSchema = /*@__PURE__*/
69
- messageDesc(file_experiments_v1_experiments, 7);
125
+ messageDesc(file_experiments_v1_experiments, 15);
70
126
 
71
127
  /**
72
128
  * Describes the message experiments.v1.CreateExperimentRequest.
73
129
  * Use `create(CreateExperimentRequestSchema)` to create a new message.
74
130
  */
75
131
  export const CreateExperimentRequestSchema = /*@__PURE__*/
76
- messageDesc(file_experiments_v1_experiments, 8);
132
+ messageDesc(file_experiments_v1_experiments, 16);
77
133
 
78
134
  /**
79
135
  * Describes the message experiments.v1.CreateExperimentResponse.
80
136
  * Use `create(CreateExperimentResponseSchema)` to create a new message.
81
137
  */
82
138
  export const CreateExperimentResponseSchema = /*@__PURE__*/
83
- messageDesc(file_experiments_v1_experiments, 9);
139
+ messageDesc(file_experiments_v1_experiments, 17);
84
140
 
85
141
  /**
86
142
  * Describes the message experiments.v1.GetExperimentRequest.
87
143
  * Use `create(GetExperimentRequestSchema)` to create a new message.
88
144
  */
89
145
  export const GetExperimentRequestSchema = /*@__PURE__*/
90
- messageDesc(file_experiments_v1_experiments, 10);
146
+ messageDesc(file_experiments_v1_experiments, 18);
91
147
 
92
148
  /**
93
149
  * Describes the message experiments.v1.GetExperimentResponse.
94
150
  * Use `create(GetExperimentResponseSchema)` to create a new message.
95
151
  */
96
152
  export const GetExperimentResponseSchema = /*@__PURE__*/
97
- messageDesc(file_experiments_v1_experiments, 11);
153
+ messageDesc(file_experiments_v1_experiments, 19);
98
154
 
99
155
  /**
100
156
  * Describes the message experiments.v1.GetExperimentByKeyRequest.
101
157
  * Use `create(GetExperimentByKeyRequestSchema)` to create a new message.
102
158
  */
103
159
  export const GetExperimentByKeyRequestSchema = /*@__PURE__*/
104
- messageDesc(file_experiments_v1_experiments, 12);
160
+ messageDesc(file_experiments_v1_experiments, 20);
105
161
 
106
162
  /**
107
163
  * Describes the message experiments.v1.GetExperimentByKeyResponse.
108
164
  * Use `create(GetExperimentByKeyResponseSchema)` to create a new message.
109
165
  */
110
166
  export const GetExperimentByKeyResponseSchema = /*@__PURE__*/
111
- messageDesc(file_experiments_v1_experiments, 13);
167
+ messageDesc(file_experiments_v1_experiments, 21);
112
168
 
113
169
  /**
114
170
  * Describes the message experiments.v1.ListExperimentsRequest.
115
171
  * Use `create(ListExperimentsRequestSchema)` to create a new message.
116
172
  */
117
173
  export const ListExperimentsRequestSchema = /*@__PURE__*/
118
- messageDesc(file_experiments_v1_experiments, 14);
174
+ messageDesc(file_experiments_v1_experiments, 22);
119
175
 
120
176
  /**
121
177
  * Describes the message experiments.v1.ListExperimentsResponse.
122
178
  * Use `create(ListExperimentsResponseSchema)` to create a new message.
123
179
  */
124
180
  export const ListExperimentsResponseSchema = /*@__PURE__*/
125
- messageDesc(file_experiments_v1_experiments, 15);
181
+ messageDesc(file_experiments_v1_experiments, 23);
126
182
 
127
183
  /**
128
184
  * Describes the message experiments.v1.UpdateExperimentRequest.
129
185
  * Use `create(UpdateExperimentRequestSchema)` to create a new message.
130
186
  */
131
187
  export const UpdateExperimentRequestSchema = /*@__PURE__*/
132
- messageDesc(file_experiments_v1_experiments, 16);
188
+ messageDesc(file_experiments_v1_experiments, 24);
133
189
 
134
190
  /**
135
191
  * Describes the message experiments.v1.UpdateExperimentResponse.
136
192
  * Use `create(UpdateExperimentResponseSchema)` to create a new message.
137
193
  */
138
194
  export const UpdateExperimentResponseSchema = /*@__PURE__*/
139
- messageDesc(file_experiments_v1_experiments, 17);
195
+ messageDesc(file_experiments_v1_experiments, 25);
140
196
 
141
197
  /**
142
198
  * Describes the message experiments.v1.DeleteExperimentRequest.
143
199
  * Use `create(DeleteExperimentRequestSchema)` to create a new message.
144
200
  */
145
201
  export const DeleteExperimentRequestSchema = /*@__PURE__*/
146
- messageDesc(file_experiments_v1_experiments, 18);
202
+ messageDesc(file_experiments_v1_experiments, 26);
147
203
 
148
204
  /**
149
205
  * Describes the message experiments.v1.DeleteExperimentResponse.
150
206
  * Use `create(DeleteExperimentResponseSchema)` to create a new message.
151
207
  */
152
208
  export const DeleteExperimentResponseSchema = /*@__PURE__*/
153
- messageDesc(file_experiments_v1_experiments, 19);
209
+ messageDesc(file_experiments_v1_experiments, 27);
154
210
 
155
211
  /**
156
212
  * Describes the message experiments.v1.StartExperimentRequest.
157
213
  * Use `create(StartExperimentRequestSchema)` to create a new message.
158
214
  */
159
215
  export const StartExperimentRequestSchema = /*@__PURE__*/
160
- messageDesc(file_experiments_v1_experiments, 20);
216
+ messageDesc(file_experiments_v1_experiments, 28);
161
217
 
162
218
  /**
163
219
  * Describes the message experiments.v1.StartExperimentResponse.
164
220
  * Use `create(StartExperimentResponseSchema)` to create a new message.
165
221
  */
166
222
  export const StartExperimentResponseSchema = /*@__PURE__*/
167
- messageDesc(file_experiments_v1_experiments, 21);
223
+ messageDesc(file_experiments_v1_experiments, 29);
168
224
 
169
225
  /**
170
226
  * Describes the message experiments.v1.PauseExperimentRequest.
171
227
  * Use `create(PauseExperimentRequestSchema)` to create a new message.
172
228
  */
173
229
  export const PauseExperimentRequestSchema = /*@__PURE__*/
174
- messageDesc(file_experiments_v1_experiments, 22);
230
+ messageDesc(file_experiments_v1_experiments, 30);
175
231
 
176
232
  /**
177
233
  * Describes the message experiments.v1.PauseExperimentResponse.
178
234
  * Use `create(PauseExperimentResponseSchema)` to create a new message.
179
235
  */
180
236
  export const PauseExperimentResponseSchema = /*@__PURE__*/
181
- messageDesc(file_experiments_v1_experiments, 23);
237
+ messageDesc(file_experiments_v1_experiments, 31);
182
238
 
183
239
  /**
184
240
  * Describes the message experiments.v1.ResumeExperimentRequest.
185
241
  * Use `create(ResumeExperimentRequestSchema)` to create a new message.
186
242
  */
187
243
  export const ResumeExperimentRequestSchema = /*@__PURE__*/
188
- messageDesc(file_experiments_v1_experiments, 24);
244
+ messageDesc(file_experiments_v1_experiments, 32);
189
245
 
190
246
  /**
191
247
  * Describes the message experiments.v1.ResumeExperimentResponse.
192
248
  * Use `create(ResumeExperimentResponseSchema)` to create a new message.
193
249
  */
194
250
  export const ResumeExperimentResponseSchema = /*@__PURE__*/
195
- messageDesc(file_experiments_v1_experiments, 25);
251
+ messageDesc(file_experiments_v1_experiments, 33);
196
252
 
197
253
  /**
198
254
  * Describes the message experiments.v1.EndExperimentRequest.
199
255
  * Use `create(EndExperimentRequestSchema)` to create a new message.
200
256
  */
201
257
  export const EndExperimentRequestSchema = /*@__PURE__*/
202
- messageDesc(file_experiments_v1_experiments, 26);
258
+ messageDesc(file_experiments_v1_experiments, 34);
203
259
 
204
260
  /**
205
261
  * Describes the message experiments.v1.EndExperimentResponse.
206
262
  * Use `create(EndExperimentResponseSchema)` to create a new message.
207
263
  */
208
264
  export const EndExperimentResponseSchema = /*@__PURE__*/
209
- messageDesc(file_experiments_v1_experiments, 27);
265
+ messageDesc(file_experiments_v1_experiments, 35);
210
266
 
211
267
  /**
212
268
  * Describes the message experiments.v1.GetExperimentStatsRequest.
213
269
  * Use `create(GetExperimentStatsRequestSchema)` to create a new message.
214
270
  */
215
271
  export const GetExperimentStatsRequestSchema = /*@__PURE__*/
216
- messageDesc(file_experiments_v1_experiments, 28);
272
+ messageDesc(file_experiments_v1_experiments, 36);
217
273
 
218
274
  /**
219
275
  * Describes the message experiments.v1.GetExperimentStatsResponse.
220
276
  * Use `create(GetExperimentStatsResponseSchema)` to create a new message.
221
277
  */
222
278
  export const GetExperimentStatsResponseSchema = /*@__PURE__*/
223
- messageDesc(file_experiments_v1_experiments, 29);
279
+ messageDesc(file_experiments_v1_experiments, 37);
224
280
 
225
281
  /**
226
282
  * Describes the message experiments.v1.ForceAssignExperimentRequest.
227
283
  * Use `create(ForceAssignExperimentRequestSchema)` to create a new message.
228
284
  */
229
285
  export const ForceAssignExperimentRequestSchema = /*@__PURE__*/
230
- messageDesc(file_experiments_v1_experiments, 30);
286
+ messageDesc(file_experiments_v1_experiments, 38);
231
287
 
232
288
  /**
233
289
  * Describes the message experiments.v1.ForceAssignExperimentResponse.
234
290
  * Use `create(ForceAssignExperimentResponseSchema)` to create a new message.
235
291
  */
236
292
  export const ForceAssignExperimentResponseSchema = /*@__PURE__*/
237
- messageDesc(file_experiments_v1_experiments, 31);
293
+ messageDesc(file_experiments_v1_experiments, 39);
238
294
 
239
295
  /**
240
296
  * Describes the message experiments.v1.RemoveExperimentAssignmentRequest.
241
297
  * Use `create(RemoveExperimentAssignmentRequestSchema)` to create a new message.
242
298
  */
243
299
  export const RemoveExperimentAssignmentRequestSchema = /*@__PURE__*/
244
- messageDesc(file_experiments_v1_experiments, 32);
300
+ messageDesc(file_experiments_v1_experiments, 40);
245
301
 
246
302
  /**
247
303
  * Describes the message experiments.v1.RemoveExperimentAssignmentResponse.
248
304
  * Use `create(RemoveExperimentAssignmentResponseSchema)` to create a new message.
249
305
  */
250
306
  export const RemoveExperimentAssignmentResponseSchema = /*@__PURE__*/
251
- messageDesc(file_experiments_v1_experiments, 33);
307
+ messageDesc(file_experiments_v1_experiments, 41);
252
308
 
253
309
  /**
254
310
  * Describes the message experiments.v1.ApplyExperimentWinnerRequest.
255
311
  * Use `create(ApplyExperimentWinnerRequestSchema)` to create a new message.
256
312
  */
257
313
  export const ApplyExperimentWinnerRequestSchema = /*@__PURE__*/
258
- messageDesc(file_experiments_v1_experiments, 34);
314
+ messageDesc(file_experiments_v1_experiments, 42);
259
315
 
260
316
  /**
261
317
  * Describes the message experiments.v1.ApplyExperimentWinnerResponse.
262
318
  * Use `create(ApplyExperimentWinnerResponseSchema)` to create a new message.
263
319
  */
264
320
  export const ApplyExperimentWinnerResponseSchema = /*@__PURE__*/
265
- messageDesc(file_experiments_v1_experiments, 35);
321
+ messageDesc(file_experiments_v1_experiments, 43);
266
322
 
267
323
  /**
268
324
  * Describes the message experiments.v1.PreviewExperimentWinnerRolloutRequest.
269
325
  * Use `create(PreviewExperimentWinnerRolloutRequestSchema)` to create a new message.
270
326
  */
271
327
  export const PreviewExperimentWinnerRolloutRequestSchema = /*@__PURE__*/
272
- messageDesc(file_experiments_v1_experiments, 36);
328
+ messageDesc(file_experiments_v1_experiments, 44);
273
329
 
274
330
  /**
275
331
  * Describes the message experiments.v1.AffectedRecord.
276
332
  * Use `create(AffectedRecordSchema)` to create a new message.
277
333
  */
278
334
  export const AffectedRecordSchema = /*@__PURE__*/
279
- messageDesc(file_experiments_v1_experiments, 37);
335
+ messageDesc(file_experiments_v1_experiments, 45);
280
336
 
281
337
  /**
282
338
  * Describes the message experiments.v1.PreviewExperimentWinnerRolloutResponse.
283
339
  * Use `create(PreviewExperimentWinnerRolloutResponseSchema)` to create a new message.
284
340
  */
285
341
  export const PreviewExperimentWinnerRolloutResponseSchema = /*@__PURE__*/
286
- messageDesc(file_experiments_v1_experiments, 38);
342
+ messageDesc(file_experiments_v1_experiments, 46);
287
343
 
288
344
  /**
289
345
  * Describes the message experiments.v1.RollbackExperimentRequest.
290
346
  * Use `create(RollbackExperimentRequestSchema)` to create a new message.
291
347
  */
292
348
  export const RollbackExperimentRequestSchema = /*@__PURE__*/
293
- messageDesc(file_experiments_v1_experiments, 39);
349
+ messageDesc(file_experiments_v1_experiments, 47);
294
350
 
295
351
  /**
296
352
  * Describes the message experiments.v1.RollbackExperimentResponse.
297
353
  * Use `create(RollbackExperimentResponseSchema)` to create a new message.
298
354
  */
299
355
  export const RollbackExperimentResponseSchema = /*@__PURE__*/
300
- messageDesc(file_experiments_v1_experiments, 40);
356
+ messageDesc(file_experiments_v1_experiments, 48);
301
357
 
302
358
  /**
303
359
  * Describes the message experiments.v1.GetAssignmentsRequest.
304
360
  * Use `create(GetAssignmentsRequestSchema)` to create a new message.
305
361
  */
306
362
  export const GetAssignmentsRequestSchema = /*@__PURE__*/
307
- messageDesc(file_experiments_v1_experiments, 41);
363
+ messageDesc(file_experiments_v1_experiments, 49);
308
364
 
309
365
  /**
310
366
  * Describes the message experiments.v1.GetAssignmentsResponse.
311
367
  * Use `create(GetAssignmentsResponseSchema)` to create a new message.
312
368
  */
313
369
  export const GetAssignmentsResponseSchema = /*@__PURE__*/
314
- messageDesc(file_experiments_v1_experiments, 42);
370
+ messageDesc(file_experiments_v1_experiments, 50);
315
371
 
316
372
  /**
317
373
  * Describes the message experiments.v1.ListExperimentDeclarationsRequest.
318
374
  * Use `create(ListExperimentDeclarationsRequestSchema)` to create a new message.
319
375
  */
320
376
  export const ListExperimentDeclarationsRequestSchema = /*@__PURE__*/
321
- messageDesc(file_experiments_v1_experiments, 43);
377
+ messageDesc(file_experiments_v1_experiments, 51);
322
378
 
323
379
  /**
324
380
  * Describes the message experiments.v1.ListExperimentDeclarationsResponse.
325
381
  * Use `create(ListExperimentDeclarationsResponseSchema)` to create a new message.
326
382
  */
327
383
  export const ListExperimentDeclarationsResponseSchema = /*@__PURE__*/
328
- messageDesc(file_experiments_v1_experiments, 44);
384
+ messageDesc(file_experiments_v1_experiments, 52);
329
385
 
330
386
  /**
331
387
  * Describes the message experiments.v1.ResolveExposureRequest.
332
388
  * Use `create(ResolveExposureRequestSchema)` to create a new message.
333
389
  */
334
390
  export const ResolveExposureRequestSchema = /*@__PURE__*/
335
- messageDesc(file_experiments_v1_experiments, 45);
391
+ messageDesc(file_experiments_v1_experiments, 53);
336
392
 
337
393
  /**
338
394
  * Describes the message experiments.v1.ResolveExposureResponse.
339
395
  * Use `create(ResolveExposureResponseSchema)` to create a new message.
340
396
  */
341
397
  export const ResolveExposureResponseSchema = /*@__PURE__*/
342
- messageDesc(file_experiments_v1_experiments, 46);
398
+ messageDesc(file_experiments_v1_experiments, 54);
343
399
 
344
400
  /**
345
401
  * Describes the enum experiments.v1.ExperimentStatus.
@@ -353,6 +409,23 @@ export const ExperimentStatusSchema = /*@__PURE__*/
353
409
  export const ExperimentStatus = /*@__PURE__*/
354
410
  tsEnum(ExperimentStatusSchema);
355
411
 
412
+ /**
413
+ * Describes the enum experiments.v1.MetricAggregator.
414
+ */
415
+ export const MetricAggregatorSchema = /*@__PURE__*/
416
+ enumDesc(file_experiments_v1_experiments, 1);
417
+
418
+ /**
419
+ * MetricAggregator names the aggregation operation applied to a JSONB
420
+ * path on conversion_events.metadata. SUM/AVG/COUNT/MIN/MAX map to the
421
+ * native Postgres aggregates; P50/P95 use percentile_cont(0.5|0.95)
422
+ * WITHIN GROUP (ORDER BY value).
423
+ *
424
+ * @generated from enum experiments.v1.MetricAggregator
425
+ */
426
+ export const MetricAggregator = /*@__PURE__*/
427
+ tsEnum(MetricAggregatorSchema);
428
+
356
429
  /**
357
430
  * @generated from service experiments.v1.ExperimentsService
358
431
  */