@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,533 @@
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 consent for AGLYN'S OWN console (`app.aglyn.com`) — the same
18
+ * decision the tenant runtime makes for a customer site, resolved against a
19
+ * surface that has no host document.
20
+ *
21
+ * ## What this module is, and what it deliberately is not
22
+ *
23
+ * It is a COMPOSITION of `visitor-consent.ts`, not a second consent engine.
24
+ * Every question a decision actually turns on is answered there: which
25
+ * statuses grant which category ({@link analyticsGrantedByStatus},
26
+ * {@link advertisingGrantedByStatus}), how a record is read and written
27
+ * ({@link readStoredVisitorConsent}, {@link storeVisitorConsent}), what a
28
+ * withdrawal sweeps, and what consent-mode signals a pair of grants becomes
29
+ * ({@link consentModeSignals}). A second implementation of any of those is how
30
+ * two surfaces come to disagree about whether a visitor said yes, and the
31
+ * disagreement is invisible from either side.
32
+ *
33
+ * What lives here is only what the console answers DIFFERENTLY, and there are
34
+ * exactly three such things:
35
+ *
36
+ * 1. **There is no host document.** A customer site's posture, its gated
37
+ * categories and its advertising question all come off `hosts/{id}`. The
38
+ * console has none, so the equivalents are constants derived below from
39
+ * what this surface actually runs.
40
+ * 2. **The prior-consent region set is the platform's, not the tenant's.**
41
+ * `PLATFORM_PRIOR_CONSENT_REGIONS` adds Switzerland to the tenant's
42
+ * ePrivacy set, because Aglyn's own brief treats CH as prior opt-in while
43
+ * the tenant set stays exactly as customers' sites have it. Reusing that
44
+ * constant rather than restating a country list is the point — two
45
+ * hand-kept lists is how one of them ends up a year behind the other.
46
+ * 3. **The storage subject is fixed.** Records are keyed by host id so one
47
+ * site's yes cannot leak to another's; the console is one surface, so it
48
+ * takes one constant subject and shares the same `aglyn:consent:` prefix,
49
+ * the same versioned record shape, and the same reader/writer.
50
+ *
51
+ * ## The posture, which is the tenant's posture
52
+ *
53
+ * - **UK / EU / EEA — and any visitor whose region cannot be determined** —
54
+ * `opt-in`: nothing non-essential runs until an explicit accept. Undecided
55
+ * is not a maybe.
56
+ * - **Everywhere else** — `opt-out`: implied consent is recorded on the first
57
+ * visit, analytics runs from that first paint, and the visitor can withdraw
58
+ * at any time from the account menu.
59
+ * - **GPC** is honored as an automatic opt-out in both postures, and is
60
+ * overridden only by a later explicit accept.
61
+ *
62
+ * ## Advertising on this surface
63
+ *
64
+ * Asked about only where something would read the answer — see
65
+ * {@link platformAsksAboutAdvertising}, which derives it from the consent
66
+ * defaults this surface actually declares rather than from a flag someone has
67
+ * to remember to keep in step.
68
+ */ import { PLATFORM_CONSENT_DEFAULT_COMMANDS, PLATFORM_PRIOR_CONSENT_REGIONS } from "./platform-consent-default.js";
69
+ import { geoHintFromTimeZone, readBrowserTimeZone } from "./timezone-geo-hint.js";
70
+ import { analyticsGrantedByStatus, hasGlobalPrivacyControl, isExplicitConsentStatus, readStoredVisitorConsent, refusalStatusFor, registrableCookieDomain, storeVisitorConsent, visitorConsentStorageKey } from "./visitor-consent.js";
71
+ /**
72
+ * The storage subject for the console's own consent record.
73
+ *
74
+ * `visitorConsentStorageKey` keys records by host id because preview
75
+ * deployments and localhost serve many customer sites from one origin. The
76
+ * console is a single surface, so it takes a constant — but it takes it
77
+ * through the same key builder, so a console record and a customer-site record
78
+ * can never collide, and a self-hosted console on the same origin as a site
79
+ * keeps its own.
80
+ *
81
+ * A name, not a hostname: the console is served from `app.aglyn.com`, from a
82
+ * custom console domain (AGL-1099c), and from localhost, and a visitor's
83
+ * choice is about the surface rather than about which of its origins they
84
+ * reached it through.
85
+ */ export const PLATFORM_CONSENT_SUBJECT = 'aglyn-console';
86
+ /**
87
+ * Where the client asks which country it is visiting from.
88
+ *
89
+ * The same path the tenant runtime uses, and for the same reason: the answer
90
+ * is a per-visitor request header, so it cannot be baked into a render. Each
91
+ * app serves its own route handler at this path.
92
+ */ export const PLATFORM_CONSENT_REGION_ENDPOINT = '/api/consent/region';
93
+ /** Session-scoped region cache — one lookup per visit, not per pageview. */ export const PLATFORM_CONSENT_REGION_CACHE_KEY = 'aglyn:consent:region';
94
+ /**
95
+ * Whether this surface asks its visitors about advertising storage.
96
+ *
97
+ * DERIVED from {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} rather than declared
98
+ * as its own flag. Those commands are what the console tells gtag about ad
99
+ * storage, so the question and the declaration cannot drift: a surface that
100
+ * denies advertising in every region asks nothing, and one that grants it
101
+ * anywhere asks.
102
+ *
103
+ * A control whose answer changes nothing is decoration, and decoration is what
104
+ * teaches people to click past the controls that do matter — which is the
105
+ * whole reason this is derived rather than hardcoded either way.
106
+ *
107
+ * The console currently grants advertising outside the prior-consent regions,
108
+ * because Aglyn advertises, remarkets and retargets on its own surfaces and
109
+ * the Privacy Policy names this one among them. So the question IS asked, and
110
+ * a visitor who declines gets the signals denied and the tags torn down.
111
+ *
112
+ * `every`, so a single region-scoped grant is enough to make the question
113
+ * real. The console's whole visitor population is not asked about a category
114
+ * because one region's declaration happens to deny it.
115
+ */ export function platformAsksAboutAdvertising() {
116
+ return !PLATFORM_CONSENT_DEFAULT_COMMANDS.every((command)=>command.ad_storage === 'denied');
117
+ }
118
+ /**
119
+ * The per-visitor posture for the console, from the country the region
120
+ * endpoint reports.
121
+ *
122
+ * Unknown region falls to `opt-in`, exactly as it does for a customer site:
123
+ * the asymmetry is a few lost analytics events on a rare headerless visit,
124
+ * against pre-consent tracking of a European visitor.
125
+ *
126
+ * A separate function from the tenant's `resolveConsentPosture` because it
127
+ * answers over a different country set (see the module comment) — and it reads
128
+ * that set from `platform-consent-default.ts` rather than restating it, so the
129
+ * console's gate and the console's consent-mode declaration can never disagree
130
+ * about which regions require asking first.
131
+ */ export function platformConsentPosture(country) {
132
+ if (!country) return 'opt-in';
133
+ return PLATFORM_PRIOR_CONSENT_REGIONS.indexOf(country.toUpperCase()) >= 0 ? 'opt-in' : 'opt-out';
134
+ }
135
+ /**
136
+ * The cookie that carries a console visitor's answer between the sibling
137
+ * subdomains the console is served on.
138
+ *
139
+ * ## The defect this closes
140
+ *
141
+ * `localStorage` is per ORIGIN, and the console is one application served on
142
+ * several hostnames of one registrable domain: `app.<domain>` and
143
+ * `auth.<domain>`, which is where interactive sign-in is delegated to. So a
144
+ * record written on one is invisible to the other.
145
+ *
146
+ * For an accept that is only a second ask — annoying, and fail-safe, since an
147
+ * unread record means untracked. For a REFUSAL it is worse than annoying and
148
+ * not fail-safe at all: outside the prior-consent regions the sibling host
149
+ * finds no record, resolves the posture afresh and writes `implied`, so an
150
+ * explicit opt-out reverts to implied consent on the next hop. A visitor
151
+ * cannot be expected to say no once per hostname of an application they
152
+ * experience as one.
153
+ *
154
+ * ## Why a cookie, and why it carries the whole record
155
+ *
156
+ * A cookie is the only client-side store that spans subdomains, and the
157
+ * consent record is itself strictly necessary storage — it is how a "no" is
158
+ * remembered — so it needs no consent of its own. It carries the whole record
159
+ * rather than a flag because the record is what the shared reader validates:
160
+ * the mirror is re-read through `readStoredVisitorConsent`, never trusted, so
161
+ * a hand-edited cookie cannot grant what its status does not.
162
+ */ export const PLATFORM_CONSENT_COOKIE = 'aglyn_consent';
163
+ /**
164
+ * How long the mirror lives. Thirteen months is the field convention for a
165
+ * consent record and the ceiling several supervisory authorities name; the
166
+ * record's own `at` stamp is what any future re-ask would be judged against.
167
+ */ const PLATFORM_CONSENT_COOKIE_MAX_AGE_SECONDS = 13 * 30 * 24 * 60 * 60;
168
+ /**
169
+ * Whether this origin may share a visitor's answer with its sibling
170
+ * subdomains.
171
+ *
172
+ * OFF by default and switched on by the surface, which is the same polarity
173
+ * `originPersistenceClass` uses and for the same asymmetry. Writing at the
174
+ * registrable domain is only correct where the whole registrable domain is
175
+ * ours: on a CUSTOM console domain it would put our cookie on the customer's
176
+ * apex, beside their own site, on an origin the console is deliberately not
177
+ * allowed to keep durable state on. A surface that says nothing gets a
178
+ * host-only record, which is complete on its own because there are no
179
+ * siblings to disagree with.
180
+ */ let sharesAcrossSubdomains = false;
181
+ export function setPlatformConsentSharesAcrossSubdomains(shares) {
182
+ sharesAcrossSubdomains = shares;
183
+ }
184
+ /** The raw mirror value for this browser, or null when there is none. */ function readPlatformConsentMirror() {
185
+ if (typeof document === 'undefined') return null;
186
+ try {
187
+ var _document_cookie;
188
+ for (const pair of String((_document_cookie = document.cookie) != null ? _document_cookie : '').split(';')){
189
+ const cut = pair.indexOf('=');
190
+ if (cut < 0) continue;
191
+ if (pair.slice(0, cut).trim() !== PLATFORM_CONSENT_COOKIE) continue;
192
+ return decodeURIComponent(pair.slice(cut + 1).trim());
193
+ }
194
+ } catch (unused) {
195
+ // Cookies disabled or a hostile `document.cookie`: no mirror, and the
196
+ // per-origin record still stands.
197
+ }
198
+ return null;
199
+ }
200
+ /**
201
+ * Write the mirror at the registrable domain, so the sibling host can read it.
202
+ *
203
+ * A no-op while sharing is off, and a no-op when the hostname has no
204
+ * registrable domain (`localhost`, an IP literal) — a host-only cookie there
205
+ * would duplicate the localStorage record and carry to nothing.
206
+ */ function writePlatformConsentMirror(stored) {
207
+ if (!sharesAcrossSubdomains || typeof document === 'undefined') return;
208
+ try {
209
+ var _window_location, _window_location1;
210
+ const hostname = typeof window === 'undefined' ? '' : (_window_location = window.location) == null ? void 0 : _window_location.hostname;
211
+ const domain = registrableCookieDomain(hostname);
212
+ if (!domain) return;
213
+ const secure = ((_window_location1 = window.location) == null ? void 0 : _window_location1.protocol) === 'https:' ? '; Secure' : '';
214
+ document.cookie = `${PLATFORM_CONSENT_COOKIE}=${encodeURIComponent(JSON.stringify(stored))}` + `; Max-Age=${PLATFORM_CONSENT_COOKIE_MAX_AGE_SECONDS}` + `; Path=/; Domain=.${domain}; SameSite=Lax${secure}`;
215
+ } catch (unused) {
216
+ // A refusal to write the mirror costs the carry-over, never the decision:
217
+ // the per-origin record is already stored by the caller.
218
+ }
219
+ }
220
+ /**
221
+ * Adopt a sibling host's answer into this origin, if this origin has none.
222
+ *
223
+ * Called ONCE at boot rather than from {@link readPlatformConsent}, because
224
+ * that reader is consulted synchronously from the analytics gate — during the
225
+ * services provider's first render, and again on every consent change — and a
226
+ * reader with a write in it would put a storage write in a render path and
227
+ * repeat it forever. Boot is also early enough by construction: module scope
228
+ * runs before the first render, so the gate's first read already sees it.
229
+ *
230
+ * The value is written into localStorage and then read back through
231
+ * {@link readPlatformConsent}, which is the whole reason this is safe. The
232
+ * shared reader re-derives both grants from the status and rejects an
233
+ * unrecognized shape, so a hand-edited cookie can only ever produce a record
234
+ * the status supports — the same guarantee the per-origin path has.
235
+ *
236
+ * Returns whether a record was adopted, which is what makes it assertable.
237
+ */ export function hydratePlatformConsentFromMirror() {
238
+ if (!sharesAcrossSubdomains || typeof window === 'undefined') return false;
239
+ // This origin's own answer always wins. It is the more recent statement by
240
+ // definition — a decision made here is mirrored outward on the way in.
241
+ if (readStoredVisitorConsent(PLATFORM_CONSENT_SUBJECT)) return false;
242
+ const raw = readPlatformConsentMirror();
243
+ if (!raw) return false;
244
+ try {
245
+ window.localStorage.setItem(visitorConsentStorageKey(PLATFORM_CONSENT_SUBJECT), raw);
246
+ } catch (unused) {
247
+ // Private mode: no adoption, and the visitor is asked again on this host.
248
+ return false;
249
+ }
250
+ // Validated, not assumed: a cookie whose shape or status the shared reader
251
+ // refuses leaves this origin with nothing, which is the undecided state.
252
+ if (readStoredVisitorConsent(PLATFORM_CONSENT_SUBJECT)) return true;
253
+ try {
254
+ // …and the refused value does not stay behind. The reader already answers
255
+ // null for it, but a key holding something unreadable is what the next
256
+ // person debugging this will find and believe.
257
+ window.localStorage.removeItem(visitorConsentStorageKey(PLATFORM_CONSENT_SUBJECT));
258
+ } catch (unused) {
259
+ // Nothing to clean up if storage is refusing us.
260
+ }
261
+ return false;
262
+ }
263
+ /** The console visitor's stored record, or null when there is none. */ export function readPlatformConsent() {
264
+ return readStoredVisitorConsent(PLATFORM_CONSENT_SUBJECT);
265
+ }
266
+ /**
267
+ * Record a console consent state.
268
+ *
269
+ * Delegates wholesale, which is what carries the withdrawal behaviour: the
270
+ * shared writer re-derives both grants from the status, silences any resident
271
+ * GA tag, sweeps the analytics and advertising cookies, drops the persistent
272
+ * visitor id, and dispatches `VISITOR_CONSENT_CHANGED_EVENT`. The console's
273
+ * analytics gate listens for that event, which is what makes a refusal act on
274
+ * this pageview instead of the next one.
275
+ */ export function storePlatformConsent(state) {
276
+ const stored = storeVisitorConsent(PLATFORM_CONSENT_SUBJECT, state);
277
+ // Mirrored on EVERY decision, including the refusals. A mirror that only
278
+ // carried grants would leave the worst case uncovered: an explicit opt-out
279
+ // on one host, then the sibling host finding nothing and writing `implied`
280
+ // from the posture — which is the visitor's refusal being overturned by a
281
+ // hop they did not make.
282
+ writePlatformConsentMirror(stored);
283
+ return stored;
284
+ }
285
+ /**
286
+ * The gate's whole verdict: may analytics run for this console visitor right
287
+ * now?
288
+ *
289
+ * Reads storage on every call rather than caching, because it is consulted
290
+ * synchronously from the Firebase services boot — before any effect has run,
291
+ * and again after a consent change — and a cached answer is exactly how a
292
+ * withdrawal fails to take effect until a reload.
293
+ *
294
+ * Absent record answers NO. That is the load-bearing half: an undecided
295
+ * visitor is a visitor the tag stays out of, whatever the reason for their
296
+ * being undecided, so the gate never has to ask WHY.
297
+ */ export function platformAnalyticsAllowed() {
298
+ var _readPlatformConsent;
299
+ return ((_readPlatformConsent = readPlatformConsent()) == null ? void 0 : _readPlatformConsent.analytics) === true;
300
+ }
301
+ /** Whether advertising storage may run for this console visitor. */ export function platformAdvertisingAllowed() {
302
+ var _readPlatformConsent;
303
+ if (!platformAsksAboutAdvertising()) return false;
304
+ return ((_readPlatformConsent = readPlatformConsent()) == null ? void 0 : _readPlatformConsent.advertising) === true;
305
+ }
306
+ /**
307
+ * The country this visitor is in, or null when nothing can name one.
308
+ *
309
+ * The country half of {@link resolvePlatformConsentRegion}, kept because a
310
+ * caller that only wants a country should not have to know that a posture can
311
+ * arrive without one.
312
+ */ export async function resolvePlatformConsentCountry() {
313
+ return (await resolvePlatformConsentRegion()).country;
314
+ }
315
+ /**
316
+ * The lookup that is CURRENTLY IN FLIGHT, shared by every caller that arrives
317
+ * while it is (AGL-2710).
318
+ *
319
+ * The session cache is written when the response lands, so on its own it
320
+ * dedupes a later pageview and nothing sooner: two components that both want
321
+ * the region during the same hydration both miss it and both ask. Released
322
+ * once the promise settles, so the "only a resolved country is cached, a
323
+ * failure is re-asked" rule below is untouched — this shares one request, it
324
+ * does not remember an answer.
325
+ */ let platformRegionInFlight = null;
326
+ export async function resolvePlatformConsentRegion() {
327
+ if (typeof window === 'undefined') return {
328
+ country: null,
329
+ posture: null
330
+ };
331
+ try {
332
+ const cached = window.sessionStorage.getItem(PLATFORM_CONSENT_REGION_CACHE_KEY);
333
+ if (cached) {
334
+ const parsed = JSON.parse(cached);
335
+ // A cached entry counts only when it NAMES a country. Anything else —
336
+ // including `{"country":null}` written by a build from before this rule
337
+ // — is treated as a miss, which is what lets a tab that cached a failure
338
+ // heal itself on the next pageview instead of carrying it to the end of
339
+ // the session.
340
+ if (typeof (parsed == null ? void 0 : parsed.country) === 'string' && parsed.country) {
341
+ return {
342
+ country: parsed.country,
343
+ posture: null
344
+ };
345
+ }
346
+ }
347
+ } catch (unused) {
348
+ // No storage — ask every pageview; correct, just less frugal.
349
+ }
350
+ if (platformRegionInFlight) return platformRegionInFlight;
351
+ const pending = askPlatformConsentRegion().finally(()=>{
352
+ if (platformRegionInFlight === pending) platformRegionInFlight = null;
353
+ });
354
+ platformRegionInFlight = pending;
355
+ return pending;
356
+ }
357
+ async function askPlatformConsentRegion() {
358
+ let country = null;
359
+ try {
360
+ const response = await fetch(PLATFORM_CONSENT_REGION_ENDPOINT);
361
+ if (response.ok) {
362
+ const payload = await response.json().catch(()=>null);
363
+ country = typeof (payload == null ? void 0 : payload.country) === 'string' ? payload.country : null;
364
+ }
365
+ } catch (unused) {
366
+ // Network failure reads as no signal, which falls through exactly as an
367
+ // absent header does.
368
+ }
369
+ if (country) {
370
+ try {
371
+ // ONLY a resolved country is cached, and the asymmetry is the point. A
372
+ // cached country is a fact; a cached absence is a FAILURE, and caching a
373
+ // failure pins the outcome that failure produces. One cold edge, one
374
+ // request that skipped the proxy, and the visitor would spend the rest
375
+ // of the session on the strictest posture with nothing re-asking — a
376
+ // banner they cannot get rid of, and analytics that never resume.
377
+ window.sessionStorage.setItem(PLATFORM_CONSENT_REGION_CACHE_KEY, JSON.stringify({
378
+ country
379
+ }));
380
+ } catch (unused) {
381
+ // Best-effort cache only.
382
+ }
383
+ return {
384
+ country,
385
+ posture: null
386
+ };
387
+ }
388
+ // No header anywhere. The time zone is the last thing left, and it is not
389
+ // cached either: it costs no request, so re-reading it is free, and it must
390
+ // never outrank a header that appears on the next pageview.
391
+ const hint = geoHintFromTimeZone(readBrowserTimeZone());
392
+ if (!hint) return {
393
+ country: null,
394
+ posture: null
395
+ };
396
+ // `priorConsent` is honoured directly rather than re-derived from the
397
+ // country, because the hint's whole point is that it can carry a posture
398
+ // with no country attached.
399
+ return {
400
+ country: hint.country,
401
+ posture: hint.priorConsent ? 'opt-in' : 'opt-out'
402
+ };
403
+ }
404
+ /**
405
+ * `?aglynConsent=ask` simulates a first prior-consent visit.
406
+ *
407
+ * Honored on any surface because it only ever moves TOWARD strictness: it can
408
+ * show someone a banner they have already answered, never strip one and never
409
+ * un-decline a decline. Choices made under it are stored for real — they are
410
+ * the visitor's own clicks.
411
+ */ function hasAskOverride() {
412
+ try {
413
+ return new URLSearchParams(window.location.search).get('aglynConsent') === 'ask';
414
+ } catch (unused) {
415
+ return false;
416
+ }
417
+ }
418
+ /**
419
+ * Resolve this visitor's console consent state, most binding signal first:
420
+ *
421
+ * 1. An EXPLICIT stored choice — theirs; keep it, and skip the region lookup.
422
+ * 2. GPC — the browser's opt-out overrides an implied default (it can arrive
423
+ * after one was recorded) but never an explicit accept.
424
+ * 3. Any other stored record — resolved on a previous visit.
425
+ * 4. Nothing stored: ask the region endpoint and apply the posture. `opt-out`
426
+ * records `implied` and analytics is live from this paint; `opt-in` leaves
427
+ * the visitor undecided, which keeps the tag out until the banner gets a
428
+ * yes.
429
+ *
430
+ * Idempotent: it reads and writes the same storage deterministically and the
431
+ * region lookup is session-cached, so running it twice costs one network call
432
+ * and reaches one answer.
433
+ */ export async function decidePlatformConsent() {
434
+ var _region_posture;
435
+ if (typeof window === 'undefined') {
436
+ return {
437
+ stored: null,
438
+ posture: null,
439
+ country: null
440
+ };
441
+ }
442
+ if (hasAskOverride()) {
443
+ return {
444
+ stored: null,
445
+ posture: 'opt-in',
446
+ country: null
447
+ };
448
+ }
449
+ let stored = readPlatformConsent();
450
+ if (hasGlobalPrivacyControl() && !isExplicitConsentStatus(stored == null ? void 0 : stored.status) && (stored == null ? void 0 : stored.status) !== 'gpc-opt-out') {
451
+ var _ref;
452
+ stored = storePlatformConsent({
453
+ status: 'gpc-opt-out',
454
+ country: (_ref = stored == null ? void 0 : stored.country) != null ? _ref : null
455
+ });
456
+ }
457
+ if (stored) {
458
+ var _stored_country;
459
+ return {
460
+ stored,
461
+ posture: null,
462
+ country: (_stored_country = stored.country) != null ? _stored_country : null
463
+ };
464
+ }
465
+ const region = await resolvePlatformConsentRegion();
466
+ const country = region.country;
467
+ // The signal's own posture wins where it has one, and only the time-zone
468
+ // hint sets it — a header names a country and the country decides. Falling
469
+ // back to `platformConsentPosture(null)` keeps unknown on the strict side.
470
+ const posture = (_region_posture = region.posture) != null ? _region_posture : platformConsentPosture(country);
471
+ if (posture === 'opt-out') {
472
+ return {
473
+ // Implied consent, recorded as such. `storeVisitorConsent` re-derives
474
+ // both grants from the status, so the advertising half is whatever this
475
+ // surface can honestly carry — nothing, while nothing here reads it.
476
+ stored: storePlatformConsent({
477
+ status: 'implied',
478
+ country,
479
+ advertising: platformAsksAboutAdvertising()
480
+ }),
481
+ posture,
482
+ country
483
+ };
484
+ }
485
+ return {
486
+ stored: null,
487
+ posture,
488
+ country
489
+ };
490
+ }
491
+ /**
492
+ * The refusal a "no" means for a visitor in this state.
493
+ *
494
+ * `opted-out` when they were defaulted in, `declined` when they were asked
495
+ * first. Same gate either way; distinct record, because "how many visitors
496
+ * were tracked before they said no" is a question the two answers separate.
497
+ */ export function platformRefusalStatus(stored, posture) {
498
+ return refusalStatusFor(stored, posture);
499
+ }
500
+ /**
501
+ * Whether a status the panel is about to write would grant analytics — used to
502
+ * label the control, never to decide the gate.
503
+ */ export function platformStatusGrantsAnalytics(status) {
504
+ return analyticsGrantedByStatus(status);
505
+ }
506
+ /**
507
+ * One-shot guard so a pageview asks the region endpoint once, not once per
508
+ * render pass.
509
+ */ const primed = new Set();
510
+ /**
511
+ * Start the resolution WITHOUT waiting for React to commit.
512
+ *
513
+ * The gate component's effect is the normal path and does this too. It is not
514
+ * enough on its own: an effect only runs if React commits, and a console that
515
+ * renders but never commits — a suspended provider above the tree — would
516
+ * otherwise leave a rest-of-world visitor permanently undecided and therefore
517
+ * permanently unmeasured. Fire-and-forget; the answer lands in storage, so
518
+ * whenever the component does run it reads it rather than asking again.
519
+ */ export function primePlatformConsent() {
520
+ var _ref;
521
+ var _window_location;
522
+ if (typeof window === 'undefined') return;
523
+ const key = String((_ref = (_window_location = window.location) == null ? void 0 : _window_location.pathname) != null ? _ref : '');
524
+ if (primed.has(key)) return;
525
+ primed.add(key);
526
+ void decidePlatformConsent().catch(()=>undefined);
527
+ }
528
+ /** Test seam: forget which pageviews have already been primed. */ export function resetPlatformConsentPriming() {
529
+ primed.clear();
530
+ sharesAcrossSubdomains = false;
531
+ }
532
+
533
+ //# sourceMappingURL=platform-visitor-consent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/platform-visitor-consent.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Visitor consent for AGLYN'S OWN console (`app.aglyn.com`) — the same\n * decision the tenant runtime makes for a customer site, resolved against a\n * surface that has no host document.\n *\n * ## What this module is, and what it deliberately is not\n *\n * It is a COMPOSITION of `visitor-consent.ts`, not a second consent engine.\n * Every question a decision actually turns on is answered there: which\n * statuses grant which category ({@link analyticsGrantedByStatus},\n * {@link advertisingGrantedByStatus}), how a record is read and written\n * ({@link readStoredVisitorConsent}, {@link storeVisitorConsent}), what a\n * withdrawal sweeps, and what consent-mode signals a pair of grants becomes\n * ({@link consentModeSignals}). A second implementation of any of those is how\n * two surfaces come to disagree about whether a visitor said yes, and the\n * disagreement is invisible from either side.\n *\n * What lives here is only what the console answers DIFFERENTLY, and there are\n * exactly three such things:\n *\n * 1. **There is no host document.** A customer site's posture, its gated\n * categories and its advertising question all come off `hosts/{id}`. The\n * console has none, so the equivalents are constants derived below from\n * what this surface actually runs.\n * 2. **The prior-consent region set is the platform's, not the tenant's.**\n * `PLATFORM_PRIOR_CONSENT_REGIONS` adds Switzerland to the tenant's\n * ePrivacy set, because Aglyn's own brief treats CH as prior opt-in while\n * the tenant set stays exactly as customers' sites have it. Reusing that\n * constant rather than restating a country list is the point — two\n * hand-kept lists is how one of them ends up a year behind the other.\n * 3. **The storage subject is fixed.** Records are keyed by host id so one\n * site's yes cannot leak to another's; the console is one surface, so it\n * takes one constant subject and shares the same `aglyn:consent:` prefix,\n * the same versioned record shape, and the same reader/writer.\n *\n * ## The posture, which is the tenant's posture\n *\n * - **UK / EU / EEA — and any visitor whose region cannot be determined** —\n * `opt-in`: nothing non-essential runs until an explicit accept. Undecided\n * is not a maybe.\n * - **Everywhere else** — `opt-out`: implied consent is recorded on the first\n * visit, analytics runs from that first paint, and the visitor can withdraw\n * at any time from the account menu.\n * - **GPC** is honored as an automatic opt-out in both postures, and is\n * overridden only by a later explicit accept.\n *\n * ## Advertising on this surface\n *\n * Asked about only where something would read the answer — see\n * {@link platformAsksAboutAdvertising}, which derives it from the consent\n * defaults this surface actually declares rather than from a flag someone has\n * to remember to keep in step.\n */\n\nimport {\n PLATFORM_CONSENT_DEFAULT_COMMANDS,\n PLATFORM_PRIOR_CONSENT_REGIONS,\n} from './platform-consent-default'\nimport {\n geoHintFromTimeZone,\n readBrowserTimeZone,\n} from './timezone-geo-hint'\nimport {\n analyticsGrantedByStatus,\n hasGlobalPrivacyControl,\n isExplicitConsentStatus,\n readStoredVisitorConsent,\n refusalStatusFor,\n registrableCookieDomain,\n type StoredVisitorConsent,\n storeVisitorConsent,\n type VisitorConsentPosture,\n type VisitorConsentStatus,\n visitorConsentStorageKey,\n} from './visitor-consent'\n\n/**\n * The storage subject for the console's own consent record.\n *\n * `visitorConsentStorageKey` keys records by host id because preview\n * deployments and localhost serve many customer sites from one origin. The\n * console is a single surface, so it takes a constant — but it takes it\n * through the same key builder, so a console record and a customer-site record\n * can never collide, and a self-hosted console on the same origin as a site\n * keeps its own.\n *\n * A name, not a hostname: the console is served from `app.aglyn.com`, from a\n * custom console domain (AGL-1099c), and from localhost, and a visitor's\n * choice is about the surface rather than about which of its origins they\n * reached it through.\n */\nexport const PLATFORM_CONSENT_SUBJECT = 'aglyn-console'\n\n/**\n * Where the client asks which country it is visiting from.\n *\n * The same path the tenant runtime uses, and for the same reason: the answer\n * is a per-visitor request header, so it cannot be baked into a render. Each\n * app serves its own route handler at this path.\n */\nexport const PLATFORM_CONSENT_REGION_ENDPOINT = '/api/consent/region'\n\n/** Session-scoped region cache — one lookup per visit, not per pageview. */\nexport const PLATFORM_CONSENT_REGION_CACHE_KEY = 'aglyn:consent:region'\n\n/**\n * Whether this surface asks its visitors about advertising storage.\n *\n * DERIVED from {@link PLATFORM_CONSENT_DEFAULT_COMMANDS} rather than declared\n * as its own flag. Those commands are what the console tells gtag about ad\n * storage, so the question and the declaration cannot drift: a surface that\n * denies advertising in every region asks nothing, and one that grants it\n * anywhere asks.\n *\n * A control whose answer changes nothing is decoration, and decoration is what\n * teaches people to click past the controls that do matter — which is the\n * whole reason this is derived rather than hardcoded either way.\n *\n * The console currently grants advertising outside the prior-consent regions,\n * because Aglyn advertises, remarkets and retargets on its own surfaces and\n * the Privacy Policy names this one among them. So the question IS asked, and\n * a visitor who declines gets the signals denied and the tags torn down.\n *\n * `every`, so a single region-scoped grant is enough to make the question\n * real. The console's whole visitor population is not asked about a category\n * because one region's declaration happens to deny it.\n */\nexport function platformAsksAboutAdvertising(): boolean {\n return !PLATFORM_CONSENT_DEFAULT_COMMANDS.every(\n (command) => command.ad_storage === 'denied',\n )\n}\n\n/**\n * The per-visitor posture for the console, from the country the region\n * endpoint reports.\n *\n * Unknown region falls to `opt-in`, exactly as it does for a customer site:\n * the asymmetry is a few lost analytics events on a rare headerless visit,\n * against pre-consent tracking of a European visitor.\n *\n * A separate function from the tenant's `resolveConsentPosture` because it\n * answers over a different country set (see the module comment) — and it reads\n * that set from `platform-consent-default.ts` rather than restating it, so the\n * console's gate and the console's consent-mode declaration can never disagree\n * about which regions require asking first.\n */\nexport function platformConsentPosture(\n country: string | null | undefined,\n): VisitorConsentPosture {\n if (!country) return 'opt-in'\n return PLATFORM_PRIOR_CONSENT_REGIONS.indexOf(country.toUpperCase()) >= 0\n ? 'opt-in'\n : 'opt-out'\n}\n\n/**\n * The cookie that carries a console visitor's answer between the sibling\n * subdomains the console is served on.\n *\n * ## The defect this closes\n *\n * `localStorage` is per ORIGIN, and the console is one application served on\n * several hostnames of one registrable domain: `app.<domain>` and\n * `auth.<domain>`, which is where interactive sign-in is delegated to. So a\n * record written on one is invisible to the other.\n *\n * For an accept that is only a second ask — annoying, and fail-safe, since an\n * unread record means untracked. For a REFUSAL it is worse than annoying and\n * not fail-safe at all: outside the prior-consent regions the sibling host\n * finds no record, resolves the posture afresh and writes `implied`, so an\n * explicit opt-out reverts to implied consent on the next hop. A visitor\n * cannot be expected to say no once per hostname of an application they\n * experience as one.\n *\n * ## Why a cookie, and why it carries the whole record\n *\n * A cookie is the only client-side store that spans subdomains, and the\n * consent record is itself strictly necessary storage — it is how a \"no\" is\n * remembered — so it needs no consent of its own. It carries the whole record\n * rather than a flag because the record is what the shared reader validates:\n * the mirror is re-read through `readStoredVisitorConsent`, never trusted, so\n * a hand-edited cookie cannot grant what its status does not.\n */\nexport const PLATFORM_CONSENT_COOKIE = 'aglyn_consent'\n\n/**\n * How long the mirror lives. Thirteen months is the field convention for a\n * consent record and the ceiling several supervisory authorities name; the\n * record's own `at` stamp is what any future re-ask would be judged against.\n */\nconst PLATFORM_CONSENT_COOKIE_MAX_AGE_SECONDS = 13 * 30 * 24 * 60 * 60\n\n/**\n * Whether this origin may share a visitor's answer with its sibling\n * subdomains.\n *\n * OFF by default and switched on by the surface, which is the same polarity\n * `originPersistenceClass` uses and for the same asymmetry. Writing at the\n * registrable domain is only correct where the whole registrable domain is\n * ours: on a CUSTOM console domain it would put our cookie on the customer's\n * apex, beside their own site, on an origin the console is deliberately not\n * allowed to keep durable state on. A surface that says nothing gets a\n * host-only record, which is complete on its own because there are no\n * siblings to disagree with.\n */\nlet sharesAcrossSubdomains = false\n\nexport function setPlatformConsentSharesAcrossSubdomains(\n shares: boolean,\n): void {\n sharesAcrossSubdomains = shares\n}\n\n/** The raw mirror value for this browser, or null when there is none. */\nfunction readPlatformConsentMirror(): string | null {\n if (typeof document === 'undefined') return null\n try {\n for (const pair of String(document.cookie ?? '').split(';')) {\n const cut = pair.indexOf('=')\n if (cut < 0) continue\n if (pair.slice(0, cut).trim() !== PLATFORM_CONSENT_COOKIE) continue\n return decodeURIComponent(pair.slice(cut + 1).trim())\n }\n } catch {\n // Cookies disabled or a hostile `document.cookie`: no mirror, and the\n // per-origin record still stands.\n }\n return null\n}\n\n/**\n * Write the mirror at the registrable domain, so the sibling host can read it.\n *\n * A no-op while sharing is off, and a no-op when the hostname has no\n * registrable domain (`localhost`, an IP literal) — a host-only cookie there\n * would duplicate the localStorage record and carry to nothing.\n */\nfunction writePlatformConsentMirror(stored: StoredVisitorConsent): void {\n if (!sharesAcrossSubdomains || typeof document === 'undefined') return\n try {\n const hostname =\n typeof window === 'undefined' ? '' : window.location?.hostname\n const domain = registrableCookieDomain(hostname)\n if (!domain) return\n const secure = window.location?.protocol === 'https:' ? '; Secure' : ''\n document.cookie =\n `${PLATFORM_CONSENT_COOKIE}=${encodeURIComponent(JSON.stringify(stored))}` +\n `; Max-Age=${PLATFORM_CONSENT_COOKIE_MAX_AGE_SECONDS}` +\n `; Path=/; Domain=.${domain}; SameSite=Lax${secure}`\n } catch {\n // A refusal to write the mirror costs the carry-over, never the decision:\n // the per-origin record is already stored by the caller.\n }\n}\n\n/**\n * Adopt a sibling host's answer into this origin, if this origin has none.\n *\n * Called ONCE at boot rather than from {@link readPlatformConsent}, because\n * that reader is consulted synchronously from the analytics gate — during the\n * services provider's first render, and again on every consent change — and a\n * reader with a write in it would put a storage write in a render path and\n * repeat it forever. Boot is also early enough by construction: module scope\n * runs before the first render, so the gate's first read already sees it.\n *\n * The value is written into localStorage and then read back through\n * {@link readPlatformConsent}, which is the whole reason this is safe. The\n * shared reader re-derives both grants from the status and rejects an\n * unrecognized shape, so a hand-edited cookie can only ever produce a record\n * the status supports — the same guarantee the per-origin path has.\n *\n * Returns whether a record was adopted, which is what makes it assertable.\n */\nexport function hydratePlatformConsentFromMirror(): boolean {\n if (!sharesAcrossSubdomains || typeof window === 'undefined') return false\n // This origin's own answer always wins. It is the more recent statement by\n // definition — a decision made here is mirrored outward on the way in.\n if (readStoredVisitorConsent(PLATFORM_CONSENT_SUBJECT)) return false\n const raw = readPlatformConsentMirror()\n if (!raw) return false\n try {\n window.localStorage.setItem(\n visitorConsentStorageKey(PLATFORM_CONSENT_SUBJECT),\n raw,\n )\n } catch {\n // Private mode: no adoption, and the visitor is asked again on this host.\n return false\n }\n // Validated, not assumed: a cookie whose shape or status the shared reader\n // refuses leaves this origin with nothing, which is the undecided state.\n if (readStoredVisitorConsent(PLATFORM_CONSENT_SUBJECT)) return true\n try {\n // …and the refused value does not stay behind. The reader already answers\n // null for it, but a key holding something unreadable is what the next\n // person debugging this will find and believe.\n window.localStorage.removeItem(\n visitorConsentStorageKey(PLATFORM_CONSENT_SUBJECT),\n )\n } catch {\n // Nothing to clean up if storage is refusing us.\n }\n return false\n}\n\n/** The console visitor's stored record, or null when there is none. */\nexport function readPlatformConsent(): StoredVisitorConsent | null {\n return readStoredVisitorConsent(PLATFORM_CONSENT_SUBJECT)\n}\n\n/**\n * Record a console consent state.\n *\n * Delegates wholesale, which is what carries the withdrawal behaviour: the\n * shared writer re-derives both grants from the status, silences any resident\n * GA tag, sweeps the analytics and advertising cookies, drops the persistent\n * visitor id, and dispatches `VISITOR_CONSENT_CHANGED_EVENT`. The console's\n * analytics gate listens for that event, which is what makes a refusal act on\n * this pageview instead of the next one.\n */\nexport function storePlatformConsent(state: {\n status: VisitorConsentStatus\n country?: string | null\n advertising?: boolean\n}): StoredVisitorConsent {\n const stored = storeVisitorConsent(PLATFORM_CONSENT_SUBJECT, state)\n // Mirrored on EVERY decision, including the refusals. A mirror that only\n // carried grants would leave the worst case uncovered: an explicit opt-out\n // on one host, then the sibling host finding nothing and writing `implied`\n // from the posture — which is the visitor's refusal being overturned by a\n // hop they did not make.\n writePlatformConsentMirror(stored)\n return stored\n}\n\n/**\n * The gate's whole verdict: may analytics run for this console visitor right\n * now?\n *\n * Reads storage on every call rather than caching, because it is consulted\n * synchronously from the Firebase services boot — before any effect has run,\n * and again after a consent change — and a cached answer is exactly how a\n * withdrawal fails to take effect until a reload.\n *\n * Absent record answers NO. That is the load-bearing half: an undecided\n * visitor is a visitor the tag stays out of, whatever the reason for their\n * being undecided, so the gate never has to ask WHY.\n */\nexport function platformAnalyticsAllowed(): boolean {\n return readPlatformConsent()?.analytics === true\n}\n\n/** Whether advertising storage may run for this console visitor. */\nexport function platformAdvertisingAllowed(): boolean {\n if (!platformAsksAboutAdvertising()) return false\n return readPlatformConsent()?.advertising === true\n}\n\n/** The console's resolution of a visitor, with no React in it. */\nexport interface ResolvedPlatformConsent {\n stored: StoredVisitorConsent | null\n posture: VisitorConsentPosture | null\n country: string | null\n}\n\n/**\n * The country this visitor is in, or null when nothing can name one.\n *\n * The country half of {@link resolvePlatformConsentRegion}, kept because a\n * caller that only wants a country should not have to know that a posture can\n * arrive without one.\n */\nexport async function resolvePlatformConsentCountry(): Promise<string | null> {\n return (await resolvePlatformConsentRegion()).country\n}\n\n/**\n * The region signal for this visit: a country when anything can name one, and\n * a posture when the only signal available carries one without a country.\n *\n * Three sources, in strict order of authority, and the order is the whole\n * design:\n *\n * 1. **The session cache** — a country already resolved this visit.\n * 2. **The region endpoint** — an edge header, which is the only source that\n * knows where the request actually came from.\n * 3. **The browser's time zone** — {@link geoHintFromTimeZone}, and ONLY when\n * the first two produced nothing. It exists for a deployment with no geo\n * header at all: a self-hosted container behind a plain reverse proxy,\n * where every visitor would otherwise be treated as unlocatable and asked\n * to opt in. It is never consulted while a header answers, and a zone it\n * does not recognize (`null`) is treated exactly as a missing header —\n * strictest posture, never permission.\n */\nexport interface ResolvedConsentRegion {\n /** The country, when a source could honestly name one. */\n country: string | null\n /**\n * A posture the country cannot express, or null to derive it from the\n * country. Set only by the time-zone hint, which can say \"not a\n * prior-consent region\" while refusing to name which country that is —\n * `America/Chicago` is the United States in almost every case and is also\n * Canadian and Mexican territory in places, and a country that is merely\n * probable is worse on a stored record than an absent one.\n */\n posture: VisitorConsentPosture | null\n}\n\n/**\n * The lookup that is CURRENTLY IN FLIGHT, shared by every caller that arrives\n * while it is (AGL-2710).\n *\n * The session cache is written when the response lands, so on its own it\n * dedupes a later pageview and nothing sooner: two components that both want\n * the region during the same hydration both miss it and both ask. Released\n * once the promise settles, so the \"only a resolved country is cached, a\n * failure is re-asked\" rule below is untouched — this shares one request, it\n * does not remember an answer.\n */\nlet platformRegionInFlight: Promise<ResolvedConsentRegion> | null = null\n\nexport async function resolvePlatformConsentRegion(): Promise<ResolvedConsentRegion> {\n if (typeof window === 'undefined') return { country: null, posture: null }\n try {\n const cached = window.sessionStorage.getItem(\n PLATFORM_CONSENT_REGION_CACHE_KEY,\n )\n if (cached) {\n const parsed = JSON.parse(cached)\n // A cached entry counts only when it NAMES a country. Anything else —\n // including `{\"country\":null}` written by a build from before this rule\n // — is treated as a miss, which is what lets a tab that cached a failure\n // heal itself on the next pageview instead of carrying it to the end of\n // the session.\n if (typeof parsed?.country === 'string' && parsed.country) {\n return { country: parsed.country, posture: null }\n }\n }\n } catch {\n // No storage — ask every pageview; correct, just less frugal.\n }\n if (platformRegionInFlight) return platformRegionInFlight\n const pending = askPlatformConsentRegion().finally(() => {\n if (platformRegionInFlight === pending) platformRegionInFlight = null\n })\n platformRegionInFlight = pending\n return pending\n}\n\nasync function askPlatformConsentRegion(): Promise<ResolvedConsentRegion> {\n let country: string | null = null\n try {\n const response = await fetch(PLATFORM_CONSENT_REGION_ENDPOINT)\n if (response.ok) {\n const payload = await response.json().catch((): null => null)\n country = typeof payload?.country === 'string' ? payload.country : null\n }\n } catch {\n // Network failure reads as no signal, which falls through exactly as an\n // absent header does.\n }\n if (country) {\n try {\n // ONLY a resolved country is cached, and the asymmetry is the point. A\n // cached country is a fact; a cached absence is a FAILURE, and caching a\n // failure pins the outcome that failure produces. One cold edge, one\n // request that skipped the proxy, and the visitor would spend the rest\n // of the session on the strictest posture with nothing re-asking — a\n // banner they cannot get rid of, and analytics that never resume.\n window.sessionStorage.setItem(\n PLATFORM_CONSENT_REGION_CACHE_KEY,\n JSON.stringify({ country }),\n )\n } catch {\n // Best-effort cache only.\n }\n return { country, posture: null }\n }\n // No header anywhere. The time zone is the last thing left, and it is not\n // cached either: it costs no request, so re-reading it is free, and it must\n // never outrank a header that appears on the next pageview.\n const hint = geoHintFromTimeZone(readBrowserTimeZone())\n if (!hint) return { country: null, posture: null }\n // `priorConsent` is honoured directly rather than re-derived from the\n // country, because the hint's whole point is that it can carry a posture\n // with no country attached.\n return {\n country: hint.country,\n posture: hint.priorConsent ? 'opt-in' : 'opt-out',\n }\n}\n\n/**\n * `?aglynConsent=ask` simulates a first prior-consent visit.\n *\n * Honored on any surface because it only ever moves TOWARD strictness: it can\n * show someone a banner they have already answered, never strip one and never\n * un-decline a decline. Choices made under it are stored for real — they are\n * the visitor's own clicks.\n */\nfunction hasAskOverride(): boolean {\n try {\n return (\n new URLSearchParams(window.location.search).get('aglynConsent') === 'ask'\n )\n } catch {\n return false\n }\n}\n\n/**\n * Resolve this visitor's console consent state, most binding signal first:\n *\n * 1. An EXPLICIT stored choice — theirs; keep it, and skip the region lookup.\n * 2. GPC — the browser's opt-out overrides an implied default (it can arrive\n * after one was recorded) but never an explicit accept.\n * 3. Any other stored record — resolved on a previous visit.\n * 4. Nothing stored: ask the region endpoint and apply the posture. `opt-out`\n * records `implied` and analytics is live from this paint; `opt-in` leaves\n * the visitor undecided, which keeps the tag out until the banner gets a\n * yes.\n *\n * Idempotent: it reads and writes the same storage deterministically and the\n * region lookup is session-cached, so running it twice costs one network call\n * and reaches one answer.\n */\nexport async function decidePlatformConsent(): Promise<ResolvedPlatformConsent> {\n if (typeof window === 'undefined') {\n return { stored: null, posture: null, country: null }\n }\n if (hasAskOverride()) {\n return { stored: null, posture: 'opt-in', country: null }\n }\n let stored = readPlatformConsent()\n if (\n hasGlobalPrivacyControl() &&\n !isExplicitConsentStatus(stored?.status) &&\n stored?.status !== 'gpc-opt-out'\n ) {\n stored = storePlatformConsent({\n status: 'gpc-opt-out',\n country: stored?.country ?? null,\n })\n }\n if (stored) {\n return { stored, posture: null, country: stored.country ?? null }\n }\n const region = await resolvePlatformConsentRegion()\n const country = region.country\n // The signal's own posture wins where it has one, and only the time-zone\n // hint sets it — a header names a country and the country decides. Falling\n // back to `platformConsentPosture(null)` keeps unknown on the strict side.\n const posture = region.posture ?? platformConsentPosture(country)\n if (posture === 'opt-out') {\n return {\n // Implied consent, recorded as such. `storeVisitorConsent` re-derives\n // both grants from the status, so the advertising half is whatever this\n // surface can honestly carry — nothing, while nothing here reads it.\n stored: storePlatformConsent({\n status: 'implied',\n country,\n advertising: platformAsksAboutAdvertising(),\n }),\n posture,\n country,\n }\n }\n return { stored: null, posture, country }\n}\n\n/**\n * The refusal a \"no\" means for a visitor in this state.\n *\n * `opted-out` when they were defaulted in, `declined` when they were asked\n * first. Same gate either way; distinct record, because \"how many visitors\n * were tracked before they said no\" is a question the two answers separate.\n */\nexport function platformRefusalStatus(\n stored: StoredVisitorConsent | null,\n posture: VisitorConsentPosture | null,\n): VisitorConsentStatus {\n return refusalStatusFor(stored, posture)\n}\n\n/**\n * Whether a status the panel is about to write would grant analytics — used to\n * label the control, never to decide the gate.\n */\nexport function platformStatusGrantsAnalytics(\n status: VisitorConsentStatus,\n): boolean {\n return analyticsGrantedByStatus(status)\n}\n\n/**\n * One-shot guard so a pageview asks the region endpoint once, not once per\n * render pass.\n */\nconst primed = new Set<string>()\n\n/**\n * Start the resolution WITHOUT waiting for React to commit.\n *\n * The gate component's effect is the normal path and does this too. It is not\n * enough on its own: an effect only runs if React commits, and a console that\n * renders but never commits — a suspended provider above the tree — would\n * otherwise leave a rest-of-world visitor permanently undecided and therefore\n * permanently unmeasured. Fire-and-forget; the answer lands in storage, so\n * whenever the component does run it reads it rather than asking again.\n */\nexport function primePlatformConsent(): void {\n if (typeof window === 'undefined') return\n const key = String(window.location?.pathname ?? '')\n if (primed.has(key)) return\n primed.add(key)\n void decidePlatformConsent().catch((): undefined => undefined)\n}\n\n/** Test seam: forget which pageviews have already been primed. */\nexport function resetPlatformConsentPriming(): void {\n primed.clear()\n sharesAcrossSubdomains = false\n}\n"],"names":["PLATFORM_CONSENT_DEFAULT_COMMANDS","PLATFORM_PRIOR_CONSENT_REGIONS","geoHintFromTimeZone","readBrowserTimeZone","analyticsGrantedByStatus","hasGlobalPrivacyControl","isExplicitConsentStatus","readStoredVisitorConsent","refusalStatusFor","registrableCookieDomain","storeVisitorConsent","visitorConsentStorageKey","PLATFORM_CONSENT_SUBJECT","PLATFORM_CONSENT_REGION_ENDPOINT","PLATFORM_CONSENT_REGION_CACHE_KEY","platformAsksAboutAdvertising","every","command","ad_storage","platformConsentPosture","country","indexOf","toUpperCase","PLATFORM_CONSENT_COOKIE","PLATFORM_CONSENT_COOKIE_MAX_AGE_SECONDS","sharesAcrossSubdomains","setPlatformConsentSharesAcrossSubdomains","shares","readPlatformConsentMirror","document","pair","String","cookie","split","cut","slice","trim","decodeURIComponent","writePlatformConsentMirror","stored","window","hostname","location","domain","secure","protocol","encodeURIComponent","JSON","stringify","hydratePlatformConsentFromMirror","raw","localStorage","setItem","removeItem","readPlatformConsent","storePlatformConsent","state","platformAnalyticsAllowed","analytics","platformAdvertisingAllowed","advertising","resolvePlatformConsentCountry","resolvePlatformConsentRegion","platformRegionInFlight","posture","cached","sessionStorage","getItem","parsed","parse","pending","askPlatformConsentRegion","finally","response","fetch","ok","payload","json","catch","hint","priorConsent","hasAskOverride","URLSearchParams","search","get","decidePlatformConsent","region","status","platformRefusalStatus","platformStatusGrantsAnalytics","primed","Set","primePlatformConsent","key","pathname","has","add","undefined","resetPlatformConsentPriming","clear"],"mappings":"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"}