@aglyn/aglyn 1.0.0-beta.143

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 (963) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +11 -0
  3. package/package.json +66 -0
  4. package/src/index.d.ts +25 -0
  5. package/src/index.js +26 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/aglyn.d.ts +31 -0
  8. package/src/lib/aglyn.js +114 -0
  9. package/src/lib/aglyn.js.map +1 -0
  10. package/src/lib/app-utils/abuse-report.d.ts +193 -0
  11. package/src/lib/app-utils/abuse-report.js +321 -0
  12. package/src/lib/app-utils/abuse-report.js.map +1 -0
  13. package/src/lib/app-utils/accept-negotiation.d.ts +129 -0
  14. package/src/lib/app-utils/accept-negotiation.js +266 -0
  15. package/src/lib/app-utils/accept-negotiation.js.map +1 -0
  16. package/src/lib/app-utils/account-emails.d.ts +263 -0
  17. package/src/lib/app-utils/account-emails.js +264 -0
  18. package/src/lib/app-utils/account-emails.js.map +1 -0
  19. package/src/lib/app-utils/actions.d.ts +717 -0
  20. package/src/lib/app-utils/actions.js +1031 -0
  21. package/src/lib/app-utils/actions.js.map +1 -0
  22. package/src/lib/app-utils/activity-presenter.d.ts +152 -0
  23. package/src/lib/app-utils/activity-presenter.js +326 -0
  24. package/src/lib/app-utils/activity-presenter.js.map +1 -0
  25. package/src/lib/app-utils/advertising-tag-mounts.d.ts +133 -0
  26. package/src/lib/app-utils/advertising-tag-mounts.js +118 -0
  27. package/src/lib/app-utils/advertising-tag-mounts.js.map +1 -0
  28. package/src/lib/app-utils/advertising-tags.d.ts +307 -0
  29. package/src/lib/app-utils/advertising-tags.js +525 -0
  30. package/src/lib/app-utils/advertising-tags.js.map +1 -0
  31. package/src/lib/app-utils/agent-api-catalog.d.ts +94 -0
  32. package/src/lib/app-utils/agent-api-catalog.js +106 -0
  33. package/src/lib/app-utils/agent-api-catalog.js.map +1 -0
  34. package/src/lib/app-utils/agent-openapi.d.ts +103 -0
  35. package/src/lib/app-utils/agent-openapi.js +1128 -0
  36. package/src/lib/app-utils/agent-openapi.js.map +1 -0
  37. package/src/lib/app-utils/analytics-beacon.d.ts +154 -0
  38. package/src/lib/app-utils/analytics-beacon.js +152 -0
  39. package/src/lib/app-utils/analytics-beacon.js.map +1 -0
  40. package/src/lib/app-utils/analytics-environment.d.ts +133 -0
  41. package/src/lib/app-utils/analytics-environment.js +152 -0
  42. package/src/lib/app-utils/analytics-environment.js.map +1 -0
  43. package/src/lib/app-utils/analytics-events.d.ts +744 -0
  44. package/src/lib/app-utils/analytics-events.js +650 -0
  45. package/src/lib/app-utils/analytics-events.js.map +1 -0
  46. package/src/lib/app-utils/analytics-link-clicks.d.ts +102 -0
  47. package/src/lib/app-utils/analytics-link-clicks.js +267 -0
  48. package/src/lib/app-utils/analytics-link-clicks.js.map +1 -0
  49. package/src/lib/app-utils/analytics-path-key.d.ts +46 -0
  50. package/src/lib/app-utils/analytics-path-key.js +46 -0
  51. package/src/lib/app-utils/analytics-path-key.js.map +1 -0
  52. package/src/lib/app-utils/api-adapter.d.ts +47 -0
  53. package/src/lib/app-utils/api-adapter.js +367 -0
  54. package/src/lib/app-utils/api-adapter.js.map +1 -0
  55. package/src/lib/app-utils/api-idempotency.d.ts +169 -0
  56. package/src/lib/app-utils/api-idempotency.js +213 -0
  57. package/src/lib/app-utils/api-idempotency.js.map +1 -0
  58. package/src/lib/app-utils/api-plugins.d.ts +210 -0
  59. package/src/lib/app-utils/api-plugins.js +221 -0
  60. package/src/lib/app-utils/api-plugins.js.map +1 -0
  61. package/src/lib/app-utils/assist-credits.d.ts +482 -0
  62. package/src/lib/app-utils/assist-credits.js +509 -0
  63. package/src/lib/app-utils/assist-credits.js.map +1 -0
  64. package/src/lib/app-utils/attribution-attribute.d.ts +34 -0
  65. package/src/lib/app-utils/attribution-attribute.js +34 -0
  66. package/src/lib/app-utils/attribution-attribute.js.map +1 -0
  67. package/src/lib/app-utils/attribution-guard.d.ts +130 -0
  68. package/src/lib/app-utils/attribution-guard.js +410 -0
  69. package/src/lib/app-utils/attribution-guard.js.map +1 -0
  70. package/src/lib/app-utils/author-css.d.ts +123 -0
  71. package/src/lib/app-utils/author-css.js +275 -0
  72. package/src/lib/app-utils/author-css.js.map +1 -0
  73. package/src/lib/app-utils/author-html-markdown.d.ts +31 -0
  74. package/src/lib/app-utils/author-html-markdown.js +497 -0
  75. package/src/lib/app-utils/author-html-markdown.js.map +1 -0
  76. package/src/lib/app-utils/author-html.d.ts +135 -0
  77. package/src/lib/app-utils/author-html.js +1037 -0
  78. package/src/lib/app-utils/author-html.js.map +1 -0
  79. package/src/lib/app-utils/automation-placeholders.d.ts +72 -0
  80. package/src/lib/app-utils/automation-placeholders.js +207 -0
  81. package/src/lib/app-utils/automation-placeholders.js.map +1 -0
  82. package/src/lib/app-utils/bandwidth-cap.d.ts +183 -0
  83. package/src/lib/app-utils/bandwidth-cap.js +193 -0
  84. package/src/lib/app-utils/bandwidth-cap.js.map +1 -0
  85. package/src/lib/app-utils/binding-token-catalog.d.ts +82 -0
  86. package/src/lib/app-utils/binding-token-catalog.js +293 -0
  87. package/src/lib/app-utils/binding-token-catalog.js.map +1 -0
  88. package/src/lib/app-utils/binding-tokens.d.ts +157 -0
  89. package/src/lib/app-utils/binding-tokens.js +251 -0
  90. package/src/lib/app-utils/binding-tokens.js.map +1 -0
  91. package/src/lib/app-utils/breadcrumb-json-ld.d.ts +57 -0
  92. package/src/lib/app-utils/breadcrumb-json-ld.js +67 -0
  93. package/src/lib/app-utils/breadcrumb-json-ld.js.map +1 -0
  94. package/src/lib/app-utils/campaign-attribution.d.ts +117 -0
  95. package/src/lib/app-utils/campaign-attribution.js +162 -0
  96. package/src/lib/app-utils/campaign-attribution.js.map +1 -0
  97. package/src/lib/app-utils/campaign-forwarding.d.ts +220 -0
  98. package/src/lib/app-utils/campaign-forwarding.js +332 -0
  99. package/src/lib/app-utils/campaign-forwarding.js.map +1 -0
  100. package/src/lib/app-utils/campaign-membership.d.ts +109 -0
  101. package/src/lib/app-utils/campaign-membership.js +176 -0
  102. package/src/lib/app-utils/campaign-membership.js.map +1 -0
  103. package/src/lib/app-utils/campaign-touch.d.ts +206 -0
  104. package/src/lib/app-utils/campaign-touch.js +326 -0
  105. package/src/lib/app-utils/campaign-touch.js.map +1 -0
  106. package/src/lib/app-utils/child-contract-compose.d.ts +28 -0
  107. package/src/lib/app-utils/child-contract-compose.js +140 -0
  108. package/src/lib/app-utils/child-contract-compose.js.map +1 -0
  109. package/src/lib/app-utils/child-contract.d.ts +129 -0
  110. package/src/lib/app-utils/child-contract.js +153 -0
  111. package/src/lib/app-utils/child-contract.js.map +1 -0
  112. package/src/lib/app-utils/collection-delete.d.ts +113 -0
  113. package/src/lib/app-utils/collection-delete.js +120 -0
  114. package/src/lib/app-utils/collection-delete.js.map +1 -0
  115. package/src/lib/app-utils/collection-entries.d.ts +833 -0
  116. package/src/lib/app-utils/collection-entries.js +1285 -0
  117. package/src/lib/app-utils/collection-entries.js.map +1 -0
  118. package/src/lib/app-utils/collection-entry-date.d.ts +129 -0
  119. package/src/lib/app-utils/collection-entry-date.js +183 -0
  120. package/src/lib/app-utils/collection-entry-date.js.map +1 -0
  121. package/src/lib/app-utils/collection-kind.d.ts +55 -0
  122. package/src/lib/app-utils/collection-kind.js +69 -0
  123. package/src/lib/app-utils/collection-kind.js.map +1 -0
  124. package/src/lib/app-utils/collection-slug.d.ts +79 -0
  125. package/src/lib/app-utils/collection-slug.js +70 -0
  126. package/src/lib/app-utils/collection-slug.js.map +1 -0
  127. package/src/lib/app-utils/compose-layout-nodes.d.ts +147 -0
  128. package/src/lib/app-utils/compose-layout-nodes.js +261 -0
  129. package/src/lib/app-utils/compose-layout-nodes.js.map +1 -0
  130. package/src/lib/app-utils/compose-layout-props.d.ts +71 -0
  131. package/src/lib/app-utils/compose-layout-props.js +61 -0
  132. package/src/lib/app-utils/compose-layout-props.js.map +1 -0
  133. package/src/lib/app-utils/compose-reusable-components.d.ts +504 -0
  134. package/src/lib/app-utils/compose-reusable-components.js +1366 -0
  135. package/src/lib/app-utils/compose-reusable-components.js.map +1 -0
  136. package/src/lib/app-utils/compress.d.ts +35 -0
  137. package/src/lib/app-utils/compress.js +38 -0
  138. package/src/lib/app-utils/compress.js.map +1 -0
  139. package/src/lib/app-utils/consent-banner-ui.d.ts +226 -0
  140. package/src/lib/app-utils/consent-banner-ui.js +583 -0
  141. package/src/lib/app-utils/consent-banner-ui.js.map +1 -0
  142. package/src/lib/app-utils/consent-groups.d.ts +189 -0
  143. package/src/lib/app-utils/consent-groups.js +219 -0
  144. package/src/lib/app-utils/consent-groups.js.map +1 -0
  145. package/src/lib/app-utils/consent-preferences-dialog.d.ts +58 -0
  146. package/src/lib/app-utils/consent-preferences-dialog.js +106 -0
  147. package/src/lib/app-utils/consent-preferences-dialog.js.map +1 -0
  148. package/src/lib/app-utils/console-record-links.d.ts +163 -0
  149. package/src/lib/app-utils/console-record-links.js +178 -0
  150. package/src/lib/app-utils/console-record-links.js.map +1 -0
  151. package/src/lib/app-utils/console-routes.d.ts +658 -0
  152. package/src/lib/app-utils/console-routes.js +489 -0
  153. package/src/lib/app-utils/console-routes.js.map +1 -0
  154. package/src/lib/app-utils/console-widget-slot-context.d.ts +46 -0
  155. package/src/lib/app-utils/console-widget-slot-context.js +23 -0
  156. package/src/lib/app-utils/console-widget-slot-context.js.map +1 -0
  157. package/src/lib/app-utils/contact-custom-fields.d.ts +191 -0
  158. package/src/lib/app-utils/contact-custom-fields.js +349 -0
  159. package/src/lib/app-utils/contact-custom-fields.js.map +1 -0
  160. package/src/lib/app-utils/contact-holder.d.ts +52 -0
  161. package/src/lib/app-utils/contact-holder.js +98 -0
  162. package/src/lib/app-utils/contact-holder.js.map +1 -0
  163. package/src/lib/app-utils/contact-merge.d.ts +136 -0
  164. package/src/lib/app-utils/contact-merge.js +379 -0
  165. package/src/lib/app-utils/contact-merge.js.map +1 -0
  166. package/src/lib/app-utils/contacts.d.ts +554 -0
  167. package/src/lib/app-utils/contacts.js +401 -0
  168. package/src/lib/app-utils/contacts.js.map +1 -0
  169. package/src/lib/app-utils/content-author-profile.d.ts +68 -0
  170. package/src/lib/app-utils/content-author-profile.js +118 -0
  171. package/src/lib/app-utils/content-author-profile.js.map +1 -0
  172. package/src/lib/app-utils/content-authors.d.ts +662 -0
  173. package/src/lib/app-utils/content-authors.js +771 -0
  174. package/src/lib/app-utils/content-authors.js.map +1 -0
  175. package/src/lib/app-utils/content-schema-type.d.ts +81 -0
  176. package/src/lib/app-utils/content-schema-type.js +87 -0
  177. package/src/lib/app-utils/content-schema-type.js.map +1 -0
  178. package/src/lib/app-utils/contexts.d.ts +35 -0
  179. package/src/lib/app-utils/contexts.js +35 -0
  180. package/src/lib/app-utils/contexts.js.map +1 -0
  181. package/src/lib/app-utils/create-resource-uid.d.ts +18 -0
  182. package/src/lib/app-utils/create-resource-uid.js +23 -0
  183. package/src/lib/app-utils/create-resource-uid.js.map +1 -0
  184. package/src/lib/app-utils/crm-booking.d.ts +75 -0
  185. package/src/lib/app-utils/crm-booking.js +133 -0
  186. package/src/lib/app-utils/crm-booking.js.map +1 -0
  187. package/src/lib/app-utils/crm-csv.d.ts +232 -0
  188. package/src/lib/app-utils/crm-csv.js +432 -0
  189. package/src/lib/app-utils/crm-csv.js.map +1 -0
  190. package/src/lib/app-utils/crm-digest.d.ts +179 -0
  191. package/src/lib/app-utils/crm-digest.js +271 -0
  192. package/src/lib/app-utils/crm-digest.js.map +1 -0
  193. package/src/lib/app-utils/crm-email-templates.d.ts +172 -0
  194. package/src/lib/app-utils/crm-email-templates.js +382 -0
  195. package/src/lib/app-utils/crm-email-templates.js.map +1 -0
  196. package/src/lib/app-utils/crm-inbound.d.ts +245 -0
  197. package/src/lib/app-utils/crm-inbound.js +407 -0
  198. package/src/lib/app-utils/crm-inbound.js.map +1 -0
  199. package/src/lib/app-utils/crm-kinds.d.ts +73 -0
  200. package/src/lib/app-utils/crm-kinds.js +92 -0
  201. package/src/lib/app-utils/crm-kinds.js.map +1 -0
  202. package/src/lib/app-utils/crm-next-activity.d.ts +107 -0
  203. package/src/lib/app-utils/crm-next-activity.js +140 -0
  204. package/src/lib/app-utils/crm-next-activity.js.map +1 -0
  205. package/src/lib/app-utils/crm-reports.d.ts +479 -0
  206. package/src/lib/app-utils/crm-reports.js +680 -0
  207. package/src/lib/app-utils/crm-reports.js.map +1 -0
  208. package/src/lib/app-utils/crm-task-reminders.d.ts +129 -0
  209. package/src/lib/app-utils/crm-task-reminders.js +139 -0
  210. package/src/lib/app-utils/crm-task-reminders.js.map +1 -0
  211. package/src/lib/app-utils/crm.d.ts +1546 -0
  212. package/src/lib/app-utils/crm.js +1814 -0
  213. package/src/lib/app-utils/crm.js.map +1 -0
  214. package/src/lib/app-utils/csp-report.d.ts +84 -0
  215. package/src/lib/app-utils/csp-report.js +177 -0
  216. package/src/lib/app-utils/csp-report.js.map +1 -0
  217. package/src/lib/app-utils/csv-import.d.ts +192 -0
  218. package/src/lib/app-utils/csv-import.js +279 -0
  219. package/src/lib/app-utils/csv-import.js.map +1 -0
  220. package/src/lib/app-utils/dataset-csv.d.ts +109 -0
  221. package/src/lib/app-utils/dataset-csv.js +235 -0
  222. package/src/lib/app-utils/dataset-csv.js.map +1 -0
  223. package/src/lib/app-utils/dataset-models.d.ts +194 -0
  224. package/src/lib/app-utils/dataset-models.js +409 -0
  225. package/src/lib/app-utils/dataset-models.js.map +1 -0
  226. package/src/lib/app-utils/dataset-query.d.ts +57 -0
  227. package/src/lib/app-utils/dataset-query.js +126 -0
  228. package/src/lib/app-utils/dataset-query.js.map +1 -0
  229. package/src/lib/app-utils/datasets.d.ts +136 -0
  230. package/src/lib/app-utils/datasets.js +177 -0
  231. package/src/lib/app-utils/datasets.js.map +1 -0
  232. package/src/lib/app-utils/decompress.d.ts +36 -0
  233. package/src/lib/app-utils/decompress.js +32 -0
  234. package/src/lib/app-utils/decompress.js.map +1 -0
  235. package/src/lib/app-utils/dedicated-sending-domain.d.ts +47 -0
  236. package/src/lib/app-utils/dedicated-sending-domain.js +114 -0
  237. package/src/lib/app-utils/dedicated-sending-domain.js.map +1 -0
  238. package/src/lib/app-utils/deferred-image.d.ts +86 -0
  239. package/src/lib/app-utils/deferred-image.js +83 -0
  240. package/src/lib/app-utils/deferred-image.js.map +1 -0
  241. package/src/lib/app-utils/definition-canvas-tree.d.ts +61 -0
  242. package/src/lib/app-utils/definition-canvas-tree.js +126 -0
  243. package/src/lib/app-utils/definition-canvas-tree.js.map +1 -0
  244. package/src/lib/app-utils/deployment-shape.d.ts +167 -0
  245. package/src/lib/app-utils/deployment-shape.js +238 -0
  246. package/src/lib/app-utils/deployment-shape.js.map +1 -0
  247. package/src/lib/app-utils/detect-template-placeholders.d.ts +30 -0
  248. package/src/lib/app-utils/detect-template-placeholders.js +53 -0
  249. package/src/lib/app-utils/detect-template-placeholders.js.map +1 -0
  250. package/src/lib/app-utils/dmca-counter-notice.d.ts +185 -0
  251. package/src/lib/app-utils/dmca-counter-notice.js +277 -0
  252. package/src/lib/app-utils/dmca-counter-notice.js.map +1 -0
  253. package/src/lib/app-utils/docs-deflection.d.ts +156 -0
  254. package/src/lib/app-utils/docs-deflection.js +547 -0
  255. package/src/lib/app-utils/docs-deflection.js.map +1 -0
  256. package/src/lib/app-utils/docs-help.d.ts +57 -0
  257. package/src/lib/app-utils/docs-help.generated.d.ts +303 -0
  258. package/src/lib/app-utils/docs-help.generated.js +867 -0
  259. package/src/lib/app-utils/docs-help.generated.js.map +1 -0
  260. package/src/lib/app-utils/docs-help.js +46 -0
  261. package/src/lib/app-utils/docs-help.js.map +1 -0
  262. package/src/lib/app-utils/docs-index.generated.d.ts +29 -0
  263. package/src/lib/app-utils/docs-index.generated.js +8388 -0
  264. package/src/lib/app-utils/docs-index.generated.js.map +1 -0
  265. package/src/lib/app-utils/docs-retrieval.d.ts +67 -0
  266. package/src/lib/app-utils/docs-retrieval.js +188 -0
  267. package/src/lib/app-utils/docs-retrieval.js.map +1 -0
  268. package/src/lib/app-utils/document-landmark.d.ts +50 -0
  269. package/src/lib/app-utils/document-landmark.js +100 -0
  270. package/src/lib/app-utils/document-landmark.js.map +1 -0
  271. package/src/lib/app-utils/duplicate-resource.d.ts +101 -0
  272. package/src/lib/app-utils/duplicate-resource.js +206 -0
  273. package/src/lib/app-utils/duplicate-resource.js.map +1 -0
  274. package/src/lib/app-utils/dynamic-list-rule.d.ts +471 -0
  275. package/src/lib/app-utils/dynamic-list-rule.js +914 -0
  276. package/src/lib/app-utils/dynamic-list-rule.js.map +1 -0
  277. package/src/lib/app-utils/element-animation.d.ts +200 -0
  278. package/src/lib/app-utils/element-animation.js +233 -0
  279. package/src/lib/app-utils/element-animation.js.map +1 -0
  280. package/src/lib/app-utils/element-hidden-style.d.ts +46 -0
  281. package/src/lib/app-utils/element-hidden-style.js +48 -0
  282. package/src/lib/app-utils/element-hidden-style.js.map +1 -0
  283. package/src/lib/app-utils/element-ui.d.ts +243 -0
  284. package/src/lib/app-utils/element-ui.js +459 -0
  285. package/src/lib/app-utils/element-ui.js.map +1 -0
  286. package/src/lib/app-utils/email-starter-policy.d.ts +160 -0
  287. package/src/lib/app-utils/email-starter-policy.js +327 -0
  288. package/src/lib/app-utils/email-starter-policy.js.map +1 -0
  289. package/src/lib/app-utils/email-topics.d.ts +310 -0
  290. package/src/lib/app-utils/email-topics.js +336 -0
  291. package/src/lib/app-utils/email-topics.js.map +1 -0
  292. package/src/lib/app-utils/enabled-plugins-context.d.ts +100 -0
  293. package/src/lib/app-utils/enabled-plugins-context.js +113 -0
  294. package/src/lib/app-utils/enabled-plugins-context.js.map +1 -0
  295. package/src/lib/app-utils/ensure-canvas-root.d.ts +38 -0
  296. package/src/lib/app-utils/ensure-canvas-root.js +61 -0
  297. package/src/lib/app-utils/ensure-canvas-root.js.map +1 -0
  298. package/src/lib/app-utils/entity-picker-context.d.ts +199 -0
  299. package/src/lib/app-utils/entity-picker-context.js +93 -0
  300. package/src/lib/app-utils/entity-picker-context.js.map +1 -0
  301. package/src/lib/app-utils/error-beacon.d.ts +107 -0
  302. package/src/lib/app-utils/error-beacon.js +296 -0
  303. package/src/lib/app-utils/error-beacon.js.map +1 -0
  304. package/src/lib/app-utils/expand-repeatables.d.ts +172 -0
  305. package/src/lib/app-utils/expand-repeatables.js +299 -0
  306. package/src/lib/app-utils/expand-repeatables.js.map +1 -0
  307. package/src/lib/app-utils/foreign-script.d.ts +82 -0
  308. package/src/lib/app-utils/foreign-script.js +102 -0
  309. package/src/lib/app-utils/foreign-script.js.map +1 -0
  310. package/src/lib/app-utils/form-abuse-ceiling.d.ts +146 -0
  311. package/src/lib/app-utils/form-abuse-ceiling.js +158 -0
  312. package/src/lib/app-utils/form-abuse-ceiling.js.map +1 -0
  313. package/src/lib/app-utils/form-contract.d.ts +198 -0
  314. package/src/lib/app-utils/form-contract.js +282 -0
  315. package/src/lib/app-utils/form-contract.js.map +1 -0
  316. package/src/lib/app-utils/form-dataset-binding.d.ts +50 -0
  317. package/src/lib/app-utils/form-dataset-binding.js +74 -0
  318. package/src/lib/app-utils/form-dataset-binding.js.map +1 -0
  319. package/src/lib/app-utils/forms.d.ts +727 -0
  320. package/src/lib/app-utils/forms.js +777 -0
  321. package/src/lib/app-utils/forms.js.map +1 -0
  322. package/src/lib/app-utils/functions.d.ts +188 -0
  323. package/src/lib/app-utils/functions.js +529 -0
  324. package/src/lib/app-utils/functions.js.map +1 -0
  325. package/src/lib/app-utils/guarded-version-save.d.ts +91 -0
  326. package/src/lib/app-utils/guarded-version-save.js +131 -0
  327. package/src/lib/app-utils/guarded-version-save.js.map +1 -0
  328. package/src/lib/app-utils/health-report.d.ts +1766 -0
  329. package/src/lib/app-utils/health-report.js +2072 -0
  330. package/src/lib/app-utils/health-report.js.map +1 -0
  331. package/src/lib/app-utils/host-naming.d.ts +135 -0
  332. package/src/lib/app-utils/host-naming.js +188 -0
  333. package/src/lib/app-utils/host-naming.js.map +1 -0
  334. package/src/lib/app-utils/host-permissions.d.ts +76 -0
  335. package/src/lib/app-utils/host-permissions.js +119 -0
  336. package/src/lib/app-utils/host-permissions.js.map +1 -0
  337. package/src/lib/app-utils/host-tokens.d.ts +228 -0
  338. package/src/lib/app-utils/host-tokens.js +304 -0
  339. package/src/lib/app-utils/host-tokens.js.map +1 -0
  340. package/src/lib/app-utils/idp-profile.d.ts +83 -0
  341. package/src/lib/app-utils/idp-profile.js +268 -0
  342. package/src/lib/app-utils/idp-profile.js.map +1 -0
  343. package/src/lib/app-utils/image-upload-types.d.ts +49 -0
  344. package/src/lib/app-utils/image-upload-types.js +86 -0
  345. package/src/lib/app-utils/image-upload-types.js.map +1 -0
  346. package/src/lib/app-utils/index.d.ts +18 -0
  347. package/src/lib/app-utils/index.js +23 -0
  348. package/src/lib/app-utils/index.js.map +1 -0
  349. package/src/lib/app-utils/internal-traffic.d.ts +197 -0
  350. package/src/lib/app-utils/internal-traffic.js +288 -0
  351. package/src/lib/app-utils/internal-traffic.js.map +1 -0
  352. package/src/lib/app-utils/lineal-order.d.ts +62 -0
  353. package/src/lib/app-utils/lineal-order.js +65 -0
  354. package/src/lib/app-utils/lineal-order.js.map +1 -0
  355. package/src/lib/app-utils/link-references.d.ts +36 -0
  356. package/src/lib/app-utils/link-references.js +89 -0
  357. package/src/lib/app-utils/link-references.js.map +1 -0
  358. package/src/lib/app-utils/link-target-search-context.d.ts +123 -0
  359. package/src/lib/app-utils/link-target-search-context.js +221 -0
  360. package/src/lib/app-utils/link-target-search-context.js.map +1 -0
  361. package/src/lib/app-utils/list-assignment-policy.d.ts +169 -0
  362. package/src/lib/app-utils/list-assignment-policy.js +170 -0
  363. package/src/lib/app-utils/list-assignment-policy.js.map +1 -0
  364. package/src/lib/app-utils/list-import.d.ts +158 -0
  365. package/src/lib/app-utils/list-import.js +332 -0
  366. package/src/lib/app-utils/list-import.js.map +1 -0
  367. package/src/lib/app-utils/llms-txt.d.ts +104 -0
  368. package/src/lib/app-utils/llms-txt.js +144 -0
  369. package/src/lib/app-utils/llms-txt.js.map +1 -0
  370. package/src/lib/app-utils/local-storage-budget.d.ts +75 -0
  371. package/src/lib/app-utils/local-storage-budget.js +153 -0
  372. package/src/lib/app-utils/local-storage-budget.js.map +1 -0
  373. package/src/lib/app-utils/lockdown.d.ts +698 -0
  374. package/src/lib/app-utils/lockdown.js +929 -0
  375. package/src/lib/app-utils/lockdown.js.map +1 -0
  376. package/src/lib/app-utils/margin-utilization.d.ts +267 -0
  377. package/src/lib/app-utils/margin-utilization.js +351 -0
  378. package/src/lib/app-utils/margin-utilization.js.map +1 -0
  379. package/src/lib/app-utils/markdown-lite.d.ts +297 -0
  380. package/src/lib/app-utils/markdown-lite.js +705 -0
  381. package/src/lib/app-utils/markdown-lite.js.map +1 -0
  382. package/src/lib/app-utils/marketing-consent.d.ts +704 -0
  383. package/src/lib/app-utils/marketing-consent.js +783 -0
  384. package/src/lib/app-utils/marketing-consent.js.map +1 -0
  385. package/src/lib/app-utils/marketplace-listing-visibility.d.ts +120 -0
  386. package/src/lib/app-utils/marketplace-listing-visibility.js +139 -0
  387. package/src/lib/app-utils/marketplace-listing-visibility.js.map +1 -0
  388. package/src/lib/app-utils/marketplace-overrides.d.ts +271 -0
  389. package/src/lib/app-utils/marketplace-overrides.js +462 -0
  390. package/src/lib/app-utils/marketplace-overrides.js.map +1 -0
  391. package/src/lib/app-utils/marketplace-provenance.d.ts +150 -0
  392. package/src/lib/app-utils/marketplace-provenance.js +136 -0
  393. package/src/lib/app-utils/marketplace-provenance.js.map +1 -0
  394. package/src/lib/app-utils/marketplace-theme.d.ts +237 -0
  395. package/src/lib/app-utils/marketplace-theme.js +525 -0
  396. package/src/lib/app-utils/marketplace-theme.js.map +1 -0
  397. package/src/lib/app-utils/marketplace-update-state.d.ts +119 -0
  398. package/src/lib/app-utils/marketplace-update-state.js +132 -0
  399. package/src/lib/app-utils/marketplace-update-state.js.map +1 -0
  400. package/src/lib/app-utils/marketplace-verification.d.ts +95 -0
  401. package/src/lib/app-utils/marketplace-verification.js +81 -0
  402. package/src/lib/app-utils/marketplace-verification.js.map +1 -0
  403. package/src/lib/app-utils/measure-node-map.d.ts +76 -0
  404. package/src/lib/app-utils/measure-node-map.js +111 -0
  405. package/src/lib/app-utils/measure-node-map.js.map +1 -0
  406. package/src/lib/app-utils/media-alt.d.ts +55 -0
  407. package/src/lib/app-utils/media-alt.js +58 -0
  408. package/src/lib/app-utils/media-alt.js.map +1 -0
  409. package/src/lib/app-utils/media-asset-facts.d.ts +125 -0
  410. package/src/lib/app-utils/media-asset-facts.js +467 -0
  411. package/src/lib/app-utils/media-asset-facts.js.map +1 -0
  412. package/src/lib/app-utils/media-cdn-scope.d.ts +65 -0
  413. package/src/lib/app-utils/media-cdn-scope.js +75 -0
  414. package/src/lib/app-utils/media-cdn-scope.js.map +1 -0
  415. package/src/lib/app-utils/media-folders.d.ts +161 -0
  416. package/src/lib/app-utils/media-folders.js +230 -0
  417. package/src/lib/app-utils/media-folders.js.map +1 -0
  418. package/src/lib/app-utils/media-metadata.d.ts +277 -0
  419. package/src/lib/app-utils/media-metadata.js +388 -0
  420. package/src/lib/app-utils/media-metadata.js.map +1 -0
  421. package/src/lib/app-utils/media-picker-context.d.ts +93 -0
  422. package/src/lib/app-utils/media-picker-context.js +26 -0
  423. package/src/lib/app-utils/media-picker-context.js.map +1 -0
  424. package/src/lib/app-utils/media-quarantine.d.ts +247 -0
  425. package/src/lib/app-utils/media-quarantine.js +323 -0
  426. package/src/lib/app-utils/media-quarantine.js.map +1 -0
  427. package/src/lib/app-utils/media-ref.d.ts +661 -0
  428. package/src/lib/app-utils/media-ref.js +1055 -0
  429. package/src/lib/app-utils/media-ref.js.map +1 -0
  430. package/src/lib/app-utils/media-takedown-reach.d.ts +126 -0
  431. package/src/lib/app-utils/media-takedown-reach.js +143 -0
  432. package/src/lib/app-utils/media-takedown-reach.js.map +1 -0
  433. package/src/lib/app-utils/member-email-aliases.d.ts +180 -0
  434. package/src/lib/app-utils/member-email-aliases.js +217 -0
  435. package/src/lib/app-utils/member-email-aliases.js.map +1 -0
  436. package/src/lib/app-utils/merge-node-sx.d.ts +47 -0
  437. package/src/lib/app-utils/merge-node-sx.js +123 -0
  438. package/src/lib/app-utils/merge-node-sx.js.map +1 -0
  439. package/src/lib/app-utils/name-match.d.ts +155 -0
  440. package/src/lib/app-utils/name-match.js +175 -0
  441. package/src/lib/app-utils/name-match.js.map +1 -0
  442. package/src/lib/app-utils/name-search.d.ts +117 -0
  443. package/src/lib/app-utils/name-search.js +145 -0
  444. package/src/lib/app-utils/name-search.js.map +1 -0
  445. package/src/lib/app-utils/node-capabilities.d.ts +85 -0
  446. package/src/lib/app-utils/node-capabilities.js +88 -0
  447. package/src/lib/app-utils/node-capabilities.js.map +1 -0
  448. package/src/lib/app-utils/node-definition-sanitizer.d.ts +164 -0
  449. package/src/lib/app-utils/node-definition-sanitizer.js +402 -0
  450. package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -0
  451. package/src/lib/app-utils/node-identity.d.ts +47 -0
  452. package/src/lib/app-utils/node-identity.js +50 -0
  453. package/src/lib/app-utils/node-identity.js.map +1 -0
  454. package/src/lib/app-utils/node-interactions.d.ts +102 -0
  455. package/src/lib/app-utils/node-interactions.js +192 -0
  456. package/src/lib/app-utils/node-interactions.js.map +1 -0
  457. package/src/lib/app-utils/node-url-policy.d.ts +54 -0
  458. package/src/lib/app-utils/node-url-policy.js +72 -0
  459. package/src/lib/app-utils/node-url-policy.js.map +1 -0
  460. package/src/lib/app-utils/notifications.d.ts +71 -0
  461. package/src/lib/app-utils/notifications.js +101 -0
  462. package/src/lib/app-utils/notifications.js.map +1 -0
  463. package/src/lib/app-utils/onboarding-deep-link.d.ts +120 -0
  464. package/src/lib/app-utils/onboarding-deep-link.js +142 -0
  465. package/src/lib/app-utils/onboarding-deep-link.js.map +1 -0
  466. package/src/lib/app-utils/operator-identity.d.ts +207 -0
  467. package/src/lib/app-utils/operator-identity.js +186 -0
  468. package/src/lib/app-utils/operator-identity.js.map +1 -0
  469. package/src/lib/app-utils/org-billing-doc.d.ts +231 -0
  470. package/src/lib/app-utils/org-billing-doc.js +238 -0
  471. package/src/lib/app-utils/org-billing-doc.js.map +1 -0
  472. package/src/lib/app-utils/org-override-reason.d.ts +100 -0
  473. package/src/lib/app-utils/org-override-reason.js +116 -0
  474. package/src/lib/app-utils/org-override-reason.js.map +1 -0
  475. package/src/lib/app-utils/org-permissions.d.ts +194 -0
  476. package/src/lib/app-utils/org-permissions.js +357 -0
  477. package/src/lib/app-utils/org-permissions.js.map +1 -0
  478. package/src/lib/app-utils/org-roles.d.ts +72 -0
  479. package/src/lib/app-utils/org-roles.js +131 -0
  480. package/src/lib/app-utils/org-roles.js.map +1 -0
  481. package/src/lib/app-utils/organizations.d.ts +407 -0
  482. package/src/lib/app-utils/organizations.js +511 -0
  483. package/src/lib/app-utils/organizations.js.map +1 -0
  484. package/src/lib/app-utils/page-header-actions-context.d.ts +83 -0
  485. package/src/lib/app-utils/page-header-actions-context.js +58 -0
  486. package/src/lib/app-utils/page-header-actions-context.js.map +1 -0
  487. package/src/lib/app-utils/page-header-record-context.d.ts +80 -0
  488. package/src/lib/app-utils/page-header-record-context.js +64 -0
  489. package/src/lib/app-utils/page-header-record-context.js.map +1 -0
  490. package/src/lib/app-utils/page-markdown.d.ts +103 -0
  491. package/src/lib/app-utils/page-markdown.js +385 -0
  492. package/src/lib/app-utils/page-markdown.js.map +1 -0
  493. package/src/lib/app-utils/paid-media-source.d.ts +90 -0
  494. package/src/lib/app-utils/paid-media-source.js +184 -0
  495. package/src/lib/app-utils/paid-media-source.js.map +1 -0
  496. package/src/lib/app-utils/palette-sx.d.ts +34 -0
  497. package/src/lib/app-utils/palette-sx.js +150 -0
  498. package/src/lib/app-utils/palette-sx.js.map +1 -0
  499. package/src/lib/app-utils/password-policy.d.ts +47 -0
  500. package/src/lib/app-utils/password-policy.js +46 -0
  501. package/src/lib/app-utils/password-policy.js.map +1 -0
  502. package/src/lib/app-utils/payments-configured.d.ts +84 -0
  503. package/src/lib/app-utils/payments-configured.js +88 -0
  504. package/src/lib/app-utils/payments-configured.js.map +1 -0
  505. package/src/lib/app-utils/person-erasure.d.ts +126 -0
  506. package/src/lib/app-utils/person-erasure.js +121 -0
  507. package/src/lib/app-utils/person-erasure.js.map +1 -0
  508. package/src/lib/app-utils/person-key.d.ts +32 -0
  509. package/src/lib/app-utils/person-key.js +62 -0
  510. package/src/lib/app-utils/person-key.js.map +1 -0
  511. package/src/lib/app-utils/plan-entitlements.d.ts +2756 -0
  512. package/src/lib/app-utils/plan-entitlements.js +4085 -0
  513. package/src/lib/app-utils/plan-entitlements.js.map +1 -0
  514. package/src/lib/app-utils/platform-ad-conversions.d.ts +122 -0
  515. package/src/lib/app-utils/platform-ad-conversions.js +174 -0
  516. package/src/lib/app-utils/platform-ad-conversions.js.map +1 -0
  517. package/src/lib/app-utils/platform-advertising-tags.d.ts +139 -0
  518. package/src/lib/app-utils/platform-advertising-tags.js +203 -0
  519. package/src/lib/app-utils/platform-advertising-tags.js.map +1 -0
  520. package/src/lib/app-utils/platform-brand.d.ts +151 -0
  521. package/src/lib/app-utils/platform-brand.js +175 -0
  522. package/src/lib/app-utils/platform-brand.js.map +1 -0
  523. package/src/lib/app-utils/platform-consent-default.d.ts +142 -0
  524. package/src/lib/app-utils/platform-consent-default.js +295 -0
  525. package/src/lib/app-utils/platform-consent-default.js.map +1 -0
  526. package/src/lib/app-utils/platform-marketing-consent.d.ts +151 -0
  527. package/src/lib/app-utils/platform-marketing-consent.js +182 -0
  528. package/src/lib/app-utils/platform-marketing-consent.js.map +1 -0
  529. package/src/lib/app-utils/platform-marketing-host.d.ts +33 -0
  530. package/src/lib/app-utils/platform-marketing-host.js +97 -0
  531. package/src/lib/app-utils/platform-marketing-host.js.map +1 -0
  532. package/src/lib/app-utils/platform-visitor-consent.d.ts +252 -0
  533. package/src/lib/app-utils/platform-visitor-consent.js +533 -0
  534. package/src/lib/app-utils/platform-visitor-consent.js.map +1 -0
  535. package/src/lib/app-utils/plugin-api-cross-origin.d.ts +61 -0
  536. package/src/lib/app-utils/plugin-api-cross-origin.js +202 -0
  537. package/src/lib/app-utils/plugin-api-cross-origin.js.map +1 -0
  538. package/src/lib/app-utils/plugin-api-rate-limit.d.ts +192 -0
  539. package/src/lib/app-utils/plugin-api-rate-limit.js +270 -0
  540. package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -0
  541. package/src/lib/app-utils/plugin-artifact-path.d.ts +32 -0
  542. package/src/lib/app-utils/plugin-artifact-path.js +33 -0
  543. package/src/lib/app-utils/plugin-artifact-path.js.map +1 -0
  544. package/src/lib/app-utils/plugin-bundle-checks.d.ts +148 -0
  545. package/src/lib/app-utils/plugin-bundle-checks.js +989 -0
  546. package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -0
  547. package/src/lib/app-utils/plugin-manifest.d.ts +516 -0
  548. package/src/lib/app-utils/plugin-manifest.js +687 -0
  549. package/src/lib/app-utils/plugin-manifest.js.map +1 -0
  550. package/src/lib/app-utils/published-legal-pages.d.ts +71 -0
  551. package/src/lib/app-utils/published-legal-pages.js +90 -0
  552. package/src/lib/app-utils/published-legal-pages.js.map +1 -0
  553. package/src/lib/app-utils/publisher-agreement.d.ts +254 -0
  554. package/src/lib/app-utils/publisher-agreement.js +274 -0
  555. package/src/lib/app-utils/publisher-agreement.js.map +1 -0
  556. package/src/lib/app-utils/publisher-attestation.d.ts +99 -0
  557. package/src/lib/app-utils/publisher-attestation.js +158 -0
  558. package/src/lib/app-utils/publisher-attestation.js.map +1 -0
  559. package/src/lib/app-utils/recipient-email-render.d.ts +216 -0
  560. package/src/lib/app-utils/recipient-email-render.js +221 -0
  561. package/src/lib/app-utils/recipient-email-render.js.map +1 -0
  562. package/src/lib/app-utils/redispatch-caught-error.d.ts +38 -0
  563. package/src/lib/app-utils/redispatch-caught-error.js +46 -0
  564. package/src/lib/app-utils/redispatch-caught-error.js.map +1 -0
  565. package/src/lib/app-utils/registering-plugin.d.ts +19 -0
  566. package/src/lib/app-utils/registering-plugin.js +38 -0
  567. package/src/lib/app-utils/registering-plugin.js.map +1 -0
  568. package/src/lib/app-utils/release-flags.d.ts +283 -0
  569. package/src/lib/app-utils/release-flags.js +518 -0
  570. package/src/lib/app-utils/release-flags.js.map +1 -0
  571. package/src/lib/app-utils/repair-canvas-nodes.d.ts +130 -0
  572. package/src/lib/app-utils/repair-canvas-nodes.js +298 -0
  573. package/src/lib/app-utils/repair-canvas-nodes.js.map +1 -0
  574. package/src/lib/app-utils/repeat-infringer.d.ts +166 -0
  575. package/src/lib/app-utils/repeat-infringer.js +188 -0
  576. package/src/lib/app-utils/repeat-infringer.js.map +1 -0
  577. package/src/lib/app-utils/repeat-sources.d.ts +115 -0
  578. package/src/lib/app-utils/repeat-sources.js +86 -0
  579. package/src/lib/app-utils/repeat-sources.js.map +1 -0
  580. package/src/lib/app-utils/request-geo.d.ts +114 -0
  581. package/src/lib/app-utils/request-geo.js +247 -0
  582. package/src/lib/app-utils/request-geo.js.map +1 -0
  583. package/src/lib/app-utils/request-ip.d.ts +213 -0
  584. package/src/lib/app-utils/request-ip.js +344 -0
  585. package/src/lib/app-utils/request-ip.js.map +1 -0
  586. package/src/lib/app-utils/resolve-named-tokens.d.ts +26 -0
  587. package/src/lib/app-utils/resolve-named-tokens.js +59 -0
  588. package/src/lib/app-utils/resolve-named-tokens.js.map +1 -0
  589. package/src/lib/app-utils/responsive-typography-sx.d.ts +77 -0
  590. package/src/lib/app-utils/responsive-typography-sx.js +122 -0
  591. package/src/lib/app-utils/responsive-typography-sx.js.map +1 -0
  592. package/src/lib/app-utils/reusable-component-keys.d.ts +135 -0
  593. package/src/lib/app-utils/reusable-component-keys.js +140 -0
  594. package/src/lib/app-utils/reusable-component-keys.js.map +1 -0
  595. package/src/lib/app-utils/reusable-prop-values.d.ts +199 -0
  596. package/src/lib/app-utils/reusable-prop-values.js +494 -0
  597. package/src/lib/app-utils/reusable-prop-values.js.map +1 -0
  598. package/src/lib/app-utils/safe-json-ld.d.ts +29 -0
  599. package/src/lib/app-utils/safe-json-ld.js +37 -0
  600. package/src/lib/app-utils/safe-json-ld.js.map +1 -0
  601. package/src/lib/app-utils/sanitize-svg.d.ts +55 -0
  602. package/src/lib/app-utils/sanitize-svg.js +460 -0
  603. package/src/lib/app-utils/sanitize-svg.js.map +1 -0
  604. package/src/lib/app-utils/scheme-sx.d.ts +84 -0
  605. package/src/lib/app-utils/scheme-sx.js +148 -0
  606. package/src/lib/app-utils/scheme-sx.js.map +1 -0
  607. package/src/lib/app-utils/scope-tokens.d.ts +249 -0
  608. package/src/lib/app-utils/scope-tokens.js +331 -0
  609. package/src/lib/app-utils/scope-tokens.js.map +1 -0
  610. package/src/lib/app-utils/screen-link-context-value.d.ts +57 -0
  611. package/src/lib/app-utils/screen-link-context-value.js +43 -0
  612. package/src/lib/app-utils/screen-link-context-value.js.map +1 -0
  613. package/src/lib/app-utils/screen-link-context.d.ts +185 -0
  614. package/src/lib/app-utils/screen-link-context.js +304 -0
  615. package/src/lib/app-utils/screen-link-context.js.map +1 -0
  616. package/src/lib/app-utils/screen-link-value.d.ts +269 -0
  617. package/src/lib/app-utils/screen-link-value.js +384 -0
  618. package/src/lib/app-utils/screen-link-value.js.map +1 -0
  619. package/src/lib/app-utils/screen-route.d.ts +669 -0
  620. package/src/lib/app-utils/screen-route.js +751 -0
  621. package/src/lib/app-utils/screen-route.js.map +1 -0
  622. package/src/lib/app-utils/screen-seo-fields.d.ts +37 -0
  623. package/src/lib/app-utils/screen-seo-fields.js +42 -0
  624. package/src/lib/app-utils/screen-seo-fields.js.map +1 -0
  625. package/src/lib/app-utils/search-indexing.d.ts +162 -0
  626. package/src/lib/app-utils/search-indexing.js +207 -0
  627. package/src/lib/app-utils/search-indexing.js.map +1 -0
  628. package/src/lib/app-utils/seo-listing-fields.d.ts +70 -0
  629. package/src/lib/app-utils/seo-listing-fields.js +75 -0
  630. package/src/lib/app-utils/seo-listing-fields.js.map +1 -0
  631. package/src/lib/app-utils/seo-locale.d.ts +119 -0
  632. package/src/lib/app-utils/seo-locale.js +133 -0
  633. package/src/lib/app-utils/seo-locale.js.map +1 -0
  634. package/src/lib/app-utils/seo-title-variables.d.ts +149 -0
  635. package/src/lib/app-utils/seo-title-variables.js +190 -0
  636. package/src/lib/app-utils/seo-title-variables.js.map +1 -0
  637. package/src/lib/app-utils/seo-title.d.ts +70 -0
  638. package/src/lib/app-utils/seo-title.js +117 -0
  639. package/src/lib/app-utils/seo-title.js.map +1 -0
  640. package/src/lib/app-utils/server.d.ts +174 -0
  641. package/src/lib/app-utils/server.js +314 -0
  642. package/src/lib/app-utils/server.js.map +1 -0
  643. package/src/lib/app-utils/site-context.d.ts +106 -0
  644. package/src/lib/app-utils/site-context.js +100 -0
  645. package/src/lib/app-utils/site-context.js.map +1 -0
  646. package/src/lib/app-utils/sitemap.d.ts +117 -0
  647. package/src/lib/app-utils/sitemap.js +183 -0
  648. package/src/lib/app-utils/sitemap.js.map +1 -0
  649. package/src/lib/app-utils/social-image.d.ts +112 -0
  650. package/src/lib/app-utils/social-image.js +191 -0
  651. package/src/lib/app-utils/social-image.js.map +1 -0
  652. package/src/lib/app-utils/starter-templates.d.ts +99 -0
  653. package/src/lib/app-utils/starter-templates.js +579 -0
  654. package/src/lib/app-utils/starter-templates.js.map +1 -0
  655. package/src/lib/app-utils/stored-nodes.d.ts +120 -0
  656. package/src/lib/app-utils/stored-nodes.js +174 -0
  657. package/src/lib/app-utils/stored-nodes.js.map +1 -0
  658. package/src/lib/app-utils/strip-undefined.d.ts +59 -0
  659. package/src/lib/app-utils/strip-undefined.js +95 -0
  660. package/src/lib/app-utils/strip-undefined.js.map +1 -0
  661. package/src/lib/app-utils/stripe-deployment-mode.d.ts +47 -0
  662. package/src/lib/app-utils/stripe-deployment-mode.js +70 -0
  663. package/src/lib/app-utils/stripe-deployment-mode.js.map +1 -0
  664. package/src/lib/app-utils/support-tiers.d.ts +108 -0
  665. package/src/lib/app-utils/support-tiers.js +201 -0
  666. package/src/lib/app-utils/support-tiers.js.map +1 -0
  667. package/src/lib/app-utils/timezone-geo-hint.d.ts +36 -0
  668. package/src/lib/app-utils/timezone-geo-hint.js +180 -0
  669. package/src/lib/app-utils/timezone-geo-hint.js.map +1 -0
  670. package/src/lib/app-utils/upload-cors.d.ts +155 -0
  671. package/src/lib/app-utils/upload-cors.js +254 -0
  672. package/src/lib/app-utils/upload-cors.js.map +1 -0
  673. package/src/lib/app-utils/upload-inspection.d.ts +159 -0
  674. package/src/lib/app-utils/upload-inspection.js +539 -0
  675. package/src/lib/app-utils/upload-inspection.js.map +1 -0
  676. package/src/lib/app-utils/url-slug.d.ts +40 -0
  677. package/src/lib/app-utils/url-slug.js +42 -0
  678. package/src/lib/app-utils/url-slug.js.map +1 -0
  679. package/src/lib/app-utils/usage-budget.d.ts +429 -0
  680. package/src/lib/app-utils/usage-budget.js +421 -0
  681. package/src/lib/app-utils/usage-budget.js.map +1 -0
  682. package/src/lib/app-utils/variables.d.ts +96 -0
  683. package/src/lib/app-utils/variables.js +233 -0
  684. package/src/lib/app-utils/variables.js.map +1 -0
  685. package/src/lib/app-utils/video-asset-facts.d.ts +61 -0
  686. package/src/lib/app-utils/video-asset-facts.js +70 -0
  687. package/src/lib/app-utils/video-asset-facts.js.map +1 -0
  688. package/src/lib/app-utils/video-object.d.ts +89 -0
  689. package/src/lib/app-utils/video-object.js +245 -0
  690. package/src/lib/app-utils/video-object.js.map +1 -0
  691. package/src/lib/app-utils/visitor-consent.d.ts +757 -0
  692. package/src/lib/app-utils/visitor-consent.js +981 -0
  693. package/src/lib/app-utils/visitor-consent.js.map +1 -0
  694. package/src/lib/app-utils/visitor-record-ceiling.d.ts +223 -0
  695. package/src/lib/app-utils/visitor-record-ceiling.js +215 -0
  696. package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -0
  697. package/src/lib/app-utils/web-vitals-rum.d.ts +53 -0
  698. package/src/lib/app-utils/web-vitals-rum.js +278 -0
  699. package/src/lib/app-utils/web-vitals-rum.js.map +1 -0
  700. package/src/lib/app-utils/webhook-delivery.d.ts +324 -0
  701. package/src/lib/app-utils/webhook-delivery.js +413 -0
  702. package/src/lib/app-utils/webhook-delivery.js.map +1 -0
  703. package/src/lib/app-utils/where-used.d.ts +57 -0
  704. package/src/lib/app-utils/where-used.js +59 -0
  705. package/src/lib/app-utils/where-used.js.map +1 -0
  706. package/src/lib/app-utils/wistia-embed.d.ts +86 -0
  707. package/src/lib/app-utils/wistia-embed.js +119 -0
  708. package/src/lib/app-utils/wistia-embed.js.map +1 -0
  709. package/src/lib/app-utils/workflows.d.ts +136 -0
  710. package/src/lib/app-utils/workflows.js +346 -0
  711. package/src/lib/app-utils/workflows.js.map +1 -0
  712. package/src/lib/canvas-manager/canvas-manager-tree.d.ts +109 -0
  713. package/src/lib/canvas-manager/canvas-manager-tree.js +139 -0
  714. package/src/lib/canvas-manager/canvas-manager-tree.js.map +1 -0
  715. package/src/lib/canvas-manager/canvas-manager.d.ts +549 -0
  716. package/src/lib/canvas-manager/canvas-manager.js +1311 -0
  717. package/src/lib/canvas-manager/canvas-manager.js.map +1 -0
  718. package/src/lib/canvas-manager/index.d.ts +20 -0
  719. package/src/lib/canvas-manager/index.js +21 -0
  720. package/src/lib/canvas-manager/index.js.map +1 -0
  721. package/src/lib/canvas-manager/stores/index.d.ts +17 -0
  722. package/src/lib/canvas-manager/stores/index.js +18 -0
  723. package/src/lib/canvas-manager/stores/index.js.map +1 -0
  724. package/src/lib/canvas-manager/stores/node.store.d.ts +30 -0
  725. package/src/lib/canvas-manager/stores/node.store.js +45 -0
  726. package/src/lib/canvas-manager/stores/node.store.js.map +1 -0
  727. package/src/lib/components-manager/components-manager.d.ts +56 -0
  728. package/src/lib/components-manager/components-manager.js +191 -0
  729. package/src/lib/components-manager/components-manager.js.map +1 -0
  730. package/src/lib/components-manager/index.d.ts +18 -0
  731. package/src/lib/components-manager/index.js +19 -0
  732. package/src/lib/components-manager/index.js.map +1 -0
  733. package/src/lib/emit-manager/emit-manager.d.ts +56 -0
  734. package/src/lib/emit-manager/emit-manager.js +60 -0
  735. package/src/lib/emit-manager/emit-manager.js.map +1 -0
  736. package/src/lib/emit-manager/index.d.ts +18 -0
  737. package/src/lib/emit-manager/index.js +19 -0
  738. package/src/lib/emit-manager/index.js.map +1 -0
  739. package/src/lib/foundation/constants/_internal.d.ts +18 -0
  740. package/src/lib/foundation/constants/_internal.js +62 -0
  741. package/src/lib/foundation/constants/_internal.js.map +1 -0
  742. package/src/lib/foundation/constants/app.d.ts +23 -0
  743. package/src/lib/foundation/constants/app.js +25 -0
  744. package/src/lib/foundation/constants/app.js.map +1 -0
  745. package/src/lib/foundation/constants/canvas.d.ts +18 -0
  746. package/src/lib/foundation/constants/canvas.js +18 -0
  747. package/src/lib/foundation/constants/canvas.js.map +1 -0
  748. package/src/lib/foundation/constants/components.d.ts +54 -0
  749. package/src/lib/foundation/constants/components.js +61 -0
  750. package/src/lib/foundation/constants/components.js.map +1 -0
  751. package/src/lib/foundation/constants/shared.d.ts +50 -0
  752. package/src/lib/foundation/constants/shared.js +49 -0
  753. package/src/lib/foundation/constants/shared.js.map +1 -0
  754. package/src/lib/foundation/constants/symbol.d.ts +63 -0
  755. package/src/lib/foundation/constants/symbol.js +75 -0
  756. package/src/lib/foundation/constants/symbol.js.map +1 -0
  757. package/src/lib/foundation/definitions/components.types.d.ts +372 -0
  758. package/src/lib/foundation/definitions/components.types.js +180 -0
  759. package/src/lib/foundation/definitions/components.types.js.map +1 -0
  760. package/src/lib/foundation/definitions/contact.types.d.ts +73 -0
  761. package/src/lib/foundation/definitions/contact.types.js +107 -0
  762. package/src/lib/foundation/definitions/contact.types.js.map +1 -0
  763. package/src/lib/foundation/definitions/host-content-collections.d.ts +137 -0
  764. package/src/lib/foundation/definitions/host-content-collections.js +219 -0
  765. package/src/lib/foundation/definitions/host-content-collections.js.map +1 -0
  766. package/src/lib/foundation/definitions/org-billing.types.d.ts +1361 -0
  767. package/src/lib/foundation/definitions/org-billing.types.js +77 -0
  768. package/src/lib/foundation/definitions/org-billing.types.js.map +1 -0
  769. package/src/lib/foundation/definitions/organization.types.d.ts +307 -0
  770. package/src/lib/foundation/definitions/organization.types.js +42 -0
  771. package/src/lib/foundation/definitions/organization.types.js.map +1 -0
  772. package/src/lib/foundation/definitions/platform.types.d.ts +1326 -0
  773. package/src/lib/foundation/definitions/platform.types.js +124 -0
  774. package/src/lib/foundation/definitions/platform.types.js.map +1 -0
  775. package/src/lib/foundation/definitions/property-kinds.d.ts +189 -0
  776. package/src/lib/foundation/definitions/property-kinds.js +565 -0
  777. package/src/lib/foundation/definitions/property-kinds.js.map +1 -0
  778. package/src/lib/foundation/definitions/shared.d.ts +23 -0
  779. package/src/lib/foundation/definitions/shared.js +18 -0
  780. package/src/lib/foundation/definitions/shared.js.map +1 -0
  781. package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +249 -0
  782. package/src/lib/foundation/definitions/write-deny-coverage.util.js +499 -0
  783. package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -0
  784. package/src/lib/foundation/index.d.ts +32 -0
  785. package/src/lib/foundation/index.js +67 -0
  786. package/src/lib/foundation/index.js.map +1 -0
  787. package/src/lib/lifecycle.d.ts +24 -0
  788. package/src/lib/lifecycle.js +39 -0
  789. package/src/lib/lifecycle.js.map +1 -0
  790. package/src/lib/mst/common.d.ts +17 -0
  791. package/src/lib/mst/common.js +23 -0
  792. package/src/lib/mst/common.js.map +1 -0
  793. package/src/lib/mst/index.d.ts +19 -0
  794. package/src/lib/mst/index.js +20 -0
  795. package/src/lib/mst/index.js.map +1 -0
  796. package/src/lib/mst/json.d.ts +22 -0
  797. package/src/lib/mst/json.js +23 -0
  798. package/src/lib/mst/json.js.map +1 -0
  799. package/src/lib/mst/types.d.ts +20 -0
  800. package/src/lib/mst/types.js +18 -0
  801. package/src/lib/mst/types.js.map +1 -0
  802. package/src/lib/plugin-manager/billing-webhook-hooks.d.ts +77 -0
  803. package/src/lib/plugin-manager/billing-webhook-hooks.js +55 -0
  804. package/src/lib/plugin-manager/billing-webhook-hooks.js.map +1 -0
  805. package/src/lib/plugin-manager/commerce-zone-props.d.ts +172 -0
  806. package/src/lib/plugin-manager/commerce-zone-props.js +31 -0
  807. package/src/lib/plugin-manager/commerce-zone-props.js.map +1 -0
  808. package/src/lib/plugin-manager/custom-fields.d.ts +60 -0
  809. package/src/lib/plugin-manager/custom-fields.js +39 -0
  810. package/src/lib/plugin-manager/custom-fields.js.map +1 -0
  811. package/src/lib/plugin-manager/editor-sessions.d.ts +109 -0
  812. package/src/lib/plugin-manager/editor-sessions.js +137 -0
  813. package/src/lib/plugin-manager/editor-sessions.js.map +1 -0
  814. package/src/lib/plugin-manager/enabled-plugins.d.ts +438 -0
  815. package/src/lib/plugin-manager/enabled-plugins.js +403 -0
  816. package/src/lib/plugin-manager/enabled-plugins.js.map +1 -0
  817. package/src/lib/plugin-manager/feature-plugins.d.ts +1314 -0
  818. package/src/lib/plugin-manager/feature-plugins.js +609 -0
  819. package/src/lib/plugin-manager/feature-plugins.js.map +1 -0
  820. package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +11 -0
  821. package/src/lib/plugin-manager/first-party-plugins.generated.js +149 -0
  822. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -0
  823. package/src/lib/plugin-manager/index.d.ts +42 -0
  824. package/src/lib/plugin-manager/index.js +46 -0
  825. package/src/lib/plugin-manager/index.js.map +1 -0
  826. package/src/lib/plugin-manager/install-presets.d.ts +93 -0
  827. package/src/lib/plugin-manager/install-presets.js +86 -0
  828. package/src/lib/plugin-manager/install-presets.js.map +1 -0
  829. package/src/lib/plugin-manager/media-delivery-provider.d.ts +124 -0
  830. package/src/lib/plugin-manager/media-delivery-provider.js +53 -0
  831. package/src/lib/plugin-manager/media-delivery-provider.js.map +1 -0
  832. package/src/lib/plugin-manager/order-fulfilment.d.ts +142 -0
  833. package/src/lib/plugin-manager/order-fulfilment.js +104 -0
  834. package/src/lib/plugin-manager/order-fulfilment.js.map +1 -0
  835. package/src/lib/plugin-manager/plugin-activity-actions.d.ts +122 -0
  836. package/src/lib/plugin-manager/plugin-activity-actions.js +140 -0
  837. package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -0
  838. package/src/lib/plugin-manager/plugin-bridge.d.ts +98 -0
  839. package/src/lib/plugin-manager/plugin-bridge.js +154 -0
  840. package/src/lib/plugin-manager/plugin-bridge.js.map +1 -0
  841. package/src/lib/plugin-manager/plugin-config.d.ts +148 -0
  842. package/src/lib/plugin-manager/plugin-config.js +228 -0
  843. package/src/lib/plugin-manager/plugin-config.js.map +1 -0
  844. package/src/lib/plugin-manager/plugin-console-crons.d.ts +139 -0
  845. package/src/lib/plugin-manager/plugin-console-crons.js +177 -0
  846. package/src/lib/plugin-manager/plugin-console-crons.js.map +1 -0
  847. package/src/lib/plugin-manager/plugin-contact-capture.d.ts +220 -0
  848. package/src/lib/plugin-manager/plugin-contact-capture.js +89 -0
  849. package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -0
  850. package/src/lib/plugin-manager/plugin-contributions.d.ts +244 -0
  851. package/src/lib/plugin-manager/plugin-contributions.js +283 -0
  852. package/src/lib/plugin-manager/plugin-contributions.js.map +1 -0
  853. package/src/lib/plugin-manager/plugin-entitlement-keys.d.ts +169 -0
  854. package/src/lib/plugin-manager/plugin-entitlement-keys.js +84 -0
  855. package/src/lib/plugin-manager/plugin-entitlement-keys.js.map +1 -0
  856. package/src/lib/plugin-manager/plugin-entitlements.d.ts +181 -0
  857. package/src/lib/plugin-manager/plugin-entitlements.js +188 -0
  858. package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -0
  859. package/src/lib/plugin-manager/plugin-events.d.ts +145 -0
  860. package/src/lib/plugin-manager/plugin-events.js +79 -0
  861. package/src/lib/plugin-manager/plugin-events.js.map +1 -0
  862. package/src/lib/plugin-manager/plugin-figures.d.ts +251 -0
  863. package/src/lib/plugin-manager/plugin-figures.js +252 -0
  864. package/src/lib/plugin-manager/plugin-figures.js.map +1 -0
  865. package/src/lib/plugin-manager/plugin-host-collections.d.ts +146 -0
  866. package/src/lib/plugin-manager/plugin-host-collections.js +116 -0
  867. package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -0
  868. package/src/lib/plugin-manager/plugin-jobs.d.ts +130 -0
  869. package/src/lib/plugin-manager/plugin-jobs.js +182 -0
  870. package/src/lib/plugin-manager/plugin-jobs.js.map +1 -0
  871. package/src/lib/plugin-manager/plugin-loader.d.ts +86 -0
  872. package/src/lib/plugin-manager/plugin-loader.js +223 -0
  873. package/src/lib/plugin-manager/plugin-loader.js.map +1 -0
  874. package/src/lib/plugin-manager/plugin-manager.d.ts +95 -0
  875. package/src/lib/plugin-manager/plugin-manager.js +343 -0
  876. package/src/lib/plugin-manager/plugin-manager.js.map +1 -0
  877. package/src/lib/plugin-manager/plugin-metered-lines.d.ts +97 -0
  878. package/src/lib/plugin-manager/plugin-metered-lines.js +123 -0
  879. package/src/lib/plugin-manager/plugin-metered-lines.js.map +1 -0
  880. package/src/lib/plugin-manager/plugin-org-erasure.d.ts +52 -0
  881. package/src/lib/plugin-manager/plugin-org-erasure.js +100 -0
  882. package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -0
  883. package/src/lib/plugin-manager/plugin-permissions.d.ts +69 -0
  884. package/src/lib/plugin-manager/plugin-permissions.js +77 -0
  885. package/src/lib/plugin-manager/plugin-permissions.js.map +1 -0
  886. package/src/lib/plugin-manager/plugin-person-erasure.d.ts +58 -0
  887. package/src/lib/plugin-manager/plugin-person-erasure.js +109 -0
  888. package/src/lib/plugin-manager/plugin-person-erasure.js.map +1 -0
  889. package/src/lib/plugin-manager/plugin-record-cards.d.ts +99 -0
  890. package/src/lib/plugin-manager/plugin-record-cards.js +59 -0
  891. package/src/lib/plugin-manager/plugin-record-cards.js.map +1 -0
  892. package/src/lib/plugin-manager/plugin-record-facts.d.ts +111 -0
  893. package/src/lib/plugin-manager/plugin-record-facts.js +51 -0
  894. package/src/lib/plugin-manager/plugin-record-facts.js.map +1 -0
  895. package/src/lib/plugin-manager/plugin-record-routes.d.ts +129 -0
  896. package/src/lib/plugin-manager/plugin-record-routes.js +93 -0
  897. package/src/lib/plugin-manager/plugin-record-routes.js.map +1 -0
  898. package/src/lib/plugin-manager/plugin-record-timeline.d.ts +147 -0
  899. package/src/lib/plugin-manager/plugin-record-timeline.js +39 -0
  900. package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -0
  901. package/src/lib/plugin-manager/plugin-resource-drafts.d.ts +137 -0
  902. package/src/lib/plugin-manager/plugin-resource-drafts.js +51 -0
  903. package/src/lib/plugin-manager/plugin-resource-drafts.js.map +1 -0
  904. package/src/lib/plugin-manager/plugin-services.d.ts +94 -0
  905. package/src/lib/plugin-manager/plugin-services.js +153 -0
  906. package/src/lib/plugin-manager/plugin-services.js.map +1 -0
  907. package/src/lib/plugin-manager/plugin-styles-ui.d.ts +71 -0
  908. package/src/lib/plugin-manager/plugin-styles-ui.js +80 -0
  909. package/src/lib/plugin-manager/plugin-styles-ui.js.map +1 -0
  910. package/src/lib/plugin-manager/plugin-styles.d.ts +176 -0
  911. package/src/lib/plugin-manager/plugin-styles.js +186 -0
  912. package/src/lib/plugin-manager/plugin-styles.js.map +1 -0
  913. package/src/lib/plugin-manager/plugin-subprocessors.d.ts +135 -0
  914. package/src/lib/plugin-manager/plugin-subprocessors.js +129 -0
  915. package/src/lib/plugin-manager/plugin-subprocessors.js.map +1 -0
  916. package/src/lib/plugin-manager/plugin-tax-profile.d.ts +84 -0
  917. package/src/lib/plugin-manager/plugin-tax-profile.js +39 -0
  918. package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -0
  919. package/src/lib/plugin-manager/plugin-user-erasure.d.ts +53 -0
  920. package/src/lib/plugin-manager/plugin-user-erasure.js +84 -0
  921. package/src/lib/plugin-manager/plugin-user-erasure.js.map +1 -0
  922. package/src/lib/plugin-manager/plugin-zones.d.ts +121 -0
  923. package/src/lib/plugin-manager/plugin-zones.js +74 -0
  924. package/src/lib/plugin-manager/plugin-zones.js.map +1 -0
  925. package/src/lib/plugin-manager/realm-plugins.d.ts +112 -0
  926. package/src/lib/plugin-manager/realm-plugins.js +196 -0
  927. package/src/lib/plugin-manager/realm-plugins.js.map +1 -0
  928. package/src/lib/plugin-manager/realm-server.d.ts +54 -0
  929. package/src/lib/plugin-manager/realm-server.js +88 -0
  930. package/src/lib/plugin-manager/realm-server.js.map +1 -0
  931. package/src/lib/plugin-manager/record-zone-props.d.ts +126 -0
  932. package/src/lib/plugin-manager/record-zone-props.js +31 -0
  933. package/src/lib/plugin-manager/record-zone-props.js.map +1 -0
  934. package/src/lib/plugin-manager/site-page-hooks.d.ts +102 -0
  935. package/src/lib/plugin-manager/site-page-hooks.js +114 -0
  936. package/src/lib/plugin-manager/site-page-hooks.js.map +1 -0
  937. package/src/lib/plugin-manager/site-runtime.d.ts +57 -0
  938. package/src/lib/plugin-manager/site-runtime.js +25 -0
  939. package/src/lib/plugin-manager/site-runtime.js.map +1 -0
  940. package/src/lib/plugin-manager/usage-alert-contributors.d.ts +115 -0
  941. package/src/lib/plugin-manager/usage-alert-contributors.js +106 -0
  942. package/src/lib/plugin-manager/usage-alert-contributors.js.map +1 -0
  943. package/src/lib/types/ast.d.ts +199 -0
  944. package/src/lib/types/ast.js +20 -0
  945. package/src/lib/types/ast.js.map +1 -0
  946. package/src/lib/types/index.d.ts +20 -0
  947. package/src/lib/types/index.js +21 -0
  948. package/src/lib/types/index.js.map +1 -0
  949. package/src/lib/types/nodes.d.ts +608 -0
  950. package/src/lib/types/nodes.js +28 -0
  951. package/src/lib/types/nodes.js.map +1 -0
  952. package/src/lib/types/routing.d.ts +17 -0
  953. package/src/lib/types/routing.js +18 -0
  954. package/src/lib/types/routing.js.map +1 -0
  955. package/src/lib/types/screen.d.ts +23 -0
  956. package/src/lib/types/screen.js +18 -0
  957. package/src/lib/types/screen.js.map +1 -0
  958. package/src/lib/utils.d.ts +25 -0
  959. package/src/lib/utils.js +42 -0
  960. package/src/lib/utils.js.map +1 -0
  961. package/src/server.d.ts +37 -0
  962. package/src/server.js +55 -0
  963. package/src/server.js.map +1 -0
@@ -0,0 +1,1031 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
3
+ /**
4
+ * @license
5
+ * Copyright 2026 Aglyn LLC
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ */ import { resolveAuthoredEventName, sanitizeEventParams } from "./analytics-events.js";
19
+ import { sanitizeAuthorHtml } from "./author-html.js";
20
+ import { CRM_TASK_MAX_DUE_DAYS, isContactLifecycleStage, isCrmActivityKind, isCrmTaskKind } from "./crm-kinds.js";
21
+ import { HOST_EVENT_TYPES } from "./workflows.js";
22
+ /**
23
+ * Actions builder (AGL-148): HubSpot-style event → action automation on
24
+ * top of the AGL-128 event triggers. An action listens for a host event
25
+ * (built-in or a custom name fired by another action), optionally filters
26
+ * on the payload, and runs an ordered step list. Pure types + validation
27
+ * here; the executor lives server-side where the I/O is (tenant utils).
28
+ */ /**
29
+ * Client-side site events (AGL-256) the tenant page runtime emits:
30
+ * element interactions, scroll behavior, dwell time, and exit intent.
31
+ * Trigger config (selector/threshold/path) rides the action's trigger.
32
+ */ export const SITE_EVENT_TYPES = [
33
+ 'scrollDepth',
34
+ 'scrollToElement',
35
+ 'elementClick',
36
+ 'elementVisible',
37
+ // Hover choreography (AGL-562): delegated enter/leave on the trigger
38
+ // selector — the nav-menu/drawer show-hide building blocks.
39
+ 'elementHoverEnter',
40
+ 'elementHoverLeave',
41
+ 'exitIntent',
42
+ 'timeOnPage',
43
+ 'pageVisit'
44
+ ];
45
+ /** Site events that watch a specific element and need a selector. */ export const ELEMENT_SCOPED_SITE_EVENTS = [
46
+ 'scrollToElement',
47
+ 'elementClick',
48
+ 'elementVisible',
49
+ 'elementHoverEnter',
50
+ 'elementHoverLeave'
51
+ ];
52
+ export function isSiteEventType(event) {
53
+ return SITE_EVENT_TYPES.includes(event);
54
+ }
55
+ /** Structured condition operators (AGL-557). */ export const TRIGGER_CONDITION_OPS = [
56
+ 'equals',
57
+ 'contains',
58
+ 'notEmpty'
59
+ ];
60
+ /**
61
+ * Evaluates a structured trigger condition (AGL-557). String-coerces the
62
+ * payload value; `equals`/`contains` compare trimmed + case-insensitive
63
+ * so checkbox values like "Yes" match an author-typed "yes". A missing
64
+ * field never matches (and is "empty" for `notEmpty`); an absent or
65
+ * field-less condition always passes, mirroring the filter's default.
66
+ */ export function evaluateTriggerCondition(condition, payload) {
67
+ var _condition_value;
68
+ var _condition_field;
69
+ const field = condition == null ? void 0 : (_condition_field = condition.field) == null ? void 0 : _condition_field.trim();
70
+ if (!condition || !field) return true;
71
+ const raw = (payload != null ? payload : {})[field];
72
+ const actual = (raw == null ? '' : String(raw)).trim().toLowerCase();
73
+ if (condition.op === 'notEmpty') return actual.length > 0;
74
+ const expected = String((_condition_value = condition.value) != null ? _condition_value : '').trim().toLowerCase();
75
+ if (condition.op === 'equals') return actual === expected;
76
+ if (condition.op === 'contains') {
77
+ return expected.length > 0 && actual.includes(expected);
78
+ }
79
+ return false;
80
+ }
81
+ /** How chained trigger conditions combine (AGL-565). */ export const TRIGGER_COMBINATORS = [
82
+ 'and',
83
+ 'or'
84
+ ];
85
+ /** Cap on chained conditions per trigger (AGL-565). */ export const ACTION_MAX_CONDITIONS = 5;
86
+ /**
87
+ * Normalizes a trigger's condition clauses to a list (AGL-565): the
88
+ * `conditions` array wins when present; a legacy single `condition`
89
+ * (AGL-557) becomes a one-element list. Read-time only — persisted docs
90
+ * are never migrated, so pre-565 single-condition docs keep working
91
+ * unchanged.
92
+ */ export function normalizeTriggerConditions(trigger) {
93
+ const conditions = trigger == null ? void 0 : trigger.conditions;
94
+ if (Array.isArray(conditions)) return conditions.filter(Boolean);
95
+ return (trigger == null ? void 0 : trigger.condition) ? [
96
+ trigger.condition
97
+ ] : [];
98
+ }
99
+ /**
100
+ * Evaluates a trigger's condition list with its combinator (AGL-565):
101
+ * `and` (the default) requires every condition to pass, `or` any one.
102
+ * Per-condition semantics are unchanged from AGL-557
103
+ * (`evaluateTriggerCondition`), and an empty list always passes — which
104
+ * covers every pre-565 doc without conditions.
105
+ */ export function evaluateTriggerConditions(trigger, payload) {
106
+ const conditions = normalizeTriggerConditions(trigger);
107
+ if (!conditions.length) return true;
108
+ return (trigger == null ? void 0 : trigger.combinator) === 'or' ? conditions.some((condition)=>evaluateTriggerCondition(condition, payload)) : conditions.every((condition)=>evaluateTriggerCondition(condition, payload));
109
+ }
110
+ /**
111
+ * The scope key a resumed flow carries to say the wait ended on the CLOCK
112
+ * rather than on the event it was watching for.
113
+ *
114
+ * This is how a `waitForEvent` gets its timeout branch without a nested step
115
+ * list: the flow resumes either way, and the step after it carries a `when`
116
+ * naming this field. Underscored because it shares a namespace with the
117
+ * event payload's own fields, which are merchant-authored form field names.
118
+ */ export const FLOW_TIMED_OUT_FIELD = '_waitTimedOut';
119
+ /**
120
+ * Evaluates a step's own guard, with the trigger's semantics.
121
+ *
122
+ * An absent or clause-less guard passes, exactly as an absent trigger
123
+ * condition does — so every step written before guards existed keeps running.
124
+ */ export function evaluateStepGuard(guard, scope) {
125
+ var _ref;
126
+ const conditions = ((_ref = guard == null ? void 0 : guard.conditions) != null ? _ref : []).filter(Boolean);
127
+ if (!conditions.length) return true;
128
+ return (guard == null ? void 0 : guard.combinator) === 'or' ? conditions.some((condition)=>evaluateTriggerCondition(condition, scope)) : conditions.every((condition)=>evaluateTriggerCondition(condition, scope));
129
+ }
130
+ /** Steps the tenant page runtime executes client-side (AGL-257). */ export const CLIENT_ACTION_STEP_TYPES = new Set([
131
+ 'showOverlay',
132
+ 'stickyNav',
133
+ 'addClass',
134
+ 'removeClass',
135
+ 'toggleClass',
136
+ 'showElement',
137
+ 'hideElement',
138
+ 'toggleElement',
139
+ 'openDrawer',
140
+ 'closeDrawer',
141
+ 'toggleDrawer',
142
+ 'openMenu',
143
+ 'closeMenu',
144
+ 'toggleMenu',
145
+ 'setAttribute',
146
+ 'removeAttribute',
147
+ 'scrollTo',
148
+ 'playVideo',
149
+ 'showHtml',
150
+ 'runJs',
151
+ 'redirect',
152
+ 'trackGaEvent',
153
+ 'siteAlert'
154
+ ]);
155
+ export function isClientActionStep(step) {
156
+ return CLIENT_ACTION_STEP_TYPES.has(step.type);
157
+ }
158
+ /**
159
+ * The steps that suspend a run and continue it later, from a job beat.
160
+ *
161
+ * Named as a set rather than checked inline because three surfaces have to
162
+ * agree on it: the executor stops here and writes an enrollment, the client
163
+ * payload is truncated here, and the validator refuses a flow that waits
164
+ * without a person to wait for.
165
+ */ export const FLOW_SUSPENDING_STEP_TYPES = new Set([
166
+ 'wait',
167
+ 'waitForEvent'
168
+ ]);
169
+ export function isFlowSuspendingStep(step) {
170
+ return FLOW_SUSPENDING_STEP_TYPES.has(step.type);
171
+ }
172
+ /**
173
+ * The steps that act on the CRM (AGL-2605) — named as a set because the
174
+ * executor dispatches all five to one module and the docs list them as one
175
+ * group, and a step added to the union but not here would be a server step
176
+ * the executor silently skipped.
177
+ */ export const CRM_ACTION_STEP_TYPES = new Set([
178
+ 'setContactStage',
179
+ 'addContactTag',
180
+ 'assignContactOwner',
181
+ 'createCrmTask',
182
+ 'logCrmActivity'
183
+ ]);
184
+ export function isCrmActionStep(step) {
185
+ return CRM_ACTION_STEP_TYPES.has(step.type);
186
+ }
187
+ /** Longest tag an automation may write — the console's own tag field cap. */ export const CONTACT_TAG_MAX_LENGTH = 60;
188
+ /*
189
+ * THE RECIPES (AGL-2626).
190
+ *
191
+ * A recipe is a ready-to-edit action — a trigger, its conditions and an
192
+ * ordered step list — built from the vocabulary the editor already offers
193
+ * and handed to the editor as a draft. Nothing is written until the person
194
+ * saves, and every field is theirs to change first: the recipe decides
195
+ * where the editor starts, not what the site runs.
196
+ *
197
+ * Defined here, beside the step catalog, rather than in the builder, so the
198
+ * docs page that lists the recipes and the menu that offers them read ONE
199
+ * list, and so a step the catalog renames or retires breaks a recipe at
200
+ * compile time rather than in a menu nobody tests.
201
+ *
202
+ * Definitions only. Three of the four are complete as written. `tagByForm`
203
+ * needs a form, and a form belongs to a site (`hosts/{hostId}/forms`), so
204
+ * the picker that supplies it is the builder's business and host-scoped by
205
+ * nature. That is the seam an org-level mount keeps: the recipes are the
206
+ * same at either level, and only the form picker knows where it is.
207
+ */ export const CRM_ACTION_RECIPE_IDS = [
208
+ 'welcomeNewLead',
209
+ 'followUpWonDeal',
210
+ 'reengageStaleLead',
211
+ 'tagByForm'
212
+ ];
213
+ /**
214
+ * How long the stale-lead recipe holds before it decides a lead has gone
215
+ * quiet. A week: long enough that a rep who is working the lead has had a
216
+ * chance to move its stage, short enough that a lead nobody touched is
217
+ * still warm when the reminder lands.
218
+ */ export const STALE_LEAD_WAIT_MINUTES = 7 * 24 * 60;
219
+ /**
220
+ * The tag a form's captures get: the form's own name, cut to the tag cap.
221
+ * The name is what the person calls the form, so it is the tag they would
222
+ * have typed; the editor is open to change it before anything is saved.
223
+ */ export function crmRecipeTagForForm(formName) {
224
+ return formName.trim().slice(0, CONTACT_TAG_MAX_LENGTH);
225
+ }
226
+ export const CRM_ACTION_RECIPES = [
227
+ {
228
+ id: 'welcomeNewLead',
229
+ title: 'Welcome a new lead',
230
+ description: 'When a form makes a new contact: rotate in an owner, book a call for ' + 'tomorrow, send a thank-you, and tag them website.',
231
+ /*
232
+ * The owner first, because the task that follows names no assignee and
233
+ * so goes to whoever owns the contact when it is created — the member
234
+ * the rotation just chose. Round robin rather than a named member: a
235
+ * recipe cannot know who is on the team, and the pool under CRM →
236
+ * Settings is the one place that does. On a workspace with no pool the
237
+ * step fails and the run continues, so the call, the email and the tag
238
+ * still land and the run history says who was not assigned.
239
+ *
240
+ * The email comes before any wait, which makes it an immediate reply to
241
+ * what the visitor just did — transactional, sent from the org's own
242
+ * identity, to the address the event carries.
243
+ */ build: ()=>({
244
+ recipe: 'welcomeNewLead',
245
+ name: 'Welcome a new lead',
246
+ trigger: {
247
+ event: 'contactCreated',
248
+ conditions: [
249
+ {
250
+ field: 'source',
251
+ op: 'equals',
252
+ value: 'form'
253
+ }
254
+ ],
255
+ combinator: 'and'
256
+ },
257
+ steps: [
258
+ {
259
+ type: 'assignContactOwner',
260
+ roundRobin: true
261
+ },
262
+ {
263
+ type: 'createCrmTask',
264
+ title: 'Call the new lead',
265
+ kind: 'call',
266
+ dueInDays: 1
267
+ },
268
+ {
269
+ type: 'sendEmail',
270
+ subject: 'Thanks for getting in touch',
271
+ body: 'Thanks for reaching out — we have your message, and someone ' + 'from our team will be in touch within a day.'
272
+ },
273
+ {
274
+ type: 'addContactTag',
275
+ tag: 'website'
276
+ }
277
+ ],
278
+ enabled: true
279
+ })
280
+ },
281
+ {
282
+ id: 'followUpWonDeal',
283
+ title: 'Follow up a won deal',
284
+ description: 'When a deal is won — which makes the contact a Customer on its own — ' + 'book a check-in call a week out.',
285
+ /*
286
+ * No stage step (AGL-2641): the win itself floors the contact at
287
+ * `customer` before `dealWon` is announced, so a step setting the stage
288
+ * here would at best repeat the write and at worst move an evangelist
289
+ * back to customer — a SET, which is what the step is, and not the
290
+ * floor the win applies. The recipe books the follow-up and nothing
291
+ * else.
292
+ */ build: ()=>({
293
+ recipe: 'followUpWonDeal',
294
+ name: 'Follow up a won deal',
295
+ trigger: {
296
+ event: 'dealWon'
297
+ },
298
+ steps: [
299
+ {
300
+ type: 'createCrmTask',
301
+ title: 'Check in with the new customer',
302
+ kind: 'call',
303
+ dueInDays: 7
304
+ }
305
+ ],
306
+ enabled: true
307
+ })
308
+ },
309
+ {
310
+ id: 'reengageStaleLead',
311
+ title: 'Re-engage a stale lead',
312
+ description: 'When a contact becomes a lead: wait a week, and if their stage has ' + 'not moved, book a call to bring them back.',
313
+ /*
314
+ * "Unless the stage moved on" is the wait's own event: the flow watches
315
+ * for the next stage change on this person and gives up after a week.
316
+ * Resumed by the clock, the run carries `_waitTimedOut`, and the task
317
+ * step's guard reads it; resumed by the event, the field is absent and
318
+ * the task is skipped — the lead was worked, and nobody is told to
319
+ * re-engage somebody who just moved to Sales qualified.
320
+ */ build: ()=>({
321
+ recipe: 'reengageStaleLead',
322
+ name: 'Re-engage a stale lead',
323
+ trigger: {
324
+ event: 'contactStageChanged',
325
+ conditions: [
326
+ {
327
+ field: 'lifecycleStage',
328
+ op: 'equals',
329
+ value: 'lead'
330
+ }
331
+ ],
332
+ combinator: 'and'
333
+ },
334
+ steps: [
335
+ {
336
+ type: 'waitForEvent',
337
+ eventName: 'contactStageChanged',
338
+ timeoutMinutes: STALE_LEAD_WAIT_MINUTES
339
+ },
340
+ {
341
+ type: 'createCrmTask',
342
+ title: 'Re-engage a lead that has gone quiet',
343
+ kind: 'call',
344
+ dueInDays: 1,
345
+ when: {
346
+ conditions: [
347
+ {
348
+ field: FLOW_TIMED_OUT_FIELD,
349
+ op: 'notEmpty'
350
+ }
351
+ ]
352
+ }
353
+ }
354
+ ],
355
+ enabled: true
356
+ })
357
+ },
358
+ {
359
+ id: 'tagByForm',
360
+ title: 'Tag by form',
361
+ description: 'When a form you pick makes a new contact: tag them with the form’s ' + 'name.',
362
+ needs: 'form',
363
+ build: (input)=>{
364
+ var _ref;
365
+ const form = input == null ? void 0 : input.form;
366
+ return {
367
+ recipe: 'tagByForm',
368
+ name: form ? `Tag ${form.name.trim()} submissions` : 'Tag by form',
369
+ trigger: {
370
+ event: 'contactCreated',
371
+ conditions: [
372
+ {
373
+ field: 'formId',
374
+ op: 'equals',
375
+ value: (_ref = form == null ? void 0 : form.id) != null ? _ref : ''
376
+ }
377
+ ],
378
+ combinator: 'and'
379
+ },
380
+ steps: [
381
+ {
382
+ type: 'addContactTag',
383
+ tag: form ? crmRecipeTagForForm(form.name) : ''
384
+ }
385
+ ],
386
+ enabled: true
387
+ };
388
+ }
389
+ }
390
+ ];
391
+ /** The recipe with this id, or null for a string that names none. */ export function crmActionRecipe(id) {
392
+ var _CRM_ACTION_RECIPES_find;
393
+ return (_CRM_ACTION_RECIPES_find = CRM_ACTION_RECIPES.find((recipe)=>recipe.id === id)) != null ? _CRM_ACTION_RECIPES_find : null;
394
+ }
395
+ /**
396
+ * The recipe a STORED action came from, read off its document (AGL-2639).
397
+ *
398
+ * Three answers, and the third is the one that matters. A known id: the
399
+ * action was installed from, or begun as, that recipe. `null`: the action
400
+ * was begun blank, or from a recipe this build no longer knows — the
401
+ * editor wrote the field and said "no recipe". `undefined`: the document
402
+ * carries no `recipe` field at all, which is every action saved before the
403
+ * stamp existed. Such an action may well have started from a recipe — the
404
+ * menu opened the editor prefilled long before anything recorded it — so a
405
+ * reader that needs to know whether a site has a recipe treats `undefined`
406
+ * as UNKNOWN, never as absent, and never writes a `null` over it.
407
+ */ export function hostActionRecipeId(action) {
408
+ var _ref;
409
+ var _crmActionRecipe;
410
+ const stamp = action == null ? void 0 : action.recipe;
411
+ if (stamp === undefined) return undefined;
412
+ return (_ref = (_crmActionRecipe = crmActionRecipe(stamp)) == null ? void 0 : _crmActionRecipe.id) != null ? _ref : null;
413
+ }
414
+ export function hostActionDocument(action) {
415
+ var _trigger_conditions, _trigger_combinator;
416
+ const { recipe } = action, rest = _object_without_properties_loose(action, [
417
+ "recipe"
418
+ ]);
419
+ const trigger = action.trigger;
420
+ return _extends({}, rest, {
421
+ trigger: _extends({}, trigger, {
422
+ oncePerVisitor: trigger.oncePerVisitor === true,
423
+ oncePerSession: trigger.oncePerSession === true,
424
+ cooldownMinutes: Number(trigger.cooldownMinutes) >= 1 ? Number(trigger.cooldownMinutes) : null,
425
+ everyTime: trigger.everyTime === true,
426
+ condition: null,
427
+ conditions: (_trigger_conditions = trigger.conditions) != null ? _trigger_conditions : null,
428
+ combinator: (_trigger_combinator = trigger.combinator) != null ? _trigger_combinator : null
429
+ }),
430
+ enabled: action.enabled !== false
431
+ }, recipe !== undefined ? {
432
+ recipe
433
+ } : {});
434
+ }
435
+ /**
436
+ * The step list as the visitor's browser may see it.
437
+ *
438
+ * A client step AFTER a wait must never reach the page. The client engine
439
+ * runs its slice of the list immediately, so shipping the whole list would
440
+ * make "wait three days, then show the popup" show the popup at once — the
441
+ * delay would appear to work on the server, be ignored in the browser, and
442
+ * the two halves of one authored flow would disagree about when it happened.
443
+ *
444
+ * Truncating rather than filtering: everything past the first wait belongs to
445
+ * a run that has not happened yet, whichever side would have executed it.
446
+ */ export function hostActionStepsForClient(steps) {
447
+ const list = steps != null ? steps : [];
448
+ const suspendAt = list.findIndex(isFlowSuspendingStep);
449
+ return [
450
+ ...suspendAt < 0 ? list : list.slice(0, suspendAt)
451
+ ];
452
+ }
453
+ /**
454
+ * Basic presentational interactions (AGL-577): the subset of client steps
455
+ * that are pure DOM choreography — menu/drawer open-close, element
456
+ * show/hide, class toggles, sticky nav, navigation, and client-only
457
+ * alerts. They carry NO server cost and touch NO data, so they run on
458
+ * every plan (the `interactions` feature, on by default everywhere).
459
+ *
460
+ * The powerful client steps stay behind the `actions` entitlement:
461
+ * `showOverlay` (marketing overlays), `showHtml` (arbitrary HTML
462
+ * injection), and `trackGaEvent` (analytics). `runJs` keeps its own
463
+ * higher `webhooks` (Business) gate. Server steps
464
+ * (sendEmail/notifyAdmins/enrollList/updateDataset/assignCampaign) are
465
+ * re-checked against `actions` server-side in `runEventActions`.
466
+ */ export const BASIC_CLIENT_ACTION_STEP_TYPES = new Set([
467
+ 'stickyNav',
468
+ 'addClass',
469
+ 'removeClass',
470
+ 'toggleClass',
471
+ 'showElement',
472
+ 'hideElement',
473
+ 'toggleElement',
474
+ 'openDrawer',
475
+ 'closeDrawer',
476
+ 'toggleDrawer',
477
+ 'openMenu',
478
+ 'closeMenu',
479
+ 'toggleMenu',
480
+ 'setAttribute',
481
+ 'removeAttribute',
482
+ // Moving the page and pressing a player the author placed: no data, no
483
+ // server, and nothing a Video element's own poster does not already do
484
+ // on every plan.
485
+ 'scrollTo',
486
+ 'playVideo',
487
+ 'redirect',
488
+ 'siteAlert'
489
+ ]);
490
+ /** A client step available on all plans (no `actions` entitlement). */ export function isBasicClientActionStep(step) {
491
+ return BASIC_CLIENT_ACTION_STEP_TYPES.has(step.type);
492
+ }
493
+ /**
494
+ * Whether a client step may run for the given entitlement tier (AGL-577).
495
+ * This is the single source of truth the page enricher uses to trim the
496
+ * client-automation payload per plan:
497
+ *
498
+ * - Basic presentational steps → always (every plan).
499
+ * - `runJs` → `allowJs` (Business `webhooks` tier).
500
+ * - Remaining advanced client steps (overlay / showHtml / analytics) →
501
+ * `actionsEntitled` (`actions` tier).
502
+ *
503
+ * Server steps are not client steps and always return false here; they
504
+ * are dispatched and re-authorized server-side.
505
+ */ export function isClientStepEntitled(step, entitlements) {
506
+ if (!isClientActionStep(step)) return false;
507
+ if (isBasicClientActionStep(step)) return true;
508
+ if (step.type === 'runJs') return entitlements.allowJs;
509
+ return entitlements.actionsEntitled;
510
+ }
511
+ export const ACTION_MAX_STEPS = 10;
512
+ /** Custom-event chaining depth cap (mirrors CROSS_MAX_DEPTH). */ export const ACTION_MAX_EVENT_DEPTH = 3;
513
+ /**
514
+ * Cap on the parameters one `trackGaEvent` step may carry (AGL-1587).
515
+ *
516
+ * Not a storage concern. These pairs are the least trustworthy analytics
517
+ * input on the platform — both halves are typed by a site author and land in
518
+ * that site's own GA4 property — and a bounded list is one an author can read
519
+ * back in full before publishing, which is the only review a parameter ever
520
+ * gets. GA4 caps custom parameters per event as well and drops the overflow
521
+ * without saying so, so an unbounded editor would let an author configure
522
+ * parameters that are never delivered and never explained. Ten, the same
523
+ * ceiling {@link ACTION_MAX_STEPS} puts on the step list itself.
524
+ */ export const ACTION_MAX_EVENT_PARAMS = 10;
525
+ /**
526
+ * Longest analytics parameter NAME GA4 accepts; it drops a longer one on
527
+ * arrival, so a name over this is silence rather than a truncated dimension.
528
+ * The value half is capped by `ANALYTICS_PARAM_MAX_LENGTH`, which truncates
529
+ * instead of dropping.
530
+ */ export const ACTION_EVENT_PARAM_NAME_MAX_LENGTH = 40;
531
+ /** Self-dismiss triggers for shown elements (AGL-589). */ export const ELEMENT_DISMISS_OPTIONS = [
532
+ 'escape',
533
+ 'outsideClick'
534
+ ];
535
+ /** Visibility grace-delay ceiling — enough for hover travel, no dead UIs. */ export const ELEMENT_VISIBILITY_MAX_DELAY_MS = 5000;
536
+ /**
537
+ * How a `scrollTo` step moves the page. Stored in documents; never rename a
538
+ * value. `instant` rather than the DOM's `auto`, because `auto` defers to the
539
+ * site's CSS `scroll-behavior` — a site that sets `smooth` there would animate
540
+ * a scroll the author asked to be instant.
541
+ */ export const SCROLL_TO_BEHAVIORS = [
542
+ 'smooth',
543
+ 'instant'
544
+ ];
545
+ /**
546
+ * The largest offset a `scrollTo` step may leave above its target.
547
+ *
548
+ * The offset exists to clear a sticky header, which is tens of pixels and
549
+ * rarely more than a few hundred with an announcement bar stacked on it. A
550
+ * thousand leaves room for any header while still refusing the extra digit
551
+ * that would park the target off the bottom of the screen.
552
+ */ export const SCROLL_TO_MAX_OFFSET_PX = 1000;
553
+ /** Custom event names: short, no collision with built-ins. */ export const CUSTOM_EVENT_PATTERN = /^[a-zA-Z][a-zA-Z0-9_-]{1,39}$/;
554
+ /**
555
+ * The shortest and longest a flow may wait.
556
+ *
557
+ * The floor is a minute because the resume beat runs on a minute, so anything
558
+ * under one is a delay the scheduler cannot honor and would only read as
559
+ * imprecision. The ceiling is ninety days: long enough for the win-back that
560
+ * is the longest sequence anybody writes, and short enough that an enrollment
561
+ * is not an unbounded lease on a document. A person waiting inside a flow is
562
+ * storage the merchant is not looking at, and a wait measured in years is
563
+ * indistinguishable from one nobody will ever collect.
564
+ */ export const FLOW_WAIT_MIN_MINUTES = 1;
565
+ export const FLOW_WAIT_MAX_MINUTES = 90 * 24 * 60;
566
+ /**
567
+ * The attribute names an interaction may write (AGL-2546).
568
+ *
569
+ * An unrestricted attribute setter is a self-XSS vector authored through the
570
+ * interactions UI: it reaches `href`, `src`, `onclick`, `formaction` and
571
+ * `style`, and on a site with collaborators the author and the victim need
572
+ * not be the same person. `aria-*` and `data-*` carry the entire
573
+ * accessibility use case and none of that exposure.
574
+ *
575
+ * Deliberately NOT solved by an entitlement gate. `runJs` is Business-gated
576
+ * because it is dangerous at any tier; this has to work on every plan,
577
+ * because a screen-reader user's access to a menu is not a paid feature.
578
+ */ export const INTERACTION_ATTRIBUTE_NAME_PATTERN = /^(?:aria|data)-[a-z][a-z0-9-]*$/;
579
+ /**
580
+ * Whether an interaction is allowed to write this attribute name.
581
+ *
582
+ * Case-insensitive because HTML attribute names are, and a rejected name is
583
+ * a no-op rather than an error: a step that cannot run must not break the
584
+ * steps after it in the same automation.
585
+ */ export function isInteractionAttributeAllowed(name) {
586
+ return typeof name === 'string' && INTERACTION_ATTRIBUTE_NAME_PATTERN.test(name.trim().toLowerCase());
587
+ }
588
+ export const HOST_ACTION_STEP_LABELS = {
589
+ runWorkflow: 'Run a workflow',
590
+ siteAlert: 'Show a site alert',
591
+ customEvent: 'Fire a custom event',
592
+ datasetAppend: 'Write to a dataset',
593
+ webhookPost: 'Send a webhook (Business)',
594
+ showOverlay: 'Show a popup or bar',
595
+ stickyNav: 'Make navigation sticky',
596
+ addClass: 'Add a CSS class',
597
+ toggleClass: 'Toggle a CSS class',
598
+ removeClass: 'Remove a CSS class',
599
+ showElement: 'Show an element',
600
+ hideElement: 'Hide an element',
601
+ toggleElement: 'Show/hide an element',
602
+ openDrawer: 'Open a drawer',
603
+ closeDrawer: 'Close a drawer',
604
+ toggleDrawer: 'Open/close a drawer',
605
+ openMenu: 'Open a menu',
606
+ closeMenu: 'Close a menu',
607
+ toggleMenu: 'Open/close a menu',
608
+ setAttribute: 'Set an ARIA or data attribute',
609
+ removeAttribute: 'Remove an ARIA or data attribute',
610
+ scrollTo: 'Scroll to element',
611
+ playVideo: 'Play a video',
612
+ showHtml: 'Show custom HTML',
613
+ runJs: 'Run custom JS (Business)',
614
+ redirect: 'Redirect the visitor',
615
+ trackGaEvent: 'Track an analytics event',
616
+ sendEmail: 'Send an email',
617
+ notifyAdmins: 'Notify site admins',
618
+ enrollList: 'Enroll in a list',
619
+ updateDataset: 'Update a dataset record',
620
+ assignCampaign: 'Assign to a campaign',
621
+ wait: 'Wait',
622
+ waitForEvent: 'Wait for something to happen',
623
+ exitFlow: 'End the flow here',
624
+ setContactStage: 'Set the contact’s lifecycle stage',
625
+ addContactTag: 'Tag the contact',
626
+ assignContactOwner: 'Assign the contact an owner',
627
+ createCrmTask: 'Create a CRM task',
628
+ logCrmActivity: 'Log a CRM activity'
629
+ };
630
+ /**
631
+ * Past-tense phrases for a run summary (AGL-2171).
632
+ *
633
+ * `HOST_ACTION_STEP_LABELS` above names what a step WILL do, in the
634
+ * imperative, for a `Do` select — "Send an email". A run history is the
635
+ * opposite tense and a different audience: it says what already happened,
636
+ * on one line, several steps at a time. `/product/workflows` advertises
637
+ * exactly that shape — `Sent email · saved to Leads · webhook 200`.
638
+ *
639
+ * Two maps rather than one derived from the other, because "Send a webhook
640
+ * (Business)" cannot be mechanically turned into "webhook" — the plan
641
+ * suffix is part of the picker's label and has no business in a log line.
642
+ * Only the steps a SERVER run can perform appear here; the client-side
643
+ * steps run in the visitor's browser and never reach the activity write.
644
+ */ export const HOST_ACTION_STEP_OUTCOMES = {
645
+ runWorkflow: 'ran workflow',
646
+ siteAlert: 'showed an alert',
647
+ customEvent: 'fired an event',
648
+ datasetAppend: 'saved to dataset',
649
+ updateDataset: 'updated dataset',
650
+ webhookPost: 'webhook',
651
+ sendEmail: 'sent email',
652
+ notifyAdmins: 'notified admins',
653
+ enrollList: 'enrolled in list',
654
+ assignCampaign: 'assigned to campaign',
655
+ wait: 'waiting',
656
+ waitForEvent: 'waiting for',
657
+ exitFlow: 'ended the flow',
658
+ setContactStage: 'set stage',
659
+ addContactTag: 'tagged',
660
+ assignContactOwner: 'assigned owner',
661
+ createCrmTask: 'created task',
662
+ logCrmActivity: 'logged activity'
663
+ };
664
+ /**
665
+ * One step's line in a run summary, with the detail that makes it useful.
666
+ *
667
+ * `saved to Leads` beats `saved to dataset`, and `webhook 200` beats
668
+ * `webhook` — the status code is the entire reason anyone opens a run
669
+ * history after a webhook, and it was being discarded on the line it
670
+ * arrived.
671
+ */ export function describeStepOutcome(type, detail) {
672
+ var _HOST_ACTION_STEP_OUTCOMES_type;
673
+ const base = (_HOST_ACTION_STEP_OUTCOMES_type = HOST_ACTION_STEP_OUTCOMES[type]) != null ? _HOST_ACTION_STEP_OUTCOMES_type : String(type);
674
+ const trimmed = detail == null ? void 0 : detail.trim();
675
+ if (!trimmed) return base;
676
+ if (type === 'datasetAppend' || type === 'updateDataset') {
677
+ // `saved to dataset` + `Leads` reads as `saved to Leads`, not
678
+ // `saved to dataset Leads`.
679
+ return `${base.replace(/ dataset$/, '')} ${trimmed}`;
680
+ }
681
+ return `${base} ${trimmed}`;
682
+ }
683
+ /** A whole number of minutes inside the wait band. */ export function isFlowWaitMinutes(value) {
684
+ return Number.isInteger(value) && value >= FLOW_WAIT_MIN_MINUTES && value <= FLOW_WAIT_MAX_MINUTES;
685
+ }
686
+ /** True for a custom (non-built-in) event name an action may fire. */ export function isCustomEventName(event) {
687
+ return !HOST_EVENT_TYPES.includes(event) && CUSTOM_EVENT_PATTERN.test(event);
688
+ }
689
+ /**
690
+ * Validates an action doc shape; returns a human-readable error or null.
691
+ * Server and console share this so bad steps never persist or run.
692
+ */ export function validateHostAction(action) {
693
+ var _ref, _action_steps;
694
+ var _action_name, _action_trigger_event, _action_trigger, _action_trigger_selector, _action_trigger1, _action_trigger2, _action_trigger3, _action_trigger4;
695
+ if (!((_action_name = action.name) == null ? void 0 : _action_name.trim())) return 'Name the action';
696
+ // A stamp is provenance, and provenance naming a recipe that does not
697
+ // exist is a document nothing can read back; `null` and absent both pass.
698
+ if (action.recipe != null && !crmActionRecipe(action.recipe)) {
699
+ return 'Unknown recipe';
700
+ }
701
+ const event = (_ref = (_action_trigger = action.trigger) == null ? void 0 : (_action_trigger_event = _action_trigger.event) == null ? void 0 : _action_trigger_event.trim()) != null ? _ref : '';
702
+ if (!event) return 'Pick a trigger event';
703
+ if (!HOST_EVENT_TYPES.includes(event) && !isSiteEventType(event) && !isCustomEventName(event)) {
704
+ return 'Custom event names are 2–40 letters, digits, dashes';
705
+ }
706
+ // Site-event trigger config (AGL-256; hover events AGL-562).
707
+ if (ELEMENT_SCOPED_SITE_EVENTS.includes(event) && !((_action_trigger1 = action.trigger) == null ? void 0 : (_action_trigger_selector = _action_trigger1.selector) == null ? void 0 : _action_trigger_selector.trim())) {
708
+ return 'This trigger needs a CSS selector';
709
+ }
710
+ if ([
711
+ 'scrollDepth',
712
+ 'timeOnPage'
713
+ ].includes(event) && !(Number((_action_trigger2 = action.trigger) == null ? void 0 : _action_trigger2.threshold) > 0)) {
714
+ return event === 'scrollDepth' ? 'Set the scroll percentage (1–100)' : 'Set the seconds on page';
715
+ }
716
+ // Frequency caps (AGL-274).
717
+ if (((_action_trigger3 = action.trigger) == null ? void 0 : _action_trigger3.cooldownMinutes) != null && !(Number(action.trigger.cooldownMinutes) >= 1)) {
718
+ return 'Cooldown must be at least 1 minute';
719
+ }
720
+ // Structured payload conditions (AGL-557; chained AGL-565).
721
+ const combinator = (_action_trigger4 = action.trigger) == null ? void 0 : _action_trigger4.combinator;
722
+ if (combinator != null && !TRIGGER_COMBINATORS.includes(combinator)) {
723
+ return 'Combine conditions with AND or OR';
724
+ }
725
+ const conditions = normalizeTriggerConditions(action.trigger);
726
+ if (conditions.length > ACTION_MAX_CONDITIONS) {
727
+ return `Conditions are capped at ${ACTION_MAX_CONDITIONS}`;
728
+ }
729
+ for (const [index, condition] of conditions.entries()){
730
+ var _condition_field, _condition_value;
731
+ // Single-condition messages stay exactly as AGL-557 shipped them;
732
+ // the row marker only appears once there are rows to tell apart.
733
+ const where = conditions.length > 1 ? ` (condition ${index + 1})` : '';
734
+ if (!TRIGGER_CONDITION_OPS.includes(condition.op)) {
735
+ return `Pick a condition operator${where}`;
736
+ }
737
+ if (!((_condition_field = condition.field) == null ? void 0 : _condition_field.trim())) {
738
+ return `Name the field the condition checks${where}`;
739
+ }
740
+ if (condition.op !== 'notEmpty' && !((_condition_value = condition.value) == null ? void 0 : _condition_value.trim())) {
741
+ return `Enter the value the condition compares against${where}`;
742
+ }
743
+ }
744
+ const steps = (_action_steps = action.steps) != null ? _action_steps : [];
745
+ if (!steps.length) return 'Add at least one step';
746
+ if (steps.length > ACTION_MAX_STEPS) {
747
+ return `Actions are capped at ${ACTION_MAX_STEPS} steps`;
748
+ }
749
+ for (const [index, step] of steps.entries()){
750
+ var _ref1;
751
+ var _step_when, _step_when1, _step_workflowId, _step_workflowName, _step_message, _step_datasetId, _step_datasetName, _step_webhookId, _step_webhookName, _step_selector, _step_selector1, _step_code, _step_url, _step_title, _step_overlayId, _step_overlayName, _step_listId, _step_listName, _step_datasetId1, _step_datasetName1, _step_campaignId, _step_campaignName;
752
+ const label = `Step ${index + 1}`;
753
+ // A step's own guard, checked with the same messages the trigger's
754
+ // clauses get — one condition editor, one set of complaints about it.
755
+ const guardClauses = ((_ref1 = (_step_when = step.when) == null ? void 0 : _step_when.conditions) != null ? _ref1 : []).filter(Boolean);
756
+ if (guardClauses.length > ACTION_MAX_CONDITIONS) {
757
+ return `${label}: conditions are capped at ${ACTION_MAX_CONDITIONS}`;
758
+ }
759
+ if (((_step_when1 = step.when) == null ? void 0 : _step_when1.combinator) != null && !TRIGGER_COMBINATORS.includes(step.when.combinator)) {
760
+ return `${label}: combine conditions with AND or OR`;
761
+ }
762
+ for (const clause of guardClauses){
763
+ var _clause_field, _clause_value;
764
+ if (!TRIGGER_CONDITION_OPS.includes(clause.op)) {
765
+ return `${label}: pick a condition operator`;
766
+ }
767
+ if (!((_clause_field = clause.field) == null ? void 0 : _clause_field.trim())) {
768
+ return `${label}: name the field the condition checks`;
769
+ }
770
+ if (clause.op !== 'notEmpty' && !((_clause_value = clause.value) == null ? void 0 : _clause_value.trim())) {
771
+ return `${label}: enter the value the condition compares against`;
772
+ }
773
+ }
774
+ if (step.type === 'wait' && !isFlowWaitMinutes(step.delayMinutes)) {
775
+ return `${label}: wait between ${FLOW_WAIT_MIN_MINUTES} minute and ${FLOW_WAIT_MAX_MINUTES} minutes`;
776
+ }
777
+ if (step.type === 'waitForEvent') {
778
+ var _ref2;
779
+ var _step_eventName;
780
+ const waited = (_ref2 = (_step_eventName = step.eventName) == null ? void 0 : _step_eventName.trim()) != null ? _ref2 : '';
781
+ if (!waited || !HOST_EVENT_TYPES.includes(waited) && !isCustomEventName(waited)) {
782
+ return `${label}: pick the event to wait for`;
783
+ }
784
+ if (!isFlowWaitMinutes(step.timeoutMinutes)) {
785
+ return `${label}: give up after ${FLOW_WAIT_MIN_MINUTES}–${FLOW_WAIT_MAX_MINUTES} minutes`;
786
+ }
787
+ }
788
+ if (step.type === 'runWorkflow' && !((_step_workflowId = step.workflowId) == null ? void 0 : _step_workflowId.trim()) && !((_step_workflowName = step.workflowName) == null ? void 0 : _step_workflowName.trim())) {
789
+ return `${label}: pick a workflow`;
790
+ }
791
+ if (step.type === 'siteAlert' && !((_step_message = step.message) == null ? void 0 : _step_message.trim())) {
792
+ return `${label}: enter the alert message`;
793
+ }
794
+ if (step.type === 'customEvent') {
795
+ var _ref3;
796
+ var _step_eventName1;
797
+ if (!isCustomEventName((_ref3 = (_step_eventName1 = step.eventName) == null ? void 0 : _step_eventName1.trim()) != null ? _ref3 : '')) {
798
+ return `${label}: custom event names are 2–40 letters, digits, dashes`;
799
+ }
800
+ }
801
+ if (step.type === 'datasetAppend' && !((_step_datasetId = step.datasetId) == null ? void 0 : _step_datasetId.trim()) && !((_step_datasetName = step.datasetName) == null ? void 0 : _step_datasetName.trim())) {
802
+ return `${label}: pick a dataset`;
803
+ }
804
+ if (step.type === 'webhookPost' && !((_step_webhookId = step.webhookId) == null ? void 0 : _step_webhookId.trim()) && !((_step_webhookName = step.webhookName) == null ? void 0 : _step_webhookName.trim())) {
805
+ return `${label}: pick a webhook`;
806
+ }
807
+ // Client + server steps (AGL-257).
808
+ if (step.type === 'addClass' || step.type === 'removeClass' || step.type === 'toggleClass') {
809
+ var _step_selector2, _step_className;
810
+ if (!((_step_selector2 = step.selector) == null ? void 0 : _step_selector2.trim())) return `${label}: enter a CSS selector`;
811
+ if (!((_step_className = step.className) == null ? void 0 : _step_className.trim())) return `${label}: enter the class name`;
812
+ }
813
+ // Element show/hide steps (AGL-562) always target a selector; drawer
814
+ // (AGL-562) and menu (AGL-568) commands may omit the target (the
815
+ // page's first drawer/menu answers).
816
+ if ((step.type === 'showElement' || step.type === 'hideElement' || step.type === 'toggleElement') && !((_step_selector = step.selector) == null ? void 0 : _step_selector.trim())) {
817
+ return `${label}: pick the element to show or hide`;
818
+ }
819
+ if (step.type === 'showElement' || step.type === 'hideElement' || step.type === 'toggleElement') {
820
+ // Choreography options (AGL-589).
821
+ const delay = step.delayMs;
822
+ if (delay != null && !(Number.isInteger(delay) && delay >= 0 && delay <= ELEMENT_VISIBILITY_MAX_DELAY_MS)) {
823
+ return `${label}: delay must be 0–${ELEMENT_VISIBILITY_MAX_DELAY_MS}ms`;
824
+ }
825
+ const dismiss = step.dismissOn;
826
+ if (dismiss != null && !(Array.isArray(dismiss) && dismiss.every((option)=>ELEMENT_DISMISS_OPTIONS.includes(option)))) {
827
+ return `${label}: dismiss options are escape and outsideClick`;
828
+ }
829
+ }
830
+ // One-target steps (AGL-2867). The runtime does nothing for a target it
831
+ // cannot find, so a missing one is refused here, where it can be fixed.
832
+ if (step.type === 'scrollTo') {
833
+ var _step_selector3;
834
+ if (!((_step_selector3 = step.selector) == null ? void 0 : _step_selector3.trim())) {
835
+ return `${label}: pick the element to scroll to`;
836
+ }
837
+ const behavior = step.behavior;
838
+ if (behavior != null && !SCROLL_TO_BEHAVIORS.includes(behavior)) {
839
+ return `${label}: scroll smoothly or instantly`;
840
+ }
841
+ const offset = step.offsetPx;
842
+ if (offset != null && !(Number.isInteger(offset) && offset >= 0 && offset <= SCROLL_TO_MAX_OFFSET_PX)) {
843
+ return `${label}: the offset must be 0–${SCROLL_TO_MAX_OFFSET_PX}px`;
844
+ }
845
+ }
846
+ if (step.type === 'playVideo' && !((_step_selector1 = step.selector) == null ? void 0 : _step_selector1.trim())) {
847
+ return `${label}: pick the video to play`;
848
+ }
849
+ if (step.type === 'showHtml') {
850
+ var _step_html;
851
+ if (!((_step_html = step.html) == null ? void 0 : _step_html.trim())) return `${label}: enter the HTML`;
852
+ // AGL-2486: the author-facing half of the runtime sanitizer, exactly as
853
+ // the reserved analytics name below is the author-facing half of the
854
+ // runtime refusal. `site-runtime.tsx` runs this HTML through
855
+ // `sanitizeAuthorHtml` for a VISITOR, where the only thing it can do
856
+ // with markup it refuses is drop it and say nothing — so an author who
857
+ // pastes an embed snippet gets a step that runs, reports success, and
858
+ // shows nothing. The refusal is reported HERE, where the person who
859
+ // can fix it is looking, and it is the SAME function that will run at
860
+ // render rather than a second description of its rules.
861
+ const removals = [];
862
+ const safe = sanitizeAuthorHtml(step.html, removals);
863
+ if (!safe.trim()) {
864
+ var _ref4;
865
+ var _removals_;
866
+ return `${label}: none of this HTML can be shown on a published page — ${(_ref4 = (_removals_ = removals[0]) == null ? void 0 : _removals_.message) != null ? _ref4 : 'it is removed by the sanitizer.'}`;
867
+ }
868
+ if (removals.length) {
869
+ return `${label}: ${removals[0].message}${removals.length > 1 ? ` (+${removals.length - 1} more)` : ''}`;
870
+ }
871
+ }
872
+ if (step.type === 'runJs' && !((_step_code = step.code) == null ? void 0 : _step_code.trim())) {
873
+ return `${label}: enter the JavaScript`;
874
+ }
875
+ if (step.type === 'redirect' && !((_step_url = step.url) == null ? void 0 : _step_url.trim()) && !step.screenId) {
876
+ return `${label}: pick a screen or enter the destination URL`;
877
+ }
878
+ if (step.type === 'trackGaEvent') {
879
+ var _step_params, _step_params1;
880
+ var _step_eventName2;
881
+ if (!((_step_eventName2 = step.eventName) == null ? void 0 : _step_eventName2.trim())) {
882
+ return `${label}: name the analytics event`;
883
+ }
884
+ // AGL-1587: the author-facing half of the runtime refusal. The runtime
885
+ // can only drop a bad name silently — it is executing for a VISITOR —
886
+ // so the name is checked HERE, where the person who can fix it is.
887
+ const resolved = resolveAuthoredEventName(step.eventName);
888
+ if (resolved.reason === 'reserved') {
889
+ return `${label}: "${step.eventName.trim()}" is a reserved analytics event name — pick another`;
890
+ }
891
+ if (!resolved.name) {
892
+ return `${label}: the analytics event name must start with a letter`;
893
+ }
894
+ const params = Object.entries((_step_params = step.params) != null ? _step_params : {});
895
+ if (params.length > ACTION_MAX_EVENT_PARAMS) {
896
+ return `${label}: analytics parameters are capped at ${ACTION_MAX_EVENT_PARAMS}`;
897
+ }
898
+ for (const [key, value] of params){
899
+ if (!key.trim()) return `${label}: name every analytics parameter`;
900
+ if (key.trim().length > ACTION_EVENT_PARAM_NAME_MAX_LENGTH) {
901
+ return `${label}: the "${key.trim().slice(0, 16)}…" parameter name is over ${ACTION_EVENT_PARAM_NAME_MAX_LENGTH} characters, which GA4 drops`;
902
+ }
903
+ if (!String(value != null ? value : '').trim()) {
904
+ return `${label}: enter a value for the "${key.trim()}" parameter`;
905
+ }
906
+ }
907
+ // The author-facing half of the runtime sanitizer, the same shape the
908
+ // reserved name above and the `showHtml` check take. `trackAuthoredEvent`
909
+ // strips a parameter that can carry personal data and says nothing about
910
+ // it, because it is executing for a VISITOR — so an author who binds a
911
+ // form field into a parameter gets a step that runs, reports success,
912
+ // and delivers an event missing the dimension it was created for. The
913
+ // strip is reported HERE, by running the REAL `sanitizeEventParams`
914
+ // rather than a second description of its rules, so the two can never
915
+ // disagree about which parameter survives.
916
+ const kept = sanitizeEventParams((_step_params1 = step.params) != null ? _step_params1 : undefined);
917
+ const stripped = params.find(([key])=>!(key in kept));
918
+ if (stripped) {
919
+ return `${label}: the "${stripped[0]}" parameter is never sent — an analytics parameter must not carry a visitor's own details`;
920
+ }
921
+ }
922
+ if (step.type === 'sendEmail') {
923
+ var _step_subject, _step_body;
924
+ if (!((_step_subject = step.subject) == null ? void 0 : _step_subject.trim())) return `${label}: enter the subject`;
925
+ if (!((_step_body = step.body) == null ? void 0 : _step_body.trim())) return `${label}: enter the email body`;
926
+ }
927
+ if (step.type === 'notifyAdmins' && !((_step_title = step.title) == null ? void 0 : _step_title.trim())) {
928
+ return `${label}: enter the notification title`;
929
+ }
930
+ if (step.type === 'showOverlay' && !((_step_overlayId = step.overlayId) == null ? void 0 : _step_overlayId.trim()) && !((_step_overlayName = step.overlayName) == null ? void 0 : _step_overlayName.trim())) {
931
+ return `${label}: pick an overlay`;
932
+ }
933
+ if (step.type === 'enrollList' && !((_step_listId = step.listId) == null ? void 0 : _step_listId.trim()) && !((_step_listName = step.listName) == null ? void 0 : _step_listName.trim())) {
934
+ return `${label}: pick a list`;
935
+ }
936
+ if (step.type === 'updateDataset' && !((_step_datasetId1 = step.datasetId) == null ? void 0 : _step_datasetId1.trim()) && !((_step_datasetName1 = step.datasetName) == null ? void 0 : _step_datasetName1.trim())) {
937
+ return `${label}: pick a dataset`;
938
+ }
939
+ if (step.type === 'assignCampaign' && !((_step_campaignId = step.campaignId) == null ? void 0 : _step_campaignId.trim()) && !((_step_campaignName = step.campaignName) == null ? void 0 : _step_campaignName.trim())) {
940
+ return `${label}: pick a campaign`;
941
+ }
942
+ // CRM steps (AGL-2605). A stage or a kind outside its vocabulary is
943
+ // refused here rather than stored: the executor treats the value as
944
+ // trusted and would write it into a facet every stage report counts.
945
+ if (step.type === 'setContactStage' && !isContactLifecycleStage(step.lifecycleStage)) {
946
+ return `${label}: pick a lifecycle stage`;
947
+ }
948
+ if (step.type === 'addContactTag') {
949
+ var _ref5;
950
+ var _step_tag;
951
+ const tag = (_ref5 = (_step_tag = step.tag) == null ? void 0 : _step_tag.trim()) != null ? _ref5 : '';
952
+ if (!tag) return `${label}: enter the tag`;
953
+ if (tag.length > CONTACT_TAG_MAX_LENGTH) {
954
+ return `${label}: tags are at most ${CONTACT_TAG_MAX_LENGTH} characters`;
955
+ }
956
+ }
957
+ if (step.type === 'assignContactOwner') {
958
+ var _step_ownerUid, _step_ownerEmail, _step_ownerUid1, _step_ownerEmail1;
959
+ const named = Boolean(((_step_ownerUid = step.ownerUid) == null ? void 0 : _step_ownerUid.trim()) || ((_step_ownerEmail = step.ownerEmail) == null ? void 0 : _step_ownerEmail.trim()));
960
+ if (step.roundRobin === true && named) {
961
+ return `${label}: pick round robin or a member, not both`;
962
+ }
963
+ if (step.roundRobin !== true && !((_step_ownerUid1 = step.ownerUid) == null ? void 0 : _step_ownerUid1.trim()) && !((_step_ownerEmail1 = step.ownerEmail) == null ? void 0 : _step_ownerEmail1.trim().includes('@'))) {
964
+ return `${label}: enter the owner’s email address`;
965
+ }
966
+ }
967
+ if (step.type === 'createCrmTask') {
968
+ var _ref6;
969
+ var _step_title1, _step_assigneeEmail;
970
+ if (!((_step_title1 = step.title) == null ? void 0 : _step_title1.trim())) return `${label}: give the task a title`;
971
+ if (!isCrmTaskKind(step.kind)) return `${label}: pick the kind of task`;
972
+ if (!Number.isInteger(step.dueInDays) || step.dueInDays < 0 || step.dueInDays > CRM_TASK_MAX_DUE_DAYS) {
973
+ return `${label}: due in 0–${CRM_TASK_MAX_DUE_DAYS} days`;
974
+ }
975
+ // Optional — but an address that is not one would resolve to nobody at
976
+ // run time, and the task would land unassigned with no word why.
977
+ const assigneeEmail = (_ref6 = (_step_assigneeEmail = step.assigneeEmail) == null ? void 0 : _step_assigneeEmail.trim()) != null ? _ref6 : '';
978
+ if (assigneeEmail && !assigneeEmail.includes('@')) {
979
+ return `${label}: enter the assignee’s email address`;
980
+ }
981
+ }
982
+ if (step.type === 'logCrmActivity') {
983
+ var _step_body1;
984
+ if (!isCrmActivityKind(step.kind)) {
985
+ return `${label}: pick the kind of activity`;
986
+ }
987
+ if (!((_step_body1 = step.body) == null ? void 0 : _step_body1.trim())) return `${label}: write what happened`;
988
+ }
989
+ }
990
+ return null;
991
+ }
992
+ export const WEBHOOK_MAX_PER_HOST = 5;
993
+ /**
994
+ * How many LIVE action documents one host may hold (AGL-2266).
995
+ *
996
+ * `hosts/{hostId}/actions` was in NO exclusion list in
997
+ * `cloud/firebase-firestore.rules`, so the host catch-all's `allow create`
998
+ * granted it to any editor, client-direct, on any plan — and the import
999
+ * route's own table said so in as many words: *"no `RESOURCES` entry and no
1000
+ * quota key anywhere; all three creators write the document client-direct."*
1001
+ * A free org could therefore mint unbounded Firestore documents from the
1002
+ * browser against a $0 subscription. Unbounded infrastructure, not a bypass of
1003
+ * anything we sell, which is `WEBHOOK_MAX_PER_HOST`'s (AGL-1360) and
1004
+ * `NON_PAGE_SCREEN_MAX_PER_HOST`'s (AGL-1399) shape exactly: a flat PLATFORM
1005
+ * cap with no `OrgEntitlements` key, no variation by plan, and nothing on the
1006
+ * price list to explain.
1007
+ *
1008
+ * ## Not gated on the `actions` entitlement, deliberately
1009
+ *
1010
+ * `actions` is a Pro feature and `interactions` is free, and BOTH write this
1011
+ * collection — the interaction builder and the besigner's preset wiring create
1012
+ * the same document type the Pro actions card does. Gating creation on the
1013
+ * paid flag would take element interactions away from every free and starter
1014
+ * site, which is a pricing change wearing a cap's clothes. The runtime already
1015
+ * checks the entitlement where it decides what may RUN
1016
+ * (`run-event-actions.ts`), which is the right place for it.
1017
+ *
1018
+ * ## Why 500
1019
+ *
1020
+ * Sized to the busiest plausible site rather than to today's data. An action
1021
+ * is authored per interactive element, so a heavy marketing site with dropdown
1022
+ * choreography on every section reaches tens; presets wire a handful at a
1023
+ * time. 500 is far past anything authoring produces and well short of what a
1024
+ * script in a loop wants, which is the only property a flat cap needs. Live
1025
+ * documents only — the interactions provider soft-deletes with `deletedAt`, so
1026
+ * counting tombstones would be AGL-1173's bug one collection over, where
1027
+ * removing an interaction never frees its slot.
1028
+ */ export const ACTIONS_MAX_PER_HOST = 500;
1029
+ /** Outbound URLs must be public https — first-line SSRF guard. */ export const WEBHOOK_URL_PATTERN = /^https:\/\/(?!localhost)(?!127\.)(?!0\.)(?!10\.)(?!172\.(1[6-9]|2\d|3[01])\.)(?!192\.168\.)(?!169\.254\.)[^\s]+$/i;
1030
+
1031
+ //# sourceMappingURL=actions.js.map