@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,783 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ /**
18
+ * The READ side of marketing consent (`docs/specs/email-overhaul.md` §3f).
19
+ *
20
+ * `marketingConsent` has seven writers and, until this module, no reader on
21
+ * any send path: `performCampaignSend` filtered on the suppression list and
22
+ * on nothing else, so a recorded opt-in and a recorded opt-OUT reached the
23
+ * same inbox. This is the join that makes the field mean something.
24
+ *
25
+ * ## A basis is DECLARED, never inferred
26
+ *
27
+ * Nothing here treats an act as consent. Submitting a form, buying, booking,
28
+ * or holding an account are all things a person did for their own reasons,
29
+ * and none of them is an opt-in to marketing email. The only input is a
30
+ * stored `marketingConsent` written from a checkbox the person ticked. That
31
+ * is why {@link readMarketingBasis} takes a document rather than a silo name:
32
+ * there is no silo whose mere membership grants a basis.
33
+ *
34
+ * ## Three states, not two
35
+ *
36
+ * The field is written `true` by six capture paths and `false` by exactly one
37
+ * (`POST /v1/contacts`), so absence is not refusal — it is the far commoner
38
+ * case of a record captured before the checkbox existed. Collapsing absent
39
+ * into refused is what would empty an existing audience overnight; collapsing
40
+ * it into granted is what the product does today. Both are wrong, so the
41
+ * split is carried through to the caller as three counts rather than a
42
+ * boolean.
43
+ *
44
+ * ## A basis also records WHOSE act it was
45
+ *
46
+ * A basis an operator asserted over existing records — see
47
+ * `tools/scripts/backfill-marketing-consent.mjs` — is mailable, because an
48
+ * org that asserted it meant that data to be reachable. It is not, however,
49
+ * the same fact as a checkbox somebody ticked, and two fields that store
50
+ * only `true` and a date cannot tell the difference. So an asserted basis
51
+ * carries {@link MARKETING_CONSENT_SOURCE_FIELD} naming who asserted it,
52
+ * when, and why, and every reader gets that distinction back as
53
+ * {@link MarketingConsentRecord.assertedBy}. Consent is only evidence for as
54
+ * long as its origin survives with it.
55
+ *
56
+ * ## A basis also records WHICH BRAND it was given to
57
+ *
58
+ * Contacts are ORG-scoped and shared across every site in the org, which is
59
+ * deliberate: an agency running many client brands out of one account keeps
60
+ * one address book. Consent is not shareable on the same terms. It runs to a
61
+ * controller — the brand named on the form, in the sender line and in the
62
+ * privacy notice the person read — and not to the account that happens to
63
+ * hold the row. One boolean per person cannot express that, so somebody who
64
+ * opted in to one client's newsletter was mailable by every other client in
65
+ * the agency, on a basis none of them was given.
66
+ *
67
+ * So a basis is stored per (person, host), under
68
+ * {@link MARKETING_CONSENT_BY_HOST_FIELD}, and {@link readMarketingBasis}
69
+ * takes the host it is being read FOR. The host argument is required and has
70
+ * no default: a reader that has not said which brand is asking cannot
71
+ * compile, which is the same guarantee `newResourceScopeFields` gives on the
72
+ * write side of scoped resources.
73
+ *
74
+ * ## FIVE states, because collapsing any two of them is a bug in one
75
+ * direction or the other
76
+ *
77
+ * "This host has no basis for this person" and "another host has one" and "a
78
+ * grant exists that names no host at all" and "this person refused" are
79
+ * different facts, and every pair of them collapses into either a leak or a
80
+ * silent failure to mail somebody who did opt in. They are carried apart all
81
+ * the way to the caller as {@link MarketingConsentReason}, and
82
+ * {@link MarketingConsentSplit} counts them separately rather than reporting
83
+ * one `withheld` total that cannot be explained to a merchant.
84
+ *
85
+ * ## A REFUSAL over-applies; a GRANT never does
86
+ *
87
+ * The pre-host field is still read, and asymmetrically. A stored
88
+ * `marketingConsent: false` refuses for every host, because a refusal
89
+ * recorded against nobody in particular is most safely honored against
90
+ * everybody, and withholding mail is recoverable where sending it is not. A
91
+ * stored `marketingConsent: true` grants to NO host: it is a claim with no
92
+ * controller attached, and spreading it across an agency's unrelated clients
93
+ * is precisely the defect this module exists to end. Such a record reports
94
+ * {@link MarketingConsentRecord.otherGrant} as `'unscoped'` so a console can
95
+ * say why somebody stopped being mailable, and so
96
+ * `tools/scripts/backfill-consent-host.mjs` can find them.
97
+ */ import { soloConsentGroup } from "./consent-groups.js";
98
+ /**
99
+ * The document field carrying WHO asserted a stored basis, and why.
100
+ *
101
+ * `marketingConsent` on its own records only WHAT the basis is. A record
102
+ * written by an operator and a record written from a checkbox a person
103
+ * ticked are the same two fields with the same two values, so nothing
104
+ * downstream — a console readout, an export, a regulator's question — can
105
+ * tell them apart. That is the difference between consent that is evidence
106
+ * and consent that is an assertion, so it is carried on the record itself
107
+ * rather than left to be reconstructed from when a script happened to run.
108
+ *
109
+ * Absent on every record written from a site's capture surface, which is why
110
+ * {@link readMarketingBasis} reads its absence as the person's own act: the
111
+ * six checkbox writers are the norm and an operator assertion is the thing
112
+ * that has to announce itself. The platform's own console doors (AGL-3185)
113
+ * do write it — which door, which wording version — and say whose act it
114
+ * describes with {@link MarketingConsentSource.actor}, so a record can carry
115
+ * provenance without being read as an assertion made on the person's behalf.
116
+ */ export const MARKETING_CONSENT_SOURCE_FIELD = 'marketingConsentSource';
117
+ /**
118
+ * The `kind` an operator backfill stamps. A named constant because the
119
+ * script that writes it and the reader that finds it are in different
120
+ * languages and cannot share a type.
121
+ */ export const OPERATOR_BACKFILL_CONSENT_KIND = 'operator-backfill';
122
+ /**
123
+ * The document field a LIST MEMBERSHIP carries beside `marketingConsent`,
124
+ * naming which of the two ways in produced it.
125
+ *
126
+ * `list-members.ts` writes it, with `'contact-opt-in'` for a basis carried
127
+ * across from the person's own record and
128
+ * {@link OPERATOR_ATTESTED_CONSENT_BASIS} for one a console account asserted.
129
+ * It is read here because a membership is a person record like any other to
130
+ * every reader in the send path, and a reader that knew only about
131
+ * {@link MARKETING_CONSENT_SOURCE_FIELD} would report an attestation as the
132
+ * person's own act.
133
+ */ export const MARKETING_CONSENT_BASIS_FIELD = 'marketingConsentBasis';
134
+ /**
135
+ * The value of {@link MARKETING_CONSENT_BASIS_FIELD} that means an operator
136
+ * stated they have this person's permission.
137
+ *
138
+ * A string literal shared by the writer and the reader rather than a type,
139
+ * for the reason above: the enrollment path stores this on a document and
140
+ * this module reads it back off one, and a document has no types.
141
+ */ export const OPERATOR_ATTESTED_CONSENT_BASIS = 'operator-attested';
142
+ /**
143
+ * The `kind` synthesized for an attested membership that carries no
144
+ * {@link MARKETING_CONSENT_SOURCE_FIELD} of its own.
145
+ *
146
+ * The console's one-address add path stores the attesting account in
147
+ * `marketingConsentByUid` and no provenance object, so the provenance a
148
+ * reader can honestly report for those rows is exactly "an account attested
149
+ * this" plus the account. Naming the kind rather than leaving the source
150
+ * `null` is what lets a console readout say WHO, which is the whole reason
151
+ * the attribution is stored.
152
+ */ export const OPERATOR_ATTESTED_CONSENT_KIND = 'operator-attested';
153
+ /**
154
+ * The boolean field a basis has always been stored in.
155
+ *
156
+ * Named rather than spelled out at each site because it now appears in two
157
+ * positions — at the top of a person document, and again inside every entry
158
+ * of {@link MARKETING_CONSENT_BY_HOST_FIELD} — and the second position is
159
+ * only readable by the same parser as the first while both agree on the name.
160
+ */ export const MARKETING_CONSENT_FIELD = 'marketingConsent';
161
+ /**
162
+ * The map field holding one consent entry per host: `{ [hostId]: entry }`,
163
+ * where an entry carries exactly the fields the top level carries.
164
+ *
165
+ * ## Why a map on the person document and not a subcollection
166
+ *
167
+ * The send path reads consent out of the audience sweep, while the person's
168
+ * document is already in hand — that placement is what keeps the consent join
169
+ * free. A subcollection would make it one extra read PER RECIPIENT PER
170
+ * CAMPAIGN, on the one path in the product whose cost scales with the size of
171
+ * a customer's list. The map rides along with a document that is being read
172
+ * anyway.
173
+ *
174
+ * ## Why keyed by host id
175
+ *
176
+ * `entry = map[hostId]` is a lookup that has no way to return another host's
177
+ * grant. A list of entries carrying a `hostId` field would have to be
178
+ * searched, and a search is something a caller can get wrong — a `.find()`
179
+ * whose predicate is dropped still returns a grant, just somebody else's.
180
+ * There is no expression of this shape that reads host B's consent while
181
+ * asking about host A.
182
+ *
183
+ * ## Why the entries repeat the top-level field names
184
+ *
185
+ * So that one parser reads both. Provenance, the attested-basis marker, the
186
+ * attesting account and the timestamp all mean the same thing wherever they
187
+ * sit, and a second set of names would be a second set of rules for the two
188
+ * positions to disagree about — which is how the attested-membership case
189
+ * came to be reported as a person's own act in the first place.
190
+ */ export const MARKETING_CONSENT_BY_HOST_FIELD = 'marketingConsentByHost';
191
+ /**
192
+ * The field naming every host that has CAPTURED a person record.
193
+ *
194
+ * Not consent, and deliberately not stored with it. Somebody captured by one
195
+ * brand may go on to consent to two, or to none; conflating capture with
196
+ * permission is how an act a person took for their own reasons — booking a
197
+ * table, buying a thing — comes to be read as an opt-in. It is here because a
198
+ * grandfathered basis is a claim about WHEN a record was captured, and that
199
+ * claim only ever belonged to the brands that captured it.
200
+ *
201
+ * ## An ARRAY, and top-level, because it has to be a QUERY
202
+ *
203
+ * It serves both organizations from one field. An agency filters to "the
204
+ * people MY site captured"; a business running three sites as one asks for
205
+ * "everyone captured on A, B or C". Both are `array-contains-any` over this
206
+ * field, which is why it is a top-level array of ids and not a label on a
207
+ * detail page and not a map: Firestore can filter this shape and cannot
208
+ * filter an array of objects.
209
+ *
210
+ * It GROWS. A person who fills in a second site's form is captured by that
211
+ * site too, and the write is an `arrayUnion` on the merge branch as well as
212
+ * on the create — which is exactly what the create-only `hostId` beside it
213
+ * could never record.
214
+ *
215
+ * Read with the scalar `hostId` as a fallback on `contacts`, which has
216
+ * stamped its FIRST capturing host under that name since the collection
217
+ * existed. That is a strict subset of this fact under an older name, and a
218
+ * reader that ignored it would report every existing contact as unattributed.
219
+ */ export const CAPTURED_BY_HOST_FIELD = 'capturedByHostIds';
220
+ /**
221
+ * The consent group a stored grant was given to, recorded ON THE ENTRY.
222
+ *
223
+ * The declaration lives on the org and can change; this is what was DISCLOSED
224
+ * to this person at the moment they agreed. Reading pooling from the org's
225
+ * current declaration instead would let adding a site to a group widen every
226
+ * grant ever made, which is the leak with a configuration screen in front of
227
+ * it. So the group travels with the grant, and a group that grows reaches
228
+ * only the captures that come after it.
229
+ */ export const CONSENT_GROUP_ID_FIELD = 'consentGroupId';
230
+ /**
231
+ * The group's display name as the capture surface showed it.
232
+ *
233
+ * Stored beside the id because the id is not evidence: answering "what was
234
+ * this person told" with a document key is answering a different question.
235
+ * A group can also be renamed, and the name that matters is the one on the
236
+ * screen they were looking at.
237
+ */ export const CONSENT_GROUP_NAME_FIELD = 'consentGroupName';
238
+ /**
239
+ * The default forward cutoff: 2026-09-01T00:00:00Z.
240
+ *
241
+ * A date rather than a per-org stamp, so the rule has an answer on an org that
242
+ * has never opened the setting.
243
+ *
244
+ * It divides the audience only under `'forward'`, where a record predating it
245
+ * grandfathers and every capture from the checkbox-bearing surfaces onward
246
+ * carries a basis or is withheld. Under `'strict'` it decides nothing, since
247
+ * no record grandfathers at any date.
248
+ *
249
+ * An org may move it later (a longer grace period) or earlier (voluntarily
250
+ * enforcing over more of its own back catalog) through
251
+ * {@link resolveMarketingConsentPolicy}.
252
+ */ export const MARKETING_CONSENT_ENFORCED_FROM_MS = Date.UTC(2026, 8, 1);
253
+ /**
254
+ * The policy an org gets when it has never configured one.
255
+ *
256
+ * `'strict'` — every recipient needs a recorded basis, and nothing is
257
+ * grandfathered. That is defensible because of WHEN it ships: the product is
258
+ * pre-release with no real customers, so the population a retroactive rule
259
+ * removes is test and seeded demo data. The usual objection to retroactive
260
+ * enforcement — that it silently shrinks a live audience, sometimes to
261
+ * nothing — has nobody here to injure.
262
+ *
263
+ * ⚠️ It stops being defensible the moment real addresses exist. A deployment
264
+ * that has already collected an audience under the old rule sets `'forward'`
265
+ * on its orgs rather than inheriting this, because flipping to strict over a
266
+ * live back catalog withholds mail from people who were legitimately
267
+ * reachable the day before.
268
+ *
269
+ * `enforceFromMs` stays populated and is still read: under `'strict'` it
270
+ * decides nothing, but an org moving back to `'forward'` gets a real cutoff
271
+ * rather than a missing field.
272
+ */ export const DEFAULT_MARKETING_CONSENT_POLICY = {
273
+ mode: 'strict',
274
+ enforceFromMs: MARKETING_CONSENT_ENFORCED_FROM_MS
275
+ };
276
+ /**
277
+ * Reads an org's stored `marketingConsentPolicy` into a usable policy.
278
+ *
279
+ * Every unusable value falls back to the default rather than to "off": there
280
+ * is no off. A malformed setting must not be a way to switch the join back
281
+ * out, because the failure mode of that is mail to people who declined.
282
+ *
283
+ * The fallback is {@link DEFAULT_MARKETING_CONSENT_POLICY} itself rather than
284
+ * a mode repeated here. This function is the ONLY path by which any send
285
+ * reaches a policy, so a literal in it would be the real default and the
286
+ * exported constant would be a decoration: changing the constant would move
287
+ * what `marketing-consent.spec.ts` asserts and nothing that mails anybody.
288
+ * Only the two modes a caller may actually store are honored, so a stored
289
+ * value that means neither lands on the default with everything else.
290
+ */ export function resolveMarketingConsentPolicy(stored) {
291
+ const value = stored != null ? stored : {};
292
+ const mode = value['mode'] === 'strict' ? 'strict' : value['mode'] === 'forward' ? 'forward' : DEFAULT_MARKETING_CONSENT_POLICY.mode;
293
+ const enforceFromMs = Number(value['enforceFromMs']);
294
+ return {
295
+ mode,
296
+ enforceFromMs: Number.isFinite(enforceFromMs) ? enforceFromMs : MARKETING_CONSENT_ENFORCED_FROM_MS
297
+ };
298
+ }
299
+ /**
300
+ * Coerces the several shapes a timestamp arrives in — epoch millis, a
301
+ * Firestore `Timestamp`, a `Date` — to millis, or `null`.
302
+ *
303
+ * `toMillis` is duck-typed rather than imported: this module is in the
304
+ * client-bundled barrel and must not pull in `firebase-admin`, and the two
305
+ * SDKs' `Timestamp` classes are different types with the same method anyway.
306
+ */ function timestampMs(value) {
307
+ if (typeof value === 'number') return Number.isFinite(value) ? value : null;
308
+ if (value instanceof Date) return value.getTime();
309
+ const toMillis = value == null ? void 0 : value.toMillis;
310
+ if (typeof toMillis === 'function') {
311
+ const millis = Number(toMillis.call(value));
312
+ return Number.isFinite(millis) ? millis : null;
313
+ }
314
+ return null;
315
+ }
316
+ /**
317
+ * Reads the consent facts off one person record from any silo.
318
+ *
319
+ * The field names differ by collection and the capture timestamp does too —
320
+ * `contacts`, `leads` and `siteMembers` stamp `createdAt`, a list membership
321
+ * stamps `addedAt` — so both are read from a small set of aliases rather than
322
+ * one name per caller. A caller that has to remember which name its silo uses
323
+ * is a caller that can read the wrong one and silently get `undefined`, which
324
+ * is exactly how `siteMembers` came to be addressed by a blank merge tag.
325
+ *
326
+ * ## TWO fields can say "an operator asserted this", and both are read
327
+ *
328
+ * A backfilled CRM record announces itself with {@link
329
+ * MARKETING_CONSENT_SOURCE_FIELD}; a LIST MEMBERSHIP announces itself with
330
+ * {@link MARKETING_CONSENT_BASIS_FIELD} set to {@link
331
+ * OPERATOR_ATTESTED_CONSENT_BASIS}, because the enrollment path stores what
332
+ * KIND of basis a membership carries and stores the attesting account beside
333
+ * it. Reading only the first would report every attested enrollment — every
334
+ * address a merchant added by hand, and every address an import brings in —
335
+ * as a checkbox the person ticked, which is precisely the conflation the
336
+ * attribution exists to prevent. The send-time consent join reads a
337
+ * membership through this function, so the wrong answer here is the wrong
338
+ * answer in a compliance response.
339
+ *
340
+ * ## The basis comes from `hostId`'s ENTRY, and from nowhere else
341
+ *
342
+ * `entry = map[hostId]` — a lookup with no way to reach another host's grant.
343
+ * The pre-host top-level field is consulted only for the asymmetry the module
344
+ * note states: a `false` there refuses for every host, a `true` there grants
345
+ * to none and reports itself as {@link MarketingConsentOtherGrant} `'unscoped'`
346
+ * instead.
347
+ *
348
+ * @param record any silo's person document data, or `null` for an address
349
+ * with no record behind it (a hand-typed manual audience).
350
+ * @param hostId the site asking. Required and undefaulted: a caller that has
351
+ * not said which brand wants to mail this person has not asked
352
+ * a question this function can answer.
353
+ */ export function readMarketingBasis(record, group) {
354
+ var _byHost_hostId, _byHost_refusedInGroup, _readConsentSource, _timestampMs;
355
+ const { hostId } = group;
356
+ if (!record) {
357
+ return {
358
+ hostId,
359
+ groupId: group.groupId,
360
+ otherGrant: 'none',
361
+ capturedByHostIds: [],
362
+ capturedByGroup: false,
363
+ basis: 'unrecorded',
364
+ assertedBy: null,
365
+ source: null,
366
+ basisAtMs: null,
367
+ capturedAtMs: null
368
+ };
369
+ }
370
+ const byHost = readConsentByHost(record);
371
+ const entry = (_byHost_hostId = byHost[hostId]) != null ? _byHost_hostId : null;
372
+ const capturedBy = readCapturedByHosts(record);
373
+ /*
374
+ * THE REFUSAL IS READ ACROSS THE WHOLE GROUP, AND THE GRANT IS NOT.
375
+ *
376
+ * A grant is written forward: at capture, every site the disclosure named
377
+ * got its own entry, so `byHost[hostId]` is the complete answer and a group
378
+ * that GROWS later cannot retroactively widen what somebody agreed to.
379
+ *
380
+ * A refusal has to run the other way. Three sites presenting as one sender
381
+ * are one sender to the person unsubscribing from them, and making them do
382
+ * it twice more is hostile and legally wrong; a site that JOINS the group
383
+ * inherits the refusals already standing against its siblings. Reading the
384
+ * current group is what delivers that, and it can only ever withhold.
385
+ *
386
+ * The pre-host top-level `false` is read the same way and for the same
387
+ * reason: it names no controller, so it is honored against every one.
388
+ */ const refusedUnscoped = record[MARKETING_CONSENT_FIELD] === false;
389
+ const refusedInGroup = group.hostIds.find((member)=>{
390
+ var _byHost_member;
391
+ return ((_byHost_member = byHost[member]) == null ? void 0 : _byHost_member[MARKETING_CONSENT_FIELD]) === false;
392
+ });
393
+ const consent = entry == null ? void 0 : entry[MARKETING_CONSENT_FIELD];
394
+ const basis = refusedUnscoped || refusedInGroup !== undefined ? 'declined' : consent === true ? 'granted' : 'unrecorded';
395
+ // Provenance is read off whichever position produced the basis, so a
396
+ // refusal inherited from a sibling site or from the pre-host field is not
397
+ // decorated with the attribution of some other host's grant.
398
+ const fields = refusedUnscoped ? record : refusedInGroup !== undefined ? (_byHost_refusedInGroup = byHost[refusedInGroup]) != null ? _byHost_refusedInGroup : {} : entry != null ? entry : {};
399
+ const basisAtMs = timestampMs(fields['marketingConsentAtMs']);
400
+ const source = (_readConsentSource = readConsentSource(fields[MARKETING_CONSENT_SOURCE_FIELD])) != null ? _readConsentSource : readAttestedBasis(fields, basisAtMs);
401
+ return {
402
+ hostId,
403
+ groupId: group.groupId,
404
+ otherGrant: readOtherGrant(record, byHost, group),
405
+ capturedByHostIds: capturedBy,
406
+ capturedByGroup: capturedBy.some((id)=>group.hostIds.includes(id)),
407
+ basis,
408
+ // A basis with no provenance is the person's own: the site capture
409
+ // surfaces write nothing here, so absence is the norm and an operator
410
+ // assertion is what has to be stated. Provenance that names the person
411
+ // as its own actor is the one other way to be the person's act — a
412
+ // console door records which door and which wording, and says so.
413
+ // Attributing an absent basis to nobody keeps `unrecorded` from reading
414
+ // as a person who declined to be attributed.
415
+ assertedBy: basis === 'unrecorded' ? null : source !== null && source.actor !== 'person' ? 'operator' : 'person',
416
+ source,
417
+ basisAtMs,
418
+ capturedAtMs: (_timestampMs = timestampMs(record['createdAt'])) != null ? _timestampMs : timestampMs(record['addedAt'])
419
+ };
420
+ }
421
+ /**
422
+ * The per-host consent map, as a plain object of entries.
423
+ *
424
+ * Anything that is not an object of objects reads as empty rather than
425
+ * throwing. A malformed map must degrade to "no host has a basis", which
426
+ * withholds; degrading toward a grant would make a corrupt value a way to
427
+ * mail people.
428
+ */ function readConsentByHost(record) {
429
+ const raw = record[MARKETING_CONSENT_BY_HOST_FIELD];
430
+ if (!raw || typeof raw !== 'object' || Array.isArray(raw)) return {};
431
+ const entries = {};
432
+ for (const [key, value] of Object.entries(raw)){
433
+ if (value && typeof value === 'object' && !Array.isArray(value)) {
434
+ entries[key] = value;
435
+ }
436
+ }
437
+ return entries;
438
+ }
439
+ /**
440
+ * Which kind of grant this person holds that `hostId` may not use.
441
+ *
442
+ * Only GRANTS are reported. Another host's refusal is that host's preference
443
+ * and says nothing about this one — treating it as a signal here would spread
444
+ * an opt-out across an agency's unrelated clients, which is the same defect
445
+ * as spreading an opt-in, pointed the other way.
446
+ */ function readOtherGrant(record, byHost, group) {
447
+ for (const [key, entry] of Object.entries(byHost)){
448
+ if (group.hostIds.includes(key)) continue;
449
+ if (entry[MARKETING_CONSENT_FIELD] === true) return 'other-host';
450
+ }
451
+ return record[MARKETING_CONSENT_FIELD] === true ? 'unscoped' : 'none';
452
+ }
453
+ /**
454
+ * The host that captured this record.
455
+ *
456
+ * {@link CAPTURED_BY_HOST_FIELD} first, then `hostId` — the older name for
457
+ * the same fact on `contacts`. `leads` and `siteMembers` live under a host
458
+ * and carry neither, which is why the absent case is a real answer rather
459
+ * than an error: see {@link MarketingConsentReason} for what it decides.
460
+ */ function readCapturedByHosts(record) {
461
+ const found = new Set();
462
+ const array = record[CAPTURED_BY_HOST_FIELD];
463
+ if (Array.isArray(array)) {
464
+ for (const value of array){
465
+ if (typeof value === 'string' && value) found.add(value);
466
+ }
467
+ }
468
+ // The older scalar name on `contacts`, which holds the FIRST capturing
469
+ // site. A subset of the same fact, so it is unioned rather than preferred.
470
+ const legacy = record['hostId'];
471
+ if (typeof legacy === 'string' && legacy) found.add(legacy);
472
+ return [
473
+ ...found
474
+ ];
475
+ }
476
+ /**
477
+ * Every host that holds a GRANT for this person, sorted.
478
+ *
479
+ * The console readout and the API projection both need it, and the agency
480
+ * handoff is the third caller: "which of these rows are this client's" is
481
+ * this list intersected with one host.
482
+ *
483
+ * A refusal is not reported here. The question is which brands may mail this
484
+ * person, and an unscoped refusal answers it for all of them at once — see
485
+ * {@link readMarketingBasis}, which is where that asymmetry is decided.
486
+ */ export function marketingConsentHostIds(record) {
487
+ if (!record || record[MARKETING_CONSENT_FIELD] === false) return [];
488
+ return Object.entries(readConsentByHost(record)).filter(([, entry])=>entry[MARKETING_CONSENT_FIELD] === true).map(([hostId])=>hostId).sort();
489
+ }
490
+ /**
491
+ * The document fields that RECORD a basis for one host, as a spreadable
492
+ * object to merge onto a person document.
493
+ *
494
+ * The one writer helper for eleven capture doors. They wrote
495
+ * `{ marketingConsent: true, marketingConsentAtMs: … }` inline, eleven times,
496
+ * and every one of those grants applied to every brand in the org. A helper
497
+ * that takes the host is what makes the omission impossible: there is no
498
+ * spelling of this call that records a grant without saying whose it is.
499
+ *
500
+ * ⛔ It writes a grant and never a refusal. An opt-out is not the inverse of
501
+ * an opt-in — it belongs beside the site's suppression list, has to survive a
502
+ * later capture that would otherwise overwrite it, and is recorded by
503
+ * `declineMarketingConsentFields` instead.
504
+ *
505
+ * Nested rather than dot-pathed so it composes with a `{ merge: true }` set,
506
+ * which deep-merges maps: writing one host's entry leaves every other host's
507
+ * untouched. A dotted `update` would do the same but cannot be spread into
508
+ * the object literals these doors already build, and cannot create the
509
+ * document when it is new.
510
+ *
511
+ * @param atMs when the person gave it. Defaulted by the caller, not here: a
512
+ * clock read hidden in a helper is one a test cannot pin.
513
+ */ export function marketingConsentFieldsForGroup(group, atMs, extra) {
514
+ var _group_name;
515
+ var _group_hostIds;
516
+ if (!(group == null ? void 0 : (_group_hostIds = group.hostIds) == null ? void 0 : _group_hostIds.length)) {
517
+ throw new Error('[marketing-consent] a basis cannot be recorded for no host');
518
+ }
519
+ const entry = _extends({
520
+ [MARKETING_CONSENT_FIELD]: true,
521
+ marketingConsentAtMs: atMs
522
+ }, group.declared ? {
523
+ [CONSENT_GROUP_ID_FIELD]: group.groupId,
524
+ [CONSENT_GROUP_NAME_FIELD]: (_group_name = group.name) != null ? _group_name : ''
525
+ } : {}, extra != null ? extra : {});
526
+ /*
527
+ * ONE ENTRY PER DISCLOSED SITE, rather than one entry the reader has to
528
+ * search for a group it belongs to.
529
+ *
530
+ * `byHost[hostId]` stays a lookup with no way to reach another controller's
531
+ * grant, which is the guarantee the whole model rests on. A single entry
532
+ * carrying a list of covered sites would make every read a search, and a
533
+ * search is something a caller can get wrong in exactly one direction: a
534
+ * dropped predicate still returns a grant, just somebody else's.
535
+ */ return {
536
+ [MARKETING_CONSENT_BY_HOST_FIELD]: Object.fromEntries(group.hostIds.map((hostId)=>[
537
+ hostId,
538
+ entry
539
+ ]))
540
+ };
541
+ }
542
+ /**
543
+ * The group-of-one convenience, for a writer that has a site and no org.
544
+ *
545
+ * Narrow by construction, which is the safe direction: a door that should
546
+ * have pooled and did not withholds mail, where a door that pooled without a
547
+ * disclosure sends it.
548
+ */ export function marketingConsentFieldsForHost(hostId, atMs, extra) {
549
+ return marketingConsentFieldsForGroup(soloConsentGroup(hostId), atMs, extra);
550
+ }
551
+ /**
552
+ * The document fields that record a REFUSAL for one host.
553
+ *
554
+ * Separate from the grant helper because the two are not one function with a
555
+ * boolean. A refusal is written by the unsubscribe path and by the API's
556
+ * explicit `marketingConsent: false`, neither of which carries provenance a
557
+ * person supplied, and — unlike a grant — the pre-host field is still honored
558
+ * against every host, so the two are not symmetric anywhere in this module.
559
+ *
560
+ * @param extra fields stored on the entry beside the refusal — the console
561
+ * doors pass the person's own provenance here (AGL-3185), the
562
+ * same way the grant helper takes it.
563
+ */ export function declineMarketingConsentFields(hostId, atMs, extra) {
564
+ if (!hostId) {
565
+ throw new Error('[marketing-consent] a refusal cannot be recorded for no host');
566
+ }
567
+ /*
568
+ * Written against the ONE site the person acted on, and read across
569
+ * whatever group that site is in at send time — see
570
+ * {@link readMarketingBasis}. Denormalizing a refusal the way a grant is
571
+ * denormalized would freeze it to the group as it stood, so a site joining
572
+ * the group later would mail somebody who had already left the sender.
573
+ */ return {
574
+ [MARKETING_CONSENT_BY_HOST_FIELD]: {
575
+ [hostId]: _extends({
576
+ [MARKETING_CONSENT_FIELD]: false,
577
+ marketingConsentAtMs: atMs
578
+ }, extra != null ? extra : {})
579
+ }
580
+ };
581
+ }
582
+ /**
583
+ * The provenance a list membership's own basis field carries, or `null`.
584
+ *
585
+ * `'contact-opt-in'` returns `null` deliberately and is not merely unhandled:
586
+ * that value means the membership carries the PERSON's opt-in, passed through
587
+ * with their own timestamp, so it is the strongest available statement that
588
+ * nobody asserted anything on their behalf.
589
+ *
590
+ * `by` falls back to the empty string rather than refusing when the account
591
+ * is missing. `readConsentSource` refuses an unattributed operator because
592
+ * its field's only writer always fills one; here the fact being read is the
593
+ * BASIS, which is unambiguous on its own, and losing the whole attestation
594
+ * because the uid did not survive would report the row as a person's own
595
+ * opt-in — the one direction this must never fail in.
596
+ */ function readAttestedBasis(record, basisAtMs) {
597
+ if (record[MARKETING_CONSENT_BASIS_FIELD] !== OPERATOR_ATTESTED_CONSENT_BASIS) return null;
598
+ const by = record['marketingConsentByUid'];
599
+ return {
600
+ kind: OPERATOR_ATTESTED_CONSENT_KIND,
601
+ by: typeof by === 'string' ? by : '',
602
+ atMs: basisAtMs,
603
+ reason: typeof record['marketingConsentReason'] === 'string' ? record['marketingConsentReason'] : ''
604
+ };
605
+ }
606
+ /**
607
+ * Parses the provenance field, or `null` when there is none to parse.
608
+ *
609
+ * A malformed value reads as `null` — the person's own act — rather than as
610
+ * a nameless operator assertion, because the only writer of this field is a
611
+ * script that always fills `kind` and `by`. Inventing an unattributed
612
+ * operator out of a corrupt value would put a claim in the audit trail that
613
+ * nothing in the product ever made.
614
+ */ function readConsentSource(value) {
615
+ if (!value || typeof value !== 'object') return null;
616
+ const source = value;
617
+ const kind = typeof source['kind'] === 'string' ? source['kind'] : '';
618
+ const by = typeof source['by'] === 'string' ? source['by'] : '';
619
+ if (!kind || !by) return null;
620
+ // Only the two literals the type names; anything else reads as absent,
621
+ // which is the operator default — a malformed actor must not turn an
622
+ // assertion into the person's own act.
623
+ const actor = source['actor'] === 'person' || source['actor'] === 'operator' ? source['actor'] : undefined;
624
+ const textVersion = typeof source['textVersion'] === 'string' && source['textVersion'] ? source['textVersion'] : undefined;
625
+ return _extends({
626
+ kind,
627
+ by,
628
+ atMs: timestampMs(source['atMs']),
629
+ reason: typeof source['reason'] === 'string' ? source['reason'] : ''
630
+ }, actor ? {
631
+ actor
632
+ } : {}, textVersion ? {
633
+ textVersion
634
+ } : {});
635
+ }
636
+ /**
637
+ * Applies a policy to one record. Pure, and the only place the rule lives.
638
+ *
639
+ * ## Grandfathering is a claim about a CAPTURE, so it belongs to the capturer
640
+ *
641
+ * Under `'forward'`, a record with no basis stays reachable because it
642
+ * predates enforcement. That argument is made on behalf of the brand that
643
+ * collected the address — it had a relationship with this person before there
644
+ * was a checkbox to tick. A sister brand in the same agency has no such
645
+ * history and inherits none by sharing an address book, so a record captured
646
+ * by another host does not grandfather here. Where no host is attributed the
647
+ * argument has nobody to belong to and nobody to exclude, so it holds: the
648
+ * unknown leans toward reachable, exactly as a missing capture DATE does.
649
+ *
650
+ * ## A grant elsewhere ends grandfathering outright
651
+ *
652
+ * `otherGrant` is evidence that consent WAS collected for this person and
653
+ * that this host is not who it was given to. Grandfathering on top of that
654
+ * would let the agency case back in through the one door the policy leaves
655
+ * open, which is the same leak in a longer sentence.
656
+ */ export function marketingConsentDecision(record, policy) {
657
+ if (record.basis === 'granted') {
658
+ return {
659
+ verdict: 'consented',
660
+ reason: 'granted'
661
+ };
662
+ }
663
+ if (record.basis === 'declined') {
664
+ return {
665
+ verdict: 'withheld',
666
+ reason: 'declined'
667
+ };
668
+ }
669
+ if (record.otherGrant !== 'none') {
670
+ return {
671
+ verdict: 'withheld',
672
+ reason: 'other-host'
673
+ };
674
+ }
675
+ if (policy.mode === 'strict') {
676
+ return {
677
+ verdict: 'withheld',
678
+ reason: 'no-basis'
679
+ };
680
+ }
681
+ /*
682
+ * A capture attributed only to sites outside this group. The
683
+ * grandfathering argument belongs to whoever collected the address; a
684
+ * sister brand inherits none of it by sharing an address book, while a
685
+ * fellow member of a declared group collected it alongside. An EMPTY list
686
+ * has nobody to belong to and nobody to exclude, so it falls through and
687
+ * grandfathers — the same direction a missing capture date leans.
688
+ */ if (record.capturedByHostIds.length && !record.capturedByGroup) {
689
+ return {
690
+ verdict: 'withheld',
691
+ reason: 'other-host'
692
+ };
693
+ }
694
+ // `null` grandfathers: see MarketingConsentPolicy.enforceFromMs for why the
695
+ // unknown leans toward reachable.
696
+ if (record.capturedAtMs === null) {
697
+ return {
698
+ verdict: 'grandfathered',
699
+ reason: 'grandfathered'
700
+ };
701
+ }
702
+ return record.capturedAtMs >= policy.enforceFromMs ? {
703
+ verdict: 'withheld',
704
+ reason: 'not-grandfathered'
705
+ } : {
706
+ verdict: 'grandfathered',
707
+ reason: 'grandfathered'
708
+ };
709
+ }
710
+ /**
711
+ * The verdict alone, for the callers that only decide whether to send.
712
+ *
713
+ * Delegated rather than reimplemented so there is one rule and not two that
714
+ * agree today.
715
+ */ export function marketingConsentVerdict(record, policy) {
716
+ return marketingConsentDecision(record, policy).verdict;
717
+ }
718
+ /**
719
+ * Splits an audience into who may be mailed and who may not, FOR ONE HOST.
720
+ *
721
+ * Returns counts rather than addresses for the reported populations: the
722
+ * console surface that shows this figure is telling a merchant how their
723
+ * audience divides, and handing back the withheld ADDRESSES would turn a
724
+ * consent readout into a way to export the people who declined.
725
+ *
726
+ * ## The host argument, and why a mismatch throws
727
+ *
728
+ * A consent map is built where the person documents are read and consumed
729
+ * somewhere else. Between those two points the host can be lost — a helper
730
+ * that takes one hostId and passes another, a cached map reused for a second
731
+ * site, a merge of two audiences. The result would be host A's grants
732
+ * deciding host B's send, silently and with every count still adding up.
733
+ *
734
+ * So the host is stated at both ends and compared. A mismatch is a wiring
735
+ * defect that no runtime value can produce, and it fails loudly rather than
736
+ * mailing somebody on a basis they gave to a different company. This is the
737
+ * same refusal `newResourceScopeFields` makes over an empty scope, for the
738
+ * same reason: a caller that computed the wrong thing is worth a stack trace.
739
+ *
740
+ * @param emails normalized, de-duplicated recipient addresses.
741
+ * @param records consent facts by address, every one read for `hostId`; a
742
+ * missing entry reads as a record-less address.
743
+ * @param hostId the site sending. Every record must have been read for it.
744
+ */ export function splitByMarketingConsent(emails, records, policy, group) {
745
+ const { hostId } = group;
746
+ const split = {
747
+ mailable: [],
748
+ consented: 0,
749
+ consentedByOperator: 0,
750
+ grandfathered: 0,
751
+ withheld: 0,
752
+ withheldDeclined: 0,
753
+ withheldOtherHost: 0,
754
+ withheldNoBasis: 0
755
+ };
756
+ for (const email of emails){
757
+ var _records_get;
758
+ const record = (_records_get = records.get(email)) != null ? _records_get : readMarketingBasis(null, group);
759
+ if (record.hostId !== hostId || record.groupId !== group.groupId) {
760
+ throw new Error('[marketing-consent] a consent record read for ' + `${record.hostId}/${record.groupId} cannot decide a send from ` + `${hostId}/${group.groupId}`);
761
+ }
762
+ const decision = marketingConsentDecision(record, policy);
763
+ switch(decision.verdict){
764
+ case 'consented':
765
+ split.mailable.push(email);
766
+ split.consented += 1;
767
+ if (record.assertedBy === 'operator') split.consentedByOperator += 1;
768
+ break;
769
+ case 'grandfathered':
770
+ split.mailable.push(email);
771
+ split.grandfathered += 1;
772
+ break;
773
+ default:
774
+ split.withheld += 1;
775
+ if (decision.reason === 'declined') split.withheldDeclined += 1;
776
+ else if (decision.reason === 'other-host') split.withheldOtherHost += 1;
777
+ else split.withheldNoBasis += 1;
778
+ }
779
+ }
780
+ return split;
781
+ }
782
+
783
+ //# sourceMappingURL=marketing-consent.js.map