@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,981 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ /**
17
+ * Visitor tracking consent (AGL-1498): the single answer to "may this
18
+ * tracking feature run for this visitor?", shared by every surface that has
19
+ * to agree about it — the tenant's GA injection, the consent banner, the
20
+ * marketing runtime's visitor id, the console card that configures it, and
21
+ * the console preview's region simulator.
22
+ *
23
+ * The model, and the honesty bar it was built against:
24
+ *
25
+ * - **Strictly necessary — no consent asked, none required.** The cart cookie
26
+ * (`aglyn_cart_{hostId}`, commerce checkout), the member session
27
+ * (`aglyn_member_{hostId}`, memberships sign-in), the `aglyn-tenant-host`
28
+ * preview-host override, popup/announcement dismissal stamps (local-only,
29
+ * never transmitted, and blocking them would show MORE popups), the
30
+ * first-party pageview beacon (cookieless, stores no visitor identifier —
31
+ * AGL-82), and the stored consent choice itself.
32
+ * - **Consent-gated: `advertising`** (AGL-1649) — GA4's `ad_storage`,
33
+ * `ad_user_data` and `ad_personalization`. OFF for every site unless the
34
+ * host turns the question on, and granted only by an explicit visitor yes
35
+ * to that specific category: never by the implied default, never by a
36
+ * record written before the category existed, never by any refusal status.
37
+ * A host who needs Ads storage previously had one workaround — switch the
38
+ * whole tool off and run their own CMP — which is why this exists.
39
+ * - **Consent-gated: `analytics`.** Today that is the customer-configured
40
+ * Google Analytics tag — a third-party identifier-setting script — plus
41
+ * the CROSS-VISIT persistence of the `aglyn:visitor` experiment id (the id
42
+ * never leaves the browser, but an indefinite-lifetime identifier is
43
+ * disproportionate without a basis; without one it degrades to
44
+ * sessionStorage, so variants stay stable within the visit).
45
+ *
46
+ * **Two postures, resolved per visitor** (the Squarespace shape, host-chosen):
47
+ *
48
+ * - **`opt-in`** — prior consent: nothing gated loads until an explicit
49
+ * accept. Applied in regions whose law requires prior consent (EU/EEA/UK),
50
+ * whenever the visitor's region is UNKNOWN, and everywhere when the host
51
+ * picks `strict` mode. Unknown-geo falls to opt-in deliberately: the
52
+ * asymmetry is a few lost analytics events on rare headerless visits
53
+ * versus pre-consent tracking of an EU visitor.
54
+ * - **`opt-out`** — implied consent: gated features are live from first
55
+ * paint, no banner and no notice; the visitor's recorded state is
56
+ * `implied`, and the always-present "Your Privacy Choices" control is the
57
+ * opt-out surface. Applied outside prior-consent regions when the host
58
+ * mode is `geo`.
59
+ *
60
+ * **GPC (Global Privacy Control)** is honored as an automatic opt-out in
61
+ * both postures: a visitor whose browser sends it is recorded `gpc-opt-out`
62
+ * and never tracked, unless they later explicitly accept (the signal is a
63
+ * default; a specific, informed choice overrides it).
64
+ *
65
+ * Enforcement is AT THE SOURCE and MODE-INDEPENDENT: whenever the verdict is
66
+ * "no", the GA script never loads — not load-then-suppress — and the gate
67
+ * does not care WHY consent is absent. Because tenant pages are ISR-cached,
68
+ * both the posture and the verdict are evaluated client-side only — the
69
+ * cached HTML never varies by region or consent state.
70
+ */ /** The host fields this module reads; keeps callers free of the full doc. */ const CONSENT_STATUSES = new Set([
71
+ 'implied',
72
+ 'accepted',
73
+ 'declined',
74
+ 'opted-out',
75
+ 'gpc-opt-out'
76
+ ]);
77
+ /** The statuses that are a visitor's own click, not a default or a signal. */ export function isExplicitConsentStatus(status) {
78
+ return status === 'accepted' || status === 'declined' || status === 'opted-out';
79
+ }
80
+ /**
81
+ * Which refusal a "no" is, for a visitor in this state.
82
+ *
83
+ * `opted-out` when they were defaulted in, `declined` when they were asked
84
+ * first. The GATE does not care — both refuse — but the RECORD does: "how many
85
+ * visitors were tracked before they said no" is a question only these two
86
+ * answers separate, and it is a question a regulator can ask.
87
+ *
88
+ * Lives here rather than in either surface that needs it. Both the consent
89
+ * overlay and the console's own module were deriving it, and a rule with two
90
+ * derivations is a rule that eventually means two different things.
91
+ */ export function refusalStatusFor(stored, posture) {
92
+ return (stored == null ? void 0 : stored.status) === 'implied' || posture === 'opt-out' ? 'opted-out' : 'declined';
93
+ }
94
+ /** Whether a status grants the analytics category. */ export function analyticsGrantedByStatus(status) {
95
+ return status === 'accepted' || status === 'implied';
96
+ }
97
+ /**
98
+ * Whether a status can carry an advertising grant at all (AGL-1649; widened by
99
+ * AGL-2402, narrowed back on 2026-08-24, widened again on 2026-08-25).
100
+ *
101
+ * The SAME status set as {@link analyticsGrantedByStatus}, and the agreement is
102
+ * deliberate: `implied` grants both. Being defaulted in where the law permits a
103
+ * default is one posture, applied to both categories, and the visitor's opt-out
104
+ * surface is the same one.
105
+ *
106
+ * ## Why it moved three times, because the next person will move it again
107
+ *
108
+ * AGL-2402 (`a410d8785`) first made `implied` qualify, on the reasoning that
109
+ * the rule is safe by GEOGRAPHY: an `implied` record can only ever be written
110
+ * in the OPT-OUT posture, because {@link resolveConsentPosture} puts the EU 27,
111
+ * the EEA/EFTA three, the UK, Gibraltar, the EU outermost regions AND any
112
+ * visitor whose region cannot be determined into opt-in, where
113
+ * `decideVisitorConsent` records no default at all. That half was always sound
114
+ * and is still asserted in `visitor-consent-advertising.spec.ts`.
115
+ *
116
+ * The half that failed was DISCLOSURE. That commit stated the published Cookie
117
+ * Policy had been updated first; read against the live page on 2026-08-24 it
118
+ * said two different things — its "Marketing / advertising" paragraph described
119
+ * the opt-out posture, while the per-cookie table said `_gac`, `_gcl_au`,
120
+ * `_fbp` and `_fbc` were "set only where you have allowed advertising cookies"
121
+ * and "Your choices" repeated it. A policy that says both cannot authorise the
122
+ * wider behaviour, so the code was narrowed to the strictest thing it said.
123
+ *
124
+ * On 2026-08-25 the master moved for real, in the right order: those five
125
+ * opt-in-only sentences were rewritten in the Cookie Policy gdoc, and only then
126
+ * did this function follow. The Privacy Policy needed nothing — it already said
127
+ * *"With your consent, we do 'share' … for cross-context behavioral
128
+ * advertising"*, named Google and Meta, and described the EU/UK-ask-first vs.
129
+ * elsewhere-from-first-visit split. The flat "we do not sell or share" denial
130
+ * that the narrowing reasoned from was a paraphrase in `docs/ANALYTICS.md`, not
131
+ * a sentence in the document.
132
+ *
133
+ * ⛔ Re-narrowing is a POLICY act, not a code change. Move the published
134
+ * masters first and let this follow — never the other way round. Nine surfaces
135
+ * describe this rule to a human and `consent-advertising-copy-drift.spec.ts`
136
+ * fails on all of them the moment the two disagree.
137
+ *
138
+ * A `true` here is necessary, never sufficient: the host must ALSO have opted
139
+ * into asking (see {@link hostAsksAboutAdvertising}), and a refusal — declined,
140
+ * opted out, or a GPC signal — outranks the default everywhere.
141
+ */ export function advertisingGrantedByStatus(status) {
142
+ // Fails CLOSED: an exact match against the granting statuses, so any
143
+ // unknown, absent or future status answers `false`. `strictNullChecks` is
144
+ // off repo-wide, which means `status` can be `null`/`undefined` at runtime
145
+ // despite the type — an equality test denies those, an exclusion list
146
+ // (`status !== 'declined' && …`) would have granted them.
147
+ //
148
+ // `implied` GRANTS from 2026-08-25, and the policy went first (the call,
149
+ // executed in that order). `decideVisitorConsent` only ever writes `implied`
150
+ // in the OPT-OUT posture — `resolveConsentPosture` keeps the EU 27, the
151
+ // EEA/EFTA three, the UK, Gibraltar, the EU outermost regions AND any visitor
152
+ // whose region cannot be determined in opt-in, where no default is recorded at
153
+ // all — so this widens advertising to the rest of the world only, and the
154
+ // geographic guarantee `visitor-consent-advertising.spec.ts` asserts is
155
+ // untouched. `gpc-opt-out` and `declined` still answer `false`.
156
+ //
157
+ // The disclosure this rests on is now consistent in BOTH masters, which is
158
+ // what the 2026-08-24 narrowing was waiting for: the Privacy Policy already
159
+ // said *"With your consent, we do 'share' … Where the law requires us to ask
160
+ // first — the EU, the UK, and anywhere we cannot determine your region — it
161
+ // does not load until you accept. Elsewhere it runs from your first visit"*,
162
+ // and the Cookie Policy's two remaining opt-in-only sentences (the ×4
163
+ // per-cookie note and the "Your choices" bullet) were rewritten to match it
164
+ // the same day. Re-narrow this ONLY by moving the policies back first.
165
+ return status === 'accepted' || status === 'implied';
166
+ }
167
+ /**
168
+ * Strict GA measurement-id check (AGL-138) — the id lands inside an inline
169
+ * script, so the format gate is load-bearing, not cosmetic.
170
+ */ export const GA_MEASUREMENT_ID_PATTERN = /^G-[A-Z0-9]{4,16}$/;
171
+ /**
172
+ * The shape a Meta pixel id has, shared by the LOADER and the console field.
173
+ *
174
+ * Declared HERE and not in `advertising-tags.ts`, which the console may not
175
+ * import: `advertising-tag-gate.spec` case (f) fails any console file that
176
+ * reaches for that module, because it is what mounts a vendor's script. A
177
+ * format string is not a vendor, so it lives with the other id patterns and
178
+ * the loader imports it from here.
179
+ *
180
+ * One pattern, because two would be a form that accepts an id the loader then
181
+ * refuses — the tag never mounts and the operator is left looking at a saved
182
+ * field and no pixel.
183
+ */ export const META_PIXEL_ID_PATTERN = /^[0-9]{8,20}$/;
184
+ /**
185
+ * A Google Ads conversion id — `AW-` and digits.
186
+ *
187
+ * Distinct from `GA_MEASUREMENT_ID_PATTERN` (`G-…`) on purpose: they are
188
+ * different products with different ids, and a form that accepted either in
189
+ * either field would load an analytics id into an ads tag and report nothing.
190
+ */ export const GOOGLE_ADS_ID_PATTERN = /^AW-[0-9]{6,16}$/;
191
+ /**
192
+ * A LinkedIn Insight partner id — numeric, and short.
193
+ *
194
+ * Bounded well under the Meta band rather than sharing it: a partner id is six
195
+ * or seven digits today, and a pattern loose enough to accept a Meta pixel id
196
+ * would let a mis-paste into the wrong field validate and then load a tag that
197
+ * matches nothing.
198
+ */ export const LINKEDIN_PARTNER_ID_PATTERN = /^[0-9]{4,10}$/;
199
+ /** The configured GA id when it is well-formed, else null. */ export function resolveGaMeasurementId(host) {
200
+ var _ref;
201
+ var _host_analytics;
202
+ const candidate = String((_ref = host == null ? void 0 : (_host_analytics = host.analytics) == null ? void 0 : _host_analytics.gaMeasurementId) != null ? _ref : '');
203
+ return GA_MEASUREMENT_ID_PATTERN.test(candidate) ? candidate : null;
204
+ }
205
+ /**
206
+ * A Google Tag Manager container id — `GTM-` and 5–10 upper-case
207
+ * alphanumerics.
208
+ *
209
+ * Format-checked for the same reason the GA id is: it lands inside an INLINE
210
+ * SCRIPT on a published page, so anything that is not this shape must never
211
+ * reach it (AGL-138).
212
+ */ export const GTM_CONTAINER_ID_PATTERN = /^GTM-[A-Z0-9]{5,10}$/;
213
+ /** The configured GTM container when it is well-formed, else null. */ export function resolveGtmContainerId(host) {
214
+ var _ref;
215
+ var _host_analytics;
216
+ const candidate = String((_ref = host == null ? void 0 : (_host_analytics = host.analytics) == null ? void 0 : _host_analytics.gtmContainerId) != null ? _ref : '');
217
+ return GTM_CONTAINER_ID_PATTERN.test(candidate) ? candidate : null;
218
+ }
219
+ /**
220
+ * Whether the site loads ANY Google tag — a GA property, a GTM container, or
221
+ * both (AGL-2486).
222
+ *
223
+ * The one predicate both consent questions are asked through, because the
224
+ * alternative is two places that each remember only one of the two. A site
225
+ * with a container and no GA id is a site that tracks: it was the shape that
226
+ * would have had `consentGatedCategories` return `[]`, no banner rendered, and
227
+ * the container loading ungated — which for GTM is worse than for GA, since a
228
+ * container is exactly the thing that can carry advertising tags.
229
+ */ export function hostHasGoogleTag(host) {
230
+ return !!resolveGaMeasurementId(host) || !!resolveGtmContainerId(host);
231
+ }
232
+ /** Host opt-out of the tool. Absent means ACTIVE — the safe default. */ export function isConsentToolDisabled(host) {
233
+ var _host_consent;
234
+ return (host == null ? void 0 : (_host_consent = host.consent) == null ? void 0 : _host_consent.disabled) === true;
235
+ }
236
+ /** The host's posture choice; anything but `'strict'` reads as `'geo'`. */ export function resolveHostConsentMode(host) {
237
+ var _host_consent;
238
+ return (host == null ? void 0 : (_host_consent = host.consent) == null ? void 0 : _host_consent.mode) === 'strict' ? 'strict' : 'geo';
239
+ }
240
+ /**
241
+ * The gated categories this site actually uses. Empty means there is
242
+ * nothing to consent to and no consent UI renders — a banner with no
243
+ * question behind it is decoration that trains visitors to click banners.
244
+ */ export function consentGatedCategories(host) {
245
+ // A GTM CONTAINER counts (AGL-2486). Read as `resolveGaMeasurementId` alone,
246
+ // a site running only a container had no gated category, so no banner
247
+ // rendered and the container loaded ungated — see `hostHasGoogleTag`.
248
+ if (!hostHasGoogleTag(host)) return [];
249
+ return hostAsksAboutAdvertising(host) ? [
250
+ 'analytics',
251
+ 'advertising'
252
+ ] : [
253
+ 'analytics'
254
+ ];
255
+ }
256
+ /**
257
+ * Whether this site asks its visitors about advertising storage (AGL-1649).
258
+ *
259
+ * Two conditions, both required. The host has to have opted in — the flag is
260
+ * off for every site that exists and stays off unless someone turns it on —
261
+ * and the site has to actually have an analytics tag, because advertising
262
+ * storage here is GA4's `ad_storage` and there is nothing to ask about
263
+ * without one. A banner with no question behind it is decoration (AGL-1498).
264
+ */ export function hostAsksAboutAdvertising(host) {
265
+ var _host_consent;
266
+ // Either tag qualifies (AGL-2486): `ad_storage` is what a GA property reads
267
+ // and what a GTM container's advertising tags read, and a container is the
268
+ // likelier of the two to carry them.
269
+ return (host == null ? void 0 : (_host_consent = host.consent) == null ? void 0 : _host_consent.advertising) === true && hostHasGoogleTag(host);
270
+ }
271
+ /**
272
+ * Whether the published site runs the consent machinery at all: the tool is
273
+ * active AND the site uses at least one gated feature.
274
+ */ export function hostConsentRequired(host) {
275
+ return !isConsentToolDisabled(host) && consentGatedCategories(host).length > 0;
276
+ }
277
+ /**
278
+ * Regions whose law requires PRIOR consent for non-essential
279
+ * cookies/identifiers (ePrivacy and its UK retention): the EU 27, the three
280
+ * EEA/EFTA states, the UK, Gibraltar (UK GDPR extends there), and the EU
281
+ * outermost regions that carry their own ISO codes. ISO 3166-1 alpha-2,
282
+ * matching `x-vercel-ip-country`.
283
+ *
284
+ * Deliberately NOT a "privacy-law countries" list: plenty of laws (CCPA,
285
+ * LGPD, PIPEDA) regulate tracking on an opt-out basis, which is exactly what
286
+ * the opt-out posture plus GPC provides. This set is only the prior-consent
287
+ * boundary.
288
+ */ export const PRIOR_CONSENT_COUNTRY_CODES = new Set([
289
+ // EU 27
290
+ 'AT',
291
+ 'BE',
292
+ 'BG',
293
+ 'HR',
294
+ 'CY',
295
+ 'CZ',
296
+ 'DK',
297
+ 'EE',
298
+ 'FI',
299
+ 'FR',
300
+ 'DE',
301
+ 'GR',
302
+ 'HU',
303
+ 'IE',
304
+ 'IT',
305
+ 'LV',
306
+ 'LT',
307
+ 'LU',
308
+ 'MT',
309
+ 'NL',
310
+ 'PL',
311
+ 'PT',
312
+ 'RO',
313
+ 'SK',
314
+ 'SI',
315
+ 'ES',
316
+ 'SE',
317
+ // EEA / EFTA
318
+ 'IS',
319
+ 'LI',
320
+ 'NO',
321
+ // UK and Gibraltar
322
+ 'GB',
323
+ 'GI',
324
+ // EU outermost regions with their own ISO codes (legally EU territory)
325
+ 'AX',
326
+ 'GF',
327
+ 'GP',
328
+ 'MQ',
329
+ 'RE',
330
+ 'YT'
331
+ ]);
332
+ /**
333
+ * The per-visitor posture. Client-evaluated (ISR forbids varying the HTML),
334
+ * from the country the region endpoint reports.
335
+ *
336
+ * Unknown region (`null`) falls to `opt-in` — the ONE place this feature
337
+ * does not maximize tracking, because the asymmetry is lopsided: a few lost
338
+ * analytics events on rare headerless visits, versus pre-consent tracking
339
+ * of an EU visitor, which "track as soon as we legally can" excludes by its
340
+ * own terms.
341
+ */ export function resolveConsentPosture(host, country) {
342
+ if (resolveHostConsentMode(host) === 'strict') return 'opt-in';
343
+ if (!country) return 'opt-in';
344
+ return PRIOR_CONSENT_COUNTRY_CODES.has(country.toUpperCase()) ? 'opt-in' : 'opt-out';
345
+ }
346
+ /**
347
+ * Whether this browser sends Global Privacy Control. Read live at decision
348
+ * time — the signal is the user agent's, not ours to cache.
349
+ */ export function hasGlobalPrivacyControl() {
350
+ return typeof navigator !== 'undefined' && navigator.globalPrivacyControl === true;
351
+ }
352
+ /**
353
+ * Keyed by hostId, not a bare name: preview deployments and localhost serve
354
+ * many hosts from one origin, and one site's "yes" must never leak to
355
+ * another's.
356
+ */ export const VISITOR_CONSENT_STORAGE_PREFIX = 'aglyn:consent:';
357
+ /** The marketing runtime's cross-visit experiment id (`site-runtime.tsx`). */ export const VISITOR_ID_STORAGE_KEY = 'aglyn:visitor';
358
+ /** Fired on `window` whenever {@link storeVisitorConsent} records a state. */ export const VISITOR_CONSENT_CHANGED_EVENT = 'aglyn:consent:changed';
359
+ /**
360
+ * Fired on `window` to open the privacy-choices panel — the change-your-mind
361
+ * path, in BOTH directions. Sites can also link any element to
362
+ * `#aglyn-consent`; the banner listens for those clicks.
363
+ */ export const VISITOR_CONSENT_OPEN_EVENT = 'aglyn:consent:open';
364
+ export function visitorConsentStorageKey(hostId) {
365
+ return `${VISITOR_CONSENT_STORAGE_PREFIX}${hostId}`;
366
+ }
367
+ /**
368
+ * Cookie-name PREFIXES the analytics grant is answerable for (AGL-1606).
369
+ *
370
+ * A prefix sweep rather than a name list, because the names are derived and
371
+ * configuration-dependent: `_ga` is joined by `_ga_<measurement id without the
372
+ * `G-`>` per property, by `_gac_<id>` when Google Ads linking is on, and by
373
+ * `_gid` where the legacy daily id is still issued. Hardcoding the two names a
374
+ * given site happens to carry today is precisely how a withdrawal leaves an
375
+ * identifier behind on the next site. `_ga` subsumes `_ga`, `_ga_*` and
376
+ * `_gac_*`; `_gid` is the only Google analytics cookie that does not start
377
+ * with it.
378
+ */ export const ANALYTICS_COOKIE_PREFIXES = [
379
+ '_ga',
380
+ '_gid'
381
+ ];
382
+ /**
383
+ * Cookie-name PREFIXES the ADVERTISING grant is answerable for (AGL-2486).
384
+ *
385
+ * These are Google's, and they are separate from the analytics list above for
386
+ * a reason that is not tidiness: an advertising-only withdrawal must sweep
387
+ * them while analytics keeps running. Folding them into
388
+ * {@link ANALYTICS_COOKIE_PREFIXES} would have swept them on ANALYTICS
389
+ * withdrawal and still not on the case that motivates this — leaving the same
390
+ * hole, narrower — besides filing a conversion-linker cookie under a category
391
+ * it does not belong to.
392
+ *
393
+ * `_gcl_*` is the conversion linker, written by gtag once `ad_storage` is
394
+ * granted, and it is the one that started this: it does not begin with `_ga`,
395
+ * so nothing swept it, on any path.
396
+ *
397
+ * ONE PREFIX, deliberately. `_gac_*` (Google Ads linking) was in this list
398
+ * briefly and is not, because it is written under the ANALYTICS grant and is
399
+ * already swept by the `_ga` prefix. Listing it here made every
400
+ * analytics-only GRANT delete it — on a site that never asks the advertising
401
+ * question `stored.advertising` is always false, so the sweep ran on the way
402
+ * IN — which broke "cleanup is the withdrawal path only" (AGL-1606). Sweeping
403
+ * wider is not free when a category nobody was asked about owns the trigger.
404
+ *
405
+ * PRECISION MATTERS, because {@link clearCookiesWithPrefixes} is `startsWith`.
406
+ * `_gcl` cannot reach `_ga`, `_ga_<id>`, `_gac_<id>` or `_gid` — those are
407
+ * analytics and MUST survive an advertising-only withdrawal.
408
+ */ export const ADVERTISING_COOKIE_PREFIXES = [
409
+ '_gcl'
410
+ ];
411
+ /**
412
+ * Expire the advertising identifiers, on the same domain ladder as the
413
+ * analytics sweep (AGL-2486).
414
+ *
415
+ * Deleting a cookie that was never set is a no-op; failing to delete one that
416
+ * was is the defect — so this runs on every non-granting store rather than
417
+ * only on a transition observed to be a withdrawal, which the record cannot
418
+ * reliably tell us anyway.
419
+ */ export function clearAdvertisingCookies(hostname) {
420
+ return clearCookiesWithPrefixes(ADVERTISING_COOKIE_PREFIXES, hostname);
421
+ }
422
+ /**
423
+ * Multi-label public suffixes: names under which registrations happen, so the
424
+ * label to their left is the registrable one. A short list rather than the
425
+ * Public Suffix List — the same trade `console-domains.ts` makes, and the
426
+ * failure mode is mild in both directions: an unlisted suffix costs one
427
+ * over-broad `domain=` write that the browser silently refuses (cookies cannot
428
+ * be set on a public suffix), never a deletion on someone else's domain.
429
+ */ const MULTI_LABEL_PUBLIC_SUFFIXES = new Set([
430
+ 'co.uk',
431
+ 'org.uk',
432
+ 'me.uk',
433
+ 'ac.uk',
434
+ 'gov.uk',
435
+ 'com.au',
436
+ 'net.au',
437
+ 'org.au',
438
+ 'co.nz',
439
+ 'co.za',
440
+ 'co.jp',
441
+ 'ne.jp',
442
+ 'or.jp',
443
+ 'com.br',
444
+ 'com.mx',
445
+ 'com.cn',
446
+ 'com.tr',
447
+ 'co.in',
448
+ 'co.kr',
449
+ 'com.sg',
450
+ 'com.hk'
451
+ ]);
452
+ function normalizeCookieHostname(hostname) {
453
+ return String(hostname != null ? hostname : '').trim().toLowerCase().replace(/\.+$/, '');
454
+ }
455
+ /**
456
+ * The registrable domain of a hostname — the highest name a cookie may be
457
+ * written at — or `null` when there is none.
458
+ *
459
+ * This is the fiddly half of the cleanup. GA's `cookie_domain: 'auto'` walks
460
+ * UP from the hostname and writes at the highest domain the browser accepts,
461
+ * which is the registrable domain with a leading dot: a visit to
462
+ * `www.shop.acme.co.uk` leaves `_ga` on `.acme.co.uk`, not on the exact host.
463
+ * A deletion aimed at the exact hostname therefore silently no-ops — it writes
464
+ * a second, host-scoped, already-expired cookie and leaves the real one alone.
465
+ *
466
+ * `null` for a single-label host (`localhost`) and for IP literals: those take
467
+ * host-only cookies, which the undecorated deletion already covers.
468
+ */ export function registrableCookieDomain(hostname) {
469
+ // Named `name`, not `host`: `host.foo` inside app-utils is what the
470
+ // AGL-1361 write-deny sweep reads as a host-document field, and a local
471
+ // string's `.split`/`.includes` would land in it as phantom fields.
472
+ const name = normalizeCookieHostname(hostname);
473
+ if (!name) return null;
474
+ // IPv6 literal (bracketed or bare) and IPv4 literal: host-only cookies.
475
+ if (name.startsWith('[') || name.includes(':')) return null;
476
+ if (/^\d+(\.\d+){3}$/.test(name)) return null;
477
+ const labels = name.split('.');
478
+ if (labels.length < 2 || labels.some((label)=>!label)) return null;
479
+ const lastTwo = labels.slice(-2).join('.');
480
+ if (MULTI_LABEL_PUBLIC_SUFFIXES.has(lastTwo)) {
481
+ // `acme.co.uk` is registrable; `co.uk` on its own is not a domain at all.
482
+ return labels.length > 2 ? labels.slice(-3).join('.') : null;
483
+ }
484
+ return lastTwo;
485
+ }
486
+ /**
487
+ * Every `domain=` value a cookie deletion has to try, most specific first and
488
+ * stopping at the registrable domain.
489
+ *
490
+ * The whole ladder rather than the registrable domain alone because
491
+ * `cookie_domain` is configurable: a host that pins it to `shop.acme.com`
492
+ * leaves the cookie one rung below where `auto` would. Walking the rungs costs
493
+ * a handful of no-op writes and removes the guess.
494
+ *
495
+ * Empty when there is no registrable domain — the host-only deletion that
496
+ * {@link clearAnalyticsCookies} always performs is the complete answer there.
497
+ */ export function analyticsCookieDomains(hostname) {
498
+ const name = normalizeCookieHostname(hostname);
499
+ const registrable = registrableCookieDomain(name);
500
+ if (!registrable) return [];
501
+ const domains = [];
502
+ let current = name;
503
+ for(;;){
504
+ domains.push(`.${current}`);
505
+ if (current === registrable) break;
506
+ const cut = current.indexOf('.');
507
+ if (cut < 0) break;
508
+ current = current.slice(cut + 1);
509
+ }
510
+ return domains;
511
+ }
512
+ /**
513
+ * Expire every analytics cookie this browser is carrying, at the host itself
514
+ * and at every domain up to the registrable one. Returns the names it acted
515
+ * on, which is what makes the cleanup assertable.
516
+ *
517
+ * Best-effort by construction: a cookie written at a path other than `/` is
518
+ * not reachable this way, and `document.cookie` cannot report which domain a
519
+ * cookie came from — hence the ladder. Neither limit applies to the cookies GA
520
+ * actually writes (path `/`, registrable domain).
521
+ */ export function clearAnalyticsCookies(hostname) {
522
+ return clearCookiesWithPrefixes(ANALYTICS_COOKIE_PREFIXES, hostname);
523
+ }
524
+ /**
525
+ * The same sweep for an ARBITRARY prefix set — the generalisation
526
+ * {@link clearAnalyticsCookies} now delegates to.
527
+ *
528
+ * Extracted rather than copied because the hard part is not the prefix match,
529
+ * it is {@link analyticsCookieDomains}: the ladder from the exact hostname up
530
+ * to the registrable domain, which exists because a tag written with an `auto`
531
+ * cookie domain leaves its identifier one or more rungs ABOVE the host. A
532
+ * second vendor's sweep re-derived by hand would get that wrong the first time
533
+ * and pass its own test, because a deletion aimed at the wrong domain silently
534
+ * no-ops — it writes an already-expired host-scoped cookie and reports success.
535
+ * One implementation, one ladder, one place to fix.
536
+ *
537
+ * Meta's `_fbp`/`_fbc` are written exactly like `_ga`: path `/`, registrable
538
+ * domain, first-party. Nothing here is Google-specific and nothing here is
539
+ * Meta-specific.
540
+ */ export function clearCookiesWithPrefixes(prefixes, hostname) {
541
+ if (typeof document === 'undefined') return [];
542
+ // An empty prefix set would match EVERY cookie via `''.startsWith`, which
543
+ // would delete the cart, the member session and the consent record itself.
544
+ // A caller with nothing to sweep gets nothing swept.
545
+ if (!prefixes || prefixes.length === 0) return [];
546
+ try {
547
+ var _document_cookie;
548
+ var _window_location;
549
+ const names = new Set();
550
+ for (const pair of String((_document_cookie = document.cookie) != null ? _document_cookie : '').split(';')){
551
+ const name = pair.split('=')[0].trim();
552
+ if (name && prefixes.some((p)=>!!p && name.startsWith(p))) {
553
+ names.add(name);
554
+ }
555
+ }
556
+ if (names.size === 0) return [];
557
+ const domains = analyticsCookieDomains(hostname != null ? hostname : typeof window !== 'undefined' ? (_window_location = window.location) == null ? void 0 : _window_location.hostname : '');
558
+ for (const name of names){
559
+ const expired = `${name}=; Max-Age=0; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/`;
560
+ document.cookie = expired;
561
+ for (const domain of domains){
562
+ document.cookie = `${expired}; domain=${domain}`;
563
+ }
564
+ }
565
+ return [
566
+ ...names
567
+ ];
568
+ } catch (unused) {
569
+ // Cookies disabled or a hostile `document.cookie`: the gate still keeps
570
+ // the script out, which is the load-bearing half.
571
+ return [];
572
+ }
573
+ }
574
+ /**
575
+ * The `window` flag `gtag.js` consults before every hit: with
576
+ * `window['ga-disable-G-XXXX'] === true` the tag for that property sends
577
+ * nothing and writes nothing. Google's own documented opt-out mechanism, and
578
+ * the one that works on a tag which never received a consent-mode default
579
+ * (AGL-1608) — a case that still exists after AGL-1622, because a tag arriving
580
+ * through GTM or a host's own CMP is not one this module declared for.
581
+ */ export const GA_DISABLE_FLAG_PREFIX = 'ga-disable-';
582
+ /**
583
+ * The consent-mode payload for a given analytics grant — ONE source, so the
584
+ * `default` declared before the tag loads (AGL-1622) and the `update` sent on a
585
+ * mid-pageview withdrawal (AGL-1608) can never drift apart. Two hand-written
586
+ * literals that disagree is how a tag ends up believing a state the visitor
587
+ * never chose.
588
+ */ export function analyticsConsentSignals(granted) {
589
+ return {
590
+ analytics_storage: granted ? 'granted' : 'denied',
591
+ ad_storage: 'denied',
592
+ ad_user_data: 'denied',
593
+ ad_personalization: 'denied'
594
+ };
595
+ }
596
+ /**
597
+ * The consent-mode payload for a pair of category grants (AGL-1649).
598
+ *
599
+ * A SEPARATE function from {@link analyticsConsentSignals} rather than a
600
+ * widening of it, deliberately. AGL-1649 says not to widen those three
601
+ * literals, and the reason survives this change: a caller that only knows
602
+ * about analytics should be unable to express a grant it has no answer for.
603
+ * Reaching an advertising grant now requires calling something else and
604
+ * passing it, which is a thing a reviewer can see in a diff.
605
+ *
606
+ * Advertising is clamped to analytics. `ad_storage: 'granted'` with
607
+ * `analytics_storage: 'denied'` is not a state this tool can reach honestly —
608
+ * every refusal path (declined, opted out, GPC) withdraws both together — so
609
+ * the clamp makes the impossible state unrepresentable rather than merely
610
+ * unreached.
611
+ */ export function consentModeSignals(grants) {
612
+ const analytics = grants.analytics === true;
613
+ const advertising = analytics && grants.advertising === true;
614
+ const ads = advertising ? 'granted' : 'denied';
615
+ return {
616
+ analytics_storage: analytics ? 'granted' : 'denied',
617
+ ad_storage: ads,
618
+ ad_user_data: ads,
619
+ ad_personalization: ads
620
+ };
621
+ }
622
+ /**
623
+ * Whether advertising storage may run for this visitor on this site.
624
+ *
625
+ * THREE independent conditions, and all of them are load-bearing:
626
+ *
627
+ * 1. The host asks about advertising at all. A record that says yes is
628
+ * ignored on a site that never turned the category on — which covers a
629
+ * host switching it back off, and covers a stale record generally.
630
+ * 2. The record's status can carry a grant — an explicit accept, and nothing
631
+ * else (see {@link advertisingGrantedByStatus}). An `implied` default
632
+ * cannot, and every refusal status refuses.
633
+ * 3. The record actually says yes to this category.
634
+ *
635
+ * Absent, unreadable or legacy records all answer `false`, which is the same
636
+ * answer they gave before the category existed.
637
+ */ export function advertisingGrantedByRecord(host, stored) {
638
+ if (!hostAsksAboutAdvertising(host)) return false;
639
+ if (!stored) return false;
640
+ if (!advertisingGrantedByStatus(stored.status)) return false;
641
+ return stored.advertising === true;
642
+ }
643
+ /**
644
+ * The consent-mode `default` declaration that goes in front of the tag
645
+ * (AGL-1622), for injection into the same inline block that creates
646
+ * `dataLayer` and calls `gtag('config', …)`.
647
+ *
648
+ * ## What this is, and — load-bearing — what it is NOT
649
+ *
650
+ * It is NOT a licence to load the tag earlier. It is emitted INSIDE the block
651
+ * that only renders when the AGL-1498 gate has already said yes, so it is
652
+ * reached only on a pageview where analytics is granted. On every gated
653
+ * pageview — an EU/UK/EEA visitor with no explicit accept, an unknown region, a
654
+ * declined or opted-out visitor, a GPC browser — nothing here renders, no
655
+ * request goes to `googletagmanager.com`, and this constant is never evaluated
656
+ * into the page. "The script never LOADS, rather than load-then-suppress" is a
657
+ * stated AGL-1498 property and it is intact everywhere the gate applies;
658
+ * `consent-mode-default.spec.tsx` fails if that ever stops being true.
659
+ *
660
+ * the decision, 2026-08-14: load-then-restrict is approved for the UNITED
661
+ * STATES, where the implied-consent posture already permits the load and the
662
+ * restriction signals act on a tag that is legitimately resident. EU and UK
663
+ * keep the prior-consent gate exactly as it is, because loading an analytics
664
+ * tag before consent is the specific thing prior-consent law prohibits. So the
665
+ * consent-mode mechanism is strictly ADDITIVE to the gate, never a replacement
666
+ * for it.
667
+ *
668
+ * What declaring it actually buys, given the tag is granted by the time it is
669
+ * read:
670
+ *
671
+ * - The advertising signals are denied FROM THE FIRST HIT. Without a default,
672
+ * a freshly loaded tag runs with `ad_storage` unrestricted and only becomes
673
+ * denied if the visitor happens to withdraw and change their mind again
674
+ * (AGL-1608's `update`). The load-time state now matches the tool's actual
675
+ * scope instead of being wider than it.
676
+ * - A later `update` is a transition from a declared state rather than a tag's
677
+ * first-ever consent signal, which is the shape GA4's consent-mode reporting
678
+ * and any third-party CMP alongside ours both expect.
679
+ *
680
+ * The value is a literal, built from {@link analyticsConsentSignals} — no
681
+ * interpolated input reaches it, which matters because it lands inside an
682
+ * inline script (the AGL-138 concern).
683
+ */ export const GA_CONSENT_DEFAULT_SNIPPET = `gtag('consent', 'default', ${JSON.stringify(analyticsConsentSignals(true))});`;
684
+ /**
685
+ * The same declaration for a visitor who granted ADVERTISING too (AGL-1649).
686
+ *
687
+ * A second CONSTANT rather than a parameterised builder, for the reason the
688
+ * first one is a constant: it lands inside an inline script (the AGL-138
689
+ * concern), and a constant cannot interpolate anything. Both values are
690
+ * literals fixed at module load; the only thing the caller chooses is which
691
+ * of the two to emit.
692
+ *
693
+ * Reached only where {@link advertisingGrantedByRecord} says yes — host
694
+ * opted in, explicit accept, explicit yes to this category — which is
695
+ * evaluated client-side after hydration, like every other part of this gate.
696
+ * The ISR property is unaffected: the cached HTML contains neither snippet,
697
+ * because the whole block is inside the client-side `analyticsAllowed`
698
+ * condition.
699
+ *
700
+ * Declaring the grant as the DEFAULT rather than sending a later `update` is
701
+ * what keeps the tag's first hit correct. An update would arrive after
702
+ * `config`, so the session's first pageview — usually the entire session for
703
+ * a marketing visit — would carry the denied state the visitor did not
704
+ * choose.
705
+ */ export const GA_CONSENT_DEFAULT_WITH_ADS_SNIPPET = `gtag('consent', 'default', ${JSON.stringify(consentModeSignals({
706
+ analytics: true,
707
+ advertising: true
708
+ }))});`;
709
+ /**
710
+ * Consent-mode URL passthrough for the platform's own tag (AGL-2548).
711
+ *
712
+ * The advertising signals in {@link GA_CONSENT_DEFAULT_SNIPPET} are denied, so
713
+ * on `aglyn.com` gtag writes no `_gcl_aw` cookie and the `gclid` an ad click
714
+ * arrives with lives only in that first URL. The conversions it should be
715
+ * credited for fire one hop later, on the console, where the posture grants
716
+ * advertising storage outside the prior-consent regions — and without this
717
+ * declaration the click id never makes that hop. The console reports a
718
+ * conversion with no click behind it, and Google Ads counts nothing.
719
+ *
720
+ * `url_passthrough` is Google's mechanism for exactly this state: while
721
+ * `ad_storage` is denied, gtag appends the click identifiers to links into the
722
+ * cross-domain-linked hosts as URL parameters instead of setting a cookie. The
723
+ * receiving tag reads them under its own consent state. Nothing is stored on
724
+ * the denying surface, so the marketing site's opt-in advertising posture is
725
+ * unchanged; the click id simply survives the link it was always meant to
726
+ * survive.
727
+ *
728
+ * `ads_data_redaction` is the companion Google documents alongside it: with
729
+ * `ad_storage` denied, the ad click identifiers are stripped from the hits this
730
+ * tag sends and its network requests go to a cookieless endpoint. Declared
731
+ * together so a denied visitor is measured with less, not merely differently.
732
+ *
733
+ * Both are `set` calls, so they must precede `gtag('config', …)` in the same
734
+ * inline block — a `set` applies to hits processed after it, and the session's
735
+ * first pageview is the one carrying the click.
736
+ *
737
+ * PLATFORM ID ONLY. A customer's tag is configured with their id and their
738
+ * consent posture; how their ad click ids travel is theirs to decide, and a
739
+ * passthrough declared on their behalf would rewrite links on their site.
740
+ */ export const GA_CLICK_ID_PASSTHROUGH_SNIPPET = "gtag('set', 'url_passthrough', true);" + "gtag('set', 'ads_data_redaction', true);";
741
+ /**
742
+ * The measurement ids whose tag is actually RESIDENT in this page.
743
+ *
744
+ * Discovered from the page rather than taken from the host document on
745
+ * purpose: what has to be silenced is whatever gtag.js is currently loaded and
746
+ * configured for, which is not always what the host record configures — a tag
747
+ * can arrive through GTM, and a stale `<script>` from earlier in the pageview
748
+ * is exactly the thing this function exists to find.
749
+ *
750
+ * Ids are format-checked before they are used, because each one becomes a
751
+ * `window` property name.
752
+ */ export function residentGaMeasurementIds() {
753
+ if (typeof document === 'undefined') return [];
754
+ const ids = new Set();
755
+ try {
756
+ const loaded = document.querySelectorAll('script[src*="googletagmanager.com/gtag/js"]');
757
+ for (const element of Array.from(loaded)){
758
+ var _element_src;
759
+ const src = String((_element_src = element.src) != null ? _element_src : '');
760
+ const match = /[?&]id=([^&]*)/.exec(src);
761
+ const id = match ? decodeURIComponent(match[1]) : '';
762
+ if (GA_MEASUREMENT_ID_PATTERN.test(id)) ids.add(id);
763
+ }
764
+ } catch (unused) {
765
+ // A hostile or absent DOM: the dataLayer pass below still applies.
766
+ }
767
+ try {
768
+ var _window;
769
+ const layer = (_window = window) == null ? void 0 : _window.dataLayer;
770
+ for (const entry of Array.from(layer != null ? layer : [])){
771
+ var _args_;
772
+ // `arguments` objects, not arrays — gtag pushes its own call sites.
773
+ const args = Array.from(entry != null ? entry : []);
774
+ if (args[0] !== 'config') continue;
775
+ const id = String((_args_ = args[1]) != null ? _args_ : '');
776
+ if (GA_MEASUREMENT_ID_PATTERN.test(id)) ids.add(id);
777
+ }
778
+ } catch (unused) {
779
+ // No dataLayer, or one that is not iterable: the script pass stands.
780
+ }
781
+ return [
782
+ ...ids
783
+ ];
784
+ }
785
+ /**
786
+ * Make every resident GA tag agree with the consent state, and return the ids
787
+ * it acted on.
788
+ *
789
+ * ## Why deleting the cookies is not enough (AGL-1608)
790
+ *
791
+ * The AGL-1498 gate stops the script from LOADING, which is the right
792
+ * enforcement for a fresh pageview and the wrong tool for a visitor who
793
+ * withdraws mid-pageview: `gtag.js` has already executed, and React unmounting
794
+ * the `<script>` element does not unload it. `window.gtag` stays live, GA4
795
+ * enhanced measurement fires on its own (scroll depth, outbound click, file
796
+ * download), and the tag re-writes `_ga_<id>` AFTER
797
+ * {@link clearAnalyticsCookies} has deleted it. Reproduced on aglyn.com: an
798
+ * opt-out, a hand-run sweep to zero cookies, then one scroll to the footer
799
+ * brought `_ga_YW5PG16YTM` back.
800
+ *
801
+ * Two signals, because they fail differently and neither is guaranteed:
802
+ * the `ga-disable-<id>` window flag silences a tag that never received a
803
+ * consent-mode default, and the `consent`/`update` call reaches a tag that
804
+ * arrived through GTM with its own id this function never saw.
805
+ *
806
+ * ## What this deliberately does NOT do
807
+ *
808
+ * It never touches the gate. Both signals act only on a tag that is already
809
+ * resident — which, by construction, only exists after a grant. AGL-1622 later
810
+ * added a consent-mode DEFAULT ({@link GA_CONSENT_DEFAULT_SNIPPET}), but inside
811
+ * the gated block and therefore only on a pageview the gate already allowed:
812
+ * load-then-restrict is additive to "the script never LOADS", not a
813
+ * replacement for it, and the prior-consent regions are unaffected.
814
+ *
815
+ * Symmetric on purpose: a visitor who opts out and changes their mind in the
816
+ * same pageview would otherwise stay silently unmeasured until they navigated,
817
+ * because the re-rendered `<Script>` cannot re-execute an already-loaded tag.
818
+ * The re-grant restores whatever the CALLER passes — analytics alone on a site
819
+ * that never asks the advertising question (`advertising` defaults to false),
820
+ * and both categories where the visitor's record grants both (AGL-1649). The
821
+ * clamp in {@link consentModeSignals} still makes ads-without-analytics
822
+ * unrepresentable, so a withdrawal can never restore advertising alone.
823
+ */ export function setResidentAnalyticsTags(granted, advertising = false) {
824
+ if (typeof window === 'undefined') return [];
825
+ const ids = residentGaMeasurementIds();
826
+ const scope = window;
827
+ for (const id of ids){
828
+ scope[`${GA_DISABLE_FLAG_PREFIX}${id}`] = !granted;
829
+ }
830
+ try {
831
+ const send = scope.gtag;
832
+ if (typeof send === 'function') {
833
+ // The same payload builder the load-time `default` is made from
834
+ // (AGL-1622), so the two declarations cannot drift.
835
+ ;
836
+ send('consent', 'update', consentModeSignals({
837
+ analytics: granted,
838
+ advertising
839
+ }));
840
+ }
841
+ } catch (unused) {
842
+ // A tag that throws on its own consent call is one we cannot silence;
843
+ // the flag above and the cookie sweep still stand.
844
+ }
845
+ return ids;
846
+ }
847
+ /**
848
+ * The stored record, or null when there is none (never resolved, storage
849
+ * unavailable, or an unrecognized shape — treated alike: not yet decided).
850
+ */ export function readStoredVisitorConsent(hostId) {
851
+ if (!hostId || typeof window === 'undefined') return null;
852
+ try {
853
+ const raw = window.localStorage.getItem(visitorConsentStorageKey(hostId));
854
+ if (!raw) return null;
855
+ const parsed = JSON.parse(raw);
856
+ if ((parsed == null ? void 0 : parsed.v) !== 1 || typeof parsed.status !== 'string' || !CONSENT_STATUSES.has(parsed.status)) {
857
+ return null;
858
+ }
859
+ const status = parsed.status;
860
+ return {
861
+ v: 1,
862
+ at: typeof parsed.at === 'number' ? parsed.at : 0,
863
+ status,
864
+ // Derived, never trusted from storage: a hand-edited record must not
865
+ // grant what its status does not.
866
+ analytics: analyticsGrantedByStatus(status),
867
+ // Same discipline for advertising (AGL-1649), plus one more clause:
868
+ // the key has to be PRESENT and true. Absent is a record written
869
+ // before the category existed — never asked, which is not a yes.
870
+ advertising: advertisingGrantedByStatus(status) && parsed.advertising === true,
871
+ country: typeof parsed.country === 'string' ? parsed.country : null
872
+ };
873
+ } catch (unused) {
874
+ // No storage (privacy mode) or corrupt JSON — the visitor is simply
875
+ // undecided, which is the safe reading.
876
+ return null;
877
+ }
878
+ }
879
+ /**
880
+ * Record a consent state and make the page agree with it immediately.
881
+ *
882
+ * Storing the record is itself strictly-necessary storage (it is how a "no"
883
+ * is remembered), so it is exempt from the consent it records. Any
884
+ * non-granting state also REMOVES the identifiers the grant allowed —
885
+ * the persistent `aglyn:visitor` id AND the GA cookies
886
+ * ({@link clearAnalyticsCookies}): opting out cleans up, it does not merely
887
+ * stop adding (AGL-1606) — and SILENCES the tag that is already running
888
+ * ({@link setResidentAnalyticsTags}), without which the cleanup un-does itself
889
+ * within the same pageview (AGL-1608). Listeners hear about it via
890
+ * {@link VISITOR_CONSENT_CHANGED_EVENT} so the GA gate and the runtime react
891
+ * without a reload.
892
+ *
893
+ * The two cleanups are deliberately in SEPARATE try blocks: private mode
894
+ * throws on `localStorage` while cookies still work, and a withdrawal must
895
+ * not lose the cookie sweep to that.
896
+ */ export function storeVisitorConsent(hostId, state) {
897
+ var _state_country;
898
+ const stored = {
899
+ v: 1,
900
+ at: Date.now(),
901
+ status: state.status,
902
+ analytics: analyticsGrantedByStatus(state.status),
903
+ // Derived at store time exactly as `analytics` is, so a caller cannot
904
+ // persist a grant the status does not support — a refusal always writes
905
+ // `false` here even if the panel's checkbox was left ticked.
906
+ advertising: advertisingGrantedByStatus(state.status) && state.advertising === true,
907
+ country: (_state_country = state.country) != null ? _state_country : null
908
+ };
909
+ if (typeof window !== 'undefined') {
910
+ try {
911
+ window.localStorage.setItem(visitorConsentStorageKey(hostId), JSON.stringify(stored));
912
+ if (!stored.analytics) {
913
+ window.localStorage.removeItem(VISITOR_ID_STORAGE_KEY);
914
+ }
915
+ } catch (unused) {
916
+ // Private mode: the state holds for this page via the event below,
917
+ // and is re-derived next visit — the safe failure.
918
+ }
919
+ // Silence the RESIDENT tag before sweeping, never after (AGL-1608): the
920
+ // gate only keeps the script from LOADING, so a mid-pageview withdrawal
921
+ // leaves gtag.js live and it re-writes `_ga_<id>` on its next enhanced
922
+ // measurement event. Sweeping first would delete three cookies and
923
+ // immediately get one back.
924
+ setResidentAnalyticsTags(stored.analytics, stored.advertising === true);
925
+ if (!stored.analytics) {
926
+ clearAnalyticsCookies();
927
+ }
928
+ // The advertising half, and it belongs HERE rather than only in
929
+ // `revokeAdvertisingTags` (AGL-2486). That function sweeps a vendor whose
930
+ // marked script elements are in the document, and it is installed only on
931
+ // our own marketing host — so on a CUSTOMER site, where the advertising
932
+ // question is equally available, withdrawing advertising ran no sweep at
933
+ // all. `_gcl_au` is written by the GA tag `site-analytics.tsx` mounts, not
934
+ // by a script this module marked, so no element-scoped teardown was ever
935
+ // going to reach it on any surface.
936
+ //
937
+ // This path is the one every site shares: it is where a decision becomes a
938
+ // record. Unconditional on the grant being absent, for the reason in
939
+ // `clearAdvertisingCookies` — a delete of something never set costs
940
+ // nothing, a missed delete is the defect.
941
+ if (!stored.advertising) {
942
+ clearAdvertisingCookies();
943
+ }
944
+ try {
945
+ window.dispatchEvent(new CustomEvent(VISITOR_CONSENT_CHANGED_EVENT));
946
+ } catch (unused) {
947
+ // A dispatch failure only delays consumers until the next read.
948
+ }
949
+ }
950
+ return stored;
951
+ }
952
+ /**
953
+ * The GA gate's whole verdict: may the analytics category run for this
954
+ * visitor, on this site, right now?
955
+ *
956
+ * - Consent machinery not required (no gated features, or host opted out of
957
+ * the tool) → yes.
958
+ * - Required and the recorded state grants analytics (`accepted` or
959
+ * `implied`) → yes.
960
+ * - Required and anything else — declined, opted out, GPC, or NOT YET
961
+ * RESOLVED → no. Undecided is not a maybe: the script stays out until a
962
+ * state that grants it exists. The gate never asks WHY consent is absent,
963
+ * which is what keeps it posture-independent.
964
+ */ export function isAnalyticsAllowed(host, stored) {
965
+ if (!hostConsentRequired(host)) return true;
966
+ return (stored == null ? void 0 : stored.analytics) === true;
967
+ }
968
+ /**
969
+ * Where the marketing runtime may keep its experiment visitor id.
970
+ *
971
+ * `local` — the id persists across visits. `session` — the id lives in
972
+ * sessionStorage: variants stay stable within the visit and the identifier
973
+ * dies with the tab. The downgrade applies while the consent machinery is
974
+ * active for this site and analytics is not granted; the id itself never
975
+ * leaves the browser either way (the experiment beacons are aggregate — no
976
+ * visitor id on the wire).
977
+ */ export function resolveVisitorIdPersistence(host, stored) {
978
+ return isAnalyticsAllowed(host, stored) ? 'local' : 'session';
979
+ }
980
+
981
+ //# sourceMappingURL=visitor-consent.js.map