@daeda/mcp-pro 0.1.41 → 0.1.43

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.
Files changed (2) hide show
  1. package/dist/index.js +2363 -205
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -863,6 +863,9 @@ var ACTION_TYPE_CATALOG_ROW_SCHEMA = z6.object({
863
863
  contextConstraintsJson: z6.string(),
864
864
  lookupRequirementsJson: z6.string(),
865
865
  resourceRequirementsJson: z6.string(),
866
+ corpusMetadataJson: z6.string(),
867
+ fieldFrequencyJson: z6.string(),
868
+ variantInventoryJson: z6.string(),
866
869
  createGuidanceText: z6.string()
867
870
  });
868
871
  var actionTypeCatalogPayloadSchema = z6.object({
@@ -881,12 +884,15 @@ var TABLE_STATEMENTS4 = [
881
884
  context_constraints_json TEXT NOT NULL,
882
885
  lookup_requirements_json TEXT NOT NULL,
883
886
  resource_requirements_json TEXT NOT NULL,
887
+ corpus_metadata_json TEXT NOT NULL,
888
+ field_frequency_json TEXT NOT NULL,
889
+ variant_inventory_json TEXT NOT NULL,
884
890
  create_guidance_text TEXT NOT NULL
885
891
  )`,
886
892
  `CREATE INDEX IF NOT EXISTS idx_action_type_catalog_category ON action_type_catalog(category)`
887
893
  ];
888
894
  var QUERY_DOCS5 = [
889
- '- The "action_type_catalog" table has: action_type_id, name, category, connection_type, example_actions_json, recommended_create_examples_json, field_schema_json, known_guardrails_json, context_constraints_json, lookup_requirements_json, resource_requirements_json, create_guidance_text',
895
+ '- The "action_type_catalog" table has: action_type_id, name, category, connection_type, example_actions_json, recommended_create_examples_json, field_schema_json, known_guardrails_json, context_constraints_json, lookup_requirements_json, resource_requirements_json, corpus_metadata_json, field_frequency_json, variant_inventory_json, create_guidance_text',
890
896
  "- Query action_type_catalog to discover supported workflow action types before constructing workflows",
891
897
  "- category is 'built_in' for the supported workflow action types surfaced to the LLM",
892
898
  "- field_schema_json documents required fields for supported actions; example_actions_json contains curated fixture-derived examples for reference",
@@ -895,11 +901,14 @@ var QUERY_DOCS5 = [
895
901
  "- lookup_requirements_json shows which local table/column to query before filling IDs like user_ids, flow_id, sequenceId, subscriptionId, inbox IDs, or association label IDs",
896
902
  "- Use recommended_create_examples_json as the preferred template source when constructing new workflow actions",
897
903
  "- Use resource_requirements_json to see whether an action needs IDs like listId, user_ids, flow_id, sequenceId, subscriptionId, inbox IDs, or association label IDs before creation",
904
+ "- corpus_metadata_json includes harvested example counts by action type across portals and workflows",
905
+ "- field_frequency_json summarizes whether each field was always observed, commonly optional, or a rare edge case in the harvested corpus",
906
+ "- variant_inventory_json lists the main structural variants observed for the action type in harvested workflows",
898
907
  "- create_guidance_text captures action-specific creation tips plus live update caveats such as when update_workflow must use fresh actionIds for replacement nodes"
899
908
  ];
900
909
  var actionTypeCatalogPlugin = {
901
910
  name: "action-type-catalog",
902
- schemaVersion: 2,
911
+ schemaVersion: 3,
903
912
  tableNames: ["action_type_catalog"],
904
913
  ddlStatements: TABLE_STATEMENTS4,
905
914
  initStrategy: "eager",
@@ -920,6 +929,9 @@ var actionTypeCatalogPlugin = {
920
929
  parsed.actionTypeCatalog.map((row) => row.contextConstraintsJson),
921
930
  parsed.actionTypeCatalog.map((row) => row.lookupRequirementsJson),
922
931
  parsed.actionTypeCatalog.map((row) => row.resourceRequirementsJson),
932
+ parsed.actionTypeCatalog.map((row) => row.corpusMetadataJson),
933
+ parsed.actionTypeCatalog.map((row) => row.fieldFrequencyJson),
934
+ parsed.actionTypeCatalog.map((row) => row.variantInventoryJson),
923
935
  parsed.actionTypeCatalog.map((row) => row.createGuidanceText)
924
936
  ]);
925
937
  },
@@ -11532,17 +11544,41 @@ import { z as z71 } from "zod";
11532
11544
  // ../shared/types/workflow-actions-types/index.ts
11533
11545
  import { z as z70 } from "zod";
11534
11546
  var NonEmptyStringSchema = z70.string().min(1);
11547
+ var BooleanStringSchema = z70.enum(["true", "false"]);
11548
+ var WorkflowEdgeTypeSchema = z70.enum(["STANDARD", "GOTO"]);
11549
+ var TimeUnitSchema = z70.enum(["MINUTES", "HOURS", "DAYS"]);
11550
+ var WeekdaySchema = z70.enum(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]);
11551
+ var CountryCodeModeSchema = z70.enum(["static_default_country_code", "dynamic_default_country_code", "none"]);
11552
+ var SenderTypeSchema = z70.enum(["CONTACT_OWNER", "SPECIFIC_USER"]);
11553
+ var MarketingContactStatusSchema = z70.enum(["MARKETABLE", "MARKETABLE_UNTIL_RENEWAL", "NON_MARKETABLE"]);
11554
+ var CommunicationChannelSchema = z70.enum(["EMAIL", "SMS", "WHATSAPP"]);
11555
+ var CommunicationOptStateSchema = z70.enum(["OPT_IN", "OPT_OUT"]);
11556
+ var LegalBasisSchema = z70.enum([
11557
+ "LEGITIMATE_INTEREST_CLIENT",
11558
+ "LEGITIMATE_INTEREST_OTHER",
11559
+ "PERFORMANCE_OF_CONTRACT",
11560
+ "CONSENT_WITH_NOTICE",
11561
+ "NON_GDPR"
11562
+ ]);
11563
+ var RelativeDelayDirectionSchema = z70.enum(["BEFORE", "AFTER"]);
11564
+ var WebhookMethodSchema = z70.enum(["GET", "POST", "PUT", "PATCH", "DELETE"]);
11565
+ var CustomCodeRuntimeSchema = z70.enum(["NODE20X"]);
11566
+ var CustomCodeOutputTypeSchema = z70.enum(["NUMBER", "DATE", "STRING", "ENUMERATION", "DATETIME", "BOOLEAN"]);
11567
+ var NotificationDeliveryMethodSchema = z70.enum(["APP", "MOBILE"]);
11568
+ var AssociationCategorySchema = z70.enum(["HUBSPOT_DEFINED", "USER_DEFINED"]);
11535
11569
  var WorkflowConnectionSchema = z70.object({
11536
- edgeType: NonEmptyStringSchema,
11570
+ edgeType: WorkflowEdgeTypeSchema,
11537
11571
  nextActionId: NonEmptyStringSchema
11538
11572
  }).passthrough();
11539
11573
  var WorkflowStaticBranchSchema = z70.object({
11540
11574
  branchValue: NonEmptyStringSchema,
11541
- connection: WorkflowConnectionSchema.optional()
11575
+ connection: WorkflowConnectionSchema.optional(),
11576
+ nextActionId: NonEmptyStringSchema.optional()
11542
11577
  }).passthrough();
11543
11578
  var WorkflowTestBranchSchema = z70.object({
11544
11579
  percentage: z70.number().int().min(0).max(100),
11545
- connection: WorkflowConnectionSchema.optional()
11580
+ connection: WorkflowConnectionSchema.optional(),
11581
+ nextActionId: NonEmptyStringSchema.optional()
11546
11582
  }).passthrough();
11547
11583
  var WorkflowListMembershipFilterSchema = z70.object({
11548
11584
  listId: NonEmptyStringSchema,
@@ -11553,23 +11589,100 @@ var WorkflowListBranchPropertyOperationSchema = z70.object({
11553
11589
  operator: NonEmptyStringSchema,
11554
11590
  includeObjectsWithNoValueSet: z70.boolean().optional(),
11555
11591
  values: z70.array(z70.string()).optional(),
11556
- operationType: NonEmptyStringSchema.optional()
11592
+ operationType: NonEmptyStringSchema.optional(),
11593
+ value: z70.union([z70.string(), z70.number(), z70.boolean()]).optional(),
11594
+ endpointBehavior: NonEmptyStringSchema.optional(),
11595
+ propertyParser: NonEmptyStringSchema.optional(),
11596
+ type: NonEmptyStringSchema.optional(),
11597
+ lowerBound: z70.number().optional(),
11598
+ upperBound: z70.number().optional(),
11599
+ lowerBoundEndpointBehavior: NonEmptyStringSchema.optional(),
11600
+ upperBoundEndpointBehavior: NonEmptyStringSchema.optional(),
11601
+ lowerBoundTimePoint: z70.record(z70.string(), z70.unknown()).optional(),
11602
+ upperBoundTimePoint: z70.record(z70.string(), z70.unknown()).optional(),
11603
+ timePoint: z70.record(z70.string(), z70.unknown()).optional()
11557
11604
  }).passthrough();
11558
11605
  var WorkflowListBranchPropertyFilterSchema = z70.object({
11559
11606
  property: NonEmptyStringSchema,
11560
11607
  filterType: z70.literal("PROPERTY"),
11561
11608
  operation: WorkflowListBranchPropertyOperationSchema
11562
11609
  }).passthrough();
11610
+ var WorkflowListBranchFormSubmissionFilterSchema = z70.object({
11611
+ filterType: z70.literal("FORM_SUBMISSION"),
11612
+ formId: NonEmptyStringSchema,
11613
+ operator: z70.literal("FILLED_OUT"),
11614
+ pruningRefineBy: z70.record(z70.string(), z70.unknown()).optional()
11615
+ }).passthrough();
11616
+ var WorkflowListBranchFormSubmissionOnPageFilterSchema = z70.object({
11617
+ filterType: z70.literal("FORM_SUBMISSION_ON_PAGE"),
11618
+ formId: NonEmptyStringSchema,
11619
+ pageId: NonEmptyStringSchema,
11620
+ operator: z70.literal("FILLED_OUT")
11621
+ }).passthrough();
11622
+ var WorkflowListBranchEmailEventFilterSchema = z70.object({
11623
+ filterType: z70.literal("EMAIL_EVENT"),
11624
+ level: NonEmptyStringSchema,
11625
+ emailId: NonEmptyStringSchema,
11626
+ appId: NonEmptyStringSchema,
11627
+ operator: z70.enum(["OPENED", "CLICKED", "BOUNCED", "DELIVERED", "MARKED_SPAM", "UNSUBSCRIBED"])
11628
+ }).passthrough();
11629
+ var WorkflowListBranchCtaFilterSchema = z70.object({
11630
+ filterType: z70.literal("CTA"),
11631
+ operator: z70.literal("HAS_CLICKED_CTA_PLACEMENT"),
11632
+ ctaName: NonEmptyStringSchema
11633
+ }).passthrough();
11563
11634
  var WorkflowListBranchFilterLeafSchema = z70.union([
11564
11635
  WorkflowListMembershipFilterSchema,
11565
- WorkflowListBranchPropertyFilterSchema
11636
+ WorkflowListBranchPropertyFilterSchema,
11637
+ WorkflowListBranchFormSubmissionFilterSchema,
11638
+ WorkflowListBranchFormSubmissionOnPageFilterSchema,
11639
+ WorkflowListBranchEmailEventFilterSchema,
11640
+ WorkflowListBranchCtaFilterSchema
11566
11641
  ]);
11567
- var WorkflowListBranchFilterNodeSchema = z70.object({
11642
+ var WorkflowListBranchLogicalNodeSchema = z70.object({
11568
11643
  filterBranches: z70.array(z70.lazy(() => WorkflowListBranchFilterNodeSchema)).default([]),
11569
11644
  filters: z70.array(WorkflowListBranchFilterLeafSchema).default([]),
11570
11645
  filterBranchType: z70.enum(["AND", "OR"]),
11571
11646
  filterBranchOperator: z70.enum(["AND", "OR"])
11572
11647
  }).passthrough();
11648
+ var WorkflowListBranchAssociationNodeSchema = z70.object({
11649
+ filterBranches: z70.array(z70.lazy(() => WorkflowListBranchFilterNodeSchema)).default([]),
11650
+ filters: z70.array(WorkflowListBranchFilterLeafSchema).default([]),
11651
+ filterBranchType: z70.literal("ASSOCIATION"),
11652
+ filterBranchOperator: z70.literal("AND"),
11653
+ associationCategory: AssociationCategorySchema,
11654
+ associationTypeId: z70.number().int(),
11655
+ objectTypeId: NonEmptyStringSchema,
11656
+ operator: z70.literal("IN_LIST")
11657
+ }).passthrough();
11658
+ var WorkflowListBranchUnifiedEventsNodeSchema = z70.object({
11659
+ filterBranches: z70.array(z70.lazy(() => WorkflowListBranchFilterNodeSchema)).default([]),
11660
+ filters: z70.array(WorkflowListBranchFilterLeafSchema).default([]),
11661
+ filterBranchType: z70.literal("UNIFIED_EVENTS"),
11662
+ filterBranchOperator: z70.literal("AND"),
11663
+ eventTypeId: NonEmptyStringSchema,
11664
+ operator: z70.literal("HAS_COMPLETED")
11665
+ }).passthrough();
11666
+ var WorkflowListBranchFilterNodeSchema = z70.union([
11667
+ WorkflowListBranchLogicalNodeSchema,
11668
+ WorkflowListBranchAssociationNodeSchema,
11669
+ WorkflowListBranchUnifiedEventsNodeSchema
11670
+ ]).superRefine((value, ctx) => {
11671
+ if ((value.filterBranchType === "AND" || value.filterBranchType === "OR") && value.filterBranches.length === 0 && value.filters.length === 0) {
11672
+ ctx.addIssue({
11673
+ code: z70.ZodIssueCode.custom,
11674
+ message: "Logical LIST_BRANCH nodes must include at least one child branch or filter.",
11675
+ path: ["filterBranches"]
11676
+ });
11677
+ }
11678
+ if (value.filterBranchType === "UNIFIED_EVENTS" && value.filters.length > 0) {
11679
+ ctx.addIssue({
11680
+ code: z70.ZodIssueCode.custom,
11681
+ message: "UNIFIED_EVENTS nodes do not accept direct filters.",
11682
+ path: ["filters"]
11683
+ });
11684
+ }
11685
+ });
11573
11686
  var WorkflowListBranchSchema = z70.object({
11574
11687
  branchName: NonEmptyStringSchema,
11575
11688
  filterBranch: WorkflowListBranchFilterNodeSchema,
@@ -11577,7 +11690,7 @@ var WorkflowListBranchSchema = z70.object({
11577
11690
  nextActionId: NonEmptyStringSchema.optional()
11578
11691
  }).passthrough();
11579
11692
  var AssociationSpecSchema = z70.object({
11580
- associationCategory: NonEmptyStringSchema,
11693
+ associationCategory: AssociationCategorySchema,
11581
11694
  associationTypeId: z70.number().int()
11582
11695
  }).passthrough();
11583
11696
  var StaticValueSchema = z70.object({
@@ -11588,9 +11701,40 @@ var ObjectPropertyValueSchema = z70.object({
11588
11701
  type: z70.literal("OBJECT_PROPERTY"),
11589
11702
  propertyName: NonEmptyStringSchema
11590
11703
  }).passthrough();
11591
- var ActionValueSchema = z70.union([
11704
+ var FieldDataValueSchema = z70.object({
11705
+ type: z70.literal("FIELD_DATA"),
11706
+ actionId: NonEmptyStringSchema,
11707
+ dataKey: NonEmptyStringSchema
11708
+ }).passthrough();
11709
+ var TimestampValueSchema = z70.object({
11710
+ type: z70.literal("TIMESTAMP"),
11711
+ timestampType: NonEmptyStringSchema.optional()
11712
+ }).passthrough();
11713
+ var IncrementValueSchema = z70.object({
11714
+ type: z70.literal("INCREMENT"),
11715
+ incrementAmount: z70.number()
11716
+ }).passthrough();
11717
+ var StaticAppendValueSchema = z70.object({
11718
+ type: z70.literal("STATIC_APPEND_VALUE"),
11719
+ staticAppendValue: z70.string()
11720
+ }).passthrough();
11721
+ var EnrollmentEventPropertyValueSchema = z70.object({
11722
+ type: z70.literal("ENROLLMENT_EVENT_PROPERTY"),
11723
+ enrollmentEventPropertyToken: z70.string()
11724
+ }).passthrough();
11725
+ var FetchedObjectPropertyValueSchema = z70.object({
11726
+ type: z70.literal("FETCHED_OBJECT_PROPERTY"),
11727
+ propertyToken: z70.string()
11728
+ }).passthrough();
11729
+ var ActionValueSchema = z70.discriminatedUnion("type", [
11592
11730
  StaticValueSchema,
11593
- ObjectPropertyValueSchema
11731
+ ObjectPropertyValueSchema,
11732
+ FieldDataValueSchema,
11733
+ TimestampValueSchema,
11734
+ IncrementValueSchema,
11735
+ StaticAppendValueSchema,
11736
+ EnrollmentEventPropertyValueSchema,
11737
+ FetchedObjectPropertyValueSchema
11594
11738
  ]);
11595
11739
  var AssociationValueSchema = z70.union([
11596
11740
  z70.object({
@@ -11609,12 +11753,42 @@ var TimeOfDaySchema = z70.object({
11609
11753
  hour: z70.number().int().min(0).max(23),
11610
11754
  minute: z70.number().int().min(0).max(59)
11611
11755
  }).passthrough();
11756
+ var RelativeDatetimeValueSchema = z70.object({
11757
+ type: z70.literal("RELATIVE_DATETIME"),
11758
+ timeDelay: z70.object({
11759
+ delta: z70.number().int(),
11760
+ timeUnit: TimeUnitSchema,
11761
+ daysOfWeek: z70.array(WeekdaySchema),
11762
+ timeOfDay: TimeOfDaySchema.optional()
11763
+ }).passthrough()
11764
+ }).passthrough();
11612
11765
  var RelativeTimeSchema = z70.object({
11613
11766
  delta: z70.number().int(),
11614
- timeUnit: NonEmptyStringSchema,
11767
+ timeUnit: TimeUnitSchema,
11615
11768
  timeOfDay: TimeOfDaySchema,
11616
- daysOfWeek: z70.array(NonEmptyStringSchema)
11769
+ daysOfWeek: z70.array(WeekdaySchema)
11770
+ }).passthrough();
11771
+ var RecipientSelectionSchema = z70.object({
11772
+ user_ids: z70.array(NonEmptyStringSchema).optional(),
11773
+ team_ids: z70.array(NonEmptyStringSchema).optional(),
11774
+ owner_properties: z70.array(NonEmptyStringSchema).optional()
11617
11775
  }).passthrough();
11776
+ var requireAtLeastOneRecipient = (value, ctx) => {
11777
+ const recipientCounts = [
11778
+ value.fields?.user_ids?.length ?? 0,
11779
+ value.fields?.team_ids?.length ?? 0,
11780
+ value.fields?.owner_properties?.length ?? 0
11781
+ ];
11782
+ if (!recipientCounts.some((count) => count > 0)) {
11783
+ ctx.addIssue({
11784
+ code: z70.ZodIssueCode.custom,
11785
+ message: "At least one of user_ids, team_ids, or owner_properties must contain a recipient.",
11786
+ path: ["fields"]
11787
+ });
11788
+ }
11789
+ };
11790
+ var GenericObjectSchema = z70.record(z70.string(), z70.unknown());
11791
+ var NotificationRecipientArraySchema = z70.array(NonEmptyStringSchema);
11618
11792
  var ActionFieldDataInputSchema = z70.object({
11619
11793
  actionId: NonEmptyStringSchema,
11620
11794
  dataKey: NonEmptyStringSchema,
@@ -11622,7 +11796,8 @@ var ActionFieldDataInputSchema = z70.object({
11622
11796
  }).passthrough();
11623
11797
  var StaticBranchInputValueSchema = z70.union([
11624
11798
  ActionFieldDataInputSchema,
11625
- ObjectPropertyValueSchema
11799
+ ObjectPropertyValueSchema,
11800
+ FetchedObjectPropertyValueSchema
11626
11801
  ]);
11627
11802
  var SingleConnectionActionBaseSchema = z70.object({
11628
11803
  actionId: NonEmptyStringSchema,
@@ -11634,23 +11809,27 @@ var buildSingleConnectionActionSchema = (actionTypeId, fields51) => SingleConnec
11634
11809
  actionTypeId: z70.literal(actionTypeId),
11635
11810
  fields: fields51
11636
11811
  });
11637
- var BooleanStringSchema = z70.enum(["true", "false"]);
11638
11812
  var DelayForSetAmountOfTimeActionSchema = buildSingleConnectionActionSchema("0-1", z70.object({
11639
11813
  delta: NonEmptyStringSchema,
11640
- time_unit: NonEmptyStringSchema
11814
+ time_unit: TimeUnitSchema,
11815
+ days_of_week: z70.array(WeekdaySchema).optional(),
11816
+ time_of_day: TimeOfDaySchema.optional(),
11817
+ time_zone_strategy: NonEmptyStringSchema.optional()
11818
+ }).passthrough());
11819
+ var SendEmailActionSchema = buildSingleConnectionActionSchema("0-4", z70.object({
11820
+ content_id: NonEmptyStringSchema
11641
11821
  }).passthrough());
11642
- var RotateRecordToOwnerActionSchema = buildSingleConnectionActionSchema("0-11", z70.object({
11643
- user_ids: z70.array(NonEmptyStringSchema).min(1),
11822
+ var RotateRecordToOwnerActionSchema = buildSingleConnectionActionSchema("0-11", RecipientSelectionSchema.extend({
11644
11823
  target_property: NonEmptyStringSchema,
11645
11824
  overwrite_current_owner: BooleanStringSchema
11646
- }).passthrough());
11825
+ })).superRefine(requireAtLeastOneRecipient);
11647
11826
  var CreateRecordPropertySchema = z70.object({
11648
11827
  targetProperty: NonEmptyStringSchema,
11649
- value: ActionValueSchema
11828
+ value: z70.union([ActionValueSchema, RelativeDatetimeValueSchema])
11650
11829
  }).passthrough();
11651
11830
  var CreateRecordActionSchema = buildSingleConnectionActionSchema("0-14", z70.object({
11652
11831
  object_type_id: NonEmptyStringSchema,
11653
- properties: z70.array(CreateRecordPropertySchema).optional(),
11832
+ properties: z70.array(CreateRecordPropertySchema),
11654
11833
  associations: z70.array(ActionAssociationSchema).optional(),
11655
11834
  use_explicit_associations: BooleanStringSchema.optional()
11656
11835
  }).passthrough());
@@ -11670,15 +11849,43 @@ var StopTrackingIntentSignalsActionSchema = buildSingleConnectionActionSchema("0
11670
11849
  targetCompany: NonEmptyStringSchema
11671
11850
  }).passthrough());
11672
11851
  var ValidateAndFormatPhoneNumberActionSchema = buildSingleConnectionActionSchema("0-225935194", z70.object({
11673
- defaultCountryCodeMode: NonEmptyStringSchema
11674
- }).passthrough());
11852
+ defaultCountryCodeMode: CountryCodeModeSchema,
11853
+ propertyValue: NonEmptyStringSchema.optional(),
11854
+ staticDefaultCountryCode: NonEmptyStringSchema.optional()
11855
+ }).passthrough()).superRefine((value, ctx) => {
11856
+ if (value.fields.defaultCountryCodeMode === "static_default_country_code" && !value.fields.staticDefaultCountryCode) {
11857
+ ctx.addIssue({
11858
+ code: z70.ZodIssueCode.custom,
11859
+ message: "staticDefaultCountryCode is required when defaultCountryCodeMode is static_default_country_code.",
11860
+ path: ["fields", "staticDefaultCountryCode"]
11861
+ });
11862
+ }
11863
+ if (value.fields.defaultCountryCodeMode !== "static_default_country_code" && value.fields.staticDefaultCountryCode) {
11864
+ ctx.addIssue({
11865
+ code: z70.ZodIssueCode.custom,
11866
+ message: "staticDefaultCountryCode is only valid when defaultCountryCodeMode is static_default_country_code.",
11867
+ path: ["fields", "staticDefaultCountryCode"]
11868
+ });
11869
+ }
11870
+ });
11675
11871
  var DelayUntilEventOccursActionSchema = buildSingleConnectionActionSchema("0-29", z70.object({
11676
- expiration_minutes: NonEmptyStringSchema
11872
+ expiration_minutes: NonEmptyStringSchema,
11873
+ event_filter_branches: z70.array(GenericObjectSchema).optional(),
11874
+ target_object_override: NonEmptyStringSchema.optional()
11677
11875
  }).passthrough());
11678
- var TaskOwnerAssignmentSchema = z70.object({
11679
- type: NonEmptyStringSchema,
11680
- value: StaticValueSchema
11681
- }).passthrough();
11876
+ var RelativeDelayActionSchema = buildSingleConnectionActionSchema("0-28", z70.object({
11877
+ delay: RelativeTimeSchema,
11878
+ direction: RelativeDelayDirectionSchema
11879
+ }).passthrough());
11880
+ var TaskOwnerAssignmentSchema = z70.discriminatedUnion("type", [
11881
+ z70.object({
11882
+ type: z70.literal("CUSTOM"),
11883
+ value: z70.union([StaticValueSchema, ObjectPropertyValueSchema])
11884
+ }).passthrough(),
11885
+ z70.object({
11886
+ type: z70.literal("ENROLLED_OBJECT_OWNER")
11887
+ }).passthrough()
11888
+ ]);
11682
11889
  var CreateTaskActionSchema = buildSingleConnectionActionSchema("0-3", z70.object({
11683
11890
  task_type: NonEmptyStringSchema,
11684
11891
  subject: NonEmptyStringSchema,
@@ -11688,24 +11895,25 @@ var CreateTaskActionSchema = buildSingleConnectionActionSchema("0-3", z70.object
11688
11895
  priority: NonEmptyStringSchema.optional(),
11689
11896
  due_time: RelativeTimeSchema.optional(),
11690
11897
  reminder_time: RelativeTimeSchema.optional(),
11691
- owner_assignment: TaskOwnerAssignmentSchema.optional()
11898
+ owner_assignment: TaskOwnerAssignmentSchema.optional(),
11899
+ queue_id: NonEmptyStringSchema.optional()
11692
11900
  }).passthrough());
11693
11901
  var SetMarketingContactStatusActionSchema = buildSingleConnectionActionSchema("0-31", z70.object({
11694
11902
  targetContact: NonEmptyStringSchema,
11695
- marketableType: NonEmptyStringSchema
11903
+ marketableType: MarketingContactStatusSchema
11696
11904
  }).passthrough());
11697
11905
  var DelayUntilDateActionSchema = buildSingleConnectionActionSchema("0-35", z70.object({
11698
- date: ActionValueSchema,
11906
+ date: z70.union([ActionValueSchema, RelativeDatetimeValueSchema]),
11699
11907
  delta: NonEmptyStringSchema,
11700
- time_unit: NonEmptyStringSchema,
11908
+ time_unit: TimeUnitSchema,
11701
11909
  time_of_day: TimeOfDaySchema
11702
11910
  }).passthrough());
11703
11911
  var ManageCommunicationSubscriptionsActionSchema = buildSingleConnectionActionSchema("0-43347357", z70.object({
11704
11912
  targetContact: NonEmptyStringSchema,
11705
- channel: NonEmptyStringSchema,
11706
- optState: NonEmptyStringSchema,
11913
+ channel: CommunicationChannelSchema,
11914
+ optState: CommunicationOptStateSchema,
11707
11915
  subscriptionId: NonEmptyStringSchema,
11708
- legalBasis: NonEmptyStringSchema,
11916
+ legalBasis: LegalBasisSchema,
11709
11917
  legalBasisExplanation: z70.string()
11710
11918
  }).passthrough());
11711
11919
  var AssignConversationOwnerActionSchema = buildSingleConnectionActionSchema("0-44475148", z70.object({
@@ -11715,10 +11923,25 @@ var AssignConversationOwnerActionSchema = buildSingleConnectionActionSchema("0-4
11715
11923
  var EnrollInSequenceActionSchema = buildSingleConnectionActionSchema("0-46510720", z70.object({
11716
11924
  sequenceId: NonEmptyStringSchema,
11717
11925
  shouldUseContactTimeZone: BooleanStringSchema,
11718
- senderType: NonEmptyStringSchema,
11926
+ senderType: SenderTypeSchema,
11719
11927
  contactOwnerProperty: NonEmptyStringSchema.optional(),
11720
11928
  userId: NonEmptyStringSchema.optional()
11721
- }).passthrough());
11929
+ }).passthrough()).superRefine((value, ctx) => {
11930
+ if (value.fields.senderType === "CONTACT_OWNER" && !value.fields.contactOwnerProperty) {
11931
+ ctx.addIssue({
11932
+ code: z70.ZodIssueCode.custom,
11933
+ message: "contactOwnerProperty is required when senderType is CONTACT_OWNER.",
11934
+ path: ["fields", "contactOwnerProperty"]
11935
+ });
11936
+ }
11937
+ if (value.fields.senderType === "SPECIFIC_USER" && !value.fields.userId) {
11938
+ ctx.addIssue({
11939
+ code: z70.ZodIssueCode.custom,
11940
+ message: "userId is required when senderType is SPECIFIC_USER.",
11941
+ path: ["fields", "userId"]
11942
+ });
11943
+ }
11944
+ });
11722
11945
  var UnenrollFromSequenceActionSchema = buildSingleConnectionActionSchema("0-4702372", z70.object({}).passthrough());
11723
11946
  var EditRecordsSetPropertyActionSchema = buildSingleConnectionActionSchema("0-5", z70.object({
11724
11947
  property_name: NonEmptyStringSchema,
@@ -11750,21 +11973,113 @@ var ApplyAssociationLabelsActionSchema = buildSingleConnectionActionSchema("0-73
11750
11973
  fromObjectType: NonEmptyStringSchema,
11751
11974
  toObjectType: NonEmptyStringSchema,
11752
11975
  labelToApply: NonEmptyStringSchema,
11753
- applyLabelToAllAssociatedObjects: BooleanStringSchema
11976
+ applyLabelToAllAssociatedObjects: BooleanStringSchema,
11977
+ matchBy: NonEmptyStringSchema.optional(),
11978
+ enrolledObjectPropertyNameToMatch: NonEmptyStringSchema.optional(),
11979
+ associatedObjectPropertyNameToMatch: NonEmptyStringSchema.optional(),
11980
+ associatedObjectPropertyName: NonEmptyStringSchema.optional(),
11981
+ associatedObjectPropertyOperator: NonEmptyStringSchema.optional(),
11982
+ associatedObjectPropertyValue: NonEmptyStringSchema.optional()
11754
11983
  }).passthrough());
11755
- var SendInternalEmailNotificationActionSchema = buildSingleConnectionActionSchema("0-8", z70.object({
11756
- user_ids: z70.array(NonEmptyStringSchema).min(1),
11984
+ var SendInternalEmailNotificationActionSchema = buildSingleConnectionActionSchema("0-8", RecipientSelectionSchema.extend({
11757
11985
  subject: NonEmptyStringSchema,
11758
- body: NonEmptyStringSchema,
11759
- owner_properties: z70.array(NonEmptyStringSchema).optional()
11760
- }).passthrough());
11761
- var SendInAppNotificationActionSchema = buildSingleConnectionActionSchema("0-9", z70.object({
11762
- user_ids: z70.array(NonEmptyStringSchema).min(1),
11763
- delivery_method: z70.enum(["APP", "MOBILE"]),
11986
+ body: NonEmptyStringSchema
11987
+ })).superRefine(requireAtLeastOneRecipient);
11988
+ var SendInAppNotificationActionSchema = buildSingleConnectionActionSchema("0-9", RecipientSelectionSchema.extend({
11989
+ delivery_method: NotificationDeliveryMethodSchema,
11764
11990
  subject: NonEmptyStringSchema,
11765
- body: NonEmptyStringSchema,
11766
- owner_properties: z70.array(NonEmptyStringSchema).optional()
11991
+ body: NonEmptyStringSchema
11992
+ })).superRefine(requireAtLeastOneRecipient);
11993
+ var SendInternalMarketingEmailActionSchema = buildSingleConnectionActionSchema("0-23", z70.object({
11994
+ email_content_id: NonEmptyStringSchema,
11995
+ recipient_emails: z70.array(NonEmptyStringSchema).min(1)
11996
+ }).passthrough());
11997
+ var AdsAudienceActionSchema = buildSingleConnectionActionSchema("0-30", z70.object({
11998
+ audience_id: NonEmptyStringSchema
11999
+ }).passthrough());
12000
+ var RenderTemplateVariableSchema = z70.object({
12001
+ name: NonEmptyStringSchema,
12002
+ value: z70.union([ActionValueSchema, GenericObjectSchema])
12003
+ }).passthrough();
12004
+ var RenderTemplateActionSchema = buildSingleConnectionActionSchema("0-33", z70.object({
12005
+ variables: z70.array(RenderTemplateVariableSchema),
12006
+ template: z70.string(),
12007
+ locale: NonEmptyStringSchema.optional()
12008
+ }).passthrough());
12009
+ var EnrichRecordActionSchema = buildSingleConnectionActionSchema("0-177946906", z70.object({
12010
+ object_to_enrich: NonEmptyStringSchema,
12011
+ bi_enrichment_overwrite: BooleanStringSchema.optional()
12012
+ }).passthrough());
12013
+ var SendSurveyActionSchema = buildSingleConnectionActionSchema("0-199186210", z70.object({
12014
+ sendTo: NonEmptyStringSchema,
12015
+ survey: NonEmptyStringSchema
12016
+ }).passthrough());
12017
+ var SendSmsMessageActionSchema = buildSingleConnectionActionSchema("0-40900952", z70.object({
12018
+ rootMicId: NonEmptyStringSchema,
12019
+ targetContact: NonEmptyStringSchema
11767
12020
  }).passthrough());
12021
+ var UpdateAssociationLabelsActionSchema = buildSingleConnectionActionSchema("0-61139484", z70.object({
12022
+ fromObjectType: NonEmptyStringSchema,
12023
+ toObjectType: NonEmptyStringSchema,
12024
+ labelToUpdate: NonEmptyStringSchema,
12025
+ deleteExistingLabel: BooleanStringSchema,
12026
+ labelToApply: NonEmptyStringSchema
12027
+ }).passthrough());
12028
+ var SendSlackNotificationActionSchema = buildSingleConnectionActionSchema("1-179507819", z70.object({
12029
+ message: z70.string(),
12030
+ slackChannelIds: NotificationRecipientArraySchema.optional(),
12031
+ slackUserIds: NotificationRecipientArraySchema.optional(),
12032
+ notifyOwner: NotificationRecipientArraySchema.optional()
12033
+ }).passthrough()).superRefine((value, ctx) => {
12034
+ const recipients = [
12035
+ value.fields.slackChannelIds?.length ?? 0,
12036
+ value.fields.slackUserIds?.length ?? 0,
12037
+ value.fields.notifyOwner?.length ?? 0
12038
+ ];
12039
+ if (!recipients.some((count) => count > 0)) {
12040
+ ctx.addIssue({
12041
+ code: z70.ZodIssueCode.custom,
12042
+ message: "At least one Slack recipient target must be provided.",
12043
+ path: ["fields"]
12044
+ });
12045
+ }
12046
+ });
12047
+ var CustomCodeInputFieldSchema = z70.object({
12048
+ name: NonEmptyStringSchema,
12049
+ value: z70.union([ActionValueSchema, GenericObjectSchema])
12050
+ }).passthrough();
12051
+ var CustomCodeOutputFieldSchema = z70.object({
12052
+ name: NonEmptyStringSchema,
12053
+ type: CustomCodeOutputTypeSchema,
12054
+ options: z70.array(NonEmptyStringSchema).optional()
12055
+ }).passthrough();
12056
+ var CustomCodeActionSchema = z70.object({
12057
+ actionId: NonEmptyStringSchema,
12058
+ connection: WorkflowConnectionSchema.optional(),
12059
+ inputFields: z70.array(CustomCodeInputFieldSchema).optional(),
12060
+ outputFields: z70.array(CustomCodeOutputFieldSchema).optional(),
12061
+ runtime: CustomCodeRuntimeSchema,
12062
+ secretNames: z70.array(NonEmptyStringSchema).optional(),
12063
+ sourceCode: z70.string(),
12064
+ type: z70.literal("CUSTOM_CODE")
12065
+ }).passthrough().superRefine((value, ctx) => {
12066
+ for (const [index, field] of (value.outputFields ?? []).entries()) {
12067
+ if (field.type === "ENUMERATION" && (!field.options || field.options.length === 0)) {
12068
+ ctx.addIssue({
12069
+ code: z70.ZodIssueCode.custom,
12070
+ message: "ENUMERATION output fields must include options.",
12071
+ path: ["outputFields", index, "options"]
12072
+ });
12073
+ }
12074
+ }
12075
+ });
12076
+ var WebhookActionSchema = z70.object({
12077
+ actionId: NonEmptyStringSchema,
12078
+ method: WebhookMethodSchema,
12079
+ queryParams: z70.array(GenericObjectSchema),
12080
+ type: z70.literal("WEBHOOK"),
12081
+ webhookUrl: NonEmptyStringSchema
12082
+ }).passthrough();
11768
12083
  var StaticBranchWorkflowActionSchema = z70.object({
11769
12084
  actionId: NonEmptyStringSchema,
11770
12085
  inputValue: StaticBranchInputValueSchema,
@@ -11788,6 +12103,7 @@ var ListBranchWorkflowActionSchema = z70.object({
11788
12103
  var WorkflowActionSchemasByDefinitionKey = {
11789
12104
  AB_TEST_BRANCH: AbTestBranchWorkflowActionSchema,
11790
12105
  "0-1": DelayForSetAmountOfTimeActionSchema,
12106
+ "0-4": SendEmailActionSchema,
11791
12107
  "0-11": RotateRecordToOwnerActionSchema,
11792
12108
  "0-14": CreateRecordActionSchema,
11793
12109
  "0-15": GoToWorkflowActionSchema,
@@ -11797,9 +12113,13 @@ var WorkflowActionSchemasByDefinitionKey = {
11797
12113
  "0-219160146": TrackIntentSignalsActionSchema,
11798
12114
  "0-219161394": StopTrackingIntentSignalsActionSchema,
11799
12115
  "0-225935194": ValidateAndFormatPhoneNumberActionSchema,
12116
+ "0-23": SendInternalMarketingEmailActionSchema,
12117
+ "0-28": RelativeDelayActionSchema,
11800
12118
  "0-29": DelayUntilEventOccursActionSchema,
12119
+ "0-30": AdsAudienceActionSchema,
11801
12120
  "0-3": CreateTaskActionSchema,
11802
12121
  "0-31": SetMarketingContactStatusActionSchema,
12122
+ "0-33": RenderTemplateActionSchema,
11803
12123
  "0-35": DelayUntilDateActionSchema,
11804
12124
  "0-43347357": ManageCommunicationSubscriptionsActionSchema,
11805
12125
  "0-44475148": AssignConversationOwnerActionSchema,
@@ -11807,18 +12127,26 @@ var WorkflowActionSchemasByDefinitionKey = {
11807
12127
  "0-4702372": UnenrollFromSequenceActionSchema,
11808
12128
  "0-5": EditRecordsSetPropertyActionSchema,
11809
12129
  "0-61139476": RemoveAssociationLabelsActionSchema,
12130
+ "0-61139484": UpdateAssociationLabelsActionSchema,
11810
12131
  "0-63189541": CreateAssociationsActionSchema,
11811
12132
  "0-63809083": AddToStaticListActionSchema,
11812
12133
  "0-63863438": RemoveFromStaticListActionSchema,
11813
12134
  "0-73444249": ApplyAssociationLabelsActionSchema,
11814
12135
  "0-8": SendInternalEmailNotificationActionSchema,
11815
12136
  "0-9": SendInAppNotificationActionSchema,
12137
+ "0-177946906": EnrichRecordActionSchema,
12138
+ "0-199186210": SendSurveyActionSchema,
12139
+ "0-40900952": SendSmsMessageActionSchema,
12140
+ "1-179507819": SendSlackNotificationActionSchema,
12141
+ CUSTOM_CODE: CustomCodeActionSchema,
11816
12142
  LIST_BRANCH: ListBranchWorkflowActionSchema,
11817
- STATIC_BRANCH: StaticBranchWorkflowActionSchema
12143
+ STATIC_BRANCH: StaticBranchWorkflowActionSchema,
12144
+ WEBHOOK: WebhookActionSchema
11818
12145
  };
11819
12146
  var WorkflowDefinitionActionSchema = z70.union([
11820
12147
  AbTestBranchWorkflowActionSchema,
11821
12148
  DelayForSetAmountOfTimeActionSchema,
12149
+ SendEmailActionSchema,
11822
12150
  RotateRecordToOwnerActionSchema,
11823
12151
  CreateRecordActionSchema,
11824
12152
  GoToWorkflowActionSchema,
@@ -11828,9 +12156,13 @@ var WorkflowDefinitionActionSchema = z70.union([
11828
12156
  TrackIntentSignalsActionSchema,
11829
12157
  StopTrackingIntentSignalsActionSchema,
11830
12158
  ValidateAndFormatPhoneNumberActionSchema,
12159
+ SendInternalMarketingEmailActionSchema,
12160
+ RelativeDelayActionSchema,
11831
12161
  DelayUntilEventOccursActionSchema,
12162
+ AdsAudienceActionSchema,
11832
12163
  CreateTaskActionSchema,
11833
12164
  SetMarketingContactStatusActionSchema,
12165
+ RenderTemplateActionSchema,
11834
12166
  DelayUntilDateActionSchema,
11835
12167
  ManageCommunicationSubscriptionsActionSchema,
11836
12168
  AssignConversationOwnerActionSchema,
@@ -11838,14 +12170,21 @@ var WorkflowDefinitionActionSchema = z70.union([
11838
12170
  UnenrollFromSequenceActionSchema,
11839
12171
  EditRecordsSetPropertyActionSchema,
11840
12172
  RemoveAssociationLabelsActionSchema,
12173
+ UpdateAssociationLabelsActionSchema,
11841
12174
  CreateAssociationsActionSchema,
11842
12175
  AddToStaticListActionSchema,
11843
12176
  RemoveFromStaticListActionSchema,
11844
12177
  ApplyAssociationLabelsActionSchema,
11845
12178
  SendInternalEmailNotificationActionSchema,
11846
12179
  SendInAppNotificationActionSchema,
12180
+ EnrichRecordActionSchema,
12181
+ SendSurveyActionSchema,
12182
+ SendSmsMessageActionSchema,
12183
+ SendSlackNotificationActionSchema,
12184
+ CustomCodeActionSchema,
11847
12185
  ListBranchWorkflowActionSchema,
11848
- StaticBranchWorkflowActionSchema
12186
+ StaticBranchWorkflowActionSchema,
12187
+ WebhookActionSchema
11849
12188
  ]);
11850
12189
 
11851
12190
  // ../shared/pure/workflow-action-types.ts
@@ -11857,7 +12196,10 @@ var BUILT_IN_ACTION_TYPES = {
11857
12196
  connectionType: "SINGLE_CONNECTION",
11858
12197
  fields: [
11859
12198
  { name: "delta", type: "string", required: true, description: "Duration value (e.g. '1440' for minutes)" },
11860
- { name: "time_unit", type: "string", required: true, description: "Unit: MINUTES, HOURS, or DAYS" }
12199
+ { name: "time_unit", type: "string", required: true, description: "Unit: MINUTES, HOURS, or DAYS" },
12200
+ { name: "days_of_week", type: "array", required: false, description: "Optional allowed execution weekdays when the delay should only release on selected days." },
12201
+ { name: "time_of_day", type: "object", required: false, description: "Optional release time of day: { hour, minute }." },
12202
+ { name: "time_zone_strategy", type: "string", required: false, description: "Optional timezone handling mode used by HubSpot when evaluating the delay." }
11861
12203
  ]
11862
12204
  },
11863
12205
  "0-3": {
@@ -11870,6 +12212,8 @@ var BUILT_IN_ACTION_TYPES = {
11870
12212
  { name: "subject", type: "string", required: true, description: "Task subject line" },
11871
12213
  { name: "body", type: "string", required: true, description: "Task body (HTML)" },
11872
12214
  { name: "priority", type: "string", required: false, description: "Priority: NONE, LOW, MEDIUM, HIGH" },
12215
+ { name: "owner_assignment", type: "object", required: false, description: "Optional owner assignment spec for the created task, for example { type: 'CUSTOM', value: { type: 'OBJECT_PROPERTY', propertyName: 'hubspot_owner_id' } }." },
12216
+ { name: "queue_id", type: "string", required: false, description: "Optional task queue identifier used in some harvested payloads." },
11873
12217
  { name: "associations", type: "array", required: false, description: "Association targets. On CONTACT_FLOW, use [{ target: { associationCategory: 'HUBSPOT_DEFINED', associationTypeId: 204 }, value: { type: 'ENROLLED_OBJECT' } }]." },
11874
12218
  { name: "use_explicit_associations", type: "string", required: false, description: "'true' to use explicit associations. On CONTACT_FLOW create-task actions, set this to 'true' with the enrolled-contact association to avoid HubSpot HTTP 500 errors." }
11875
12219
  ]
@@ -11886,11 +12230,11 @@ var BUILT_IN_ACTION_TYPES = {
11886
12230
  "0-5": {
11887
12231
  actionTypeId: "0-5",
11888
12232
  name: "Edit records / Set property",
11889
- description: "Set, edit, copy, or clear property values for enrolled or associated records",
12233
+ description: "Set, copy, append, increment, timestamp, or clear CRM property values on the enrolled record or on an associated record.",
11890
12234
  connectionType: "SINGLE_CONNECTION",
11891
12235
  fields: [
11892
12236
  { name: "property_name", type: "string", required: true, description: "Internal property name to set" },
11893
- { name: "value", type: "object", required: true, description: "MUST include type: 'STATIC_VALUE' when setting a value, e.g. { type: 'STATIC_VALUE', staticValue: 'value' }. Omitting type causes HTTP 500." },
12237
+ { name: "value", type: "object", required: true, description: "Typed value payload. Common variants are STATIC_VALUE, OBJECT_PROPERTY, INCREMENT, FIELD_DATA, TIMESTAMP, STATIC_APPEND_VALUE, ENROLLMENT_EVENT_PROPERTY, and FETCHED_OBJECT_PROPERTY. STATIC_VALUE must include type explicitly or HubSpot returns HTTP 500." },
11894
12238
  { name: "association", type: "object", required: false, description: "Association spec if setting on an associated record: { associationCategory: 'HUBSPOT_DEFINED', associationTypeId: <number> }" }
11895
12239
  ]
11896
12240
  },
@@ -11900,7 +12244,9 @@ var BUILT_IN_ACTION_TYPES = {
11900
12244
  description: "Send an internal email to selected users or teams",
11901
12245
  connectionType: "SINGLE_CONNECTION",
11902
12246
  fields: [
11903
- { name: "user_ids", type: "array", required: true, description: "Array of user ID strings to notify" },
12247
+ { name: "user_ids", type: "array", required: false, description: "Array of user ID strings to notify" },
12248
+ { name: "team_ids", type: "array", required: false, description: "Optional array of team IDs to notify." },
12249
+ { name: "owner_properties", type: "array", required: false, description: "Optional owner-property keys used by some payloads to target owners dynamically." },
11904
12250
  { name: "subject", type: "string", required: true, description: "Email subject" },
11905
12251
  { name: "body", type: "string", required: true, description: "Email body (HTML)" }
11906
12252
  ]
@@ -11911,7 +12257,9 @@ var BUILT_IN_ACTION_TYPES = {
11911
12257
  description: "Send a notification to specified users or teams in HubSpot",
11912
12258
  connectionType: "SINGLE_CONNECTION",
11913
12259
  fields: [
11914
- { name: "user_ids", type: "array", required: true, description: "Array of user ID strings to notify" },
12260
+ { name: "user_ids", type: "array", required: false, description: "Array of user ID strings to notify" },
12261
+ { name: "team_ids", type: "array", required: false, description: "Optional array of team IDs to notify." },
12262
+ { name: "owner_properties", type: "array", required: false, description: "Optional owner-property keys used by some payloads to target owners dynamically." },
11915
12263
  { name: "delivery_method", type: "string", required: true, description: "Delivery method: APP" },
11916
12264
  { name: "subject", type: "string", required: true, description: "Notification subject" },
11917
12265
  { name: "body", type: "string", required: true, description: "Notification body" }
@@ -11923,7 +12271,8 @@ var BUILT_IN_ACTION_TYPES = {
11923
12271
  description: "Evenly distribute enrolled records to selected users or teams. IMPORTANT: user_ids must contain HubSpot user IDs (owners table user_id column), NOT owner IDs (owners table owner_id column) \u2014 these are different values for the same person. Using owner IDs will cause an internal HubSpot error. CONTACT_FLOW requires all three fields (user_ids, target_property, overwrite_current_owner). PLATFORM_FLOW auto-fills target_property and overwrite_current_owner when only user_ids is provided.",
11924
12272
  connectionType: "SINGLE_CONNECTION",
11925
12273
  fields: [
11926
- { name: "user_ids", type: "array", required: true, description: "Array of HubSpot user ID strings to rotate between (can be empty array). IMPORTANT: query the owners table and use the user_id column, NOT owner_id. owner_id and user_id are different values \u2014 using owner_id will cause HubSpot API errors." },
12274
+ { name: "user_ids", type: "array", required: false, description: "Array of HubSpot user ID strings to rotate between. IMPORTANT: query the owners table and use the user_id column, NOT owner_id. owner_id and user_id are different values \u2014 using owner_id will cause HubSpot API errors." },
12275
+ { name: "team_ids", type: "array", required: false, description: "Optional array of team IDs to include in the rotation." },
11927
12276
  { name: "target_property", type: "string", required: true, description: "Owner property to set, e.g. 'hubspot_owner_id'. Required on CONTACT_FLOW; auto-filled on PLATFORM_FLOW." },
11928
12277
  { name: "overwrite_current_owner", type: "string", required: true, description: "'true' or 'false' \u2014 whether to overwrite existing owner. Required on CONTACT_FLOW; auto-filled as 'false' on PLATFORM_FLOW." }
11929
12278
  ]
@@ -11931,13 +12280,13 @@ var BUILT_IN_ACTION_TYPES = {
11931
12280
  "0-14": {
11932
12281
  actionTypeId: "0-14",
11933
12282
  name: "Create record",
11934
- description: "Create a CRM record (contact, company, deal, ticket, lead, custom object)",
12283
+ description: "Create a CRM record and optionally initialize its properties and associations in the same workflow step.",
11935
12284
  connectionType: "SINGLE_CONNECTION",
11936
12285
  fields: [
11937
12286
  { name: "object_type_id", type: "string", required: true, description: "Object type ID to create (e.g. '0-3' for deals, '0-5' for tickets)" },
11938
- { name: "properties", type: "array", required: true, description: "Array of { targetProperty, value: { type: 'STATIC_VALUE', staticValue: 'value' } }. Each value MUST include type: 'STATIC_VALUE'. Omitting type causes HTTP 500." },
11939
- { name: "associations", type: "array", required: false, description: "Association targets for the new record" },
11940
- { name: "use_explicit_associations", type: "string", required: false, description: "'true' to use explicit associations" }
12287
+ { name: "properties", type: "array", required: true, description: "Array of { targetProperty, value } records. Harvested values use OBJECT_PROPERTY, STATIC_VALUE, RELATIVE_DATETIME, and STATIC_APPEND_VALUE variants. STATIC_VALUE payloads must include type: 'STATIC_VALUE' or HubSpot returns HTTP 500." },
12288
+ { name: "associations", type: "array", required: false, description: "Association targets for the new record. Harvested variants include ENROLLED_OBJECT and COPY_ASSOCIATION association values." },
12289
+ { name: "use_explicit_associations", type: "string", required: false, description: "'true' to use explicit associations. Harvested payloads almost always set this when associations are present." }
11941
12290
  ]
11942
12291
  },
11943
12292
  "0-15": {
@@ -11977,10 +12326,22 @@ var BUILT_IN_ACTION_TYPES = {
11977
12326
  "0-29": {
11978
12327
  actionTypeId: "0-29",
11979
12328
  name: "Delay until an event occurs",
11980
- description: "Delay enrolled records until a specified event occurs.",
12329
+ description: "Pause the workflow until a qualifying event occurs or the timeout expires.",
11981
12330
  connectionType: "SINGLE_CONNECTION",
11982
12331
  fields: [
11983
- { name: "expiration_minutes", type: "string", required: true, description: "How long the workflow should wait for the event before timing out" }
12332
+ { name: "expiration_minutes", type: "string", required: true, description: "How long the workflow should wait for the event before timing out" },
12333
+ { name: "event_filter_branches", type: "array", required: false, description: "Optional event filter tree used to define which completed event releases the delay. This follows the same branch-node concepts as LIST_BRANCH event filtering." },
12334
+ { name: "target_object_override", type: "string", required: false, description: "Optional object override used by some harvested event-delay payloads." }
12335
+ ]
12336
+ },
12337
+ "0-28": {
12338
+ actionTypeId: "0-28",
12339
+ name: "Relative delay",
12340
+ description: "Delay execution relative to a target time using a direction such as BEFORE or AFTER.",
12341
+ connectionType: "SINGLE_CONNECTION",
12342
+ fields: [
12343
+ { name: "delay", type: "object", required: true, description: "Relative delay payload with delta, timeUnit, timeOfDay, and daysOfWeek." },
12344
+ { name: "direction", type: "string", required: true, description: "Direction of the relative delay, for example BEFORE." }
11984
12345
  ]
11985
12346
  },
11986
12347
  "0-30": {
@@ -11988,16 +12349,18 @@ var BUILT_IN_ACTION_TYPES = {
11988
12349
  name: "Add to / Remove from ads audience",
11989
12350
  description: "Add or remove contacts from an ads audience",
11990
12351
  connectionType: "SINGLE_CONNECTION",
11991
- fields: []
12352
+ fields: [
12353
+ { name: "audience_id", type: "string", required: true, description: "Ads audience identifier targeted by the action." }
12354
+ ]
11992
12355
  },
11993
12356
  "0-31": {
11994
12357
  actionTypeId: "0-31",
11995
12358
  name: "Set marketing contact status",
11996
- description: "Mark contact as marketing or non-marketing",
12359
+ description: "Change the contact's marketing-contact status for billing and messaging eligibility.",
11997
12360
  connectionType: "SINGLE_CONNECTION",
11998
12361
  fields: [
11999
12362
  { name: "targetContact", type: "string", required: true, description: "Target contact token or fetched object reference, usually '{{ enrolled_object }}' in contact workflows" },
12000
- { name: "marketableType", type: "string", required: true, description: "Marketing status to apply, e.g. 'MARKETABLE' or 'MARKETABLE_UNTIL_RENEWAL'" }
12363
+ { name: "marketableType", type: "string", required: true, description: "Marketing status to apply. Harvested values include MARKETABLE, MARKETABLE_UNTIL_RENEWAL, and NON_MARKETABLE." }
12001
12364
  ]
12002
12365
  },
12003
12366
  "0-35": {
@@ -12012,6 +12375,17 @@ var BUILT_IN_ACTION_TYPES = {
12012
12375
  { name: "time_of_day", type: "object", required: true, description: "Required time of day: { hour: number, minute: number }. HubSpot UI rejects delay-until-date actions without it. If the workflow continues after this delay, the next action should be a STATIC_BRANCH on hs_delay_status rather than a direct business-action connection." }
12013
12376
  ]
12014
12377
  },
12378
+ "0-33": {
12379
+ actionTypeId: "0-33",
12380
+ name: "Render template",
12381
+ description: "Render a template string using named variables resolved from enrolled-record properties or prior workflow outputs.",
12382
+ connectionType: "SINGLE_CONNECTION",
12383
+ fields: [
12384
+ { name: "variables", type: "array", required: true, description: "Named variable bindings used inside the template." },
12385
+ { name: "template", type: "string", required: true, description: "Template source string with variable references." },
12386
+ { name: "locale", type: "string", required: false, description: "Optional locale identifier used during rendering." }
12387
+ ]
12388
+ },
12015
12389
  "0-63809083": {
12016
12390
  actionTypeId: "0-63809083",
12017
12391
  name: "Add to static list",
@@ -12033,12 +12407,12 @@ var BUILT_IN_ACTION_TYPES = {
12033
12407
  "0-43347357": {
12034
12408
  actionTypeId: "0-43347357",
12035
12409
  name: "Manage communication subscriptions",
12036
- description: "Update subscription status, legal basis, and communication consent",
12410
+ description: "Update a contact's communication subscription status, legal basis, and channel-level consent for a specific subscription definition.",
12037
12411
  connectionType: "SINGLE_CONNECTION",
12038
12412
  fields: [
12039
12413
  { name: "targetContact", type: "string", required: true, description: "Target contact token or fetched object reference, e.g. '{{ enrolled_object }}'" },
12040
- { name: "channel", type: "string", required: true, description: "Communication channel, e.g. 'EMAIL'" },
12041
- { name: "optState", type: "string", required: true, description: "Subscription status, e.g. 'OPT_IN' or 'OPT_OUT'" },
12414
+ { name: "channel", type: "string", required: true, description: "Communication channel. Harvested values include EMAIL, SMS, and WHATSAPP." },
12415
+ { name: "optState", type: "string", required: true, description: "Subscription status, e.g. OPT_IN or OPT_OUT." },
12042
12416
  { name: "subscriptionId", type: "string", required: true, description: "HubSpot subscription type ID to update" },
12043
12417
  { name: "legalBasis", type: "string", required: true, description: "Legal basis, e.g. LEGITIMATE_INTEREST_CLIENT, LEGITIMATE_INTEREST_OTHER, PERFORMANCE_OF_CONTRACT, CONSENT_WITH_NOTICE, NON_GDPR" },
12044
12418
  { name: "legalBasisExplanation", type: "string", required: true, description: "Free-text explanation for the selected legal basis" }
@@ -12047,14 +12421,14 @@ var BUILT_IN_ACTION_TYPES = {
12047
12421
  "0-46510720": {
12048
12422
  actionTypeId: "0-46510720",
12049
12423
  name: "Enroll in a sequence",
12050
- description: "Automatically enroll contacts in a sequence",
12424
+ description: "Enroll contacts into a sales sequence with either the contact owner or a specific user as the sender.",
12051
12425
  connectionType: "SINGLE_CONNECTION",
12052
12426
  fields: [
12053
12427
  { name: "sequenceId", type: "string", required: true, description: "HubSpot sequence ID to enroll the contact into" },
12054
12428
  { name: "shouldUseContactTimeZone", type: "string", required: true, description: "'true' or 'false' to send based on the contact's time zone" },
12055
- { name: "senderType", type: "string", required: true, description: "Sequence sender mode, e.g. 'CONTACT_OWNER' or 'SPECIFIC_USER'" },
12056
- { name: "contactOwnerProperty", type: "string", required: false, description: "Owner property used when senderType is 'CONTACT_OWNER', e.g. 'hubspot_owner_id'" },
12057
- { name: "userId", type: "string", required: false, description: "Specific HubSpot user ID used when senderType is 'SPECIFIC_USER'" }
12429
+ { name: "senderType", type: "string", required: true, description: "Sequence sender mode. Harvested values include CONTACT_OWNER and SPECIFIC_USER." },
12430
+ { name: "contactOwnerProperty", type: "string", required: false, description: "Required when senderType is CONTACT_OWNER, usually hubspot_owner_id." },
12431
+ { name: "userId", type: "string", required: false, description: "Required when senderType is SPECIFIC_USER. Must be a HubSpot user ID, not owner_id." }
12058
12432
  ]
12059
12433
  },
12060
12434
  "0-4702372": {
@@ -12095,7 +12469,13 @@ var BUILT_IN_ACTION_TYPES = {
12095
12469
  { name: "fromObjectType", type: "string", required: true, description: "HubSpot object type ID on the source side of the association pair" },
12096
12470
  { name: "toObjectType", type: "string", required: true, description: "HubSpot object type ID on the destination side of the association pair" },
12097
12471
  { name: "labelToApply", type: "string", required: true, description: "Association label type ID to apply" },
12098
- { name: "applyLabelToAllAssociatedObjects", type: "string", required: true, description: "'true' or 'false' to control whether the label applies to all associated objects" }
12472
+ { name: "applyLabelToAllAssociatedObjects", type: "string", required: true, description: "'true' or 'false' to control whether the label applies to all associated objects" },
12473
+ { name: "matchBy", type: "string", required: false, description: "Optional matching strategy used to target specific associated records." },
12474
+ { name: "enrolledObjectPropertyNameToMatch", type: "string", required: false, description: "Optional enrolled-record property used for association matching." },
12475
+ { name: "associatedObjectPropertyNameToMatch", type: "string", required: false, description: "Optional associated-record property used for association matching." },
12476
+ { name: "associatedObjectPropertyName", type: "string", required: false, description: "Optional associated-record property name used by property-based label application variants." },
12477
+ { name: "associatedObjectPropertyOperator", type: "string", required: false, description: "Optional operator used with associatedObjectPropertyName." },
12478
+ { name: "associatedObjectPropertyValue", type: "string", required: false, description: "Optional comparison value used with associatedObjectPropertyName." }
12099
12479
  ]
12100
12480
  },
12101
12481
  "0-61139476": {
@@ -12136,7 +12516,9 @@ var BUILT_IN_ACTION_TYPES = {
12136
12516
  description: "Format phone numbers for calling compatibility",
12137
12517
  connectionType: "SINGLE_CONNECTION",
12138
12518
  fields: [
12139
- { name: "defaultCountryCodeMode", type: "string", required: true, description: "Default country code mode, e.g. 'static_default_country_code', 'dynamic_default_country_code', or 'none'" }
12519
+ { name: "defaultCountryCodeMode", type: "string", required: true, description: "Default country code mode: static_default_country_code, dynamic_default_country_code, or none." },
12520
+ { name: "propertyValue", type: "string", required: false, description: "Optional property token or value source for the phone number being normalized." },
12521
+ { name: "staticDefaultCountryCode", type: "string", required: false, description: "Required when defaultCountryCodeMode is static_default_country_code. Omit it for the other modes." }
12140
12522
  ]
12141
12523
  },
12142
12524
  "0-177946906": {
@@ -12144,14 +12526,20 @@ var BUILT_IN_ACTION_TYPES = {
12144
12526
  name: "Enrich record",
12145
12527
  description: "Enrich contacts or companies with additional data",
12146
12528
  connectionType: "SINGLE_CONNECTION",
12147
- fields: []
12529
+ fields: [
12530
+ { name: "object_to_enrich", type: "string", required: true, description: "Object token or identifier indicating which record should be enriched." },
12531
+ { name: "bi_enrichment_overwrite", type: "string", required: false, description: "Optional boolean-string controlling whether enrichment should overwrite existing values." }
12532
+ ]
12148
12533
  },
12149
12534
  "0-199186210": {
12150
12535
  actionTypeId: "0-199186210",
12151
12536
  name: "Send survey",
12152
12537
  description: "Send a custom survey to enrolled contacts (BETA)",
12153
12538
  connectionType: "SINGLE_CONNECTION",
12154
- fields: []
12539
+ fields: [
12540
+ { name: "survey", type: "string", required: true, description: "Survey identifier to send." },
12541
+ { name: "sendTo", type: "string", required: true, description: "Target recipient token or recipient mode." }
12542
+ ]
12155
12543
  },
12156
12544
  "0-25085031": {
12157
12545
  actionTypeId: "0-25085031",
@@ -12165,7 +12553,23 @@ var BUILT_IN_ACTION_TYPES = {
12165
12553
  name: "Send SMS message",
12166
12554
  description: "Send SMS to enrolled or associated contacts",
12167
12555
  connectionType: "SINGLE_CONNECTION",
12168
- fields: []
12556
+ fields: [
12557
+ { name: "rootMicId", type: "string", required: true, description: "Messaging integration or campaign identifier used by the SMS action." },
12558
+ { name: "targetContact", type: "string", required: true, description: "Target contact token or fetched object reference." }
12559
+ ]
12560
+ },
12561
+ "0-61139484": {
12562
+ actionTypeId: "0-61139484",
12563
+ name: "Update association labels",
12564
+ description: "Replace or apply association labels on existing CRM record associations.",
12565
+ connectionType: "SINGLE_CONNECTION",
12566
+ fields: [
12567
+ { name: "fromObjectType", type: "string", required: true, description: "HubSpot object type ID on the source side of the association pair." },
12568
+ { name: "toObjectType", type: "string", required: true, description: "HubSpot object type ID on the destination side of the association pair." },
12569
+ { name: "labelToUpdate", type: "string", required: true, description: "Existing association label type ID to replace." },
12570
+ { name: "deleteExistingLabel", type: "string", required: true, description: "'true' or 'false' controlling whether the existing label should be removed before applying the new one." },
12571
+ { name: "labelToApply", type: "string", required: true, description: "Association label type ID to apply." }
12572
+ ]
12169
12573
  },
12170
12574
  "0-172351286": {
12171
12575
  actionTypeId: "0-172351286",
@@ -12246,7 +12650,36 @@ var BUILT_IN_ACTION_TYPES = {
12246
12650
  name: "Send Slack notification",
12247
12651
  description: "Send a Slack message via integrated Slack workspace",
12248
12652
  connectionType: "SINGLE_CONNECTION",
12249
- fields: []
12653
+ fields: [
12654
+ { name: "message", type: "string", required: true, description: "Slack message body." },
12655
+ { name: "slackChannelIds", type: "array", required: false, description: "Optional target Slack channel IDs. Provide at least one recipient target across the Slack recipient fields." },
12656
+ { name: "slackUserIds", type: "array", required: false, description: "Optional target Slack user IDs. Provide at least one recipient target across the Slack recipient fields." },
12657
+ { name: "notifyOwner", type: "array", required: false, description: "Optional owner-targeting values harvested as an array in corpus payloads. Provide at least one recipient target across the Slack recipient fields." }
12658
+ ]
12659
+ },
12660
+ CUSTOM_CODE: {
12661
+ actionTypeId: "CUSTOM_CODE",
12662
+ name: "Custom code",
12663
+ description: "Run a HubSpot server-side custom code step with declared inputs, outputs, runtime, and optional secrets.",
12664
+ connectionType: "SINGLE_CONNECTION",
12665
+ fields: [
12666
+ { name: "secretNames", type: "array", required: false, description: "Optional list of secret names exposed to the runtime." },
12667
+ { name: "sourceCode", type: "string", required: true, description: "Custom code source body." },
12668
+ { name: "runtime", type: "string", required: true, description: "Execution runtime. Harvested corpus currently uses NODE20X." },
12669
+ { name: "inputFields", type: "array", required: false, description: "Optional named inputs passed into the custom code runtime. Harvested input variants include OBJECT_PROPERTY, FIELD_DATA, ENROLLMENT_EVENT_PROPERTY, and FETCHED_OBJECT_PROPERTY." },
12670
+ { name: "outputFields", type: "array", required: false, description: "Optional declared output fields produced by the custom code action. Output types include NUMBER, DATE, STRING, ENUMERATION, DATETIME, and BOOLEAN. ENUMERATION outputs must include an options array." }
12671
+ ]
12672
+ },
12673
+ WEBHOOK: {
12674
+ actionTypeId: "WEBHOOK",
12675
+ name: "Webhook",
12676
+ description: "Send an outbound HTTP request from the workflow to an external webhook endpoint.",
12677
+ connectionType: "SINGLE_CONNECTION",
12678
+ fields: [
12679
+ { name: "method", type: "string", required: true, description: "HTTP method used for the webhook request. Supported values are GET, POST, PUT, PATCH, and DELETE." },
12680
+ { name: "webhookUrl", type: "string", required: true, description: "Target webhook URL." },
12681
+ { name: "queryParams", type: "array", required: false, description: "Optional query parameter definitions attached to the request." }
12682
+ ]
12250
12683
  },
12251
12684
  "1-100451": {
12252
12685
  actionTypeId: "1-100451",
@@ -12289,165 +12722,1784 @@ var WORKFLOW_ACTION_CREATE_METADATA_BY_ID = {
12289
12722
  notes: "For CONTACT_FLOW task actions, HubSpot may return HTTP 500 unless the task explicitly associates to the enrolled contact via associationTypeId 204 and value.type ENROLLED_OBJECT."
12290
12723
  }
12291
12724
  ],
12292
- createGuidanceText: "For CONTACT_FLOW create-task actions, include associations with target { associationCategory: 'HUBSPOT_DEFINED', associationTypeId: 204 }, value { type: 'ENROLLED_OBJECT' }, and use_explicit_associations: 'true'. Omitting these can cause HubSpot to return HTTP 500 even when task_type, subject, and body are present."
12293
- },
12294
- "0-8": {
12295
- resourceRequirements: [
12725
+ createGuidanceText: "For CONTACT_FLOW create-task actions, include associations with target { associationCategory: 'HUBSPOT_DEFINED', associationTypeId: 204 }, value { type: 'ENROLLED_OBJECT' }, and use_explicit_associations: 'true'. Omitting these can cause HubSpot to return HTTP 500 even when task_type, subject, and body are present."
12726
+ },
12727
+ "0-4": {
12728
+ resourceRequirements: [],
12729
+ createGuidanceText: "Use a real automated marketing email content_id. The ID is not currently queryable from the synced portal metadata, so treat it as not exposed unless you already know it."
12730
+ },
12731
+ "0-8": {
12732
+ resourceRequirements: [
12733
+ {
12734
+ fieldName: "user_ids",
12735
+ resourceKind: "user",
12736
+ resolutionMode: "queryable",
12737
+ sourceHint: "owners.user_id",
12738
+ notes: "Use HubSpot user IDs from the owners table user_id column, not owner_id."
12739
+ }
12740
+ ],
12741
+ createGuidanceText: "Use minimal notification payloads and omit owner_properties unless you have a specific reason to target owners dynamically."
12742
+ },
12743
+ "0-9": {
12744
+ resourceRequirements: [
12745
+ {
12746
+ fieldName: "user_ids",
12747
+ resourceKind: "user",
12748
+ resolutionMode: "queryable",
12749
+ sourceHint: "owners.user_id",
12750
+ notes: "Use HubSpot user IDs from the owners table user_id column, not owner_id."
12751
+ }
12752
+ ],
12753
+ createGuidanceText: "Use minimal notification payloads and omit owner_properties unless you have a specific reason to target owners dynamically."
12754
+ },
12755
+ "0-11": {
12756
+ resourceRequirements: [
12757
+ {
12758
+ fieldName: "user_ids",
12759
+ resourceKind: "user",
12760
+ resolutionMode: "queryable",
12761
+ sourceHint: "owners.user_id",
12762
+ notes: "CONTACT_FLOW requires target_property and overwrite_current_owner in addition to user_ids."
12763
+ }
12764
+ ],
12765
+ createGuidanceText: "On CONTACT_FLOW, always send user_ids, target_property, and overwrite_current_owner together. Use owners.user_id values, never owner_id."
12766
+ },
12767
+ "0-23": {
12768
+ resourceRequirements: [],
12769
+ createGuidanceText: "This action is API-incompatible in harvested testing. Keep the type and examples in the catalog, but avoid generating it automatically for write plans."
12770
+ },
12771
+ "0-28": {
12772
+ resourceRequirements: [],
12773
+ createGuidanceText: "Use a relative delay payload in fields.delay with delta, timeUnit, timeOfDay, and daysOfWeek, plus a direction such as BEFORE."
12774
+ },
12775
+ "0-15": {
12776
+ resourceRequirements: [
12777
+ {
12778
+ fieldName: "flow_id",
12779
+ resourceKind: "workflow",
12780
+ resolutionMode: "not_exposed",
12781
+ sourceHint: "HubSpot workflow ID",
12782
+ notes: "Target workflow should match the current workflow type."
12783
+ }
12784
+ ],
12785
+ createGuidanceText: "Use a known target workflow ID of the same workflow type. Do not leave flow_id empty."
12786
+ },
12787
+ "0-35": {
12788
+ resourceRequirements: [],
12789
+ createGuidanceText: "When using STATIC_VALUE dates, send a future Unix-milliseconds timestamp. time_of_day is required for reliable creation. If the delay action continues to another step, route it into a STATIC_BRANCH that reads inputValue { actionId: '<delay_action_id>', dataKey: 'hs_delay_status', type: 'FIELD_DATA' } and continues from the DATE_MET_AS_PLANNED branch instead of connecting directly to the next business action."
12790
+ },
12791
+ "0-30": {
12792
+ resourceRequirements: [],
12793
+ createGuidanceText: "Use a real ads audience identifier in audience_id. This value is not currently queryable from synced portal metadata."
12794
+ },
12795
+ "0-33": {
12796
+ resourceRequirements: [],
12797
+ createGuidanceText: "Render-template actions should use simple variable bindings backed by enrolled-object properties or prior action outputs."
12798
+ },
12799
+ "0-14": {
12800
+ resourceRequirements: [],
12801
+ createGuidanceText: "Prefer standard object types and explicit STATIC_VALUE property payloads for creation examples. Avoid portal-specific custom object IDs in default templates."
12802
+ },
12803
+ "0-63809083": {
12804
+ resourceRequirements: [
12805
+ {
12806
+ fieldName: "listId",
12807
+ resourceKind: "list",
12808
+ resolutionMode: "queryable",
12809
+ sourceHint: "lists.list_id"
12810
+ }
12811
+ ],
12812
+ createGuidanceText: "Resolve listId from the lists table before creating the workflow."
12813
+ },
12814
+ "0-63863438": {
12815
+ resourceRequirements: [
12816
+ {
12817
+ fieldName: "listId",
12818
+ resourceKind: "list",
12819
+ resolutionMode: "queryable",
12820
+ sourceHint: "lists.list_id"
12821
+ }
12822
+ ],
12823
+ createGuidanceText: "Resolve listId from the lists table before creating the workflow."
12824
+ },
12825
+ "0-43347357": {
12826
+ resourceRequirements: [
12827
+ {
12828
+ fieldName: "subscriptionId",
12829
+ resourceKind: "subscription_definition",
12830
+ resolutionMode: "not_exposed",
12831
+ sourceHint: "HubSpot communication subscription definition ID"
12832
+ }
12833
+ ],
12834
+ createGuidanceText: "Use a real communication subscription definition ID. targetContact can often be '{{ enrolled_object }}' for contact workflows."
12835
+ },
12836
+ "0-46510720": {
12837
+ resourceRequirements: [
12838
+ {
12839
+ fieldName: "sequenceId",
12840
+ resourceKind: "sequence",
12841
+ resolutionMode: "not_exposed",
12842
+ sourceHint: "HubSpot sequence ID"
12843
+ },
12844
+ {
12845
+ fieldName: "userId",
12846
+ resourceKind: "user",
12847
+ resolutionMode: "queryable",
12848
+ sourceHint: "owners.user_id",
12849
+ notes: "Only needed when senderType is SPECIFIC_USER."
12850
+ }
12851
+ ],
12852
+ createGuidanceText: "Use a real sequenceId. Prefer CONTACT_OWNER plus contactOwnerProperty for generic templates, or SPECIFIC_USER plus a valid owners.user_id."
12853
+ },
12854
+ "0-63189541": {
12855
+ resourceRequirements: [
12856
+ {
12857
+ fieldName: "labelToApply",
12858
+ resourceKind: "association_label",
12859
+ resolutionMode: "partially_queryable",
12860
+ sourceHint: "Association label typeId",
12861
+ notes: "May come from existing association labels or a label created earlier in the same plan."
12862
+ }
12863
+ ],
12864
+ createGuidanceText: "For match fields, prefer bare property names over 'objectTypeId/propertyName' prefixes in create templates."
12865
+ },
12866
+ "0-73444249": {
12867
+ resourceRequirements: [
12868
+ {
12869
+ fieldName: "labelToApply",
12870
+ resourceKind: "association_label",
12871
+ resolutionMode: "partially_queryable",
12872
+ sourceHint: "Association label typeId"
12873
+ }
12874
+ ],
12875
+ createGuidanceText: "Use an existing association label typeId for the relevant object pair."
12876
+ },
12877
+ "0-61139476": {
12878
+ resourceRequirements: [
12879
+ {
12880
+ fieldName: "labelToRemove",
12881
+ resourceKind: "association_label",
12882
+ resolutionMode: "partially_queryable",
12883
+ sourceHint: "Association label typeId"
12884
+ }
12885
+ ],
12886
+ createGuidanceText: "Use an existing association label typeId for the relevant object pair."
12887
+ },
12888
+ "0-61139484": {
12889
+ resourceRequirements: [
12890
+ {
12891
+ fieldName: "labelToUpdate",
12892
+ resourceKind: "association_label",
12893
+ resolutionMode: "partially_queryable",
12894
+ sourceHint: "Association label typeId to replace"
12895
+ },
12896
+ {
12897
+ fieldName: "labelToApply",
12898
+ resourceKind: "association_label",
12899
+ resolutionMode: "partially_queryable",
12900
+ sourceHint: "Association label typeId to apply"
12901
+ }
12902
+ ],
12903
+ createGuidanceText: "Use valid association label type IDs for both labelToUpdate and labelToApply, and ensure the from/to object pair matches the label schema."
12904
+ },
12905
+ "0-177946906": {
12906
+ resourceRequirements: [],
12907
+ createGuidanceText: "Use the enrolled record token or another valid object reference for object_to_enrich. bi_enrichment_overwrite is optional."
12908
+ },
12909
+ "0-199186210": {
12910
+ resourceRequirements: [],
12911
+ createGuidanceText: "Use a real survey identifier and a valid recipient selector in sendTo. These values are not currently queryable from synced portal metadata."
12912
+ },
12913
+ "0-40900952": {
12914
+ resourceRequirements: [],
12915
+ createGuidanceText: "Use a real messaging integration identifier in rootMicId and a valid contact token or fetched object reference in targetContact."
12916
+ },
12917
+ "1-179507819": {
12918
+ resourceRequirements: [],
12919
+ createGuidanceText: "Slack notification actions may target channel IDs, user IDs, or owner-derived recipients. Provide a message and at least one recipient target."
12920
+ },
12921
+ CUSTOM_CODE: {
12922
+ resourceRequirements: [],
12923
+ createGuidanceText: "Custom code actions should declare runtime, sourceCode, and any required secrets or input/output field contracts. Avoid embedding portal-specific endpoints or credentials in reusable examples."
12924
+ },
12925
+ WEBHOOK: {
12926
+ resourceRequirements: [],
12927
+ createGuidanceText: "Webhook actions should use a concrete HTTP method and target URL, with queryParams only when required. Sanitize any example endpoints."
12928
+ },
12929
+ "0-44475148": {
12930
+ resourceRequirements: [
12931
+ {
12932
+ fieldName: "Target Inbox",
12933
+ resourceKind: "inbox",
12934
+ resolutionMode: "not_exposed",
12935
+ sourceHint: "HubSpot conversation inbox ID"
12936
+ },
12937
+ {
12938
+ fieldName: "Conversation User",
12939
+ resourceKind: "user",
12940
+ resolutionMode: "queryable",
12941
+ sourceHint: "owners.user_id"
12942
+ }
12943
+ ],
12944
+ createGuidanceText: "Use a real inbox ID and a real HubSpot user ID. Conversation User should be a HubSpot user ID, not an owner ID."
12945
+ }
12946
+ };
12947
+
12948
+ // ../shared/pure/workflow-action-corpus-metadata.ts
12949
+ var WORKFLOW_ACTION_CORPUS_METADATA_BY_ID = {
12950
+ "0-1": {
12951
+ "exampleCount": 1754,
12952
+ "portalCount": 13,
12953
+ "workflowCount": 468,
12954
+ "fieldFrequency": [
12955
+ {
12956
+ "name": "days_of_week",
12957
+ "bucket": "rare_optional",
12958
+ "observedCount": 9,
12959
+ "totalCount": 1754
12960
+ },
12961
+ {
12962
+ "name": "delta",
12963
+ "bucket": "always_observed",
12964
+ "observedCount": 1754,
12965
+ "totalCount": 1754
12966
+ },
12967
+ {
12968
+ "name": "time_of_day",
12969
+ "bucket": "rare_optional",
12970
+ "observedCount": 135,
12971
+ "totalCount": 1754
12972
+ },
12973
+ {
12974
+ "name": "time_unit",
12975
+ "bucket": "always_observed",
12976
+ "observedCount": 1754,
12977
+ "totalCount": 1754
12978
+ },
12979
+ {
12980
+ "name": "time_zone_strategy",
12981
+ "bucket": "rare_optional",
12982
+ "observedCount": 101,
12983
+ "totalCount": 1754
12984
+ }
12985
+ ],
12986
+ "variantInventory": [
12987
+ {
12988
+ "key": "default",
12989
+ "exampleCount": 1754,
12990
+ "description": "Observed harvested variant: default."
12991
+ }
12992
+ ]
12993
+ },
12994
+ "0-3": {
12995
+ "exampleCount": 149,
12996
+ "portalCount": 7,
12997
+ "workflowCount": 134,
12998
+ "fieldFrequency": [
12999
+ {
13000
+ "name": "associations",
13001
+ "bucket": "common_optional",
13002
+ "observedCount": 147,
13003
+ "totalCount": 149
13004
+ },
13005
+ {
13006
+ "name": "body",
13007
+ "bucket": "always_observed",
13008
+ "observedCount": 149,
13009
+ "totalCount": 149
13010
+ },
13011
+ {
13012
+ "name": "due_time",
13013
+ "bucket": "rare_optional",
13014
+ "observedCount": 23,
13015
+ "totalCount": 149
13016
+ },
13017
+ {
13018
+ "name": "owner_assignment",
13019
+ "bucket": "common_optional",
13020
+ "observedCount": 138,
13021
+ "totalCount": 149
13022
+ },
13023
+ {
13024
+ "name": "priority",
13025
+ "bucket": "common_optional",
13026
+ "observedCount": 147,
13027
+ "totalCount": 149
13028
+ },
13029
+ {
13030
+ "name": "queue_id",
13031
+ "bucket": "rare_optional",
13032
+ "observedCount": 7,
13033
+ "totalCount": 149
13034
+ },
13035
+ {
13036
+ "name": "reminder_time",
13037
+ "bucket": "rare_optional",
13038
+ "observedCount": 18,
13039
+ "totalCount": 149
13040
+ },
13041
+ {
13042
+ "name": "subject",
13043
+ "bucket": "always_observed",
13044
+ "observedCount": 149,
13045
+ "totalCount": 149
13046
+ },
13047
+ {
13048
+ "name": "task_type",
13049
+ "bucket": "always_observed",
13050
+ "observedCount": 149,
13051
+ "totalCount": 149
13052
+ },
13053
+ {
13054
+ "name": "use_explicit_associations",
13055
+ "bucket": "always_observed",
13056
+ "observedCount": 149,
13057
+ "totalCount": 149
13058
+ }
13059
+ ],
13060
+ "variantInventory": [
13061
+ {
13062
+ "key": "TODO",
13063
+ "exampleCount": 133,
13064
+ "description": "Observed harvested variant: TODO."
13065
+ },
13066
+ {
13067
+ "key": "EMAIL",
13068
+ "exampleCount": 9,
13069
+ "description": "Observed harvested variant: EMAIL."
13070
+ },
13071
+ {
13072
+ "key": "CALL",
13073
+ "exampleCount": 7,
13074
+ "description": "Observed harvested variant: CALL."
13075
+ }
13076
+ ]
13077
+ },
13078
+ "0-4": {
13079
+ "exampleCount": 1869,
13080
+ "portalCount": 13,
13081
+ "workflowCount": 452,
13082
+ "fieldFrequency": [
13083
+ {
13084
+ "name": "content_id",
13085
+ "bucket": "always_observed",
13086
+ "observedCount": 1869,
13087
+ "totalCount": 1869
13088
+ }
13089
+ ],
13090
+ "variantInventory": [
13091
+ {
13092
+ "key": "default",
13093
+ "exampleCount": 1869,
13094
+ "description": "Observed harvested variant: default."
13095
+ }
13096
+ ]
13097
+ },
13098
+ "0-5": {
13099
+ "exampleCount": 4124,
13100
+ "portalCount": 13,
13101
+ "workflowCount": 1031,
13102
+ "fieldFrequency": [
13103
+ {
13104
+ "name": "association",
13105
+ "bucket": "rare_optional",
13106
+ "observedCount": 330,
13107
+ "totalCount": 4124
13108
+ },
13109
+ {
13110
+ "name": "property_name",
13111
+ "bucket": "always_observed",
13112
+ "observedCount": 4124,
13113
+ "totalCount": 4124
13114
+ },
13115
+ {
13116
+ "name": "value",
13117
+ "bucket": "always_observed",
13118
+ "observedCount": 4124,
13119
+ "totalCount": 4124
13120
+ }
13121
+ ],
13122
+ "variantInventory": [
13123
+ {
13124
+ "key": "STATIC_VALUE",
13125
+ "exampleCount": 3619,
13126
+ "description": "Uses a literal static value payload."
13127
+ },
13128
+ {
13129
+ "key": "FIELD_DATA",
13130
+ "exampleCount": 201,
13131
+ "description": "Uses output from a previous workflow action."
13132
+ },
13133
+ {
13134
+ "key": "OBJECT_PROPERTY",
13135
+ "exampleCount": 96,
13136
+ "description": "Copies a value from an enrolled-object property."
13137
+ },
13138
+ {
13139
+ "key": "FETCHED_OBJECT_PROPERTY",
13140
+ "exampleCount": 83,
13141
+ "description": "Uses a property from a fetched associated record."
13142
+ },
13143
+ {
13144
+ "key": "TIMESTAMP",
13145
+ "exampleCount": 76,
13146
+ "description": "Uses a workflow execution timestamp."
13147
+ },
13148
+ {
13149
+ "key": "STATIC_APPEND_VALUE",
13150
+ "exampleCount": 39,
13151
+ "description": "Appends a static suffix or token to an existing value."
13152
+ },
13153
+ {
13154
+ "key": "ENROLLMENT_EVENT_PROPERTY",
13155
+ "exampleCount": 8,
13156
+ "description": "Uses a property from the enrollment event payload."
13157
+ },
13158
+ {
13159
+ "key": "INCREMENT",
13160
+ "exampleCount": 2,
13161
+ "description": "Increments a numeric property."
13162
+ }
13163
+ ]
13164
+ },
13165
+ "0-8": {
13166
+ "exampleCount": 509,
13167
+ "portalCount": 9,
13168
+ "workflowCount": 248,
13169
+ "fieldFrequency": [
13170
+ {
13171
+ "name": "body",
13172
+ "bucket": "always_observed",
13173
+ "observedCount": 509,
13174
+ "totalCount": 509
13175
+ },
13176
+ {
13177
+ "name": "owner_properties",
13178
+ "bucket": "rare_optional",
13179
+ "observedCount": 44,
13180
+ "totalCount": 509
13181
+ },
13182
+ {
13183
+ "name": "subject",
13184
+ "bucket": "always_observed",
13185
+ "observedCount": 509,
13186
+ "totalCount": 509
13187
+ },
13188
+ {
13189
+ "name": "team_ids",
13190
+ "bucket": "rare_optional",
13191
+ "observedCount": 7,
13192
+ "totalCount": 509
13193
+ },
13194
+ {
13195
+ "name": "user_ids",
13196
+ "bucket": "common_optional",
13197
+ "observedCount": 466,
13198
+ "totalCount": 509
13199
+ }
13200
+ ],
13201
+ "variantInventory": [
13202
+ {
13203
+ "key": "user_recipients",
13204
+ "exampleCount": 460,
13205
+ "description": "Targets explicit HubSpot users."
13206
+ },
13207
+ {
13208
+ "key": "owner_property_recipients",
13209
+ "exampleCount": 42,
13210
+ "description": "Targets owners resolved through owner properties."
13211
+ },
13212
+ {
13213
+ "key": "team_recipients",
13214
+ "exampleCount": 7,
13215
+ "description": "Targets a team instead of explicit users."
13216
+ }
13217
+ ]
13218
+ },
13219
+ "0-9": {
13220
+ "exampleCount": 19,
13221
+ "portalCount": 4,
13222
+ "workflowCount": 13,
13223
+ "fieldFrequency": [
13224
+ {
13225
+ "name": "body",
13226
+ "bucket": "always_observed",
13227
+ "observedCount": 19,
13228
+ "totalCount": 19
13229
+ },
13230
+ {
13231
+ "name": "delivery_method",
13232
+ "bucket": "always_observed",
13233
+ "observedCount": 19,
13234
+ "totalCount": 19
13235
+ },
13236
+ {
13237
+ "name": "owner_properties",
13238
+ "bucket": "rare_optional",
13239
+ "observedCount": 4,
13240
+ "totalCount": 19
13241
+ },
13242
+ {
13243
+ "name": "subject",
13244
+ "bucket": "always_observed",
13245
+ "observedCount": 19,
13246
+ "totalCount": 19
13247
+ },
13248
+ {
13249
+ "name": "team_ids",
13250
+ "bucket": "common_optional",
13251
+ "observedCount": 6,
13252
+ "totalCount": 19
13253
+ },
13254
+ {
13255
+ "name": "user_ids",
13256
+ "bucket": "common_optional",
13257
+ "observedCount": 8,
13258
+ "totalCount": 19
13259
+ }
13260
+ ],
13261
+ "variantInventory": [
13262
+ {
13263
+ "key": "APP",
13264
+ "exampleCount": 19,
13265
+ "description": "Delivers the notification in the HubSpot app."
13266
+ }
13267
+ ]
13268
+ },
13269
+ "0-11": {
13270
+ "exampleCount": 42,
13271
+ "portalCount": 4,
13272
+ "workflowCount": 18,
13273
+ "fieldFrequency": [
13274
+ {
13275
+ "name": "overwrite_current_owner",
13276
+ "bucket": "always_observed",
13277
+ "observedCount": 42,
13278
+ "totalCount": 42
13279
+ },
13280
+ {
13281
+ "name": "target_property",
13282
+ "bucket": "always_observed",
13283
+ "observedCount": 42,
13284
+ "totalCount": 42
13285
+ },
13286
+ {
13287
+ "name": "team_ids",
13288
+ "bucket": "rare_optional",
13289
+ "observedCount": 3,
13290
+ "totalCount": 42
13291
+ },
13292
+ {
13293
+ "name": "user_ids",
13294
+ "bucket": "common_optional",
13295
+ "observedCount": 39,
13296
+ "totalCount": 42
13297
+ }
13298
+ ],
13299
+ "variantInventory": [
13300
+ {
13301
+ "key": "user_rotation",
13302
+ "exampleCount": 39,
13303
+ "description": "Rotates ownership across explicit users."
13304
+ },
13305
+ {
13306
+ "key": "team_rotation",
13307
+ "exampleCount": 3,
13308
+ "description": "Rotates ownership across teams."
13309
+ }
13310
+ ]
13311
+ },
13312
+ "0-14": {
13313
+ "exampleCount": 43,
13314
+ "portalCount": 6,
13315
+ "workflowCount": 31,
13316
+ "fieldFrequency": [
13317
+ {
13318
+ "name": "associations",
13319
+ "bucket": "common_optional",
13320
+ "observedCount": 42,
13321
+ "totalCount": 43
13322
+ },
13323
+ {
13324
+ "name": "object_type_id",
13325
+ "bucket": "always_observed",
13326
+ "observedCount": 43,
13327
+ "totalCount": 43
13328
+ },
13329
+ {
13330
+ "name": "properties",
13331
+ "bucket": "always_observed",
13332
+ "observedCount": 43,
13333
+ "totalCount": 43
13334
+ },
13335
+ {
13336
+ "name": "use_explicit_associations",
13337
+ "bucket": "always_observed",
13338
+ "observedCount": 43,
13339
+ "totalCount": 43
13340
+ }
13341
+ ],
13342
+ "variantInventory": [
13343
+ {
13344
+ "key": "STATIC_VALUE",
13345
+ "exampleCount": 18,
13346
+ "description": "Uses a literal static value payload."
13347
+ },
13348
+ {
13349
+ "key": "OBJECT_PROPERTY+STATIC_VALUE",
13350
+ "exampleCount": 12,
13351
+ "description": "Observed harvested variant: OBJECT_PROPERTY+STATIC_VALUE."
13352
+ },
13353
+ {
13354
+ "key": "OBJECT_PROPERTY+RELATIVE_DATETIME+STATIC_VALUE",
13355
+ "exampleCount": 8,
13356
+ "description": "Observed harvested variant: OBJECT_PROPERTY+RELATIVE_DATETIME+STATIC_VALUE."
13357
+ },
13358
+ {
13359
+ "key": "OBJECT_PROPERTY+STATIC_APPEND_VALUE+STATIC_VALUE",
13360
+ "exampleCount": 3,
13361
+ "description": "Observed harvested variant: OBJECT_PROPERTY+STATIC_APPEND_VALUE+STATIC_VALUE."
13362
+ },
13363
+ {
13364
+ "key": "RELATIVE_DATETIME+STATIC_VALUE",
13365
+ "exampleCount": 1,
13366
+ "description": "Observed harvested variant: RELATIVE_DATETIME+STATIC_VALUE."
13367
+ },
13368
+ {
13369
+ "key": "STATIC_APPEND_VALUE+STATIC_VALUE",
13370
+ "exampleCount": 1,
13371
+ "description": "Observed harvested variant: STATIC_APPEND_VALUE+STATIC_VALUE."
13372
+ }
13373
+ ]
13374
+ },
13375
+ "0-15": {
13376
+ "exampleCount": 61,
13377
+ "portalCount": 3,
13378
+ "workflowCount": 41,
13379
+ "fieldFrequency": [
13380
+ {
13381
+ "name": "flow_id",
13382
+ "bucket": "always_observed",
13383
+ "observedCount": 61,
13384
+ "totalCount": 61
13385
+ }
13386
+ ],
13387
+ "variantInventory": [
13388
+ {
13389
+ "key": "default",
13390
+ "exampleCount": 61,
13391
+ "description": "Observed harvested variant: default."
13392
+ }
13393
+ ]
13394
+ },
13395
+ "0-23": {
13396
+ "exampleCount": 1,
13397
+ "portalCount": 1,
13398
+ "workflowCount": 1,
13399
+ "fieldFrequency": [
13400
+ {
13401
+ "name": "email_content_id",
13402
+ "bucket": "always_observed",
13403
+ "observedCount": 1,
13404
+ "totalCount": 1
13405
+ },
13406
+ {
13407
+ "name": "recipient_emails",
13408
+ "bucket": "always_observed",
13409
+ "observedCount": 1,
13410
+ "totalCount": 1
13411
+ }
13412
+ ],
13413
+ "variantInventory": [
13414
+ {
13415
+ "key": "default",
13416
+ "exampleCount": 1,
13417
+ "description": "Observed harvested variant: default."
13418
+ }
13419
+ ]
13420
+ },
13421
+ "0-28": {
13422
+ "exampleCount": 18,
13423
+ "portalCount": 2,
13424
+ "workflowCount": 8,
13425
+ "fieldFrequency": [
13426
+ {
13427
+ "name": "delay",
13428
+ "bucket": "always_observed",
13429
+ "observedCount": 18,
13430
+ "totalCount": 18
13431
+ },
13432
+ {
13433
+ "name": "direction",
13434
+ "bucket": "always_observed",
13435
+ "observedCount": 18,
13436
+ "totalCount": 18
13437
+ }
13438
+ ],
13439
+ "variantInventory": [
13440
+ {
13441
+ "key": "AFTER",
13442
+ "exampleCount": 9,
13443
+ "description": "Schedules the delay after the reference point."
13444
+ },
13445
+ {
13446
+ "key": "BEFORE",
13447
+ "exampleCount": 9,
13448
+ "description": "Schedules the delay before the reference point."
13449
+ }
13450
+ ]
13451
+ },
13452
+ "0-29": {
13453
+ "exampleCount": 283,
13454
+ "portalCount": 4,
13455
+ "workflowCount": 181,
13456
+ "fieldFrequency": [
13457
+ {
13458
+ "name": "event_filter_branches",
13459
+ "bucket": "common_optional",
13460
+ "observedCount": 276,
13461
+ "totalCount": 283
13462
+ },
13463
+ {
13464
+ "name": "expiration_minutes",
13465
+ "bucket": "always_observed",
13466
+ "observedCount": 283,
13467
+ "totalCount": 283
13468
+ },
13469
+ {
13470
+ "name": "target_object_override",
13471
+ "bucket": "rare_optional",
13472
+ "observedCount": 2,
13473
+ "totalCount": 283
13474
+ }
13475
+ ],
13476
+ "variantInventory": [
13477
+ {
13478
+ "key": "event_filtered",
13479
+ "exampleCount": 276,
13480
+ "description": "Waits on a filtered event branch tree."
13481
+ },
13482
+ {
13483
+ "key": "timeout_only",
13484
+ "exampleCount": 7,
13485
+ "description": "Only uses the expiration timeout fields."
13486
+ }
13487
+ ]
13488
+ },
13489
+ "0-30": {
13490
+ "exampleCount": 7,
13491
+ "portalCount": 2,
13492
+ "workflowCount": 5,
13493
+ "fieldFrequency": [
13494
+ {
13495
+ "name": "audience_id",
13496
+ "bucket": "always_observed",
13497
+ "observedCount": 7,
13498
+ "totalCount": 7
13499
+ }
13500
+ ],
13501
+ "variantInventory": [
13502
+ {
13503
+ "key": "audience_membership",
13504
+ "exampleCount": 7,
13505
+ "description": "Adds or removes a record from a configured audience."
13506
+ }
13507
+ ]
13508
+ },
13509
+ "0-31": {
13510
+ "exampleCount": 336,
13511
+ "portalCount": 10,
13512
+ "workflowCount": 228,
13513
+ "fieldFrequency": [
13514
+ {
13515
+ "name": "marketableType",
13516
+ "bucket": "always_observed",
13517
+ "observedCount": 336,
13518
+ "totalCount": 336
13519
+ },
13520
+ {
13521
+ "name": "targetContact",
13522
+ "bucket": "common_optional",
13523
+ "observedCount": 335,
13524
+ "totalCount": 336
13525
+ }
13526
+ ],
13527
+ "variantInventory": [
13528
+ {
13529
+ "key": "MARKETABLE",
13530
+ "exampleCount": 215,
13531
+ "description": "Marks the contact as marketable."
13532
+ },
13533
+ {
13534
+ "key": "MARKETABLE_UNTIL_RENEWAL",
13535
+ "exampleCount": 121,
13536
+ "description": "Marks the contact as marketable until renewal."
13537
+ }
13538
+ ]
13539
+ },
13540
+ "0-33": {
13541
+ "exampleCount": 21,
13542
+ "portalCount": 2,
13543
+ "workflowCount": 12,
13544
+ "fieldFrequency": [
13545
+ {
13546
+ "name": "locale",
13547
+ "bucket": "always_observed",
13548
+ "observedCount": 21,
13549
+ "totalCount": 21
13550
+ },
13551
+ {
13552
+ "name": "template",
13553
+ "bucket": "always_observed",
13554
+ "observedCount": 21,
13555
+ "totalCount": 21
13556
+ },
13557
+ {
13558
+ "name": "variables",
13559
+ "bucket": "common_optional",
13560
+ "observedCount": 20,
13561
+ "totalCount": 21
13562
+ }
13563
+ ],
13564
+ "variantInventory": [
13565
+ {
13566
+ "key": "localized_template",
13567
+ "exampleCount": 20,
13568
+ "description": "Supplies an explicit locale for template rendering."
13569
+ },
13570
+ {
13571
+ "key": "default_locale_template",
13572
+ "exampleCount": 1,
13573
+ "description": "Relies on the default locale."
13574
+ }
13575
+ ]
13576
+ },
13577
+ "0-35": {
13578
+ "exampleCount": 240,
13579
+ "portalCount": 5,
13580
+ "workflowCount": 206,
13581
+ "fieldFrequency": [
13582
+ {
13583
+ "name": "date",
13584
+ "bucket": "always_observed",
13585
+ "observedCount": 240,
13586
+ "totalCount": 240
13587
+ },
13588
+ {
13589
+ "name": "delta",
13590
+ "bucket": "always_observed",
13591
+ "observedCount": 240,
13592
+ "totalCount": 240
13593
+ },
13594
+ {
13595
+ "name": "time_of_day",
13596
+ "bucket": "common_optional",
13597
+ "observedCount": 230,
13598
+ "totalCount": 240
13599
+ },
13600
+ {
13601
+ "name": "time_unit",
13602
+ "bucket": "always_observed",
13603
+ "observedCount": 240,
13604
+ "totalCount": 240
13605
+ }
13606
+ ],
13607
+ "variantInventory": [
13608
+ {
13609
+ "key": "STATIC_VALUE",
13610
+ "exampleCount": 227,
13611
+ "description": "Uses a literal static value payload."
13612
+ },
13613
+ {
13614
+ "key": "OBJECT_PROPERTY",
13615
+ "exampleCount": 13,
13616
+ "description": "Copies a value from an enrolled-object property."
13617
+ }
13618
+ ]
13619
+ },
13620
+ "0-169425243": {
13621
+ "exampleCount": 21,
13622
+ "portalCount": 2,
13623
+ "workflowCount": 10,
13624
+ "fieldFrequency": [
13625
+ {
13626
+ "name": "note_body",
13627
+ "bucket": "always_observed",
13628
+ "observedCount": 21,
13629
+ "totalCount": 21
13630
+ },
13631
+ {
13632
+ "name": "pin_note",
13633
+ "bucket": "always_observed",
13634
+ "observedCount": 21,
13635
+ "totalCount": 21
13636
+ }
13637
+ ],
13638
+ "variantInventory": [
13639
+ {
13640
+ "key": "default",
13641
+ "exampleCount": 21,
13642
+ "description": "Observed harvested variant: default."
13643
+ }
13644
+ ]
13645
+ },
13646
+ "0-177946906": {
13647
+ "exampleCount": 2,
13648
+ "portalCount": 1,
13649
+ "workflowCount": 1,
13650
+ "fieldFrequency": [
13651
+ {
13652
+ "name": "bi_enrichment_overwrite",
13653
+ "bucket": "always_observed",
13654
+ "observedCount": 2,
13655
+ "totalCount": 2
13656
+ },
13657
+ {
13658
+ "name": "object_to_enrich",
13659
+ "bucket": "always_observed",
13660
+ "observedCount": 2,
13661
+ "totalCount": 2
13662
+ }
13663
+ ],
13664
+ "variantInventory": [
13665
+ {
13666
+ "key": "default",
13667
+ "exampleCount": 2,
13668
+ "description": "Observed harvested variant: default."
13669
+ }
13670
+ ]
13671
+ },
13672
+ "0-18224765": {
13673
+ "exampleCount": 5,
13674
+ "portalCount": 3,
13675
+ "workflowCount": 5,
13676
+ "fieldFrequency": [],
13677
+ "variantInventory": [
13678
+ {
13679
+ "key": "default",
13680
+ "exampleCount": 5,
13681
+ "description": "Observed harvested variant: default."
13682
+ }
13683
+ ]
13684
+ },
13685
+ "0-195318603": {
13686
+ "exampleCount": 0,
13687
+ "portalCount": 0,
13688
+ "workflowCount": 0,
13689
+ "fieldFrequency": [],
13690
+ "variantInventory": []
13691
+ },
13692
+ "0-199186210": {
13693
+ "exampleCount": 4,
13694
+ "portalCount": 1,
13695
+ "workflowCount": 1,
13696
+ "fieldFrequency": [
13697
+ {
13698
+ "name": "sendTo",
13699
+ "bucket": "always_observed",
13700
+ "observedCount": 4,
13701
+ "totalCount": 4
13702
+ },
13703
+ {
13704
+ "name": "survey",
13705
+ "bucket": "always_observed",
13706
+ "observedCount": 4,
13707
+ "totalCount": 4
13708
+ }
13709
+ ],
13710
+ "variantInventory": [
13711
+ {
13712
+ "key": "default",
13713
+ "exampleCount": 4,
13714
+ "description": "Observed harvested variant: default."
13715
+ }
13716
+ ]
13717
+ },
13718
+ "0-219160146": {
13719
+ "exampleCount": 0,
13720
+ "portalCount": 0,
13721
+ "workflowCount": 0,
13722
+ "fieldFrequency": [],
13723
+ "variantInventory": []
13724
+ },
13725
+ "0-219161394": {
13726
+ "exampleCount": 0,
13727
+ "portalCount": 0,
13728
+ "workflowCount": 0,
13729
+ "fieldFrequency": [],
13730
+ "variantInventory": []
13731
+ },
13732
+ "0-225935194": {
13733
+ "exampleCount": 2,
13734
+ "portalCount": 2,
13735
+ "workflowCount": 2,
13736
+ "fieldFrequency": [
13737
+ {
13738
+ "name": "defaultCountryCodeMode",
13739
+ "bucket": "always_observed",
13740
+ "observedCount": 2,
13741
+ "totalCount": 2
13742
+ },
13743
+ {
13744
+ "name": "propertyValue",
13745
+ "bucket": "always_observed",
13746
+ "observedCount": 2,
13747
+ "totalCount": 2
13748
+ },
13749
+ {
13750
+ "name": "staticDefaultCountryCode",
13751
+ "bucket": "always_observed",
13752
+ "observedCount": 2,
13753
+ "totalCount": 2
13754
+ }
13755
+ ],
13756
+ "variantInventory": [
13757
+ {
13758
+ "key": "static_default_country_code",
13759
+ "exampleCount": 2,
13760
+ "description": "Uses a static country code when validating phone numbers."
13761
+ }
13762
+ ]
13763
+ },
13764
+ "0-40900952": {
13765
+ "exampleCount": 84,
13766
+ "portalCount": 1,
13767
+ "workflowCount": 31,
13768
+ "fieldFrequency": [
13769
+ {
13770
+ "name": "rootMicId",
13771
+ "bucket": "common_optional",
13772
+ "observedCount": 82,
13773
+ "totalCount": 84
13774
+ },
13775
+ {
13776
+ "name": "targetContact",
13777
+ "bucket": "always_observed",
13778
+ "observedCount": 84,
13779
+ "totalCount": 84
13780
+ }
13781
+ ],
13782
+ "variantInventory": [
13783
+ {
13784
+ "key": "default",
13785
+ "exampleCount": 84,
13786
+ "description": "Observed harvested variant: default."
13787
+ }
13788
+ ]
13789
+ },
13790
+ "0-43347357": {
13791
+ "exampleCount": 161,
13792
+ "portalCount": 6,
13793
+ "workflowCount": 124,
13794
+ "fieldFrequency": [
13795
+ {
13796
+ "name": "channel",
13797
+ "bucket": "always_observed",
13798
+ "observedCount": 161,
13799
+ "totalCount": 161
13800
+ },
13801
+ {
13802
+ "name": "legalBasis",
13803
+ "bucket": "always_observed",
13804
+ "observedCount": 161,
13805
+ "totalCount": 161
13806
+ },
13807
+ {
13808
+ "name": "legalBasisExplanation",
13809
+ "bucket": "common_optional",
13810
+ "observedCount": 159,
13811
+ "totalCount": 161
13812
+ },
13813
+ {
13814
+ "name": "optState",
13815
+ "bucket": "always_observed",
13816
+ "observedCount": 161,
13817
+ "totalCount": 161
13818
+ },
13819
+ {
13820
+ "name": "subscriptionId",
13821
+ "bucket": "always_observed",
13822
+ "observedCount": 161,
13823
+ "totalCount": 161
13824
+ },
13825
+ {
13826
+ "name": "targetContact",
13827
+ "bucket": "common_optional",
13828
+ "observedCount": 160,
13829
+ "totalCount": 161
13830
+ }
13831
+ ],
13832
+ "variantInventory": [
13833
+ {
13834
+ "key": "EMAIL:OPT_IN",
13835
+ "exampleCount": 141,
13836
+ "description": "Observed harvested variant: EMAIL:OPT_IN."
13837
+ },
13838
+ {
13839
+ "key": "SMS:OPT_IN",
13840
+ "exampleCount": 13,
13841
+ "description": "Observed harvested variant: SMS:OPT_IN."
13842
+ },
13843
+ {
13844
+ "key": "EMAIL:OPT_OUT",
13845
+ "exampleCount": 6,
13846
+ "description": "Observed harvested variant: EMAIL:OPT_OUT."
13847
+ },
13848
+ {
13849
+ "key": "SMS:OPT_OUT",
13850
+ "exampleCount": 1,
13851
+ "description": "Observed harvested variant: SMS:OPT_OUT."
13852
+ }
13853
+ ]
13854
+ },
13855
+ "0-44475148": {
13856
+ "exampleCount": 0,
13857
+ "portalCount": 0,
13858
+ "workflowCount": 0,
13859
+ "fieldFrequency": [],
13860
+ "variantInventory": []
13861
+ },
13862
+ "0-46510720": {
13863
+ "exampleCount": 7,
13864
+ "portalCount": 1,
13865
+ "workflowCount": 7,
13866
+ "fieldFrequency": [
13867
+ {
13868
+ "name": "contactOwnerProperty",
13869
+ "bucket": "always_observed",
13870
+ "observedCount": 7,
13871
+ "totalCount": 7
13872
+ },
13873
+ {
13874
+ "name": "senderType",
13875
+ "bucket": "always_observed",
13876
+ "observedCount": 7,
13877
+ "totalCount": 7
13878
+ },
13879
+ {
13880
+ "name": "sequenceId",
13881
+ "bucket": "always_observed",
13882
+ "observedCount": 7,
13883
+ "totalCount": 7
13884
+ },
13885
+ {
13886
+ "name": "shouldUseContactTimeZone",
13887
+ "bucket": "common_optional",
13888
+ "observedCount": 6,
13889
+ "totalCount": 7
13890
+ }
13891
+ ],
13892
+ "variantInventory": [
13893
+ {
13894
+ "key": "CONTACT_OWNER",
13895
+ "exampleCount": 7,
13896
+ "description": "Uses the enrolled record owner as the sender."
13897
+ }
13898
+ ]
13899
+ },
13900
+ "0-4702372": {
13901
+ "exampleCount": 4,
13902
+ "portalCount": 2,
13903
+ "workflowCount": 4,
13904
+ "fieldFrequency": [],
13905
+ "variantInventory": [
13906
+ {
13907
+ "key": "default",
13908
+ "exampleCount": 4,
13909
+ "description": "Observed harvested variant: default."
13910
+ }
13911
+ ]
13912
+ },
13913
+ "0-61139476": {
13914
+ "exampleCount": 2,
13915
+ "portalCount": 1,
13916
+ "workflowCount": 1,
13917
+ "fieldFrequency": [
13918
+ {
13919
+ "name": "fromObjectType",
13920
+ "bucket": "always_observed",
13921
+ "observedCount": 2,
13922
+ "totalCount": 2
13923
+ },
13924
+ {
13925
+ "name": "fullyDissociate",
13926
+ "bucket": "always_observed",
13927
+ "observedCount": 2,
13928
+ "totalCount": 2
13929
+ },
13930
+ {
13931
+ "name": "labelToRemove",
13932
+ "bucket": "always_observed",
13933
+ "observedCount": 2,
13934
+ "totalCount": 2
13935
+ },
13936
+ {
13937
+ "name": "toObjectType",
13938
+ "bucket": "always_observed",
13939
+ "observedCount": 2,
13940
+ "totalCount": 2
13941
+ }
13942
+ ],
13943
+ "variantInventory": [
13944
+ {
13945
+ "key": "default",
13946
+ "exampleCount": 2,
13947
+ "description": "Observed harvested variant: default."
13948
+ }
13949
+ ]
13950
+ },
13951
+ "0-61139484": {
13952
+ "exampleCount": 7,
13953
+ "portalCount": 1,
13954
+ "workflowCount": 2,
13955
+ "fieldFrequency": [
13956
+ {
13957
+ "name": "deleteExistingLabel",
13958
+ "bucket": "always_observed",
13959
+ "observedCount": 7,
13960
+ "totalCount": 7
13961
+ },
13962
+ {
13963
+ "name": "fromObjectType",
13964
+ "bucket": "always_observed",
13965
+ "observedCount": 7,
13966
+ "totalCount": 7
13967
+ },
13968
+ {
13969
+ "name": "labelToApply",
13970
+ "bucket": "always_observed",
13971
+ "observedCount": 7,
13972
+ "totalCount": 7
13973
+ },
13974
+ {
13975
+ "name": "labelToUpdate",
13976
+ "bucket": "always_observed",
13977
+ "observedCount": 7,
13978
+ "totalCount": 7
13979
+ },
13980
+ {
13981
+ "name": "toObjectType",
13982
+ "bucket": "always_observed",
13983
+ "observedCount": 7,
13984
+ "totalCount": 7
13985
+ }
13986
+ ],
13987
+ "variantInventory": [
13988
+ {
13989
+ "key": "replace_existing",
13990
+ "exampleCount": 7,
13991
+ "description": "Deletes an existing label before applying the new label."
13992
+ }
13993
+ ]
13994
+ },
13995
+ "0-63189541": {
13996
+ "exampleCount": 330,
13997
+ "portalCount": 3,
13998
+ "workflowCount": 207,
13999
+ "fieldFrequency": [
14000
+ {
14001
+ "name": "associatedObjectPropertyNameToMatch",
14002
+ "bucket": "common_optional",
14003
+ "observedCount": 329,
14004
+ "totalCount": 330
14005
+ },
14006
+ {
14007
+ "name": "createAssociationOnly",
14008
+ "bucket": "always_observed",
14009
+ "observedCount": 330,
14010
+ "totalCount": 330
14011
+ },
14012
+ {
14013
+ "name": "enrolledObjectPropertyNameToMatch",
14014
+ "bucket": "always_observed",
14015
+ "observedCount": 330,
14016
+ "totalCount": 330
14017
+ },
14018
+ {
14019
+ "name": "fromObjectType",
14020
+ "bucket": "always_observed",
14021
+ "observedCount": 330,
14022
+ "totalCount": 330
14023
+ },
14024
+ {
14025
+ "name": "labelToApply",
14026
+ "bucket": "common_optional",
14027
+ "observedCount": 219,
14028
+ "totalCount": 330
14029
+ },
14030
+ {
14031
+ "name": "matchBy",
14032
+ "bucket": "always_observed",
14033
+ "observedCount": 330,
14034
+ "totalCount": 330
14035
+ },
14036
+ {
14037
+ "name": "toObjectType",
14038
+ "bucket": "always_observed",
14039
+ "observedCount": 330,
14040
+ "totalCount": 330
14041
+ }
14042
+ ],
14043
+ "variantInventory": [
14044
+ {
14045
+ "key": "fromAndToObjects",
14046
+ "exampleCount": 330,
14047
+ "description": "Observed harvested variant: fromAndToObjects."
14048
+ }
14049
+ ]
14050
+ },
14051
+ "0-63809083": {
14052
+ "exampleCount": 442,
14053
+ "portalCount": 8,
14054
+ "workflowCount": 279,
14055
+ "fieldFrequency": [
14056
+ {
14057
+ "name": "listId",
14058
+ "bucket": "common_optional",
14059
+ "observedCount": 441,
14060
+ "totalCount": 442
14061
+ }
14062
+ ],
14063
+ "variantInventory": [
14064
+ {
14065
+ "key": "default",
14066
+ "exampleCount": 442,
14067
+ "description": "Observed harvested variant: default."
14068
+ }
14069
+ ]
14070
+ },
14071
+ "0-63863438": {
14072
+ "exampleCount": 18,
14073
+ "portalCount": 3,
14074
+ "workflowCount": 11,
14075
+ "fieldFrequency": [
14076
+ {
14077
+ "name": "listId",
14078
+ "bucket": "always_observed",
14079
+ "observedCount": 18,
14080
+ "totalCount": 18
14081
+ }
14082
+ ],
14083
+ "variantInventory": [
14084
+ {
14085
+ "key": "default",
14086
+ "exampleCount": 18,
14087
+ "description": "Observed harvested variant: default."
14088
+ }
14089
+ ]
14090
+ },
14091
+ "0-73444249": {
14092
+ "exampleCount": 16,
14093
+ "portalCount": 3,
14094
+ "workflowCount": 10,
14095
+ "fieldFrequency": [
14096
+ {
14097
+ "name": "applyLabelToAllAssociatedObjects",
14098
+ "bucket": "always_observed",
14099
+ "observedCount": 16,
14100
+ "totalCount": 16
14101
+ },
14102
+ {
14103
+ "name": "associatedObjectPropertyName",
14104
+ "bucket": "common_optional",
14105
+ "observedCount": 7,
14106
+ "totalCount": 16
14107
+ },
14108
+ {
14109
+ "name": "associatedObjectPropertyNameToMatch",
14110
+ "bucket": "common_optional",
14111
+ "observedCount": 5,
14112
+ "totalCount": 16
14113
+ },
14114
+ {
14115
+ "name": "associatedObjectPropertyOperator",
14116
+ "bucket": "common_optional",
14117
+ "observedCount": 7,
14118
+ "totalCount": 16
14119
+ },
14120
+ {
14121
+ "name": "associatedObjectPropertyValue",
14122
+ "bucket": "common_optional",
14123
+ "observedCount": 7,
14124
+ "totalCount": 16
14125
+ },
14126
+ {
14127
+ "name": "enrolledObjectPropertyNameToMatch",
14128
+ "bucket": "common_optional",
14129
+ "observedCount": 5,
14130
+ "totalCount": 16
14131
+ },
14132
+ {
14133
+ "name": "fromObjectType",
14134
+ "bucket": "always_observed",
14135
+ "observedCount": 16,
14136
+ "totalCount": 16
14137
+ },
14138
+ {
14139
+ "name": "labelToApply",
14140
+ "bucket": "always_observed",
14141
+ "observedCount": 16,
14142
+ "totalCount": 16
14143
+ },
14144
+ {
14145
+ "name": "matchBy",
14146
+ "bucket": "common_optional",
14147
+ "observedCount": 12,
14148
+ "totalCount": 16
14149
+ },
14150
+ {
14151
+ "name": "toObjectType",
14152
+ "bucket": "always_observed",
14153
+ "observedCount": 16,
14154
+ "totalCount": 16
14155
+ }
14156
+ ],
14157
+ "variantInventory": [
12296
14158
  {
12297
- fieldName: "user_ids",
12298
- resourceKind: "user",
12299
- resolutionMode: "queryable",
12300
- sourceHint: "owners.user_id",
12301
- notes: "Use HubSpot user IDs from the owners table user_id column, not owner_id."
14159
+ "key": "property_match",
14160
+ "exampleCount": 12,
14161
+ "description": "Matches records using property-based association criteria."
14162
+ },
14163
+ {
14164
+ "key": "all_associated",
14165
+ "exampleCount": 4,
14166
+ "description": "Applies the label to all associated records."
12302
14167
  }
12303
- ],
12304
- createGuidanceText: "Use minimal notification payloads and omit owner_properties unless you have a specific reason to target owners dynamically."
14168
+ ]
12305
14169
  },
12306
- "0-9": {
12307
- resourceRequirements: [
14170
+ "1-179507819": {
14171
+ "exampleCount": 20,
14172
+ "portalCount": 1,
14173
+ "workflowCount": 11,
14174
+ "fieldFrequency": [
12308
14175
  {
12309
- fieldName: "user_ids",
12310
- resourceKind: "user",
12311
- resolutionMode: "queryable",
12312
- sourceHint: "owners.user_id",
12313
- notes: "Use HubSpot user IDs from the owners table user_id column, not owner_id."
14176
+ "name": "message",
14177
+ "bucket": "always_observed",
14178
+ "observedCount": 20,
14179
+ "totalCount": 20
14180
+ },
14181
+ {
14182
+ "name": "notifyOwner",
14183
+ "bucket": "common_optional",
14184
+ "observedCount": 17,
14185
+ "totalCount": 20
14186
+ },
14187
+ {
14188
+ "name": "slackChannelIds",
14189
+ "bucket": "common_optional",
14190
+ "observedCount": 12,
14191
+ "totalCount": 20
14192
+ },
14193
+ {
14194
+ "name": "slackUserIds",
14195
+ "bucket": "common_optional",
14196
+ "observedCount": 10,
14197
+ "totalCount": 20
12314
14198
  }
12315
14199
  ],
12316
- createGuidanceText: "Use minimal notification payloads and omit owner_properties unless you have a specific reason to target owners dynamically."
12317
- },
12318
- "0-11": {
12319
- resourceRequirements: [
14200
+ "variantInventory": [
12320
14201
  {
12321
- fieldName: "user_ids",
12322
- resourceKind: "user",
12323
- resolutionMode: "queryable",
12324
- sourceHint: "owners.user_id",
12325
- notes: "CONTACT_FLOW requires target_property and overwrite_current_owner in addition to user_ids."
14202
+ "key": "channel_delivery",
14203
+ "exampleCount": 11,
14204
+ "description": "Sends the Slack notification to channels."
14205
+ },
14206
+ {
14207
+ "key": "owner_delivery",
14208
+ "exampleCount": 4,
14209
+ "description": "Sends the Slack notification to resolved record owners."
14210
+ },
14211
+ {
14212
+ "key": "user_delivery",
14213
+ "exampleCount": 4,
14214
+ "description": "Sends the Slack notification to specific Slack users."
14215
+ },
14216
+ {
14217
+ "key": "message_only",
14218
+ "exampleCount": 1,
14219
+ "description": "Carries only the message payload in harvested examples."
12326
14220
  }
12327
- ],
12328
- createGuidanceText: "On CONTACT_FLOW, always send user_ids, target_property, and overwrite_current_owner together. Use owners.user_id values, never owner_id."
14221
+ ]
12329
14222
  },
12330
- "0-15": {
12331
- resourceRequirements: [
14223
+ "AB_TEST_BRANCH": {
14224
+ "exampleCount": 41,
14225
+ "portalCount": 2,
14226
+ "workflowCount": 24,
14227
+ "fieldFrequency": [
12332
14228
  {
12333
- fieldName: "flow_id",
12334
- resourceKind: "workflow",
12335
- resolutionMode: "not_exposed",
12336
- sourceHint: "HubSpot workflow ID",
12337
- notes: "Target workflow should match the current workflow type."
14229
+ "name": "testBranches",
14230
+ "bucket": "always_observed",
14231
+ "observedCount": 41,
14232
+ "totalCount": 41
12338
14233
  }
12339
14234
  ],
12340
- createGuidanceText: "Use a known target workflow ID of the same workflow type. Do not leave flow_id empty."
12341
- },
12342
- "0-35": {
12343
- resourceRequirements: [],
12344
- createGuidanceText: "When using STATIC_VALUE dates, send a future Unix-milliseconds timestamp. time_of_day is required for reliable creation. If the delay action continues to another step, route it into a STATIC_BRANCH that reads inputValue { actionId: '<delay_action_id>', dataKey: 'hs_delay_status', type: 'FIELD_DATA' } and continues from the DATE_MET_AS_PLANNED branch instead of connecting directly to the next business action."
12345
- },
12346
- "0-14": {
12347
- resourceRequirements: [],
12348
- createGuidanceText: "Prefer standard object types and explicit STATIC_VALUE property payloads for creation examples. Avoid portal-specific custom object IDs in default templates."
12349
- },
12350
- "0-63809083": {
12351
- resourceRequirements: [
14235
+ "variantInventory": [
12352
14236
  {
12353
- fieldName: "listId",
12354
- resourceKind: "list",
12355
- resolutionMode: "queryable",
12356
- sourceHint: "lists.list_id"
14237
+ "key": "10_branches",
14238
+ "exampleCount": 9,
14239
+ "description": "Observed harvested variant: 10_branches."
14240
+ },
14241
+ {
14242
+ "key": "6_branches",
14243
+ "exampleCount": 7,
14244
+ "description": "Observed harvested variant: 6_branches."
14245
+ },
14246
+ {
14247
+ "key": "2_branches",
14248
+ "exampleCount": 6,
14249
+ "description": "Two weighted branch targets."
14250
+ },
14251
+ {
14252
+ "key": "4_branches",
14253
+ "exampleCount": 6,
14254
+ "description": "Observed harvested variant: 4_branches."
14255
+ },
14256
+ {
14257
+ "key": "5_branches",
14258
+ "exampleCount": 5,
14259
+ "description": "Observed harvested variant: 5_branches."
14260
+ },
14261
+ {
14262
+ "key": "9_branches",
14263
+ "exampleCount": 3,
14264
+ "description": "Observed harvested variant: 9_branches."
14265
+ },
14266
+ {
14267
+ "key": "7_branches",
14268
+ "exampleCount": 2,
14269
+ "description": "Observed harvested variant: 7_branches."
14270
+ },
14271
+ {
14272
+ "key": "1_branches",
14273
+ "exampleCount": 1,
14274
+ "description": "Single weighted branch target."
12357
14275
  }
12358
- ],
12359
- createGuidanceText: "Resolve listId from the lists table before creating the workflow."
14276
+ ]
12360
14277
  },
12361
- "0-63863438": {
12362
- resourceRequirements: [
14278
+ "CUSTOM_CODE": {
14279
+ "exampleCount": 682,
14280
+ "portalCount": 7,
14281
+ "workflowCount": 222,
14282
+ "fieldFrequency": [
12363
14283
  {
12364
- fieldName: "listId",
12365
- resourceKind: "list",
12366
- resolutionMode: "queryable",
12367
- sourceHint: "lists.list_id"
14284
+ "name": "inputFields",
14285
+ "bucket": "always_observed",
14286
+ "observedCount": 682,
14287
+ "totalCount": 682
14288
+ },
14289
+ {
14290
+ "name": "outputFields",
14291
+ "bucket": "always_observed",
14292
+ "observedCount": 682,
14293
+ "totalCount": 682
14294
+ },
14295
+ {
14296
+ "name": "runtime",
14297
+ "bucket": "always_observed",
14298
+ "observedCount": 682,
14299
+ "totalCount": 682
14300
+ },
14301
+ {
14302
+ "name": "secretNames",
14303
+ "bucket": "always_observed",
14304
+ "observedCount": 682,
14305
+ "totalCount": 682
14306
+ },
14307
+ {
14308
+ "name": "sourceCode",
14309
+ "bucket": "always_observed",
14310
+ "observedCount": 682,
14311
+ "totalCount": 682
12368
14312
  }
12369
14313
  ],
12370
- createGuidanceText: "Resolve listId from the lists table before creating the workflow."
12371
- },
12372
- "0-43347357": {
12373
- resourceRequirements: [
14314
+ "variantInventory": [
12374
14315
  {
12375
- fieldName: "subscriptionId",
12376
- resourceKind: "subscription_definition",
12377
- resolutionMode: "not_exposed",
12378
- sourceHint: "HubSpot communication subscription definition ID"
14316
+ "key": "inputs:OBJECT_PROPERTY|outputs:STRING|secrets:yes",
14317
+ "exampleCount": 74,
14318
+ "description": "Observed harvested variant: inputs:OBJECT_PROPERTY|outputs:STRING|secrets:yes."
14319
+ },
14320
+ {
14321
+ "key": "inputs:FETCHED_OBJECT_PROPERTY+OBJECT_PROPERTY|outputs:ENUMERATION+STRING|secrets:yes",
14322
+ "exampleCount": 73,
14323
+ "description": "Observed harvested variant: inputs:FETCHED_OBJECT_PROPERTY+OBJECT_PROPERTY|outputs:ENUMERATION+STRING|secrets:yes."
14324
+ },
14325
+ {
14326
+ "key": "inputs:FETCHED_OBJECT_PROPERTY+OBJECT_PROPERTY|outputs:BOOLEAN|secrets:no",
14327
+ "exampleCount": 67,
14328
+ "description": "Observed harvested variant: inputs:FETCHED_OBJECT_PROPERTY+OBJECT_PROPERTY|outputs:BOOLEAN|secrets:no."
14329
+ },
14330
+ {
14331
+ "key": "inputs:FETCHED_OBJECT_PROPERTY+OBJECT_PROPERTY|outputs:NUMBER+STRING|secrets:no",
14332
+ "exampleCount": 52,
14333
+ "description": "Observed harvested variant: inputs:FETCHED_OBJECT_PROPERTY+OBJECT_PROPERTY|outputs:NUMBER+STRING|secrets:no."
14334
+ },
14335
+ {
14336
+ "key": "inputs:FETCHED_OBJECT_PROPERTY+OBJECT_PROPERTY|outputs:none|secrets:yes",
14337
+ "exampleCount": 33,
14338
+ "description": "Observed harvested variant: inputs:FETCHED_OBJECT_PROPERTY+OBJECT_PROPERTY|outputs:none|secrets:yes."
14339
+ },
14340
+ {
14341
+ "key": "inputs:OBJECT_PROPERTY|outputs:STRING|secrets:no",
14342
+ "exampleCount": 33,
14343
+ "description": "Observed harvested variant: inputs:OBJECT_PROPERTY|outputs:STRING|secrets:no."
14344
+ },
14345
+ {
14346
+ "key": "inputs:OBJECT_PROPERTY|outputs:none|secrets:yes",
14347
+ "exampleCount": 24,
14348
+ "description": "Observed harvested variant: inputs:OBJECT_PROPERTY|outputs:none|secrets:yes."
14349
+ },
14350
+ {
14351
+ "key": "inputs:OBJECT_PROPERTY|outputs:NUMBER+STRING|secrets:yes",
14352
+ "exampleCount": 22,
14353
+ "description": "Observed harvested variant: inputs:OBJECT_PROPERTY|outputs:NUMBER+STRING|secrets:yes."
12379
14354
  }
12380
- ],
12381
- createGuidanceText: "Use a real communication subscription definition ID. targetContact can often be '{{ enrolled_object }}' for contact workflows."
14355
+ ]
12382
14356
  },
12383
- "0-46510720": {
12384
- resourceRequirements: [
14357
+ "LIST_BRANCH": {
14358
+ "exampleCount": 1724,
14359
+ "portalCount": 12,
14360
+ "workflowCount": 670,
14361
+ "fieldFrequency": [
12385
14362
  {
12386
- fieldName: "sequenceId",
12387
- resourceKind: "sequence",
12388
- resolutionMode: "not_exposed",
12389
- sourceHint: "HubSpot sequence ID"
14363
+ "name": "defaultBranch",
14364
+ "bucket": "always_observed",
14365
+ "observedCount": 1724,
14366
+ "totalCount": 1724
12390
14367
  },
12391
14368
  {
12392
- fieldName: "userId",
12393
- resourceKind: "user",
12394
- resolutionMode: "queryable",
12395
- sourceHint: "owners.user_id",
12396
- notes: "Only needed when senderType is SPECIFIC_USER."
14369
+ "name": "defaultBranchName",
14370
+ "bucket": "always_observed",
14371
+ "observedCount": 1724,
14372
+ "totalCount": 1724
14373
+ },
14374
+ {
14375
+ "name": "listBranches",
14376
+ "bucket": "always_observed",
14377
+ "observedCount": 1724,
14378
+ "totalCount": 1724
12397
14379
  }
12398
14380
  ],
12399
- createGuidanceText: "Use a real sequenceId. Prefer CONTACT_OWNER plus contactOwnerProperty for generic templates, or SPECIFIC_USER plus a valid owners.user_id."
12400
- },
12401
- "0-63189541": {
12402
- resourceRequirements: [
14381
+ "variantInventory": [
12403
14382
  {
12404
- fieldName: "labelToApply",
12405
- resourceKind: "association_label",
12406
- resolutionMode: "partially_queryable",
12407
- sourceHint: "Association label typeId",
12408
- notes: "May come from existing association labels or a label created earlier in the same plan."
14383
+ "key": "AND+ASSOCIATION+OR+PROPERTY",
14384
+ "exampleCount": 703,
14385
+ "description": "Observed harvested variant: AND+ASSOCIATION+OR+PROPERTY."
14386
+ },
14387
+ {
14388
+ "key": "AND+OR+PROPERTY",
14389
+ "exampleCount": 663,
14390
+ "description": "Observed harvested variant: AND+OR+PROPERTY."
14391
+ },
14392
+ {
14393
+ "key": "AND+IN_LIST+OR+PROPERTY",
14394
+ "exampleCount": 67,
14395
+ "description": "Observed harvested variant: AND+IN_LIST+OR+PROPERTY."
14396
+ },
14397
+ {
14398
+ "key": "AND+IN_LIST+OR",
14399
+ "exampleCount": 59,
14400
+ "description": "Observed harvested variant: AND+IN_LIST+OR."
14401
+ },
14402
+ {
14403
+ "key": "AND+ASSOCIATION+EMAIL_EVENT+FORM_SUBMISSION_ON_PAGE+OR+PROPERTY",
14404
+ "exampleCount": 58,
14405
+ "description": "Observed harvested variant: AND+ASSOCIATION+EMAIL_EVENT+FORM_SUBMISSION_ON_PAGE+OR+PROPERTY."
14406
+ },
14407
+ {
14408
+ "key": "AND+EMAIL_EVENT+OR",
14409
+ "exampleCount": 43,
14410
+ "description": "Observed harvested variant: AND+EMAIL_EVENT+OR."
14411
+ },
14412
+ {
14413
+ "key": "AND+ASSOCIATION+FORM_SUBMISSION_ON_PAGE+OR+PROPERTY",
14414
+ "exampleCount": 36,
14415
+ "description": "Observed harvested variant: AND+ASSOCIATION+FORM_SUBMISSION_ON_PAGE+OR+PROPERTY."
14416
+ },
14417
+ {
14418
+ "key": "AND+ASSOCIATION+FORM_SUBMISSION+OR+PROPERTY",
14419
+ "exampleCount": 29,
14420
+ "description": "Observed harvested variant: AND+ASSOCIATION+FORM_SUBMISSION+OR+PROPERTY."
12409
14421
  }
12410
- ],
12411
- createGuidanceText: "For match fields, prefer bare property names over 'objectTypeId/propertyName' prefixes in create templates."
14422
+ ]
12412
14423
  },
12413
- "0-73444249": {
12414
- resourceRequirements: [
14424
+ "STATIC_BRANCH": {
14425
+ "exampleCount": 721,
14426
+ "portalCount": 10,
14427
+ "workflowCount": 338,
14428
+ "fieldFrequency": [
12415
14429
  {
12416
- fieldName: "labelToApply",
12417
- resourceKind: "association_label",
12418
- resolutionMode: "partially_queryable",
12419
- sourceHint: "Association label typeId"
14430
+ "name": "defaultBranch",
14431
+ "bucket": "always_observed",
14432
+ "observedCount": 721,
14433
+ "totalCount": 721
14434
+ },
14435
+ {
14436
+ "name": "defaultBranchName",
14437
+ "bucket": "always_observed",
14438
+ "observedCount": 721,
14439
+ "totalCount": 721
14440
+ },
14441
+ {
14442
+ "name": "inputValue",
14443
+ "bucket": "always_observed",
14444
+ "observedCount": 721,
14445
+ "totalCount": 721
14446
+ },
14447
+ {
14448
+ "name": "staticBranches",
14449
+ "bucket": "always_observed",
14450
+ "observedCount": 721,
14451
+ "totalCount": 721
12420
14452
  }
12421
14453
  ],
12422
- createGuidanceText: "Use an existing association label typeId for the relevant object pair."
12423
- },
12424
- "0-61139476": {
12425
- resourceRequirements: [
14454
+ "variantInventory": [
12426
14455
  {
12427
- fieldName: "labelToRemove",
12428
- resourceKind: "association_label",
12429
- resolutionMode: "partially_queryable",
12430
- sourceHint: "Association label typeId"
14456
+ "key": "FIELD_DATA",
14457
+ "exampleCount": 493,
14458
+ "description": "Uses output from a previous workflow action."
14459
+ },
14460
+ {
14461
+ "key": "OBJECT_PROPERTY",
14462
+ "exampleCount": 225,
14463
+ "description": "Copies a value from an enrolled-object property."
14464
+ },
14465
+ {
14466
+ "key": "FETCHED_OBJECT_PROPERTY",
14467
+ "exampleCount": 3,
14468
+ "description": "Uses a property from a fetched associated record."
12431
14469
  }
12432
- ],
12433
- createGuidanceText: "Use an existing association label typeId for the relevant object pair."
14470
+ ]
12434
14471
  },
12435
- "0-44475148": {
12436
- resourceRequirements: [
14472
+ "WEBHOOK": {
14473
+ "exampleCount": 2,
14474
+ "portalCount": 2,
14475
+ "workflowCount": 2,
14476
+ "fieldFrequency": [
12437
14477
  {
12438
- fieldName: "Target Inbox",
12439
- resourceKind: "inbox",
12440
- resolutionMode: "not_exposed",
12441
- sourceHint: "HubSpot conversation inbox ID"
14478
+ "name": "method",
14479
+ "bucket": "always_observed",
14480
+ "observedCount": 2,
14481
+ "totalCount": 2
12442
14482
  },
12443
14483
  {
12444
- fieldName: "Conversation User",
12445
- resourceKind: "user",
12446
- resolutionMode: "queryable",
12447
- sourceHint: "owners.user_id"
14484
+ "name": "queryParams",
14485
+ "bucket": "always_observed",
14486
+ "observedCount": 2,
14487
+ "totalCount": 2
14488
+ },
14489
+ {
14490
+ "name": "webhookUrl",
14491
+ "bucket": "always_observed",
14492
+ "observedCount": 2,
14493
+ "totalCount": 2
12448
14494
  }
12449
14495
  ],
12450
- createGuidanceText: "Use a real inbox ID and a real HubSpot user ID. Conversation User should be a HubSpot user ID, not an owner ID."
14496
+ "variantInventory": [
14497
+ {
14498
+ "key": "POST",
14499
+ "exampleCount": 2,
14500
+ "description": "Observed harvested variant: POST."
14501
+ }
14502
+ ]
12451
14503
  }
12452
14504
  };
12453
14505
 
@@ -12533,6 +14585,10 @@ var KNOWN_GUARDRAILS_BY_ACTION_TYPE_ID = {
12533
14585
  {
12534
14586
  code: "USER_IDS_ARRAY",
12535
14587
  message: "user_ids must be an array of HubSpot user ID strings."
14588
+ },
14589
+ {
14590
+ code: "RECIPIENT_SOURCE_REQUIRED",
14591
+ message: "At least one of user_ids or team_ids must contain a rotation target."
12536
14592
  }
12537
14593
  ],
12538
14594
  "0-3": [
@@ -12541,6 +14597,50 @@ var KNOWN_GUARDRAILS_BY_ACTION_TYPE_ID = {
12541
14597
  message: "In CONTACT_FLOW, include use_explicit_associations: 'true' and an enrolled-contact association via associationTypeId 204 or HubSpot may return HTTP 500."
12542
14598
  }
12543
14599
  ],
14600
+ "0-225935194": [
14601
+ {
14602
+ code: "STATIC_COUNTRY_CODE_MODE_REQUIREMENT",
14603
+ message: "staticDefaultCountryCode is required only when defaultCountryCodeMode is static_default_country_code."
14604
+ }
14605
+ ],
14606
+ "0-46510720": [
14607
+ {
14608
+ code: "SENDER_MODE_DEPENDENCIES",
14609
+ message: "CONTACT_OWNER requires contactOwnerProperty; SPECIFIC_USER requires userId."
14610
+ }
14611
+ ],
14612
+ "1-179507819": [
14613
+ {
14614
+ code: "SLACK_RECIPIENT_TARGET_REQUIRED",
14615
+ message: "Provide at least one recipient target in slackChannelIds, slackUserIds, or notifyOwner."
14616
+ }
14617
+ ],
14618
+ CUSTOM_CODE: [
14619
+ {
14620
+ code: "ENUM_OUTPUT_OPTIONS_REQUIRED",
14621
+ message: "CUSTOM_CODE outputFields with type ENUMERATION must include a non-empty options array."
14622
+ }
14623
+ ],
14624
+ WEBHOOK: [
14625
+ {
14626
+ code: "WEBHOOK_METHOD_ENUM",
14627
+ message: "method must be one of GET, POST, PUT, PATCH, or DELETE."
14628
+ }
14629
+ ],
14630
+ LIST_BRANCH: [
14631
+ {
14632
+ code: "LOGICAL_NODE_NON_EMPTY",
14633
+ message: "AND and OR LIST_BRANCH nodes must include at least one filter or child branch."
14634
+ },
14635
+ {
14636
+ code: "ASSOCIATION_NODE_SHAPE",
14637
+ message: "ASSOCIATION nodes require associationCategory, associationTypeId, objectTypeId, and operator: 'IN_LIST'."
14638
+ },
14639
+ {
14640
+ code: "UNIFIED_EVENTS_NODE_SHAPE",
14641
+ message: "UNIFIED_EVENTS nodes require eventTypeId and operator: 'HAS_COMPLETED', and do not accept direct filters."
14642
+ }
14643
+ ],
12544
14644
  STATIC_BRANCH: [
12545
14645
  {
12546
14646
  code: "FIELD_DATA_SOURCE_MUST_EXIST",
@@ -12574,6 +14674,32 @@ var CONTEXT_CONSTRAINTS_BY_ACTION_TYPE_ID = {
12574
14674
  condition: "workflow_type = PLATFORM_FLOW",
12575
14675
  requirement: "target_property and overwrite_current_owner may be omitted because HubSpot auto-fills them."
12576
14676
  }
14677
+ ],
14678
+ "0-225935194": [
14679
+ {
14680
+ condition: "fields.defaultCountryCodeMode = static_default_country_code",
14681
+ requirement: "Set staticDefaultCountryCode to a valid ISO country code string."
14682
+ }
14683
+ ],
14684
+ "0-46510720": [
14685
+ {
14686
+ condition: "fields.senderType = CONTACT_OWNER",
14687
+ requirement: "Provide contactOwnerProperty, usually hubspot_owner_id."
14688
+ },
14689
+ {
14690
+ condition: "fields.senderType = SPECIFIC_USER",
14691
+ requirement: "Provide userId with a HubSpot user ID from the owners.user_id column."
14692
+ }
14693
+ ],
14694
+ LIST_BRANCH: [
14695
+ {
14696
+ condition: "node.filterBranchType = ASSOCIATION",
14697
+ requirement: "Set associationCategory, associationTypeId, objectTypeId, and operator: 'IN_LIST' on that node."
14698
+ },
14699
+ {
14700
+ condition: "node.filterBranchType = UNIFIED_EVENTS",
14701
+ requirement: "Set eventTypeId and operator: 'HAS_COMPLETED' on that node and keep direct filters empty."
14702
+ }
12577
14703
  ]
12578
14704
  };
12579
14705
  var toLookupRequirements = (requirements) => requirements.map((requirement) => {
@@ -12593,6 +14719,13 @@ var SUPPORTED_WORKFLOW_ACTION_TYPES = SUPPORTED_WORKFLOW_ACTION_KEYS.map((action
12593
14719
  const knownGuardrails = KNOWN_GUARDRAILS_BY_ACTION_TYPE_ID[actionTypeId] ?? [];
12594
14720
  const contextConstraints = CONTEXT_CONSTRAINTS_BY_ACTION_TYPE_ID[actionTypeId] ?? [];
12595
14721
  const lookupRequirements = toLookupRequirements(resourceRequirements);
14722
+ const corpusMetadata = WORKFLOW_ACTION_CORPUS_METADATA_BY_ID[actionTypeId] ?? {
14723
+ exampleCount: 0,
14724
+ portalCount: 0,
14725
+ workflowCount: 0,
14726
+ fieldFrequency: [],
14727
+ variantInventory: []
14728
+ };
12596
14729
  if (actionTypeId === "AB_TEST_BRANCH") {
12597
14730
  return {
12598
14731
  actionTypeId,
@@ -12614,14 +14747,17 @@ var SUPPORTED_WORKFLOW_ACTION_TYPES = SUPPORTED_WORKFLOW_ACTION_KEYS.map((action
12614
14747
  ),
12615
14748
  knownGuardrails,
12616
14749
  contextConstraints,
12617
- lookupRequirements
14750
+ lookupRequirements,
14751
+ corpusMetadata,
14752
+ fieldFrequency: corpusMetadata.fieldFrequency,
14753
+ variantInventory: corpusMetadata.variantInventory
12618
14754
  };
12619
14755
  }
12620
14756
  if (actionTypeId === "LIST_BRANCH") {
12621
14757
  return {
12622
14758
  actionTypeId,
12623
14759
  name: "List branch",
12624
- description: "Branch the workflow using list membership filters or root-record property predicates arranged in listBranches filter trees.",
14760
+ description: "Branch the workflow using explicit logical filter trees made up of property filters, list membership filters, form/email activity filters, association scopes, and unified-event nodes.",
12625
14761
  category: "built_in",
12626
14762
  connectionType: "BRANCH",
12627
14763
  fields: [
@@ -12629,7 +14765,7 @@ var SUPPORTED_WORKFLOW_ACTION_TYPES = SUPPORTED_WORKFLOW_ACTION_KEYS.map((action
12629
14765
  name: "listBranches",
12630
14766
  type: "array",
12631
14767
  required: true,
12632
- description: "Branch definitions. Each entry includes branchName, filterBranch, and may include a connection or nextActionId when the branch continues to another action."
14768
+ description: "Branch definitions. Each entry includes branchName and a filterBranch tree. The tree can contain logical AND/OR nodes, ASSOCIATION nodes scoped to a related object type, and UNIFIED_EVENTS nodes for completed-event checks. Leaf filters include PROPERTY, IN_LIST, FORM_SUBMISSION, FORM_SUBMISSION_ON_PAGE, EMAIL_EVENT, and CTA variants."
12633
14769
  },
12634
14770
  {
12635
14771
  name: "defaultBranch",
@@ -12646,11 +14782,14 @@ var SUPPORTED_WORKFLOW_ACTION_TYPES = SUPPORTED_WORKFLOW_ACTION_KEYS.map((action
12646
14782
  ],
12647
14783
  resourceRequirements,
12648
14784
  createGuidanceText: withUpdateWorkflowGuidance(
12649
- createMetadata?.createGuidanceText ?? "Use LIST_BRANCH for conditional branching on list membership or root-record properties."
14785
+ createMetadata?.createGuidanceText ?? "Use LIST_BRANCH for conditional branching when you need nested logical groups, association-scoped conditions, or activity-based filters such as form submissions and email events."
12650
14786
  ),
12651
14787
  knownGuardrails,
12652
14788
  contextConstraints,
12653
- lookupRequirements
14789
+ lookupRequirements,
14790
+ corpusMetadata,
14791
+ fieldFrequency: corpusMetadata.fieldFrequency,
14792
+ variantInventory: corpusMetadata.variantInventory
12654
14793
  };
12655
14794
  }
12656
14795
  if (actionTypeId === "STATIC_BRANCH") {
@@ -12665,7 +14804,7 @@ var SUPPORTED_WORKFLOW_ACTION_TYPES = SUPPORTED_WORKFLOW_ACTION_KEYS.map((action
12665
14804
  name: "inputValue",
12666
14805
  type: "object",
12667
14806
  required: true,
12668
- description: "Branch input reference. Use FIELD_DATA to branch on a prior action output or OBJECT_PROPERTY to branch on an enrolled record property."
14807
+ description: "Branch input reference. Use FIELD_DATA to branch on a prior action output, OBJECT_PROPERTY to branch on an enrolled record property, or FETCHED_OBJECT_PROPERTY when a fetched-object token is the branch source."
12669
14808
  },
12670
14809
  {
12671
14810
  name: "staticBranches",
@@ -12692,7 +14831,10 @@ var SUPPORTED_WORKFLOW_ACTION_TYPES = SUPPORTED_WORKFLOW_ACTION_KEYS.map((action
12692
14831
  ),
12693
14832
  knownGuardrails,
12694
14833
  contextConstraints,
12695
- lookupRequirements
14834
+ lookupRequirements,
14835
+ corpusMetadata,
14836
+ fieldFrequency: corpusMetadata.fieldFrequency,
14837
+ variantInventory: corpusMetadata.variantInventory
12696
14838
  };
12697
14839
  }
12698
14840
  const builtInActionType = BUILT_IN_ACTION_TYPES[actionTypeId];
@@ -12710,7 +14852,10 @@ var SUPPORTED_WORKFLOW_ACTION_TYPES = SUPPORTED_WORKFLOW_ACTION_KEYS.map((action
12710
14852
  createGuidanceText: withUpdateWorkflowGuidance(createMetadata?.createGuidanceText ?? ""),
12711
14853
  knownGuardrails,
12712
14854
  contextConstraints,
12713
- lookupRequirements
14855
+ lookupRequirements,
14856
+ corpusMetadata,
14857
+ fieldFrequency: corpusMetadata.fieldFrequency,
14858
+ variantInventory: corpusMetadata.variantInventory
12714
14859
  };
12715
14860
  });
12716
14861
  var SUPPORTED_WORKFLOW_ACTION_TYPES_BY_ID = Object.fromEntries(
@@ -28192,6 +30337,17 @@ var createEnsureFresh = (deps, options2) => {
28192
30337
  syncEnabled: true
28193
30338
  };
28194
30339
  }
30340
+ if (!deps.isMasterClient()) {
30341
+ if (!deps.hasLocalDatabase(portalId)) {
30342
+ throw new Error(
30343
+ `Portal ${portalId} has no synced data yet. Background sync in progress - retry shortly.`
30344
+ );
30345
+ }
30346
+ return {
30347
+ usedStaleData: true,
30348
+ syncEnabled: true
30349
+ };
30350
+ }
28195
30351
  const drained = await deps.waitForPortalDrain(portalId, queueDrainTimeoutMs);
28196
30352
  if (!drained) {
28197
30353
  throw new Error(`Timed out waiting for portal ${portalId} artifact queue drain.`);
@@ -28258,6 +30414,7 @@ var waitForPortalSyncedAtAfter = (portalFileState, portalId, sinceMs, timeoutMs)
28258
30414
  var makeEnsureFresh = (deps, options2) => createEnsureFresh(
28259
30415
  {
28260
30416
  getSelectedPortalId: deps.getSelectedPortalId,
30417
+ isMasterClient: deps.isMasterClient,
28261
30418
  isPortalSyncEnabled: deps.isPortalSyncEnabled,
28262
30419
  waitForPortalDrain,
28263
30420
  hasLocalDatabase: (portalId) => fs13.existsSync(dbPath(portalId)),
@@ -28417,6 +30574,7 @@ var mainProgram = Effect143.gen(function* () {
28417
30574
  };
28418
30575
  const ensureFresh = makeEnsureFresh({
28419
30576
  getSelectedPortalId: getPortalId,
30577
+ isMasterClient,
28420
30578
  isPortalSyncEnabled: isPortalSyncActive,
28421
30579
  ws,
28422
30580
  portalData,