@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 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/agent-openapi.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 * `/openapi.json` for a tenant site (AGL-2716) — the machine-readable\n * description of what a site serves, per host.\n *\n * ## Why this is generated and not a checked-in file\n *\n * The document is a function of the SITE: its name, its origin, the content\n * collections it publishes. A static file would describe one site, and every\n * other host on the platform would publish a spec naming somebody else's\n * domain in `servers[]` — which is worse than no spec, because a client that\n * trusts it makes requests to the wrong origin.\n *\n * ## Read-only, deliberately\n *\n * Only GET operations are described. The tenant does serve writes — form\n * submissions, membership, consent — and each is reachable, rate-limited and\n * public, so listing them would be truthful. It would also be an invitation:\n * a spec is a list of things to call, an agent that reads one calls them, and\n * \"submit this form\" is not an operation a site owner asked to publish to\n * every crawler on the internet. Writes stay discoverable the way they always\n * were, from the page that carries the form.\n *\n * That decision belongs in the document, not just in this comment, so the\n * `description` says so — a reader who needs a write endpoint is told where to\n * look rather than left assuming none exists.\n *\n * ## Shaped for function calling\n *\n * Every operation carries a unique `operationId`, a `summary`, a `description`\n * and typed parameters, and every response names a schema. That is exactly the\n * subset an LLM tool-calling bridge reads when it turns a spec into callable\n * functions — a missing `operationId` becomes a generated name nobody can\n * predict, and a missing parameter type becomes a string the model guesses at.\n *\n * OpenAPI **3.1.0** rather than 3.0: 3.1 aligns its schema dialect with JSON\n * Schema 2020-12, which is the dialect the function-calling formats already\n * speak, so a bridge converts without a lossy pass.\n */\n\n/** A content collection the site publishes, as the feed operation names it. */\nexport interface AgentOpenApiCollection {\n slug: string\n name?: string\n}\n\nexport interface AgentOpenApiOptions {\n /** The site's name, for `info.title`. */\n siteName: string\n /** Absolute origin, no trailing slash — the single `servers[]` entry. */\n origin: string\n /** The site's own description, for `info.description`. */\n description?: string\n /** Published content collections, for the feed operation's enum. */\n collections?: readonly AgentOpenApiCollection[]\n /** Whether the site serves `/search`. */\n hasSearch?: boolean\n /** Platform version, so a consumer can tell two documents apart. */\n version?: string\n /** Contact email published in `info.contact`, when the site has one. */\n contactEmail?: string\n /** Absolute URL of the site's terms, when it publishes any. */\n termsOfServiceUrl?: string\n}\n\nimport { API_CATALOG_MEDIA_TYPE } from './agent-api-catalog'\n\n/** A JSON-Schema-shaped object; loose on purpose — this is a document, not a type. */\ntype Schema = Record<string, unknown>\n\n/** `text/markdown`, per RFC 7763. */\nconst MARKDOWN = 'text/markdown'\n\n/**\n * The header that carries the API version, in both directions (AGL-2722).\n *\n * A header and not a URL segment, because most of this surface sits at a\n * location some other specification fixed — `/openapi.json`, `/robots.txt`,\n * `/llms.txt`, `/sitemap.xml`, `/manifest.webmanifest`. `/v1/robots.txt` is\n * not a robots.txt: the crawler that needs it looks at the root and nowhere\n * else. Versioning only the `/api/*` half would leave one surface running two\n * rules, which is worse than either rule alone.\n */\nexport const API_VERSION_HEADER = 'Aglyn-API-Version'\n\n/**\n * The version this description and these responses are.\n *\n * ⚠️ Independent of the platform's release version, and deliberately so. The\n * platform ships several times a day; this shape is a promise to strangers and\n * moves only when the promise does. Bump it when a field is removed or\n * renamed, or when an operation narrows what it accepts — never for an\n * addition, which is why a consumer is told to parse leniently.\n */\nexport const API_VERSION = '1.0.0'\n\n/**\n * The RFC 9331 headers, and the 429, for the two operations that actually\n * meter (AGL-2722).\n *\n * Declared on those two only, never blanket-applied. `/api/health` is an\n * uptime probe answering from several regions on a schedule — metering it\n * would turn a bookkeeping limit into a false outage — and the static files\n * are served from the edge cache without ever reaching a counter. A header\n * describing a limit that is not enforced is worse than no header, because a\n * caller paces against it.\n */\nconst RATE_LIMIT_HEADERS: Schema = {\n 'RateLimit-Limit': { $ref: '#/components/headers/RateLimitLimit' },\n 'RateLimit-Remaining': { $ref: '#/components/headers/RateLimitRemaining' },\n 'RateLimit-Reset': { $ref: '#/components/headers/RateLimitReset' },\n}\n\nconst TOO_MANY_REQUESTS: Schema = {\n description:\n 'The address exceeded its per-minute budget. `Retry-After` names the ' +\n 'seconds to wait. Reaching this from ordinary reading would be ' +\n 'surprising — the budget is set well above what reading a whole site ' +\n 'costs.',\n headers: {\n ...RATE_LIMIT_HEADERS,\n 'Retry-After': { $ref: '#/components/headers/RetryAfter' },\n },\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n}\n\n/**\n * The `Accept` parameter, declared once and referenced by every page\n * operation.\n *\n * A header parameter rather than prose, because it is the ONLY way a client\n * discovers the Markdown representation from the document alone — and a\n * function-calling bridge that reads this turns it into an argument the model\n * can set, which is the whole point of publishing it.\n */\nconst ACCEPT_PARAMETER: Schema = {\n name: 'Accept',\n in: 'header',\n required: false,\n description:\n 'Content negotiation, per RFC 9110. `text/markdown` returns a clean ' +\n 'Markdown rendering of the page with the navigation, styling and scripts ' +\n 'removed; anything else returns HTML. Quality values are honored, and a ' +\n 'request that accepts neither representation is answered `406`. ' +\n 'Responses carry `Vary: Accept`.',\n schema: {\n type: 'string',\n enum: ['text/html', MARKDOWN],\n default: 'text/html',\n },\n}\n\n/** Error envelope shared by the JSON operations. */\nconst ERROR_SCHEMA: Schema = {\n type: 'object',\n description: 'The error envelope every JSON endpoint on this site returns.',\n properties: {\n status: { type: 'string', enum: ['error'], description: 'Always `error`.' },\n statusMessage: { type: 'string', description: 'Human-readable reason.' },\n errorCode: { type: 'string', description: 'Stable machine-readable code.' },\n },\n required: ['status'],\n}\n\n/** The `seo` block both the site and page schemas carry. */\nconst SEO_SCHEMA: Schema = {\n type: 'object',\n description: 'Search and social metadata.',\n properties: {\n title: { type: 'string', description: 'Title used in the page head.' },\n description: { type: 'string', description: 'Meta description.' },\n image: { type: 'string', description: 'Social card image reference.' },\n imageWidth: { type: 'integer', description: 'Social card width in pixels.' },\n imageHeight: { type: 'integer', description: 'Social card height in pixels.' },\n imageAlt: {\n type: 'string',\n description: 'Alternative text for the social card image.',\n },\n },\n}\n\n/** Build the OpenAPI 3.1 document for one site. */\nexport function buildAgentOpenApi(options: AgentOpenApiOptions): Schema {\n const origin = options.origin.replace(/\\/+$/, '')\n const collections = options.collections ?? []\n const collectionSlugs = collections.map((collection) => collection.slug)\n\n const paths: Schema = {\n '/openapi.json': {\n get: {\n operationId: 'getOpenApiDocument',\n summary: 'This document',\n description:\n 'The OpenAPI 3.1 description of everything this site serves. ' +\n 'Generated per site, so `servers[0].url` always names this origin.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The OpenAPI document.',\n content: {\n 'application/json': {\n schema: { $ref: '#/components/schemas/OpenApiDocument' },\n },\n },\n },\n },\n },\n },\n '/.well-known/api-catalog': {\n get: {\n operationId: 'getApiCatalog',\n summary: 'API catalog',\n description:\n 'Every API that answers for this site, as an RFC 9727 catalog in ' +\n 'RFC 9264 linkset form. Two of them exist and they are not ' +\n 'interchangeable: this site’s own API, described by the document ' +\n 'you are reading, is anonymous and read-only; the platform API it ' +\n 'names is keyed, typed and writes. Each entry carries the API’s ' +\n '`service-desc` (its OpenAPI description), `service-doc` and, where ' +\n 'there is one, `status`.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The catalog.',\n content: {\n [API_CATALOG_MEDIA_TYPE]: {\n schema: { $ref: '#/components/schemas/ApiCatalog' },\n },\n },\n },\n },\n },\n },\n '/llms.txt': {\n get: {\n operationId: 'getAgentGuidance',\n summary: 'Agent guidance (llms.txt)',\n description:\n 'What this site is for, when an agent should reach for it, and the ' +\n 'entry points that lead to everything else. Follows the ' +\n 'llmstxt.org format: an H1 name, a summary blockquote, and ' +\n 'H2-delimited link lists.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The guidance file.',\n content: { [MARKDOWN]: { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/robots.txt': {\n get: {\n operationId: 'getRobotsTxt',\n summary: 'Crawler policy',\n description:\n 'The exclusion rules this site asks crawlers to honor, and the ' +\n 'address of its sitemap index.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The robots policy.',\n content: { 'text/plain': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/sitemap.xml': {\n get: {\n operationId: 'getSitemapIndex',\n summary: 'Sitemap index',\n description:\n 'A sitemap INDEX — it names child sitemaps rather than URLs. Each ' +\n 'child lists up to 5,000 URLs with their last-modified dates.',\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'A `<sitemapindex>` document.',\n content: { 'application/xml': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/manifest.webmanifest': {\n get: {\n operationId: 'getWebAppManifest',\n summary: 'Web app manifest',\n description: \"The site's installable web app manifest.\",\n tags: ['Discovery'],\n responses: {\n '200': {\n description: 'The manifest.',\n content: {\n 'application/manifest+json': {\n schema: { $ref: '#/components/schemas/WebAppManifest' },\n },\n },\n },\n },\n },\n },\n '/{path}': {\n get: {\n operationId: 'getPage',\n summary: 'Fetch one page',\n description:\n 'Any page on this site, in HTML or Markdown. `path` is the page ' +\n 'path without a leading slash — use an empty string for the home ' +\n 'page — and MAY contain `/` for a nested page. Two ways to ask for ' +\n 'Markdown: send `Accept: text/markdown`, or append `.md` to the ' +\n 'path. Enumerate the available paths with `listPublishedPages` or ' +\n 'from the sitemap index.',\n tags: ['Content'],\n parameters: [\n {\n name: 'path',\n in: 'path',\n required: true,\n description:\n 'Page path without a leading slash, e.g. `pricing` or ' +\n '`blog/hello-world`. May end in `.md` to request Markdown ' +\n 'without a content-negotiation header.',\n schema: { type: 'string' },\n example: 'pricing',\n },\n ACCEPT_PARAMETER,\n ],\n responses: {\n '200': {\n description: 'The page.',\n headers: {\n Vary: {\n description:\n 'Includes `Accept`, so a cache cannot serve one ' +\n 'representation in answer to a request for the other.',\n schema: { type: 'string' },\n },\n },\n content: {\n 'text/html': { schema: { type: 'string' } },\n [MARKDOWN]: {\n schema: {\n type: 'string',\n description:\n 'The page as Markdown: an H1 title, a blockquote ' +\n 'summary, the content region, and a `Source:` line ' +\n 'carrying the canonical URL. Navigation and footer are ' +\n 'omitted.',\n },\n },\n },\n },\n '404': { description: 'No page answers at that path.' },\n '406': {\n description:\n 'The request accepts neither `text/html` nor `text/markdown`. ' +\n 'The body lists the representations that are available.',\n content: { 'text/plain': { schema: { type: 'string' } } },\n },\n },\n },\n },\n '/api/host': {\n get: {\n operationId: 'getSiteIdentity',\n summary: 'Who publishes this site',\n description:\n \"The site's public identity: display name, logo, locales and the \" +\n 'search/social metadata it defaults to. Anonymous, cacheable, and ' +\n 'an allow-listed projection — never the underlying document.',\n tags: ['Site'],\n parameters: [\n {\n name: 'host',\n in: 'query',\n required: false,\n description:\n // NO PLATFORM APEX HERE. This string is published in the\n // OpenAPI document of EVERY site, including a self-hosted\n // operator's — naming Aglyn's own apex would tell their callers\n // to address a domain that is not theirs (the self-host ratchet\n // in `selfhost-hardcoded-hosts.spec.ts` is what caught it).\n 'Which site to describe: its custom domain, its platform ' +\n 'subdomain address, or its bare subdomain. ' +\n 'Defaults to the domain the request was sent to, so an agent ' +\n 'talking to one site never needs it.',\n schema: { type: 'string' },\n },\n ],\n responses: {\n '200': {\n description: 'The site identity.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n status: { type: 'string', enum: ['success'] },\n data: {\n type: 'object',\n properties: {\n host: { $ref: '#/components/schemas/SiteIdentity' },\n },\n },\n },\n required: ['status'],\n },\n },\n },\n },\n '400': {\n description: 'The site could not be resolved.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n },\n },\n },\n },\n '/api/screen': {\n get: {\n operationId: 'listPublishedPages',\n summary: 'List published pages',\n description:\n 'Every published, indexable page on this site, with its title, ' +\n 'description and dates. Gated pages — private, password-protected, ' +\n 'members-only and unlisted — are omitted, so this listing never ' +\n 'advertises an address a visitor cannot open. Paginate by passing ' +\n 'the previous response’s `cursor`; an empty cursor means the last ' +\n 'page.',\n tags: ['Content'],\n parameters: [\n {\n name: 'host',\n in: 'query',\n required: false,\n description:\n 'Which site to list. Defaults to the domain the request was ' +\n 'sent to.',\n schema: { type: 'string' },\n },\n {\n name: 'cursor',\n in: 'query',\n required: false,\n description:\n 'Cursor from the previous response. Omit for the first page.',\n schema: { type: 'string' },\n },\n {\n name: 'limit',\n in: 'query',\n required: false,\n description: 'Pages per response.',\n schema: { type: 'integer', minimum: 1, maximum: 100, default: 50 },\n },\n ],\n responses: {\n '200': {\n description: 'One page of the listing.',\n content: {\n 'application/json': {\n schema: {\n type: 'object',\n properties: {\n status: { type: 'string', enum: ['success'] },\n data: {\n type: 'object',\n properties: {\n screens: {\n type: 'array',\n items: { $ref: '#/components/schemas/PublishedPage' },\n },\n cursor: {\n type: 'string',\n description:\n 'Cursor for the next request; empty on the last page.',\n },\n },\n required: ['screens', 'cursor'],\n },\n },\n required: ['status'],\n },\n },\n },\n },\n '400': {\n description: 'The site could not be resolved.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Error' } },\n },\n },\n },\n },\n },\n '/api/health': {\n get: {\n operationId: 'getSiteHealth',\n summary: 'Service health',\n description:\n 'Whether the site runtime and its datastore are answering. `200` ' +\n 'when healthy, `503` when not; the body names which check failed.',\n tags: ['Site'],\n responses: {\n '200': {\n description: 'Healthy.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Health' } },\n },\n },\n '503': {\n description: 'A dependency is unavailable.',\n content: {\n 'application/json': { schema: { $ref: '#/components/schemas/Health' } },\n },\n },\n },\n },\n },\n }\n\n /*\n The feed operation exists only where a feed does. A site with no content\n collection has no `/{slug}/rss.xml` to serve, and publishing the operation\n anyway would put an endpoint in the document that answers 404 — the one\n defect that makes a client distrust the rest of the spec.\n */\n if (collectionSlugs.length > 0) {\n paths['/{collectionSlug}/rss.xml'] = {\n get: {\n operationId: 'getCollectionFeed',\n summary: 'Collection feed',\n description:\n \"A content collection's newest entries as RSS 2.0, newest first.\",\n tags: ['Content'],\n parameters: [\n {\n name: 'collectionSlug',\n in: 'path',\n required: true,\n description: 'Which collection to read.',\n // An enum rather than a bare string: this site's collections are\n // known here, and a function-calling bridge turns an enum into a\n // constrained argument the model cannot get wrong.\n schema: { type: 'string', enum: collectionSlugs },\n example: collectionSlugs[0],\n },\n ],\n responses: {\n '200': {\n description: 'An RSS 2.0 document.',\n content: { 'application/rss+xml': { schema: { type: 'string' } } },\n },\n '404': { description: 'No collection answers at that slug.' },\n },\n },\n }\n }\n\n if (options.hasSearch) {\n paths['/search'] = {\n get: {\n operationId: 'searchSite',\n summary: 'Search this site',\n description:\n \"Full-text search across this site's published pages and content \" +\n 'entries. HTML only — unlike every other page here, the results are ' +\n 'computed in the browser, so a Markdown variant would be a heading ' +\n 'with no results under it. To read the matches as Markdown, follow ' +\n 'the result links and fetch each page with `Accept: text/markdown`.',\n tags: ['Content'],\n parameters: [\n {\n name: 'q',\n in: 'query',\n required: true,\n description: 'The query.',\n schema: { type: 'string', minLength: 1 },\n },\n ],\n responses: {\n '200': {\n description: 'The results page.',\n content: { 'text/html': { schema: { type: 'string' } } },\n },\n },\n },\n }\n }\n\n const info: Schema = {\n title: `${options.siteName} — public API`,\n /*\n The CONTRACT version, not the build. `info.version` carrying the platform\n release meant it changed several times a day, so a consumer reading it as\n \"the shape I was built against\" was tracking deploy noise and had nothing\n to pin. The build identifier keeps its purpose — telling two documents\n apart — under its own key.\n */\n version: API_VERSION,\n ...(options.version ? { 'x-aglyn-platform-version': options.version } : {}),\n summary: `Everything ${options.siteName} publishes for machine consumption.`,\n description:\n `The read-only surface of ${options.siteName}. Every operation is ` +\n 'anonymous — no key, no session — and every page can be fetched as ' +\n 'Markdown instead of HTML by sending `Accept: text/markdown` or by ' +\n 'appending `.md` to its path.\\n\\n' +\n 'Write endpoints are deliberately not described here. This site does ' +\n 'accept form submissions and account actions, but those belong to the ' +\n 'page that carries them rather than to a spec published to every ' +\n 'crawler; follow the form on the relevant page.\\n\\n' +\n `Start at [/llms.txt](${origin}/llms.txt) for what this site is for, ` +\n `or [/sitemap.xml](${origin}/sitemap.xml) for every indexable URL.\\n\\n` +\n '## Versioning and deprecation\\n\\n' +\n 'This surface is versioned by HEADER, not by URL. Send ' +\n `\\`${API_VERSION_HEADER}: ${API_VERSION}\\` to pin the shape you were ` +\n 'built against; omit it and you get the current version. Every ' +\n `response names the version that served it in the same header.\\n\\n` +\n 'A path version was the alternative and it does not fit this surface: ' +\n 'most of what is described here lives at a location some other ' +\n 'specification fixed — `/openapi.json`, `/robots.txt`, `/llms.txt`, ' +\n '`/sitemap.xml`, `/manifest.webmanifest`. Moving those under `/v1/` ' +\n 'would break the specs that define them, and versioning only the ' +\n '`/api/*` half would leave one surface with two rules.\\n\\n' +\n 'Additive changes — a new operation, a new optional field — ship ' +\n 'without a version bump, so parse leniently and ignore what you do ' +\n 'not recognise. Anything that removes or renames a field, or narrows ' +\n 'what an operation accepts, does bump it.\\n\\n' +\n 'Removal is announced on the responses themselves, not only in a ' +\n 'changelog. A deprecated operation answers with `Deprecation` (RFC ' +\n '9745) from the moment it is deprecated, and `Sunset` (RFC 8594) ' +\n 'naming the date it stops answering. Both are HTTP dates. An ' +\n 'operation that has never carried either is not scheduled for ' +\n 'removal.',\n ...(options.contactEmail\n ? { contact: { name: options.siteName, email: options.contactEmail } }\n : {}),\n ...(options.termsOfServiceUrl ? { termsOfService: options.termsOfServiceUrl } : {}),\n }\n\n /*\n Every response names the version that served it and declares the two\n headers a removal is announced on; every operation accepts the version\n request header. Attached by a walk rather than written into each operation\n by hand — a policy stated in `info` and then missing from an operation is\n not a policy, and eleven hand-copied blocks is exactly how that happens.\n */\n const versionedHeaders: Schema = {\n [API_VERSION_HEADER]: { $ref: '#/components/headers/ApiVersion' },\n Deprecation: { $ref: '#/components/headers/Deprecation' },\n Sunset: { $ref: '#/components/headers/Sunset' },\n }\n /** The paths `publicReadApiGate` actually meters. Kept in step by AGL-2722's spec. */\n const METERED = new Set(['/api/host', '/api/screen'])\n for (const [pathName, pathItem] of Object.entries(paths as Record<string, Schema>)) {\n const metered = METERED.has(pathName)\n for (const operation of Object.values(pathItem)) {\n if (!operation || typeof operation !== 'object') continue\n const verb = operation as Schema\n const responses = verb.responses as Record<string, Schema> | undefined\n if (!responses) continue\n if (metered && !responses['429']) responses['429'] = { ...TOO_MANY_REQUESTS }\n for (const response of Object.values(responses)) {\n // The operation's own headers win: a walk that overwrote them would\n // silently drop something an operation deliberately said.\n response.headers = {\n ...versionedHeaders,\n ...(metered ? RATE_LIMIT_HEADERS : {}),\n ...((response.headers as Schema) ?? {}),\n }\n }\n verb.parameters = [\n ...((verb.parameters as unknown[]) ?? []),\n { $ref: '#/components/parameters/ApiVersionRequest' },\n ]\n }\n }\n\n return {\n openapi: '3.1.0',\n // The dialect, stated rather than assumed. It is what tells a consumer the\n // schemas below are JSON Schema 2020-12 and not OpenAPI 3.0's dialect.\n jsonSchemaDialect: 'https://json-schema.org/draft/2020-12/schema',\n info,\n servers: [{ url: origin, description: options.siteName }],\n tags: [\n {\n name: 'Discovery',\n description: 'Files that describe the site to a machine.',\n },\n { name: 'Content', description: 'The pages and entries the site publishes.' },\n { name: 'Site', description: 'Identity and operational status.' },\n ],\n paths,\n components: {\n schemas: {\n Error: ERROR_SCHEMA,\n ApiCatalog: {\n type: 'object',\n description:\n 'An RFC 9264 linkset. Each member of `linkset` is a link ' +\n 'CONTEXT keyed by its `anchor`: the first is anchored at the ' +\n 'catalog and lists its members under `item`, and each one after ' +\n 'it is anchored at a single API and carries that API’s links.',\n required: ['linkset'],\n properties: {\n linkset: {\n type: 'array',\n items: {\n type: 'object',\n required: ['anchor'],\n properties: {\n anchor: {\n type: 'string',\n format: 'uri',\n description:\n 'What every link in this object is a link FROM.',\n },\n item: {\n type: 'array',\n description: 'Catalog membership — the APIs listed.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n 'service-desc': {\n type: 'array',\n description:\n 'Machine-readable description of the anchored API.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n 'service-doc': {\n type: 'array',\n description: 'Documentation written for a person.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n status: {\n type: 'array',\n description: 'Where the anchored API reports its health.',\n items: { $ref: '#/components/schemas/CatalogLink' },\n },\n },\n },\n },\n },\n },\n CatalogLink: {\n type: 'object',\n description: 'One link in a linkset.',\n required: ['href'],\n properties: {\n href: { type: 'string', format: 'uri' },\n type: {\n type: 'string',\n description: 'Media type of the target, when it is known.',\n },\n title: { type: 'string', description: 'Human label.' },\n },\n },\n OpenApiDocument: {\n type: 'object',\n description:\n 'An OpenAPI 3.1 description — this document. Described rather ' +\n 'than left as a bare object so a consumer knows which dialect ' +\n 'the schemas inside it use before it fetches them.',\n required: ['openapi', 'info', 'paths'],\n properties: {\n openapi: {\n type: 'string',\n description: 'OpenAPI specification version, e.g. `3.1.0`.',\n },\n jsonSchemaDialect: {\n type: 'string',\n description: 'The JSON Schema dialect the schemas below use.',\n },\n info: {\n type: 'object',\n description: 'Title, version, summary and description.',\n },\n servers: {\n type: 'array',\n description: 'Origins this description applies to.',\n items: { type: 'object' },\n },\n tags: {\n type: 'array',\n description: 'Operation groupings.',\n items: { type: 'object' },\n },\n paths: {\n type: 'object',\n description: 'Every path, keyed by template, each with its verbs.',\n },\n components: {\n type: 'object',\n description: 'Reusable schemas, parameters and headers.',\n },\n },\n },\n WebAppManifest: {\n type: 'object',\n description:\n 'A W3C web app manifest. Only the members this site actually ' +\n 'emits are described; the specification allows more.',\n properties: {\n name: { type: 'string', description: 'Full name of the site.' },\n short_name: {\n type: 'string',\n description: 'Name used where space is tight.',\n },\n description: { type: 'string', description: 'What the site is.' },\n start_url: {\n type: 'string',\n description: 'Where an installed instance opens.',\n },\n scope: { type: 'string', description: 'URLs the install covers.' },\n display: {\n type: 'string',\n description: 'Preferred display mode, e.g. `standalone`.',\n },\n theme_color: {\n type: 'string',\n description: 'CSS color for the surrounding UI.',\n },\n background_color: {\n type: 'string',\n description: 'CSS color painted before the site renders.',\n },\n icons: {\n type: 'array',\n description: 'Installable icons.',\n items: {\n type: 'object',\n properties: {\n src: { type: 'string' },\n sizes: { type: 'string' },\n type: { type: 'string' },\n purpose: { type: 'string' },\n },\n },\n },\n },\n },\n SiteIdentity: {\n type: 'object',\n description: \"A site's public identity.\",\n properties: {\n $id: { type: 'string', description: 'Stable site identifier.' },\n displayName: { type: 'string', description: 'Human-readable name.' },\n logoUrl: { type: 'string', description: \"The site's logo.\" },\n subdomain: {\n type: 'string',\n description: 'Platform subdomain, without the apex.',\n },\n cname: { type: 'string', description: 'Custom domain, when set.' },\n locales: {\n type: 'array',\n items: { type: 'string' },\n description: 'BCP-47 locales this site publishes.',\n },\n defaultLocale: { type: 'string', description: 'The default locale.' },\n seo: SEO_SCHEMA,\n },\n },\n PublishedPage: {\n type: 'object',\n description: 'One published, indexable page.',\n properties: {\n $id: { type: 'string', description: 'Stable page identifier.' },\n slug: { type: 'string', description: 'The page’s own path segment.' },\n parentId: {\n type: 'string',\n description: 'Parent page, for a nested page.',\n },\n order: { type: 'integer', description: 'Sort order among siblings.' },\n displayName: { type: 'string', description: 'The page’s name.' },\n description: { type: 'string', description: 'Author’s summary.' },\n locale: { type: 'string', description: 'BCP-47 locale.' },\n publishedAt: {\n type: 'string',\n format: 'date-time',\n description: 'When this page was last published.',\n },\n updatedAt: {\n type: 'string',\n format: 'date-time',\n description: 'When this page was last saved.',\n },\n seo: SEO_SCHEMA,\n },\n required: ['$id'],\n },\n Health: {\n type: 'object',\n description: 'Service health.',\n properties: {\n status: {\n type: 'string',\n enum: ['ok', 'degraded', 'down'],\n description: 'Overall verdict.',\n },\n service: { type: 'string', description: 'Which service answered.' },\n version: { type: 'string', description: 'Platform version.' },\n environment: { type: 'string', description: 'Deployment environment.' },\n checks: {\n type: 'object',\n description: 'Per-dependency results.',\n additionalProperties: { type: 'object' },\n },\n },\n required: ['status'],\n },\n },\n headers: {\n ApiVersion: {\n description:\n 'The API version that produced this response. Compare it with ' +\n 'the version you were built against; they differ only when ' +\n 'something was removed, renamed, or narrowed.',\n schema: { type: 'string', examples: [API_VERSION] },\n },\n Deprecation: {\n description:\n 'Present only on a deprecated operation, per RFC 9745: the HTTP ' +\n 'date the deprecation took effect. Its absence is meaningful — ' +\n 'an operation that has never carried this is not scheduled for ' +\n 'removal.',\n schema: { type: 'string' },\n },\n Sunset: {\n description:\n 'Present only once a removal date is set, per RFC 8594: the ' +\n 'HTTP date after which this operation stops answering. Always ' +\n 'accompanied by `Deprecation`.',\n schema: { type: 'string' },\n },\n RateLimitLimit: {\n description:\n 'Requests this address may make per window, per RFC 9331.',\n schema: { type: 'integer' },\n },\n RateLimitRemaining: {\n description:\n 'Requests left in the current window.\\n\\n' +\n '⚠️ Counted PER SERVING INSTANCE, not across the deployment. ' +\n 'The limit is a backstop set far above ordinary reading, and an ' +\n 'exact global counter would cost every request two round trips ' +\n 'to enforce a number nobody should reach. Pace against it as a ' +\n 'courtesy signal, not as an exact budget.',\n schema: { type: 'integer' },\n },\n RateLimitReset: {\n description:\n 'Seconds until the current window resets — a duration, not a ' +\n 'timestamp, so a caller uses its own clock rather than trusting ' +\n 'ours.',\n schema: { type: 'integer' },\n },\n RetryAfter: {\n description:\n 'Seconds to wait before retrying. Sent only with a 429.',\n schema: { type: 'integer' },\n },\n },\n parameters: {\n ApiVersionRequest: {\n name: API_VERSION_HEADER,\n in: 'header',\n required: false,\n description:\n 'Pin the response shape to a version you were built against. ' +\n 'Omit it to get the current version, which is what most callers ' +\n 'want — additive changes never bump it.',\n schema: { type: 'string', examples: [API_VERSION] },\n },\n },\n },\n }\n}\n"],"names":["API_CATALOG_MEDIA_TYPE","MARKDOWN","API_VERSION_HEADER","API_VERSION","RATE_LIMIT_HEADERS","$ref","TOO_MANY_REQUESTS","description","headers","content","schema","ACCEPT_PARAMETER","name","in","required","type","enum","default","ERROR_SCHEMA","properties","status","statusMessage","errorCode","SEO_SCHEMA","title","image","imageWidth","imageHeight","imageAlt","buildAgentOpenApi","options","origin","replace","collections","collectionSlugs","map","collection","slug","paths","get","operationId","summary","tags","responses","parameters","example","Vary","data","host","minimum","maximum","screens","items","cursor","length","hasSearch","minLength","info","siteName","version","contactEmail","contact","email","termsOfServiceUrl","termsOfService","versionedHeaders","Deprecation","Sunset","METERED","Set","pathName","pathItem","Object","entries","metered","has","operation","values","verb","response","openapi","jsonSchemaDialect","servers","url","components","schemas","Error","ApiCatalog","linkset","anchor","format","item","CatalogLink","href","OpenApiDocument","WebAppManifest","short_name","start_url","scope","display","theme_color","background_color","icons","src","sizes","purpose","SiteIdentity","$id","displayName","logoUrl","subdomain","cname","locales","defaultLocale","seo","PublishedPage","parentId","order","locale","publishedAt","updatedAt","Health","service","environment","checks","additionalProperties","ApiVersion","examples","RateLimitLimit","RateLimitRemaining","RateLimitReset","RetryAfter","ApiVersionRequest"],"mappings":"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"}
@@ -0,0 +1,154 @@
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
+ /**
18
+ * The gate every FIRST-PARTY analytics beacon passes through, and the one
19
+ * function that sends one.
20
+ *
21
+ * ## Why this exists beside the Google Analytics gate rather than inside it
22
+ *
23
+ * `analyticsMayEmit` (AGL-2067) decides whether a build may load a Google tag.
24
+ * It was applied to the GA4 mount, the GTM mount, the advertising tags and
25
+ * Firebase Analytics — every tag that costs nothing — and not to
26
+ * `/api/analytics/collect`, which is the one that bills.
27
+ *
28
+ * That endpoint increments `hosts/{hostId}/analytics/{day}.total`, which rolls
29
+ * up into `orgs/{orgId}/usage/{month}.pageViews` and from there into the
30
+ * Stripe meter, the free plan's bandwidth band (`bandwidthCapShouldEngage`)
31
+ * and the abuse ceiling (`checkBandwidthAbuseCeiling`). Both Next apps map
32
+ * `VERCEL_ENV` into the client bundle and both point at the production
33
+ * Firebase project, so before this gate a `next dev` on `localhost:4500` and
34
+ * every preview deployment of `apps/tenant` wrote real page views into a
35
+ * customer's invoice and against their cap.
36
+ *
37
+ * ## The two halves of the decision
38
+ *
39
+ * 1. **The build.** A production surface, and ONLY a production surface. Note
40
+ * what this deliberately does not honor: `NEXT_PUBLIC_ANALYTICS_ALLOW_NONPROD`.
41
+ * That hatch exists so someone can exercise the GA taxonomy against
42
+ * DebugView from a dev build, and it is paired with
43
+ * `analyticsEnvironmentForcesInternal` precisely so the hits it produces
44
+ * are all marked ours. A hit marked ours must not be billed to anyone, so
45
+ * the hatch buys a GA session and never a counter increment.
46
+ *
47
+ * `analyticsMayEmit(env) && !analyticsEnvironmentForcesInternal(env)`
48
+ * reduces to `isProductionSurface(env)`, which is not exported. Composing
49
+ * the two published predicates keeps this gate and the GA gate reading the
50
+ * same environment through the same code, so a change to what counts as
51
+ * production cannot move one and leave the other.
52
+ *
53
+ * 2. **The browser.** `readInternalTrafficOverride` — the same per-origin
54
+ * opt-in (`?aglyn_internal=1`) that stamps `traffic_type: 'internal'` for
55
+ * GA4. GA stamps and lets a data filter discard; here there is nothing to
56
+ * filter after the fact, because a counter is a running total and a page
57
+ * view already added to an invoice cannot be taken back out. So the beacon
58
+ * is not sent at all.
59
+ *
60
+ * A loopback self-host install (`{subdomain}.localhost:4500` from the compose
61
+ * file) counts nothing, by the same rule that already silences its GA tag. An
62
+ * operator serving from a real name is a production surface and counts
63
+ * normally — theirs is the deployment an unknown `deployEnv` is for.
64
+ *
65
+ * ## Bias
66
+ *
67
+ * Opt-in only, never inferred, and every ambiguous case resolves to NOT
68
+ * internal — a browser with `localStorage` disabled, a sandboxed iframe, a
69
+ * server render. Wrongly flagging a real visitor under-counts a customer's
70
+ * own dashboard as well as their bill, which is the quieter of the two
71
+ * failures but still theirs.
72
+ */
73
+ import { type AnalyticsEnvironment } from './analytics-environment';
74
+ import { type InternalTrafficOverrideSource } from './internal-traffic';
75
+ /**
76
+ * The collector. One definition, because four call sites across three
77
+ * packages send to it and a path that drifts by one character is a counter
78
+ * that silently stops.
79
+ */
80
+ export declare const ANALYTICS_BEACON_ENDPOINT = "/api/analytics/collect";
81
+ /** The browser and build facts the gate reads, so a spec can supply them. */
82
+ export interface AnalyticsBeaconContext {
83
+ /** Defaults to this build's own environment. */
84
+ env?: AnalyticsEnvironment;
85
+ /** Defaults to `window.location.search` and `window.localStorage`. */
86
+ override?: InternalTrafficOverrideSource;
87
+ }
88
+ /**
89
+ * Whether a beacon from HERE, in THIS browser, should be counted.
90
+ *
91
+ * ⚠️ Reading the override also APPLIES it: `?aglyn_internal=1` persists on the
92
+ * call that observes it, so the visit carrying the parameter is itself
93
+ * suppressed rather than counted and excluded from the next one. That is the
94
+ * whole reason one round trip through the URL is enough.
95
+ */
96
+ export declare function analyticsBeaconMaySend(context?: AnalyticsBeaconContext): boolean;
97
+ /**
98
+ * Send one beacon, or don't.
99
+ *
100
+ * Returns whether the browser accepted it, so a caller that has its own
101
+ * once-per-pageview bookkeeping can tell "refused" from "queued" — though
102
+ * every caller today treats analytics as fire-and-forget and ignores it.
103
+ *
104
+ * Never throws. `sendBeacon` itself throws on some payloads and in some
105
+ * sandboxes, and analytics does not get to break a customer's page.
106
+ */
107
+ export declare function sendAnalyticsBeacon(payload: Record<string, unknown>, context?: AnalyticsBeaconContext): boolean;
108
+ /**
109
+ * The playback events `/api/analytics/collect` counts (AGL-2746).
110
+ *
111
+ * A closed vocabulary, exported so the player and the route cannot drift: an
112
+ * event the route does not recognize is silently discarded with a 204, which
113
+ * is the correct behavior for an unauthenticated collector and a terrible
114
+ * way to find out a player is sending `'started'`.
115
+ *
116
+ * Quartiles rather than a position. A percentage would be a continuous,
117
+ * visitor-supplied value arriving on a Firestore map key, and four buckets
118
+ * answer the only question anyone asks of a watch curve — where people stop.
119
+ */
120
+ export type VideoAnalyticsEvent = 'play' | 'progress25' | 'progress50' | 'progress75' | 'complete';
121
+ /**
122
+ * The quartile event a playhead has just crossed, or undefined.
123
+ *
124
+ * `previousFraction` is what the player last reported, so a seek backwards
125
+ * re-fires nothing and a normal watch fires each quartile exactly once. The
126
+ * caller keeps that one number; this keeps the thresholds, so a player does
127
+ * not carry its own copy of 0.25/0.5/0.75 — which is the shape of duplication
128
+ * that made `analyticsPathKey` a shared function.
129
+ *
130
+ * `complete` is NOT produced here. It belongs to the `ended` event, which is
131
+ * the only signal that distinguishes watching to the end from seeking to it.
132
+ */
133
+ export declare function videoQuartileEvent(fraction: number, previousFraction: number): VideoAnalyticsEvent | undefined;
134
+ /**
135
+ * Report one playback event for one DAM asset.
136
+ *
137
+ * Rides {@link sendAnalyticsBeacon}, so it inherits both halves of that gate
138
+ * — production surfaces only, and never a browser carrying the internal-traffic
139
+ * opt-in. Inheriting them matters even though these counters never reach an
140
+ * invoice: a preview deployment and a developer's `next dev` both point at the
141
+ * production Firebase project, so without the gate every local page load of a
142
+ * page carrying a video would add plays to a customer's dashboard.
143
+ *
144
+ * Returns whether the browser accepted the beacon. Every caller today treats
145
+ * it as fire-and-forget.
146
+ */
147
+ export declare function sendVideoAnalyticsBeacon(options: {
148
+ hostId: string;
149
+ /** The DAM media id, not a URL. */
150
+ mediaId: string;
151
+ event: VideoAnalyticsEvent;
152
+ /** Page path, for parity with every other beacon. Optional. */
153
+ path?: string;
154
+ }, context?: AnalyticsBeaconContext): boolean;
@@ -0,0 +1,152 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ /**
3
+ * @license
4
+ * Copyright 2026 Aglyn LLC
5
+ *
6
+ * Licensed under the Apache License, Version 2.0 (the "License");
7
+ * you may not use this file except in compliance with the License.
8
+ * You may obtain a copy of the License at
9
+ *
10
+ * http://www.apache.org/licenses/LICENSE-2.0
11
+ *
12
+ * Unless required by applicable law or agreed to in writing, software
13
+ * distributed under the License is distributed on an "AS IS" BASIS,
14
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ * See the License for the specific language governing permissions and
16
+ * limitations under the License.
17
+ */ /**
18
+ * The gate every FIRST-PARTY analytics beacon passes through, and the one
19
+ * function that sends one.
20
+ *
21
+ * ## Why this exists beside the Google Analytics gate rather than inside it
22
+ *
23
+ * `analyticsMayEmit` (AGL-2067) decides whether a build may load a Google tag.
24
+ * It was applied to the GA4 mount, the GTM mount, the advertising tags and
25
+ * Firebase Analytics — every tag that costs nothing — and not to
26
+ * `/api/analytics/collect`, which is the one that bills.
27
+ *
28
+ * That endpoint increments `hosts/{hostId}/analytics/{day}.total`, which rolls
29
+ * up into `orgs/{orgId}/usage/{month}.pageViews` and from there into the
30
+ * Stripe meter, the free plan's bandwidth band (`bandwidthCapShouldEngage`)
31
+ * and the abuse ceiling (`checkBandwidthAbuseCeiling`). Both Next apps map
32
+ * `VERCEL_ENV` into the client bundle and both point at the production
33
+ * Firebase project, so before this gate a `next dev` on `localhost:4500` and
34
+ * every preview deployment of `apps/tenant` wrote real page views into a
35
+ * customer's invoice and against their cap.
36
+ *
37
+ * ## The two halves of the decision
38
+ *
39
+ * 1. **The build.** A production surface, and ONLY a production surface. Note
40
+ * what this deliberately does not honor: `NEXT_PUBLIC_ANALYTICS_ALLOW_NONPROD`.
41
+ * That hatch exists so someone can exercise the GA taxonomy against
42
+ * DebugView from a dev build, and it is paired with
43
+ * `analyticsEnvironmentForcesInternal` precisely so the hits it produces
44
+ * are all marked ours. A hit marked ours must not be billed to anyone, so
45
+ * the hatch buys a GA session and never a counter increment.
46
+ *
47
+ * `analyticsMayEmit(env) && !analyticsEnvironmentForcesInternal(env)`
48
+ * reduces to `isProductionSurface(env)`, which is not exported. Composing
49
+ * the two published predicates keeps this gate and the GA gate reading the
50
+ * same environment through the same code, so a change to what counts as
51
+ * production cannot move one and leave the other.
52
+ *
53
+ * 2. **The browser.** `readInternalTrafficOverride` — the same per-origin
54
+ * opt-in (`?aglyn_internal=1`) that stamps `traffic_type: 'internal'` for
55
+ * GA4. GA stamps and lets a data filter discard; here there is nothing to
56
+ * filter after the fact, because a counter is a running total and a page
57
+ * view already added to an invoice cannot be taken back out. So the beacon
58
+ * is not sent at all.
59
+ *
60
+ * A loopback self-host install (`{subdomain}.localhost:4500` from the compose
61
+ * file) counts nothing, by the same rule that already silences its GA tag. An
62
+ * operator serving from a real name is a production surface and counts
63
+ * normally — theirs is the deployment an unknown `deployEnv` is for.
64
+ *
65
+ * ## Bias
66
+ *
67
+ * Opt-in only, never inferred, and every ambiguous case resolves to NOT
68
+ * internal — a browser with `localStorage` disabled, a sandboxed iframe, a
69
+ * server render. Wrongly flagging a real visitor under-counts a customer's
70
+ * own dashboard as well as their bill, which is the quieter of the two
71
+ * failures but still theirs.
72
+ */ import { analyticsEnvironmentForcesInternal, analyticsMayEmit, readAnalyticsEnvironment } from "./analytics-environment.js";
73
+ import { readInternalTrafficOverride } from "./internal-traffic.js";
74
+ /**
75
+ * The collector. One definition, because four call sites across three
76
+ * packages send to it and a path that drifts by one character is a counter
77
+ * that silently stops.
78
+ */ export const ANALYTICS_BEACON_ENDPOINT = '/api/analytics/collect';
79
+ /**
80
+ * Whether a beacon from HERE, in THIS browser, should be counted.
81
+ *
82
+ * ⚠️ Reading the override also APPLIES it: `?aglyn_internal=1` persists on the
83
+ * call that observes it, so the visit carrying the parameter is itself
84
+ * suppressed rather than counted and excluded from the next one. That is the
85
+ * whole reason one round trip through the URL is enough.
86
+ */ export function analyticsBeaconMaySend(context = {}) {
87
+ var _context_env;
88
+ const env = (_context_env = context.env) != null ? _context_env : readAnalyticsEnvironment();
89
+ if (!analyticsMayEmit(env)) return false;
90
+ if (analyticsEnvironmentForcesInternal(env)) return false;
91
+ return !readInternalTrafficOverride(context.override);
92
+ }
93
+ /**
94
+ * Send one beacon, or don't.
95
+ *
96
+ * Returns whether the browser accepted it, so a caller that has its own
97
+ * once-per-pageview bookkeeping can tell "refused" from "queued" — though
98
+ * every caller today treats analytics as fire-and-forget and ignores it.
99
+ *
100
+ * Never throws. `sendBeacon` itself throws on some payloads and in some
101
+ * sandboxes, and analytics does not get to break a customer's page.
102
+ */ export function sendAnalyticsBeacon(payload, context = {}) {
103
+ if (typeof navigator === 'undefined') return false;
104
+ if (!analyticsBeaconMaySend(context)) return false;
105
+ try {
106
+ return navigator.sendBeacon(ANALYTICS_BEACON_ENDPOINT, JSON.stringify(payload));
107
+ } catch (unused) {
108
+ return false;
109
+ }
110
+ }
111
+ /**
112
+ * The quartile event a playhead has just crossed, or undefined.
113
+ *
114
+ * `previousFraction` is what the player last reported, so a seek backwards
115
+ * re-fires nothing and a normal watch fires each quartile exactly once. The
116
+ * caller keeps that one number; this keeps the thresholds, so a player does
117
+ * not carry its own copy of 0.25/0.5/0.75 — which is the shape of duplication
118
+ * that made `analyticsPathKey` a shared function.
119
+ *
120
+ * `complete` is NOT produced here. It belongs to the `ended` event, which is
121
+ * the only signal that distinguishes watching to the end from seeking to it.
122
+ */ export function videoQuartileEvent(fraction, previousFraction) {
123
+ const crossed = (threshold)=>fraction >= threshold && previousFraction < threshold;
124
+ if (crossed(0.75)) return 'progress75';
125
+ if (crossed(0.5)) return 'progress50';
126
+ if (crossed(0.25)) return 'progress25';
127
+ return undefined;
128
+ }
129
+ /**
130
+ * Report one playback event for one DAM asset.
131
+ *
132
+ * Rides {@link sendAnalyticsBeacon}, so it inherits both halves of that gate
133
+ * — production surfaces only, and never a browser carrying the internal-traffic
134
+ * opt-in. Inheriting them matters even though these counters never reach an
135
+ * invoice: a preview deployment and a developer's `next dev` both point at the
136
+ * production Firebase project, so without the gate every local page load of a
137
+ * page carrying a video would add plays to a customer's dashboard.
138
+ *
139
+ * Returns whether the browser accepted the beacon. Every caller today treats
140
+ * it as fire-and-forget.
141
+ */ export function sendVideoAnalyticsBeacon(options, context = {}) {
142
+ if (!options.hostId || !options.mediaId) return false;
143
+ return sendAnalyticsBeacon(_extends({
144
+ hostId: options.hostId,
145
+ mediaId: options.mediaId,
146
+ video: options.event
147
+ }, options.path ? {
148
+ path: options.path
149
+ } : {}), context);
150
+ }
151
+
152
+ //# sourceMappingURL=analytics-beacon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/analytics-beacon.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 * The gate every FIRST-PARTY analytics beacon passes through, and the one\n * function that sends one.\n *\n * ## Why this exists beside the Google Analytics gate rather than inside it\n *\n * `analyticsMayEmit` (AGL-2067) decides whether a build may load a Google tag.\n * It was applied to the GA4 mount, the GTM mount, the advertising tags and\n * Firebase Analytics — every tag that costs nothing — and not to\n * `/api/analytics/collect`, which is the one that bills.\n *\n * That endpoint increments `hosts/{hostId}/analytics/{day}.total`, which rolls\n * up into `orgs/{orgId}/usage/{month}.pageViews` and from there into the\n * Stripe meter, the free plan's bandwidth band (`bandwidthCapShouldEngage`)\n * and the abuse ceiling (`checkBandwidthAbuseCeiling`). Both Next apps map\n * `VERCEL_ENV` into the client bundle and both point at the production\n * Firebase project, so before this gate a `next dev` on `localhost:4500` and\n * every preview deployment of `apps/tenant` wrote real page views into a\n * customer's invoice and against their cap.\n *\n * ## The two halves of the decision\n *\n * 1. **The build.** A production surface, and ONLY a production surface. Note\n * what this deliberately does not honor: `NEXT_PUBLIC_ANALYTICS_ALLOW_NONPROD`.\n * That hatch exists so someone can exercise the GA taxonomy against\n * DebugView from a dev build, and it is paired with\n * `analyticsEnvironmentForcesInternal` precisely so the hits it produces\n * are all marked ours. A hit marked ours must not be billed to anyone, so\n * the hatch buys a GA session and never a counter increment.\n *\n * `analyticsMayEmit(env) && !analyticsEnvironmentForcesInternal(env)`\n * reduces to `isProductionSurface(env)`, which is not exported. Composing\n * the two published predicates keeps this gate and the GA gate reading the\n * same environment through the same code, so a change to what counts as\n * production cannot move one and leave the other.\n *\n * 2. **The browser.** `readInternalTrafficOverride` — the same per-origin\n * opt-in (`?aglyn_internal=1`) that stamps `traffic_type: 'internal'` for\n * GA4. GA stamps and lets a data filter discard; here there is nothing to\n * filter after the fact, because a counter is a running total and a page\n * view already added to an invoice cannot be taken back out. So the beacon\n * is not sent at all.\n *\n * A loopback self-host install (`{subdomain}.localhost:4500` from the compose\n * file) counts nothing, by the same rule that already silences its GA tag. An\n * operator serving from a real name is a production surface and counts\n * normally — theirs is the deployment an unknown `deployEnv` is for.\n *\n * ## Bias\n *\n * Opt-in only, never inferred, and every ambiguous case resolves to NOT\n * internal — a browser with `localStorage` disabled, a sandboxed iframe, a\n * server render. Wrongly flagging a real visitor under-counts a customer's\n * own dashboard as well as their bill, which is the quieter of the two\n * failures but still theirs.\n */\n\nimport {\n type AnalyticsEnvironment,\n analyticsEnvironmentForcesInternal,\n analyticsMayEmit,\n readAnalyticsEnvironment,\n} from './analytics-environment'\nimport {\n type InternalTrafficOverrideSource,\n readInternalTrafficOverride,\n} from './internal-traffic'\n\n/**\n * The collector. One definition, because four call sites across three\n * packages send to it and a path that drifts by one character is a counter\n * that silently stops.\n */\nexport const ANALYTICS_BEACON_ENDPOINT = '/api/analytics/collect'\n\n/** The browser and build facts the gate reads, so a spec can supply them. */\nexport interface AnalyticsBeaconContext {\n /** Defaults to this build's own environment. */\n env?: AnalyticsEnvironment\n /** Defaults to `window.location.search` and `window.localStorage`. */\n override?: InternalTrafficOverrideSource\n}\n\n/**\n * Whether a beacon from HERE, in THIS browser, should be counted.\n *\n * ⚠️ Reading the override also APPLIES it: `?aglyn_internal=1` persists on the\n * call that observes it, so the visit carrying the parameter is itself\n * suppressed rather than counted and excluded from the next one. That is the\n * whole reason one round trip through the URL is enough.\n */\nexport function analyticsBeaconMaySend(\n context: AnalyticsBeaconContext = {},\n): boolean {\n const env = context.env ?? readAnalyticsEnvironment()\n if (!analyticsMayEmit(env)) return false\n if (analyticsEnvironmentForcesInternal(env)) return false\n return !readInternalTrafficOverride(context.override)\n}\n\n/**\n * Send one beacon, or don't.\n *\n * Returns whether the browser accepted it, so a caller that has its own\n * once-per-pageview bookkeeping can tell \"refused\" from \"queued\" — though\n * every caller today treats analytics as fire-and-forget and ignores it.\n *\n * Never throws. `sendBeacon` itself throws on some payloads and in some\n * sandboxes, and analytics does not get to break a customer's page.\n */\nexport function sendAnalyticsBeacon(\n payload: Record<string, unknown>,\n context: AnalyticsBeaconContext = {},\n): boolean {\n if (typeof navigator === 'undefined') return false\n if (!analyticsBeaconMaySend(context)) return false\n try {\n return navigator.sendBeacon(\n ANALYTICS_BEACON_ENDPOINT,\n JSON.stringify(payload),\n )\n } catch {\n return false\n }\n}\n\n/**\n * The playback events `/api/analytics/collect` counts (AGL-2746).\n *\n * A closed vocabulary, exported so the player and the route cannot drift: an\n * event the route does not recognize is silently discarded with a 204, which\n * is the correct behavior for an unauthenticated collector and a terrible\n * way to find out a player is sending `'started'`.\n *\n * Quartiles rather than a position. A percentage would be a continuous,\n * visitor-supplied value arriving on a Firestore map key, and four buckets\n * answer the only question anyone asks of a watch curve — where people stop.\n */\nexport type VideoAnalyticsEvent =\n | 'play'\n | 'progress25'\n | 'progress50'\n | 'progress75'\n | 'complete'\n\n/**\n * The quartile event a playhead has just crossed, or undefined.\n *\n * `previousFraction` is what the player last reported, so a seek backwards\n * re-fires nothing and a normal watch fires each quartile exactly once. The\n * caller keeps that one number; this keeps the thresholds, so a player does\n * not carry its own copy of 0.25/0.5/0.75 — which is the shape of duplication\n * that made `analyticsPathKey` a shared function.\n *\n * `complete` is NOT produced here. It belongs to the `ended` event, which is\n * the only signal that distinguishes watching to the end from seeking to it.\n */\nexport function videoQuartileEvent(\n fraction: number,\n previousFraction: number,\n): VideoAnalyticsEvent | undefined {\n const crossed = (threshold: number) =>\n fraction >= threshold && previousFraction < threshold\n if (crossed(0.75)) return 'progress75'\n if (crossed(0.5)) return 'progress50'\n if (crossed(0.25)) return 'progress25'\n return undefined\n}\n\n/**\n * Report one playback event for one DAM asset.\n *\n * Rides {@link sendAnalyticsBeacon}, so it inherits both halves of that gate\n * — production surfaces only, and never a browser carrying the internal-traffic\n * opt-in. Inheriting them matters even though these counters never reach an\n * invoice: a preview deployment and a developer's `next dev` both point at the\n * production Firebase project, so without the gate every local page load of a\n * page carrying a video would add plays to a customer's dashboard.\n *\n * Returns whether the browser accepted the beacon. Every caller today treats\n * it as fire-and-forget.\n */\nexport function sendVideoAnalyticsBeacon(\n options: {\n hostId: string\n /** The DAM media id, not a URL. */\n mediaId: string\n event: VideoAnalyticsEvent\n /** Page path, for parity with every other beacon. Optional. */\n path?: string\n },\n context: AnalyticsBeaconContext = {},\n): boolean {\n if (!options.hostId || !options.mediaId) return false\n return sendAnalyticsBeacon(\n {\n hostId: options.hostId,\n mediaId: options.mediaId,\n video: options.event,\n ...(options.path ? { path: options.path } : {}),\n },\n context,\n )\n}\n"],"names":["analyticsEnvironmentForcesInternal","analyticsMayEmit","readAnalyticsEnvironment","readInternalTrafficOverride","ANALYTICS_BEACON_ENDPOINT","analyticsBeaconMaySend","context","env","override","sendAnalyticsBeacon","payload","navigator","sendBeacon","JSON","stringify","videoQuartileEvent","fraction","previousFraction","crossed","threshold","undefined","sendVideoAnalyticsBeacon","options","hostId","mediaId","video","event","path"],"mappings":";AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuDC,GAED,SAEEA,kCAAkC,EAClCC,gBAAgB,EAChBC,wBAAwB,QACnB,6BAAyB;AAChC,SAEEC,2BAA2B,QACtB,wBAAoB;AAE3B;;;;CAIC,GACD,OAAO,MAAMC,4BAA4B,yBAAwB;AAUjE;;;;;;;CAOC,GACD,OAAO,SAASC,uBACdC,UAAkC,CAAC,CAAC;QAExBA;IAAZ,MAAMC,OAAMD,eAAAA,QAAQC,GAAG,YAAXD,eAAeJ;IAC3B,IAAI,CAACD,iBAAiBM,MAAM,OAAO;IACnC,IAAIP,mCAAmCO,MAAM,OAAO;IACpD,OAAO,CAACJ,4BAA4BG,QAAQE,QAAQ;AACtD;AAEA;;;;;;;;;CASC,GACD,OAAO,SAASC,oBACdC,OAAgC,EAChCJ,UAAkC,CAAC,CAAC;IAEpC,IAAI,OAAOK,cAAc,aAAa,OAAO;IAC7C,IAAI,CAACN,uBAAuBC,UAAU,OAAO;IAC7C,IAAI;QACF,OAAOK,UAAUC,UAAU,CACzBR,2BACAS,KAAKC,SAAS,CAACJ;IAEnB,EAAE,eAAM;QACN,OAAO;IACT;AACF;AAqBA;;;;;;;;;;;CAWC,GACD,OAAO,SAASK,mBACdC,QAAgB,EAChBC,gBAAwB;IAExB,MAAMC,UAAU,CAACC,YACfH,YAAYG,aAAaF,mBAAmBE;IAC9C,IAAID,QAAQ,OAAO,OAAO;IAC1B,IAAIA,QAAQ,MAAM,OAAO;IACzB,IAAIA,QAAQ,OAAO,OAAO;IAC1B,OAAOE;AACT;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASC,yBACdC,OAOC,EACDhB,UAAkC,CAAC,CAAC;IAEpC,IAAI,CAACgB,QAAQC,MAAM,IAAI,CAACD,QAAQE,OAAO,EAAE,OAAO;IAChD,OAAOf,oBACL;QACEc,QAAQD,QAAQC,MAAM;QACtBC,SAASF,QAAQE,OAAO;QACxBC,OAAOH,QAAQI,KAAK;OAChBJ,QAAQK,IAAI,GAAG;QAAEA,MAAML,QAAQK,IAAI;IAAC,IAAI,CAAC,IAE/CrB;AAEJ"}
@@ -0,0 +1,133 @@
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
+ /**
18
+ * Whether THIS BUILD is allowed to report to Google Analytics at all
19
+ * (AGL-2067).
20
+ *
21
+ * ## The hole this closes
22
+ *
23
+ * Neither app gated GA on the deployment environment. The console called
24
+ * `initializeAnalytics` unconditionally and `apps/console/.env.development.local`
25
+ * points at the PRODUCTION measurement id, so every `next dev` session produced
26
+ * real `session_start` / `first_visit` / `page_view` hits in the live property;
27
+ * the tenant runtime mounted its tag wherever the resolved host carried an id,
28
+ * which on a preview deploy of `aglyn.com` is our own.
29
+ *
30
+ * That is not hypothetical. `docs/ANALYTICS.md` records the archived Marketing
31
+ * property's entire year-to-date history as 30 views / 6 users, ~24 of them
32
+ * `/signin` on Vercel PREVIEW urls of the console. Preview traffic reaching a
33
+ * production property is most of what that property ever recorded.
34
+ *
35
+ * `apps/docs` already got this right — the Docusaurus gtag plugin returns null
36
+ * unless `NODE_ENV === 'production'` — so this is the same rule, made
37
+ * available to the two apps that lacked it.
38
+ *
39
+ * ## Why this is better than the stamp for the dev case
40
+ *
41
+ * `traffic_type: 'internal'` only helps once a matching GA4 data filter exists
42
+ * in the property, and a filter is not retroactive: a hit that ships today is
43
+ * counted today. Not emitting at all needs no console configuration and cannot
44
+ * be got wrong later.
45
+ *
46
+ * ## The three signals, and why the default leans LOUD
47
+ *
48
+ * - `NODE_ENV !== 'production'` — every `next dev`, every jest run, every
49
+ * local e2e. Never emits.
50
+ * - `deployEnv` is `preview` or `development` — a Vercel preview build has
51
+ * `NODE_ENV === 'production'` (it is a production build), so nothing else
52
+ * catches it. `VERCEL_ENV` is server-only, so each app maps it into the
53
+ * client bundle through its `next.config` `env` block; assuming Vercel's
54
+ * "automatically expose system environment variables" setting is on would
55
+ * be a gate that silently is not there.
56
+ * - `deployEnv` unknown with `NODE_ENV === 'production'` — **emits.** That is
57
+ * the self-host case (Docker + bring-your-own-Firebase), which points at the
58
+ * operator's own Firebase project and their own GA property. Defaulting
59
+ * those to silence would break a customer's analytics to protect ours, which
60
+ * is the worse failure; our own builds are the ones that carry the marker.
61
+ * - **The document is served from a loopback host — never emits**, whatever
62
+ * the other three say. The signals above are all build-time, and a build is
63
+ * not a deployment: `next start`, `docker compose up` from a clone, and a
64
+ * production container run locally all carry `NODE_ENV === 'production'`
65
+ * with no `VERCEL_ENV`, which is byte-for-byte the self-host case the rule
66
+ * above deliberately lets through. Run against
67
+ * `apps/console/.env.development.local`, whose measurement id is the live
68
+ * `G-YW5PG16YTM`, that path reports a developer's laptop as production
69
+ * traffic — and it is not theoretical: `localhost` was 145 sessions of a
70
+ * 609-session month, arriving as `localhost:4200 / referral`, which also
71
+ * overwrites the acquisition source of every session it touches.
72
+ *
73
+ * The host is the one signal that separates the two cases, because a real
74
+ * self-hosted deployment is reached at a real name. It is read from
75
+ * `location` at call time and is therefore absent server-side, where it
76
+ * changes nothing — the check can only ever tighten the client decision,
77
+ * which is where the tag actually boots.
78
+ *
79
+ * ## The escape hatch
80
+ *
81
+ * `NEXT_PUBLIC_ANALYTICS_ALLOW_NONPROD=1` re-enables emission where the rules
82
+ * above would silence it, for the times someone genuinely needs to exercise
83
+ * the taxonomy against GA DebugView. It is deliberately paired with
84
+ * `analyticsEnvironmentForcesInternal`, so a build using it stamps
85
+ * `traffic_type: 'internal'` on everything unconditionally — the hatch cannot
86
+ * become the leak it exists beside.
87
+ */
88
+ /** The env var that re-enables analytics where this module would silence it. */
89
+ export declare const ANALYTICS_ALLOW_NONPROD_ENV = "NEXT_PUBLIC_ANALYTICS_ALLOW_NONPROD";
90
+ export interface AnalyticsEnvironment {
91
+ /** `process.env.NODE_ENV`. */
92
+ nodeEnv?: string | null;
93
+ /** `VERCEL_ENV`, mapped into the client bundle by each app's next.config. */
94
+ deployEnv?: string | null;
95
+ /** The escape hatch's raw value. */
96
+ allowNonProduction?: string | null;
97
+ /**
98
+ * The host this document is served from, absent server-side.
99
+ *
100
+ * Undefined is NOT loopback: a server render has no location and must keep
101
+ * the build-time answer, or the tenant's `<Script>` would stop rendering on
102
+ * every real deployment.
103
+ */
104
+ hostname?: string | null;
105
+ }
106
+ /**
107
+ * The build's own environment.
108
+ *
109
+ * Read through `process.env` at CALL time rather than captured at module load,
110
+ * so a spec can drive every branch — the alternative is a module constant that
111
+ * can only ever be observed in one state, which is the shape of a check that
112
+ * cannot fail.
113
+ */
114
+ export declare function readAnalyticsEnvironment(): AnalyticsEnvironment;
115
+ /**
116
+ * Whether this build may load a Google Analytics tag and send hits at all.
117
+ *
118
+ * The one question both apps ask. `false` means the tag is never created —
119
+ * not created and then suppressed — because a resident tag re-creates `_ga`
120
+ * and reports on its own (the AGL-1608 lesson), and because "no tag" is the
121
+ * only state that needs no filter to be true.
122
+ */
123
+ export declare function analyticsMayEmit(env?: AnalyticsEnvironment): boolean;
124
+ /**
125
+ * Whether every hit from this build must carry `traffic_type: 'internal'`
126
+ * regardless of who is signed in or what the browser opted into.
127
+ *
128
+ * True only for a non-production build running with the escape hatch on —
129
+ * i.e. exactly the builds that emit *because someone asked them to*, which are
130
+ * by definition ours. Keeps the hatch from reopening the hole.
131
+ */
132
+ export declare function analyticsEnvironmentForcesInternal(env?: AnalyticsEnvironment): boolean;
133
+ export default analyticsMayEmit;