@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,421 @@
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
+ */ // The ONE unit conversion between our provider bill and what a customer is
17
+ // shown. Imported here so `publicOrgMonthlySpend` cannot grow a second copy of
18
+ // it — see that function, and the module header of `assist-credits.ts`.
19
+ import { assistCreditsFromUsd } from "./assist-credits.js";
20
+ /**
21
+ * Per-org USAGE BUDGETS, modelled on a Google Cloud billing budget (AGL-1528).
22
+ *
23
+ * ## the directive, 2026-08-18, verbatim
24
+ *
25
+ * "*our usage metering, usage alerts, budgets for usage alerts, similar to
26
+ * how google cloud charges*"
27
+ *
28
+ * and, on the org-library storage decision the same day: bill from today
29
+ * "*but with overage protection + usage alerts, so customers don't get a
30
+ * surprise bill*".
31
+ *
32
+ * ## What a GCP billing budget actually is, and what this copies
33
+ *
34
+ * A GCP budget is **an amount plus a set of percentage alert rules**. It is
35
+ * not a cap: crossing 100% of a budget stops nothing, it sends the email that
36
+ * makes the bill stop being a surprise. Each rule fires **once per budget
37
+ * period per rule** — the console shows the budget and its progress, and the
38
+ * same rules push mail.
39
+ *
40
+ * This module is that shape, and only that shape:
41
+ *
42
+ * - an **amount** (`amountUsd`), chosen by the customer;
43
+ * - **threshold rules** as percentages of the amount (default 50/90/100 —
44
+ * GCP's own default trio);
45
+ * - one alert per threshold per **month**, which is our budget period
46
+ * because every meter underneath it (`orgs/{id}/usage/{month}`,
47
+ * `assistUsage/{month}`, the counters' `YYYY-MM` fields) already resets
48
+ * monthly. A budget period the meters do not share would silently compare
49
+ * a month of spend against a quarter of budget.
50
+ *
51
+ * ## WHY THIS IS NOT THE STORAGE CAP, AND MUST NOT BECOME IT
52
+ *
53
+ * `utils/storage-overage.ts` owns the customer's optional **hard cap**: past
54
+ * it uploads are refused. That is a wall, it is off by default, and it exists
55
+ * because the requirement was for a control "*by the end user*".
56
+ *
57
+ * A budget is the OTHER half and the softer one — it never refuses anything.
58
+ * The distinction is load-bearing in both directions: a budget that quietly
59
+ * became a cap would take a customer's site down to save them $2 (the failure
60
+ * mode AGL-1529 rejected on arrival), and a cap with no budget beneath it
61
+ * means the only warning a customer gets is the refusal itself.
62
+ *
63
+ * ## WHY DOLLARS AND NOT PERCENT-OF-QUOTA
64
+ *
65
+ * `usage-alerts` has warned at 80%/100% of individual QUOTAS since AGL-276 —
66
+ * sites, media storage, email sends, bandwidth. Those answer "am I near a
67
+ * band". They cannot answer "what will I owe", which is the question a
68
+ * metered customer actually has, and no sum of per-quota percentages produces
69
+ * it: an org at 60% of four different bands may owe nothing at all, and an
70
+ * org at 101% of one band may owe $40. Dollars are the customer's unit.
71
+ *
72
+ * ## THE SPEND FIGURE IS READ, NEVER RE-DERIVED
73
+ *
74
+ * `report-usage` already computes `billedCents` daily onto
75
+ * `orgs/{orgId}/usage/{month}` — metered infra excess at cost x 1.3, plus the
76
+ * data, API and contacts overages. That document is the invoice's own
77
+ * arithmetic, and this module takes it verbatim.
78
+ *
79
+ * A second aggregation here is the specific mistake AGL-1371 exists about:
80
+ * the console meter and the warning email each summed their own figures and
81
+ * disagreed by up to `hostLimit`x. A budget alert quoting a number the
82
+ * invoice will not show is worse than no budget alert, because it is believed.
83
+ */ /** GCP's own default budget alert rules, and the same three here. */ export const DEFAULT_BUDGET_THRESHOLD_PCTS = [
84
+ 50,
85
+ 90,
86
+ 100
87
+ ];
88
+ /** Bounds on the amount a self-serve org may set as its own budget. */ export const BUDGET_MIN_USD = 1;
89
+ export const BUDGET_MAX_USD = 100000;
90
+ /**
91
+ * Bounds on a threshold rule, as a percentage of the amount.
92
+ *
93
+ * The ceiling is 200 rather than 100 because GCP allows rules above the
94
+ * budget and they are the useful ones on a runaway: an org that set $20 and
95
+ * is at $45 wants to hear about 200%, and a ladder that stops at 100 says
96
+ * exactly as much at $45 as it did at $20.
97
+ */ export const BUDGET_THRESHOLD_MIN_PCT = 1;
98
+ export const BUDGET_THRESHOLD_MAX_PCT = 200;
99
+ /** At most this many rules, so one org cannot mail its admins 40 times. */ export const BUDGET_MAX_THRESHOLDS = 6;
100
+ /** The guard key this budget dedupes under, inside `orgs/{id}.usageAlerts`. */ export const BUDGET_GUARD_KEY = 'budget';
101
+ /**
102
+ * Coerces whatever is stored (or posted) into a usable ascending rule set.
103
+ *
104
+ * FAILS TO THE DEFAULT, never to empty. Every rejection path here — a blank,
105
+ * a string, a negative, a duplicate, an over-long list — lands on
106
+ * {@link DEFAULT_BUDGET_THRESHOLD_PCTS} rather than on `[]`, because an empty
107
+ * ladder is silence that reads as coverage.
108
+ */ export function normalizeBudgetThresholds(input) {
109
+ const list = Array.isArray(input) ? input : [];
110
+ const cleaned = [
111
+ ...new Set(list.map((entry)=>Math.round(Number(entry))).filter((pct)=>Number.isFinite(pct) && pct >= BUDGET_THRESHOLD_MIN_PCT && pct <= BUDGET_THRESHOLD_MAX_PCT))
112
+ ].sort((a, b)=>a - b);
113
+ if (!cleaned.length) return [
114
+ ...DEFAULT_BUDGET_THRESHOLD_PCTS
115
+ ];
116
+ return cleaned.slice(0, BUDGET_MAX_THRESHOLDS);
117
+ }
118
+ /**
119
+ * The budget this org has in force, from its raw org document.
120
+ *
121
+ * `null` amount means no budget — deliberately `null` rather than `Infinity`,
122
+ * matching `resolveStorageCap`: the value is serialised into the budget
123
+ * route's JSON and `JSON.stringify(Infinity)` is `null` anyway, so one
124
+ * spelling for "no budget" on both sides of the wire.
125
+ *
126
+ * An amount that is present but unusable (blank, negative, `NaN`) reads as NO
127
+ * budget, which is the opposite of how `resolveStorageCap` treats a corrupt
128
+ * CAP — and deliberately so. A corrupt cap must fall back to a low ceiling
129
+ * because failing open there bills someone who asked not to be billed. A
130
+ * budget refuses nothing, so the only cost of failing open is a missing
131
+ * warning, whereas inventing an amount nobody typed produces alerts about a
132
+ * number the customer never chose.
133
+ */ export function resolveUsageBudget(org) {
134
+ const raw = org == null ? void 0 : org.usageBudget;
135
+ const amount = Number(raw == null ? void 0 : raw.amountUsd);
136
+ if (!raw || !Number.isFinite(amount) || amount <= 0) {
137
+ return {
138
+ budgetSet: false,
139
+ amountUsd: null,
140
+ thresholdPcts: [
141
+ ...DEFAULT_BUDGET_THRESHOLD_PCTS
142
+ ]
143
+ };
144
+ }
145
+ return {
146
+ budgetSet: true,
147
+ amountUsd: amount,
148
+ thresholdPcts: normalizeBudgetThresholds(raw == null ? void 0 : raw.thresholdPcts)
149
+ };
150
+ }
151
+ /**
152
+ * The HIGHEST rule this spend has crossed, or 0 for none.
153
+ *
154
+ * Highest rather than all-of-them because the dedupe guard stores one number
155
+ * per key (the shape `usage-alerts` has used since AGL-276), and because an
156
+ * org that goes from $0 to $80 against a $50 budget between two cron ticks
157
+ * wants one email saying 160%, not three saying 50, 90 and 100. GCP behaves
158
+ * the same way — the rules are notification points on one number, not a queue.
159
+ */ export function budgetThresholdCrossed(spendUsd, budget) {
160
+ if (!budget.budgetSet || budget.amountUsd == null) return 0;
161
+ if (!Number.isFinite(budget.amountUsd) || budget.amountUsd <= 0) return 0;
162
+ if (!Number.isFinite(spendUsd) || spendUsd <= 0) return 0;
163
+ const pct = spendUsd / budget.amountUsd * 100;
164
+ let crossed = 0;
165
+ for (const rule of budget.thresholdPcts){
166
+ if (pct >= rule && rule > crossed) crossed = rule;
167
+ }
168
+ return crossed;
169
+ }
170
+ /**
171
+ * The rule to alert on RIGHT NOW, or 0 for silence.
172
+ *
173
+ * This is the whole of the idempotency requirement and it is one expression,
174
+ * so a caller cannot implement half of it:
175
+ *
176
+ * - nothing crossed -> silent;
177
+ * - crossed, but a guard from THIS month already recorded that rule or a
178
+ * higher one -> silent. A cron that ticks hourly must not mail hourly.
179
+ * - crossed, and the guard is from a PREVIOUS month -> alert. The budget
180
+ * period rolled over, and a customer who exceeded last month's budget
181
+ * must hear about this month's too.
182
+ *
183
+ * The comparison is `>=` on purpose: after alerting at 100 an org that climbs
184
+ * to 200 alerts again (200 > 100), and an org that stays at 100 does not.
185
+ */ export function budgetAlertDue(input) {
186
+ var _ref;
187
+ const { spendUsd, budget, guard, month } = input;
188
+ const crossed = budgetThresholdCrossed(spendUsd, budget);
189
+ if (!crossed) return 0;
190
+ if ((guard == null ? void 0 : guard.month) === month && Number((_ref = guard == null ? void 0 : guard.threshold) != null ? _ref : 0) >= crossed) {
191
+ return 0;
192
+ }
193
+ return crossed;
194
+ }
195
+ /**
196
+ * Whether `month`'s invoice charges for Assist tokens.
197
+ *
198
+ * Same START-MONTH shape and the same fail-closed posture as
199
+ * `billsOrgLibraryStorage`, and for the identical reason: a boolean flipped
200
+ * mid-period would retroactively bill a re-run of an earlier month at that
201
+ * month's accumulated tokens. A start month cannot reach backwards.
202
+ *
203
+ * `BILL_ASSIST_TOKENS_FROM=YYYY-MM`. Anything else — `true`, `1`, a date, a
204
+ * typo — bills nothing.
205
+ */ export function billsAssistTokens(month, configuredStart) {
206
+ const start = String(configuredStart != null ? configuredStart : '').trim();
207
+ if (!/^\d{4}-\d{2}$/.test(start)) return false;
208
+ if (!/^\d{4}-\d{2}$/.test(month)) return false;
209
+ return month >= start;
210
+ }
211
+ /**
212
+ * Builds the month's spend from figures already read elsewhere.
213
+ *
214
+ * `rollupMonth` is compared to `month` rather than trusted: see
215
+ * {@link OrgSpendBreakdown.meteredFresh}.
216
+ */ export function orgMonthlySpend(input) {
217
+ const { month, rollupBilledCents, rollupMonth, assistEstCostUsd } = input;
218
+ const meteredFresh = Boolean(rollupMonth) && rollupMonth === month;
219
+ const cents = Number(rollupBilledCents);
220
+ const meteredUsd = meteredFresh && Number.isFinite(cents) && cents > 0 ? cents / 100 : 0;
221
+ const assistRaw = Number(assistEstCostUsd);
222
+ const assistUsd = Number.isFinite(assistRaw) && assistRaw > 0 ? assistRaw : 0;
223
+ const assistBilled = billsAssistTokens(month, input.assistBilledFrom);
224
+ return {
225
+ meteredUsd,
226
+ assistUsd,
227
+ assistBilled,
228
+ totalUsd: meteredUsd + (assistBilled ? assistUsd : 0),
229
+ meteredFresh
230
+ };
231
+ }
232
+ /**
233
+ * The projection that crosses the boundary to a customer's browser.
234
+ *
235
+ * `OrgSpendBreakdown.assistUsd` is `orgs/{id}/assistUsage/{month}.estCostUsd`
236
+ * verbatim — our provider bill at the serving model's list rates, not a price
237
+ * and not a rate the platform publishes. Serving it to an org-scoped caller
238
+ * puts our model choice, our per-token rates and our margin on a billing page,
239
+ * which is the boundary `publicAssistCredits` and `publicAssistQuota` already
240
+ * exist to hold on the assist routes. This is the same boundary, one route
241
+ * over, and it was the last place the dollar figure still crossed it.
242
+ *
243
+ * `assistCreditsFromUsd` is the ONE conversion between the two units, so this
244
+ * cannot come to disagree with the credits meter about the same month's
245
+ * consumption.
246
+ *
247
+ * `meteredUsd` and `totalUsd` stay dollars: `billedCents` is what an invoice
248
+ * charges, which is the customer's own money and the whole subject of a budget.
249
+ *
250
+ * The two units are deliberately not summed. A budget is a dollar rule, credits
251
+ * are not dollars, and folding one into the other would republish the cost the
252
+ * conversion just removed.
253
+ */ export function publicOrgMonthlySpend(spend) {
254
+ return {
255
+ meteredUsd: spend.meteredUsd,
256
+ assistCredits: assistCreditsFromUsd(spend.assistUsd),
257
+ totalUsd: spend.totalUsd,
258
+ assistBilled: spend.assistBilled,
259
+ meteredFresh: spend.meteredFresh
260
+ };
261
+ }
262
+ /**
263
+ * The MARGIN GUARD (the other half of the ask, and the live half).
264
+ *
265
+ * A customer budget protects the customer. This protects us, from the one
266
+ * meter on the platform whose unit cost is real money paid to a third party
267
+ * and whose ceiling is a message count rather than a dollar figure:
268
+ * `assistEntitledMonthlyLimit` caps an entitled org at 1,000 MESSAGES a
269
+ * month, and a thousand long, cache-cold Opus-class exchanges is a
270
+ * three-figure bill against a subscription that did not move.
271
+ *
272
+ * So one org's Assist COGS crossing this threshold notifies STAFF, not the
273
+ * customer — the customer is not being charged and has done nothing wrong.
274
+ * Returns the threshold crossed, or 0.
275
+ *
276
+ * `ASSIST_ORG_MONTHLY_COGS_ALERT_USD` overrides the default and FAILS TO THE
277
+ * DEFAULT: a blank or malformed value that disabled the guard would be
278
+ * another alert that cannot fire.
279
+ */ export const ASSIST_ORG_MONTHLY_COGS_ALERT_USD_DEFAULT = 25;
280
+ export function assistCogsAlertThresholdUsd(configured) {
281
+ const parsed = Number(String(configured != null ? configured : '').trim());
282
+ if (!Number.isFinite(parsed) || parsed <= 0) {
283
+ return ASSIST_ORG_MONTHLY_COGS_ALERT_USD_DEFAULT;
284
+ }
285
+ return parsed;
286
+ }
287
+ /**
288
+ * The repo default spend ceiling: **$40 per org per month** (AGL-2264).
289
+ *
290
+ * The number is arithmetic rather than pricing. After AGL-2441 the
291
+ * 1,000-message entitled guard bounds roughly $28/org/month of worst-case
292
+ * spend at Sonnet, and the staff margin alert already fires at $25. $40
293
+ * therefore sits ABOVE anything the message cap can produce at the current
294
+ * model, so it changes no charged amount and no plan's behaviour — it is a
295
+ * ceiling on OUR cost, not a customer price, which is why it is outside the
296
+ * Sept-1 pricing lock. It binds only when an assumption behind that
297
+ * arithmetic has moved: an `ASSIST_MODEL` swap to an Opus-class tier, a
298
+ * longer prompt, or a caller finding another way to inflate input. That is
299
+ * the failure it exists for.
300
+ *
301
+ * It ships as a DEFAULT rather than as an environment variable someone must
302
+ * remember, because an unset ceiling is the fail-open this issue was opened
303
+ * about: a fresh deployment and a self-hoster both inherit a sane bound
304
+ * without knowing the variable exists.
305
+ *
306
+ * The free tier gets no separate figure and needs none — its 10 messages a
307
+ * UTC day bound it at roughly $0.28/day, so this is a backstop it cannot
308
+ * reach rather than a cap it runs into.
309
+ *
310
+ * ⚠️ It applies only to an org whose plan sells NO assist band. Agency and
311
+ * Enterprise include more assist than $40 of spend, so the meter's
312
+ * `assistMonthlyCeilingUsd` keeps this default off every plan that sells a
313
+ * band — see there for which figure binds when.
314
+ */ export const ASSIST_ORG_MONTHLY_COGS_LIMIT_DEFAULT_USD = 40;
315
+ /**
316
+ * The per-org monthly PROVIDER-SPEND ceiling in USD — the dollar half of
317
+ * the cap (AGL-2264), from `ASSIST_ORG_MONTHLY_COGS_LIMIT_USD` as the caller
318
+ * read it. Defaults to {@link ASSIST_ORG_MONTHLY_COGS_LIMIT_DEFAULT_USD};
319
+ * `off` removes it.
320
+ *
321
+ * Pure over the configured value, like {@link assistCogsAlertThresholdUsd}:
322
+ * the meter that refuses at the ceiling and the cron that announces the
323
+ * refusal read the one variable and must agree on what it means.
324
+ *
325
+ * The meter's message caps bound spend only through an assumed cost per
326
+ * message, and that assumption is exactly what drifts: `ASSIST_MODEL` is an
327
+ * env override, prompts grow, and a client controls how much history it
328
+ * posts. The ceiling is measured against the real figure instead: the
329
+ * running `estCostUsd` on the month's assist usage document, which the meter
330
+ * increments at the SERVING model's rates. So it bounds the actual bill
331
+ * rather than a forecast of it.
332
+ *
333
+ * The refusal is deliberately the same shape as the message refusal (a
334
+ * reservation that did not move the counter), so an org at the ceiling
335
+ * spends nothing at all rather than spending less. It refuses — it does
336
+ * NOT quietly swap to a cheaper model. A silent quality drop is worse than
337
+ * an honest stop, because nobody can tell it happened.
338
+ *
339
+ * ⚠️ **Fails to the DEFAULT, never to “no ceiling”.** An empty, negative or
340
+ * unparseable value reads as unconfigured and takes the repo default, so a
341
+ * typo cannot reopen the fail-open this exists to close. It cannot become a
342
+ * ceiling of `$0` either — a value of zero is not “refuse everyone”, it is
343
+ * “not a number I will honour” — because an outage across every workspace
344
+ * would be worse than the overspend being guarded.
345
+ *
346
+ * Removing the ceiling therefore takes a WORD rather than a number:
347
+ * `ASSIST_ORG_MONTHLY_COGS_LIMIT_USD=off`. A deployment paying its own
348
+ * provider bill may genuinely want none, and that is a decision someone
349
+ * should have to write down rather than reach by mistyping a digit.
350
+ */ export function assistOrgMonthlyCostLimitUsd(configured) {
351
+ const operator = assistOperatorCeilingUsd(configured);
352
+ return operator === undefined ? ASSIST_ORG_MONTHLY_COGS_LIMIT_DEFAULT_USD : operator;
353
+ }
354
+ /**
355
+ * The operator's ceiling exactly as CONFIGURED — three states, not two:
356
+ * a number, `null` for the word `off`, and `undefined` for unset or
357
+ * unparseable.
358
+ *
359
+ * `assistOrgMonthlyCostLimitUsd` collapses `undefined` onto the repo default
360
+ * and is the reading every existing caller wants. The composition with a
361
+ * plan's own band needs the third state, because "the operator wrote a
362
+ * number" and "nobody configured anything" have to bind differently against a
363
+ * band that was sold: an operator's figure is a decision, and the repo
364
+ * default is a backstop for orgs that have no band of their own.
365
+ */ export function assistOperatorCeilingUsd(configured) {
366
+ const raw = String(configured != null ? configured : '').trim();
367
+ if (raw === '') return undefined;
368
+ if (raw.toLowerCase() === 'off') return null;
369
+ const parsed = Number(raw);
370
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined;
371
+ }
372
+ /**
373
+ * Whether this org's Assist spend has newly crossed the margin threshold.
374
+ *
375
+ * Dedupes through the same guard shape and the same month semantics as the
376
+ * customer budget, under its own key, so a staff alert and a customer alert
377
+ * can never suppress one another.
378
+ */ export function assistMarginBreach(input) {
379
+ var _ref;
380
+ const { assistUsd, thresholdUsd, guard, month } = input;
381
+ if (!Number.isFinite(assistUsd) || !Number.isFinite(thresholdUsd)) return false;
382
+ if (thresholdUsd <= 0 || assistUsd < thresholdUsd) return false;
383
+ // The guard records how many WHOLE multiples of the threshold have been
384
+ // announced, so an org at 1x is announced once and an org that climbs to 2x
385
+ // is announced again — an escalating cost must not go quiet because it
386
+ // already spoke.
387
+ const multiple = Math.floor(assistUsd / thresholdUsd);
388
+ if ((guard == null ? void 0 : guard.month) === month && Number((_ref = guard == null ? void 0 : guard.threshold) != null ? _ref : 0) >= multiple) {
389
+ return false;
390
+ }
391
+ return true;
392
+ }
393
+ /**
394
+ * Whether this org has newly crossed the HARD spend ceiling — the one that
395
+ * refuses (AGL-2264), as distinct from {@link assistMarginBreach}'s review
396
+ * threshold, which only warns.
397
+ *
398
+ * It needs its own guard and its own announcement because the margin alert
399
+ * cannot carry this news. That alert speaks in WHOLE MULTIPLES of its $25
400
+ * threshold, so an org that climbs from $25 to the $40 ceiling is still at
401
+ * 1x and stays silent — staff would learn that the assistant had stopped
402
+ * answering for a customer only when someone complained. A ceiling that
403
+ * refuses quietly is the same defect as a ceiling that does not refuse.
404
+ *
405
+ * Once per org per month: crossing is a state, not an escalating figure, and
406
+ * the org is refused from here to the month boundary regardless of how far
407
+ * past it the recorded spend sits.
408
+ */ export function assistCeilingBreach(input) {
409
+ const { assistUsd, ceilingUsd, guard, month } = input;
410
+ if (ceilingUsd === null) return false;
411
+ if (!Number.isFinite(assistUsd) || !Number.isFinite(ceilingUsd)) return false;
412
+ if (ceilingUsd <= 0 || assistUsd < ceilingUsd) return false;
413
+ return (guard == null ? void 0 : guard.month) !== month;
414
+ }
415
+ /** The multiple {@link assistMarginBreach} would record. */ export function assistMarginMultiple(assistUsd, thresholdUsd) {
416
+ if (!Number.isFinite(assistUsd) || !Number.isFinite(thresholdUsd)) return 0;
417
+ if (thresholdUsd <= 0) return 0;
418
+ return Math.max(0, Math.floor(assistUsd / thresholdUsd));
419
+ }
420
+
421
+ //# sourceMappingURL=usage-budget.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/usage-budget.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// The ONE unit conversion between our provider bill and what a customer is\n// shown. Imported here so `publicOrgMonthlySpend` cannot grow a second copy of\n// it — see that function, and the module header of `assist-credits.ts`.\nimport { assistCreditsFromUsd } from './assist-credits'\n\n/**\n * Per-org USAGE BUDGETS, modelled on a Google Cloud billing budget (AGL-1528).\n *\n * ## the directive, 2026-08-18, verbatim\n *\n * \"*our usage metering, usage alerts, budgets for usage alerts, similar to\n * how google cloud charges*\"\n *\n * and, on the org-library storage decision the same day: bill from today\n * \"*but with overage protection + usage alerts, so customers don't get a\n * surprise bill*\".\n *\n * ## What a GCP billing budget actually is, and what this copies\n *\n * A GCP budget is **an amount plus a set of percentage alert rules**. It is\n * not a cap: crossing 100% of a budget stops nothing, it sends the email that\n * makes the bill stop being a surprise. Each rule fires **once per budget\n * period per rule** — the console shows the budget and its progress, and the\n * same rules push mail.\n *\n * This module is that shape, and only that shape:\n *\n * - an **amount** (`amountUsd`), chosen by the customer;\n * - **threshold rules** as percentages of the amount (default 50/90/100 —\n * GCP's own default trio);\n * - one alert per threshold per **month**, which is our budget period\n * because every meter underneath it (`orgs/{id}/usage/{month}`,\n * `assistUsage/{month}`, the counters' `YYYY-MM` fields) already resets\n * monthly. A budget period the meters do not share would silently compare\n * a month of spend against a quarter of budget.\n *\n * ## WHY THIS IS NOT THE STORAGE CAP, AND MUST NOT BECOME IT\n *\n * `utils/storage-overage.ts` owns the customer's optional **hard cap**: past\n * it uploads are refused. That is a wall, it is off by default, and it exists\n * because the requirement was for a control \"*by the end user*\".\n *\n * A budget is the OTHER half and the softer one — it never refuses anything.\n * The distinction is load-bearing in both directions: a budget that quietly\n * became a cap would take a customer's site down to save them $2 (the failure\n * mode AGL-1529 rejected on arrival), and a cap with no budget beneath it\n * means the only warning a customer gets is the refusal itself.\n *\n * ## WHY DOLLARS AND NOT PERCENT-OF-QUOTA\n *\n * `usage-alerts` has warned at 80%/100% of individual QUOTAS since AGL-276 —\n * sites, media storage, email sends, bandwidth. Those answer \"am I near a\n * band\". They cannot answer \"what will I owe\", which is the question a\n * metered customer actually has, and no sum of per-quota percentages produces\n * it: an org at 60% of four different bands may owe nothing at all, and an\n * org at 101% of one band may owe $40. Dollars are the customer's unit.\n *\n * ## THE SPEND FIGURE IS READ, NEVER RE-DERIVED\n *\n * `report-usage` already computes `billedCents` daily onto\n * `orgs/{orgId}/usage/{month}` — metered infra excess at cost x 1.3, plus the\n * data, API and contacts overages. That document is the invoice's own\n * arithmetic, and this module takes it verbatim.\n *\n * A second aggregation here is the specific mistake AGL-1371 exists about:\n * the console meter and the warning email each summed their own figures and\n * disagreed by up to `hostLimit`x. A budget alert quoting a number the\n * invoice will not show is worse than no budget alert, because it is believed.\n */\n\n/** GCP's own default budget alert rules, and the same three here. */\nexport const DEFAULT_BUDGET_THRESHOLD_PCTS: readonly number[] = [50, 90, 100]\n\n/** Bounds on the amount a self-serve org may set as its own budget. */\nexport const BUDGET_MIN_USD = 1\nexport const BUDGET_MAX_USD = 100_000\n\n/**\n * Bounds on a threshold rule, as a percentage of the amount.\n *\n * The ceiling is 200 rather than 100 because GCP allows rules above the\n * budget and they are the useful ones on a runaway: an org that set $20 and\n * is at $45 wants to hear about 200%, and a ladder that stops at 100 says\n * exactly as much at $45 as it did at $20.\n */\nexport const BUDGET_THRESHOLD_MIN_PCT = 1\nexport const BUDGET_THRESHOLD_MAX_PCT = 200\n/** At most this many rules, so one org cannot mail its admins 40 times. */\nexport const BUDGET_MAX_THRESHOLDS = 6\n\n/** The guard key this budget dedupes under, inside `orgs/{id}.usageAlerts`. */\nexport const BUDGET_GUARD_KEY = 'budget'\n\nexport interface UsageBudget {\n /** Whether the customer has set a budget at all. Absent by default. */\n budgetSet: boolean\n /** The amount in USD, or `null` when no budget is set. */\n amountUsd: number | null\n /**\n * Threshold rules as percentages, ascending and deduplicated. Always the\n * default trio when a budget exists but named no rules — a budget with an\n * empty rule set is a budget that cannot alert, which is the defect this\n * whole file exists to remove.\n */\n thresholdPcts: number[]\n}\n\n/**\n * Coerces whatever is stored (or posted) into a usable ascending rule set.\n *\n * FAILS TO THE DEFAULT, never to empty. Every rejection path here — a blank,\n * a string, a negative, a duplicate, an over-long list — lands on\n * {@link DEFAULT_BUDGET_THRESHOLD_PCTS} rather than on `[]`, because an empty\n * ladder is silence that reads as coverage.\n */\nexport function normalizeBudgetThresholds(\n input: unknown,\n): number[] {\n const list = Array.isArray(input) ? input : []\n const cleaned = [\n ...new Set(\n list\n .map((entry) => Math.round(Number(entry)))\n .filter(\n (pct) =>\n Number.isFinite(pct) &&\n pct >= BUDGET_THRESHOLD_MIN_PCT &&\n pct <= BUDGET_THRESHOLD_MAX_PCT,\n ),\n ),\n ].sort((a, b) => a - b)\n if (!cleaned.length) return [...DEFAULT_BUDGET_THRESHOLD_PCTS]\n return cleaned.slice(0, BUDGET_MAX_THRESHOLDS)\n}\n\n/**\n * The budget this org has in force, from its raw org document.\n *\n * `null` amount means no budget — deliberately `null` rather than `Infinity`,\n * matching `resolveStorageCap`: the value is serialised into the budget\n * route's JSON and `JSON.stringify(Infinity)` is `null` anyway, so one\n * spelling for \"no budget\" on both sides of the wire.\n *\n * An amount that is present but unusable (blank, negative, `NaN`) reads as NO\n * budget, which is the opposite of how `resolveStorageCap` treats a corrupt\n * CAP — and deliberately so. A corrupt cap must fall back to a low ceiling\n * because failing open there bills someone who asked not to be billed. A\n * budget refuses nothing, so the only cost of failing open is a missing\n * warning, whereas inventing an amount nobody typed produces alerts about a\n * number the customer never chose.\n */\nexport function resolveUsageBudget(\n org: Record<string, unknown> | null | undefined,\n): UsageBudget {\n const raw = (org as any)?.usageBudget\n const amount = Number(raw?.amountUsd)\n if (!raw || !Number.isFinite(amount) || amount <= 0) {\n return { budgetSet: false, amountUsd: null, thresholdPcts: [...DEFAULT_BUDGET_THRESHOLD_PCTS] }\n }\n return {\n budgetSet: true,\n amountUsd: amount,\n thresholdPcts: normalizeBudgetThresholds(raw?.thresholdPcts),\n }\n}\n\n/**\n * The HIGHEST rule this spend has crossed, or 0 for none.\n *\n * Highest rather than all-of-them because the dedupe guard stores one number\n * per key (the shape `usage-alerts` has used since AGL-276), and because an\n * org that goes from $0 to $80 against a $50 budget between two cron ticks\n * wants one email saying 160%, not three saying 50, 90 and 100. GCP behaves\n * the same way — the rules are notification points on one number, not a queue.\n */\nexport function budgetThresholdCrossed(\n spendUsd: number,\n budget: UsageBudget,\n): number {\n if (!budget.budgetSet || budget.amountUsd == null) return 0\n if (!Number.isFinite(budget.amountUsd) || budget.amountUsd <= 0) return 0\n if (!Number.isFinite(spendUsd) || spendUsd <= 0) return 0\n const pct = (spendUsd / budget.amountUsd) * 100\n let crossed = 0\n for (const rule of budget.thresholdPcts) {\n if (pct >= rule && rule > crossed) crossed = rule\n }\n return crossed\n}\n\n/** One entry of `orgs/{orgId}.usageAlerts` — the existing guard shape. */\nexport interface UsageAlertGuard {\n month?: string\n threshold?: number\n}\n\n/**\n * The rule to alert on RIGHT NOW, or 0 for silence.\n *\n * This is the whole of the idempotency requirement and it is one expression,\n * so a caller cannot implement half of it:\n *\n * - nothing crossed -> silent;\n * - crossed, but a guard from THIS month already recorded that rule or a\n * higher one -> silent. A cron that ticks hourly must not mail hourly.\n * - crossed, and the guard is from a PREVIOUS month -> alert. The budget\n * period rolled over, and a customer who exceeded last month's budget\n * must hear about this month's too.\n *\n * The comparison is `>=` on purpose: after alerting at 100 an org that climbs\n * to 200 alerts again (200 > 100), and an org that stays at 100 does not.\n */\nexport function budgetAlertDue(input: {\n spendUsd: number\n budget: UsageBudget\n guard: UsageAlertGuard | null | undefined\n month: string\n}): number {\n const { spendUsd, budget, guard, month } = input\n const crossed = budgetThresholdCrossed(spendUsd, budget)\n if (!crossed) return 0\n if (guard?.month === month && Number(guard?.threshold ?? 0) >= crossed) {\n return 0\n }\n return crossed\n}\n\n/**\n * What an org is spending this month, split by where it comes from.\n *\n * Every field is a figure some other module already owns; nothing here is\n * re-derived (see the header). The split exists because a budget alert that\n * says only \"$62\" invites a support ticket asking what the $62 was.\n */\nexport interface OrgSpendBreakdown {\n /**\n * Metered infrastructure + plan-priced overages, from the invoice's own\n * `billedCents`. This is the part that reaches a Stripe invoice.\n */\n meteredUsd: number\n /**\n * Aglyn Assist token spend for the month, at the serving model's list\n * rates (`orgs/{id}/assistUsage/{month}.estCostUsd`).\n *\n * ALWAYS REPORTED, and counted toward the budget only when\n * {@link billsAssistTokens} says this month invoices for it — which today\n * it does not, because Assist is a plan ENTITLEMENT (`aiAssist: true`) with\n * no per-token price anywhere in the platform. Adding it to a customer's\n * \"you will owe\" figure would be a surprise bill invented by a\n * notification, which is precisely the thing this feature exists to stop.\n *\n * It is nonetheless carried here rather than left out, for two reasons that\n * both bite: the day Assist is priced this is a one-line switch instead of\n * a new pipeline, and — live today — {@link assistMarginBreach} reads this\n * same number as OUR cost, which is the margin-guard half of the job.\n */\n assistUsd: number\n /** What counts against the budget: metered, plus assist when it bills. */\n totalUsd: number\n /** Whether `assistUsd` entered `totalUsd`. */\n assistBilled: boolean\n /**\n * FALSE when no rollup exists for this month yet, so `meteredUsd` is 0\n * because nothing has been computed rather than because nothing was spent.\n *\n * The distinction is the difference between a quiet budget and a broken\n * one, and it is not theoretical: `usage-alerts` reads the LATEST usage\n * rollup by `computedAt`, which on the first days of a month is still LAST\n * month's document. Alerting from that would compare August's budget\n * against July's spend; suppressing the alert without recording why would\n * make a budget that never fires look like a budget that never needed to.\n */\n meteredFresh: boolean\n}\n\n/**\n * Whether `month`'s invoice charges for Assist tokens.\n *\n * Same START-MONTH shape and the same fail-closed posture as\n * `billsOrgLibraryStorage`, and for the identical reason: a boolean flipped\n * mid-period would retroactively bill a re-run of an earlier month at that\n * month's accumulated tokens. A start month cannot reach backwards.\n *\n * `BILL_ASSIST_TOKENS_FROM=YYYY-MM`. Anything else — `true`, `1`, a date, a\n * typo — bills nothing.\n */\nexport function billsAssistTokens(\n month: string,\n configuredStart: string | null | undefined,\n): boolean {\n const start = String(configuredStart ?? '').trim()\n if (!/^\\d{4}-\\d{2}$/.test(start)) return false\n if (!/^\\d{4}-\\d{2}$/.test(month)) return false\n return month >= start\n}\n\n/**\n * Builds the month's spend from figures already read elsewhere.\n *\n * `rollupMonth` is compared to `month` rather than trusted: see\n * {@link OrgSpendBreakdown.meteredFresh}.\n */\nexport function orgMonthlySpend(input: {\n month: string\n /** `billedCents` off the latest `orgs/{id}/usage/*` document. */\n rollupBilledCents: number | null | undefined\n /** The `month` field of that same document. */\n rollupMonth: string | null | undefined\n /** `estCostUsd` off `orgs/{id}/assistUsage/{month}`. */\n assistEstCostUsd: number | null | undefined\n /** `BILL_ASSIST_TOKENS_FROM`, verbatim. */\n assistBilledFrom?: string | null\n}): OrgSpendBreakdown {\n const { month, rollupBilledCents, rollupMonth, assistEstCostUsd } = input\n const meteredFresh = Boolean(rollupMonth) && rollupMonth === month\n const cents = Number(rollupBilledCents)\n const meteredUsd =\n meteredFresh && Number.isFinite(cents) && cents > 0 ? cents / 100 : 0\n const assistRaw = Number(assistEstCostUsd)\n const assistUsd = Number.isFinite(assistRaw) && assistRaw > 0 ? assistRaw : 0\n const assistBilled = billsAssistTokens(month, input.assistBilledFrom)\n return {\n meteredUsd,\n assistUsd,\n assistBilled,\n totalUsd: meteredUsd + (assistBilled ? assistUsd : 0),\n meteredFresh,\n }\n}\n\n/**\n * The customer-facing half of {@link OrgSpendBreakdown} — dollars the customer\n * is charged, and Assist consumption in CREDITS.\n */\nexport interface PublicOrgSpend {\n /** Metered infrastructure and plan overages, from the invoice's own figure. */\n meteredUsd: number\n /**\n * Assist consumption this month, in credits. The stored figure is\n * `estCostUsd` — our provider bill — and a credit is the unit that expresses\n * it without publishing it.\n */\n assistCredits: number\n /** What counts against the budget. */\n totalUsd: number\n /** Whether Assist consumption entered `totalUsd`. */\n assistBilled: boolean\n meteredFresh: boolean\n}\n\n/**\n * The projection that crosses the boundary to a customer's browser.\n *\n * `OrgSpendBreakdown.assistUsd` is `orgs/{id}/assistUsage/{month}.estCostUsd`\n * verbatim — our provider bill at the serving model's list rates, not a price\n * and not a rate the platform publishes. Serving it to an org-scoped caller\n * puts our model choice, our per-token rates and our margin on a billing page,\n * which is the boundary `publicAssistCredits` and `publicAssistQuota` already\n * exist to hold on the assist routes. This is the same boundary, one route\n * over, and it was the last place the dollar figure still crossed it.\n *\n * `assistCreditsFromUsd` is the ONE conversion between the two units, so this\n * cannot come to disagree with the credits meter about the same month's\n * consumption.\n *\n * `meteredUsd` and `totalUsd` stay dollars: `billedCents` is what an invoice\n * charges, which is the customer's own money and the whole subject of a budget.\n *\n * The two units are deliberately not summed. A budget is a dollar rule, credits\n * are not dollars, and folding one into the other would republish the cost the\n * conversion just removed.\n */\nexport function publicOrgMonthlySpend(spend: OrgSpendBreakdown): PublicOrgSpend {\n return {\n meteredUsd: spend.meteredUsd,\n assistCredits: assistCreditsFromUsd(spend.assistUsd),\n totalUsd: spend.totalUsd,\n assistBilled: spend.assistBilled,\n meteredFresh: spend.meteredFresh,\n }\n}\n\n/**\n * The MARGIN GUARD (the other half of the ask, and the live half).\n *\n * A customer budget protects the customer. This protects us, from the one\n * meter on the platform whose unit cost is real money paid to a third party\n * and whose ceiling is a message count rather than a dollar figure:\n * `assistEntitledMonthlyLimit` caps an entitled org at 1,000 MESSAGES a\n * month, and a thousand long, cache-cold Opus-class exchanges is a\n * three-figure bill against a subscription that did not move.\n *\n * So one org's Assist COGS crossing this threshold notifies STAFF, not the\n * customer — the customer is not being charged and has done nothing wrong.\n * Returns the threshold crossed, or 0.\n *\n * `ASSIST_ORG_MONTHLY_COGS_ALERT_USD` overrides the default and FAILS TO THE\n * DEFAULT: a blank or malformed value that disabled the guard would be\n * another alert that cannot fire.\n */\nexport const ASSIST_ORG_MONTHLY_COGS_ALERT_USD_DEFAULT = 25\n\nexport function assistCogsAlertThresholdUsd(\n configured?: string | null,\n): number {\n const parsed = Number(String(configured ?? '').trim())\n if (!Number.isFinite(parsed) || parsed <= 0) {\n return ASSIST_ORG_MONTHLY_COGS_ALERT_USD_DEFAULT\n }\n return parsed\n}\n\n/**\n * The repo default spend ceiling: **$40 per org per month** (AGL-2264).\n *\n * The number is arithmetic rather than pricing. After AGL-2441 the\n * 1,000-message entitled guard bounds roughly $28/org/month of worst-case\n * spend at Sonnet, and the staff margin alert already fires at $25. $40\n * therefore sits ABOVE anything the message cap can produce at the current\n * model, so it changes no charged amount and no plan's behaviour — it is a\n * ceiling on OUR cost, not a customer price, which is why it is outside the\n * Sept-1 pricing lock. It binds only when an assumption behind that\n * arithmetic has moved: an `ASSIST_MODEL` swap to an Opus-class tier, a\n * longer prompt, or a caller finding another way to inflate input. That is\n * the failure it exists for.\n *\n * It ships as a DEFAULT rather than as an environment variable someone must\n * remember, because an unset ceiling is the fail-open this issue was opened\n * about: a fresh deployment and a self-hoster both inherit a sane bound\n * without knowing the variable exists.\n *\n * The free tier gets no separate figure and needs none — its 10 messages a\n * UTC day bound it at roughly $0.28/day, so this is a backstop it cannot\n * reach rather than a cap it runs into.\n *\n * ⚠️ It applies only to an org whose plan sells NO assist band. Agency and\n * Enterprise include more assist than $40 of spend, so the meter's\n * `assistMonthlyCeilingUsd` keeps this default off every plan that sells a\n * band — see there for which figure binds when.\n */\nexport const ASSIST_ORG_MONTHLY_COGS_LIMIT_DEFAULT_USD = 40\n\n/**\n * The per-org monthly PROVIDER-SPEND ceiling in USD — the dollar half of\n * the cap (AGL-2264), from `ASSIST_ORG_MONTHLY_COGS_LIMIT_USD` as the caller\n * read it. Defaults to {@link ASSIST_ORG_MONTHLY_COGS_LIMIT_DEFAULT_USD};\n * `off` removes it.\n *\n * Pure over the configured value, like {@link assistCogsAlertThresholdUsd}:\n * the meter that refuses at the ceiling and the cron that announces the\n * refusal read the one variable and must agree on what it means.\n *\n * The meter's message caps bound spend only through an assumed cost per\n * message, and that assumption is exactly what drifts: `ASSIST_MODEL` is an\n * env override, prompts grow, and a client controls how much history it\n * posts. The ceiling is measured against the real figure instead: the\n * running `estCostUsd` on the month's assist usage document, which the meter\n * increments at the SERVING model's rates. So it bounds the actual bill\n * rather than a forecast of it.\n *\n * The refusal is deliberately the same shape as the message refusal (a\n * reservation that did not move the counter), so an org at the ceiling\n * spends nothing at all rather than spending less. It refuses — it does\n * NOT quietly swap to a cheaper model. A silent quality drop is worse than\n * an honest stop, because nobody can tell it happened.\n *\n * ⚠️ **Fails to the DEFAULT, never to “no ceiling”.** An empty, negative or\n * unparseable value reads as unconfigured and takes the repo default, so a\n * typo cannot reopen the fail-open this exists to close. It cannot become a\n * ceiling of `$0` either — a value of zero is not “refuse everyone”, it is\n * “not a number I will honour” — because an outage across every workspace\n * would be worse than the overspend being guarded.\n *\n * Removing the ceiling therefore takes a WORD rather than a number:\n * `ASSIST_ORG_MONTHLY_COGS_LIMIT_USD=off`. A deployment paying its own\n * provider bill may genuinely want none, and that is a decision someone\n * should have to write down rather than reach by mistyping a digit.\n */\nexport function assistOrgMonthlyCostLimitUsd(\n configured?: string | null,\n): number | null {\n const operator = assistOperatorCeilingUsd(configured)\n return operator === undefined\n ? ASSIST_ORG_MONTHLY_COGS_LIMIT_DEFAULT_USD\n : operator\n}\n\n/**\n * The operator's ceiling exactly as CONFIGURED — three states, not two:\n * a number, `null` for the word `off`, and `undefined` for unset or\n * unparseable.\n *\n * `assistOrgMonthlyCostLimitUsd` collapses `undefined` onto the repo default\n * and is the reading every existing caller wants. The composition with a\n * plan's own band needs the third state, because \"the operator wrote a\n * number\" and \"nobody configured anything\" have to bind differently against a\n * band that was sold: an operator's figure is a decision, and the repo\n * default is a backstop for orgs that have no band of their own.\n */\nexport function assistOperatorCeilingUsd(\n configured?: string | null,\n): number | null | undefined {\n const raw = String(configured ?? '').trim()\n if (raw === '') return undefined\n if (raw.toLowerCase() === 'off') return null\n const parsed = Number(raw)\n return Number.isFinite(parsed) && parsed > 0 ? parsed : undefined\n}\n\n/**\n * Whether this org's Assist spend has newly crossed the margin threshold.\n *\n * Dedupes through the same guard shape and the same month semantics as the\n * customer budget, under its own key, so a staff alert and a customer alert\n * can never suppress one another.\n */\nexport function assistMarginBreach(input: {\n assistUsd: number\n thresholdUsd: number\n guard: UsageAlertGuard | null | undefined\n month: string\n}): boolean {\n const { assistUsd, thresholdUsd, guard, month } = input\n if (!Number.isFinite(assistUsd) || !Number.isFinite(thresholdUsd)) return false\n if (thresholdUsd <= 0 || assistUsd < thresholdUsd) return false\n // The guard records how many WHOLE multiples of the threshold have been\n // announced, so an org at 1x is announced once and an org that climbs to 2x\n // is announced again — an escalating cost must not go quiet because it\n // already spoke.\n const multiple = Math.floor(assistUsd / thresholdUsd)\n if (guard?.month === month && Number(guard?.threshold ?? 0) >= multiple) {\n return false\n }\n return true\n}\n\n/**\n * Whether this org has newly crossed the HARD spend ceiling — the one that\n * refuses (AGL-2264), as distinct from {@link assistMarginBreach}'s review\n * threshold, which only warns.\n *\n * It needs its own guard and its own announcement because the margin alert\n * cannot carry this news. That alert speaks in WHOLE MULTIPLES of its $25\n * threshold, so an org that climbs from $25 to the $40 ceiling is still at\n * 1x and stays silent — staff would learn that the assistant had stopped\n * answering for a customer only when someone complained. A ceiling that\n * refuses quietly is the same defect as a ceiling that does not refuse.\n *\n * Once per org per month: crossing is a state, not an escalating figure, and\n * the org is refused from here to the month boundary regardless of how far\n * past it the recorded spend sits.\n */\nexport function assistCeilingBreach(input: {\n assistUsd: number\n ceilingUsd: number | null\n guard: UsageAlertGuard | null | undefined\n month: string\n}): boolean {\n const { assistUsd, ceilingUsd, guard, month } = input\n if (ceilingUsd === null) return false\n if (!Number.isFinite(assistUsd) || !Number.isFinite(ceilingUsd)) return false\n if (ceilingUsd <= 0 || assistUsd < ceilingUsd) return false\n return guard?.month !== month\n}\n\n/** The multiple {@link assistMarginBreach} would record. */\nexport function assistMarginMultiple(\n assistUsd: number,\n thresholdUsd: number,\n): number {\n if (!Number.isFinite(assistUsd) || !Number.isFinite(thresholdUsd)) return 0\n if (thresholdUsd <= 0) return 0\n return Math.max(0, Math.floor(assistUsd / thresholdUsd))\n}\n"],"names":["assistCreditsFromUsd","DEFAULT_BUDGET_THRESHOLD_PCTS","BUDGET_MIN_USD","BUDGET_MAX_USD","BUDGET_THRESHOLD_MIN_PCT","BUDGET_THRESHOLD_MAX_PCT","BUDGET_MAX_THRESHOLDS","BUDGET_GUARD_KEY","normalizeBudgetThresholds","input","list","Array","isArray","cleaned","Set","map","entry","Math","round","Number","filter","pct","isFinite","sort","a","b","length","slice","resolveUsageBudget","org","raw","usageBudget","amount","amountUsd","budgetSet","thresholdPcts","budgetThresholdCrossed","spendUsd","budget","crossed","rule","budgetAlertDue","guard","month","threshold","billsAssistTokens","configuredStart","start","String","trim","test","orgMonthlySpend","rollupBilledCents","rollupMonth","assistEstCostUsd","meteredFresh","Boolean","cents","meteredUsd","assistRaw","assistUsd","assistBilled","assistBilledFrom","totalUsd","publicOrgMonthlySpend","spend","assistCredits","ASSIST_ORG_MONTHLY_COGS_ALERT_USD_DEFAULT","assistCogsAlertThresholdUsd","configured","parsed","ASSIST_ORG_MONTHLY_COGS_LIMIT_DEFAULT_USD","assistOrgMonthlyCostLimitUsd","operator","assistOperatorCeilingUsd","undefined","toLowerCase","assistMarginBreach","thresholdUsd","multiple","floor","assistCeilingBreach","ceilingUsd","assistMarginMultiple","max"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED,2EAA2E;AAC3E,+EAA+E;AAC/E,wEAAwE;AACxE,SAASA,oBAAoB,QAAQ,sBAAkB;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+DC,GAED,mEAAmE,GACnE,OAAO,MAAMC,gCAAmD;IAAC;IAAI;IAAI;CAAI,CAAA;AAE7E,qEAAqE,GACrE,OAAO,MAAMC,iBAAiB,EAAC;AAC/B,OAAO,MAAMC,iBAAiB,OAAO;AAErC;;;;;;;CAOC,GACD,OAAO,MAAMC,2BAA2B,EAAC;AACzC,OAAO,MAAMC,2BAA2B,IAAG;AAC3C,yEAAyE,GACzE,OAAO,MAAMC,wBAAwB,EAAC;AAEtC,6EAA6E,GAC7E,OAAO,MAAMC,mBAAmB,SAAQ;AAgBxC;;;;;;;CAOC,GACD,OAAO,SAASC,0BACdC,KAAc;IAEd,MAAMC,OAAOC,MAAMC,OAAO,CAACH,SAASA,QAAQ,EAAE;IAC9C,MAAMI,UAAU;WACX,IAAIC,IACLJ,KACGK,GAAG,CAAC,CAACC,QAAUC,KAAKC,KAAK,CAACC,OAAOH,SACjCI,MAAM,CACL,CAACC,MACCF,OAAOG,QAAQ,CAACD,QAChBA,OAAOjB,4BACPiB,OAAOhB;KAGhB,CAACkB,IAAI,CAAC,CAACC,GAAGC,IAAMD,IAAIC;IACrB,IAAI,CAACZ,QAAQa,MAAM,EAAE,OAAO;WAAIzB;KAA8B;IAC9D,OAAOY,QAAQc,KAAK,CAAC,GAAGrB;AAC1B;AAEA;;;;;;;;;;;;;;;CAeC,GACD,OAAO,SAASsB,mBACdC,GAA+C;IAE/C,MAAMC,MAAOD,uBAAD,AAACA,IAAaE,WAAW;IACrC,MAAMC,SAASb,OAAOW,uBAAAA,IAAKG,SAAS;IACpC,IAAI,CAACH,OAAO,CAACX,OAAOG,QAAQ,CAACU,WAAWA,UAAU,GAAG;QACnD,OAAO;YAAEE,WAAW;YAAOD,WAAW;YAAME,eAAe;mBAAIlC;aAA8B;QAAC;IAChG;IACA,OAAO;QACLiC,WAAW;QACXD,WAAWD;QACXG,eAAe3B,0BAA0BsB,uBAAAA,IAAKK,aAAa;IAC7D;AACF;AAEA;;;;;;;;CAQC,GACD,OAAO,SAASC,uBACdC,QAAgB,EAChBC,MAAmB;IAEnB,IAAI,CAACA,OAAOJ,SAAS,IAAII,OAAOL,SAAS,IAAI,MAAM,OAAO;IAC1D,IAAI,CAACd,OAAOG,QAAQ,CAACgB,OAAOL,SAAS,KAAKK,OAAOL,SAAS,IAAI,GAAG,OAAO;IACxE,IAAI,CAACd,OAAOG,QAAQ,CAACe,aAAaA,YAAY,GAAG,OAAO;IACxD,MAAMhB,MAAM,AAACgB,WAAWC,OAAOL,SAAS,GAAI;IAC5C,IAAIM,UAAU;IACd,KAAK,MAAMC,QAAQF,OAAOH,aAAa,CAAE;QACvC,IAAId,OAAOmB,QAAQA,OAAOD,SAASA,UAAUC;IAC/C;IACA,OAAOD;AACT;AAQA;;;;;;;;;;;;;;;CAeC,GACD,OAAO,SAASE,eAAehC,KAK9B;;IACC,MAAM,EAAE4B,QAAQ,EAAEC,MAAM,EAAEI,KAAK,EAAEC,KAAK,EAAE,GAAGlC;IAC3C,MAAM8B,UAAUH,uBAAuBC,UAAUC;IACjD,IAAI,CAACC,SAAS,OAAO;IACrB,IAAIG,CAAAA,yBAAAA,MAAOC,KAAK,MAAKA,SAASxB,eAAOuB,yBAAAA,MAAOE,SAAS,mBAAI,MAAML,SAAS;QACtE,OAAO;IACT;IACA,OAAOA;AACT;AAkDA;;;;;;;;;;CAUC,GACD,OAAO,SAASM,kBACdF,KAAa,EACbG,eAA0C;IAE1C,MAAMC,QAAQC,OAAOF,0BAAAA,kBAAmB,IAAIG,IAAI;IAChD,IAAI,CAAC,gBAAgBC,IAAI,CAACH,QAAQ,OAAO;IACzC,IAAI,CAAC,gBAAgBG,IAAI,CAACP,QAAQ,OAAO;IACzC,OAAOA,SAASI;AAClB;AAEA;;;;;CAKC,GACD,OAAO,SAASI,gBAAgB1C,KAU/B;IACC,MAAM,EAAEkC,KAAK,EAAES,iBAAiB,EAAEC,WAAW,EAAEC,gBAAgB,EAAE,GAAG7C;IACpE,MAAM8C,eAAeC,QAAQH,gBAAgBA,gBAAgBV;IAC7D,MAAMc,QAAQtC,OAAOiC;IACrB,MAAMM,aACJH,gBAAgBpC,OAAOG,QAAQ,CAACmC,UAAUA,QAAQ,IAAIA,QAAQ,MAAM;IACtE,MAAME,YAAYxC,OAAOmC;IACzB,MAAMM,YAAYzC,OAAOG,QAAQ,CAACqC,cAAcA,YAAY,IAAIA,YAAY;IAC5E,MAAME,eAAehB,kBAAkBF,OAAOlC,MAAMqD,gBAAgB;IACpE,OAAO;QACLJ;QACAE;QACAC;QACAE,UAAUL,aAAcG,CAAAA,eAAeD,YAAY,CAAA;QACnDL;IACF;AACF;AAsBA;;;;;;;;;;;;;;;;;;;;;CAqBC,GACD,OAAO,SAASS,sBAAsBC,KAAwB;IAC5D,OAAO;QACLP,YAAYO,MAAMP,UAAU;QAC5BQ,eAAelE,qBAAqBiE,MAAML,SAAS;QACnDG,UAAUE,MAAMF,QAAQ;QACxBF,cAAcI,MAAMJ,YAAY;QAChCN,cAAcU,MAAMV,YAAY;IAClC;AACF;AAEA;;;;;;;;;;;;;;;;;CAiBC,GACD,OAAO,MAAMY,4CAA4C,GAAE;AAE3D,OAAO,SAASC,4BACdC,UAA0B;IAE1B,MAAMC,SAASnD,OAAO6B,OAAOqB,qBAAAA,aAAc,IAAIpB,IAAI;IACnD,IAAI,CAAC9B,OAAOG,QAAQ,CAACgD,WAAWA,UAAU,GAAG;QAC3C,OAAOH;IACT;IACA,OAAOG;AACT;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BC,GACD,OAAO,MAAMC,4CAA4C,GAAE;AAE3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCC,GACD,OAAO,SAASC,6BACdH,UAA0B;IAE1B,MAAMI,WAAWC,yBAAyBL;IAC1C,OAAOI,aAAaE,YAChBJ,4CACAE;AACN;AAEA;;;;;;;;;;;CAWC,GACD,OAAO,SAASC,yBACdL,UAA0B;IAE1B,MAAMvC,MAAMkB,OAAOqB,qBAAAA,aAAc,IAAIpB,IAAI;IACzC,IAAInB,QAAQ,IAAI,OAAO6C;IACvB,IAAI7C,IAAI8C,WAAW,OAAO,OAAO,OAAO;IACxC,MAAMN,SAASnD,OAAOW;IACtB,OAAOX,OAAOG,QAAQ,CAACgD,WAAWA,SAAS,IAAIA,SAASK;AAC1D;AAEA;;;;;;CAMC,GACD,OAAO,SAASE,mBAAmBpE,KAKlC;;IACC,MAAM,EAAEmD,SAAS,EAAEkB,YAAY,EAAEpC,KAAK,EAAEC,KAAK,EAAE,GAAGlC;IAClD,IAAI,CAACU,OAAOG,QAAQ,CAACsC,cAAc,CAACzC,OAAOG,QAAQ,CAACwD,eAAe,OAAO;IAC1E,IAAIA,gBAAgB,KAAKlB,YAAYkB,cAAc,OAAO;IAC1D,wEAAwE;IACxE,4EAA4E;IAC5E,uEAAuE;IACvE,iBAAiB;IACjB,MAAMC,WAAW9D,KAAK+D,KAAK,CAACpB,YAAYkB;IACxC,IAAIpC,CAAAA,yBAAAA,MAAOC,KAAK,MAAKA,SAASxB,eAAOuB,yBAAAA,MAAOE,SAAS,mBAAI,MAAMmC,UAAU;QACvE,OAAO;IACT;IACA,OAAO;AACT;AAEA;;;;;;;;;;;;;;;CAeC,GACD,OAAO,SAASE,oBAAoBxE,KAKnC;IACC,MAAM,EAAEmD,SAAS,EAAEsB,UAAU,EAAExC,KAAK,EAAEC,KAAK,EAAE,GAAGlC;IAChD,IAAIyE,eAAe,MAAM,OAAO;IAChC,IAAI,CAAC/D,OAAOG,QAAQ,CAACsC,cAAc,CAACzC,OAAOG,QAAQ,CAAC4D,aAAa,OAAO;IACxE,IAAIA,cAAc,KAAKtB,YAAYsB,YAAY,OAAO;IACtD,OAAOxC,CAAAA,yBAAAA,MAAOC,KAAK,MAAKA;AAC1B;AAEA,0DAA0D,GAC1D,OAAO,SAASwC,qBACdvB,SAAiB,EACjBkB,YAAoB;IAEpB,IAAI,CAAC3D,OAAOG,QAAQ,CAACsC,cAAc,CAACzC,OAAOG,QAAQ,CAACwD,eAAe,OAAO;IAC1E,IAAIA,gBAAgB,GAAG,OAAO;IAC9B,OAAO7D,KAAKmE,GAAG,CAAC,GAAGnE,KAAK+D,KAAK,CAACpB,YAAYkB;AAC5C"}
@@ -0,0 +1,96 @@
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
+ import { type HostFunction } from './functions';
18
+ /**
19
+ * Host variables (Component Builder, AGL-91): typed values authored in the
20
+ * console and bound into component text props with `{{name}}` — and, since
21
+ * AGL-93, function results with `{{fn:name(args)}}`. Pure data module
22
+ * shared by the console editor UI and the tenant compose pipeline.
23
+ */
24
+ /** Types from the mockup's Edit Variable dialog ("Function" lands with AGL-92). */
25
+ export type HostVariableType = 'date' | 'time' | 'text' | 'number' | 'boolean' | 'dictionary' | 'collection';
26
+ export declare const HOST_VARIABLE_TYPE_LABELS: Record<HostVariableType, string>;
27
+ /** `hosts/{hostId}/variables/{id}` doc. */
28
+ export interface HostVariable {
29
+ /** Binding identifier — `{{name}}`. */
30
+ name: string;
31
+ type: HostVariableType;
32
+ /** Persisted as a string; formatted per type at resolve time. */
33
+ value?: string;
34
+ /**
35
+ * Workflow (by name) whose result becomes this variable's value at
36
+ * compose time (AGL-129); `value` acts as the fallback when the
37
+ * workflow is missing or fails.
38
+ */
39
+ workflowName?: string;
40
+ /** Computed source by workflow doc id (AGL-261); wins over the name. */
41
+ workflowId?: string;
42
+ }
43
+ export declare const VARIABLE_NAME_PATTERN: RegExp;
44
+ /** Human-readable rendering of a variable's value for text interpolation. */
45
+ export declare function formatVariableValue(variable: HostVariable): string;
46
+ /** A function definition lookup keyed by function name (AGL-93). */
47
+ export type HostFunctionLookup = Record<string, HostFunction>;
48
+ /**
49
+ * Replaces binding tokens with values (AGL-91/93/185/194): id forms
50
+ * `{{var:id}}` / `{{fn:id(args)}}` resolve through id-keyed lookup maps.
51
+ * Function args are expressions over literals and variable NAMES (the
52
+ * scope keys by each doc's name). Unknown function refs keep the literal
53
+ * token; unknown variable ids render empty; bare `{{name}}` strings are
54
+ * plain text since the legacy fallback retired.
55
+ */
56
+ export declare function resolveBindings(text: string, variables: Record<string, HostVariable>, functions?: HostFunctionLookup): string;
57
+ /** Fast pre-check so binding-free content skips the walk entirely. */
58
+ export declare function hasBindings(text: string): boolean;
59
+ /**
60
+ * Applies `resolveBindings` to every string prop across a normalized nodes
61
+ * map (mutating a shallow copy). String props only — objects/arrays (sx,
62
+ * option lists) pass through untouched; unsafe values in hrefs remain
63
+ * covered by the render-time SAFE_HREF/sanitizer checks.
64
+ */
65
+ /** Component id of the interactive function widget (plugins-mui). */
66
+ export declare const FUNCTION_WIDGET_COMPONENT_ID = "functionWidget";
67
+ /**
68
+ * Component id of the Calculator container (plugins-mui, AGL-3202): the
69
+ * other element that runs a function in the visitor's browser, and so the
70
+ * other one compose hands a definition to.
71
+ */
72
+ export declare const FUNCTION_SCOPE_COMPONENT_ID = "functionScope";
73
+ /**
74
+ * The site variables ONE function reads, by name (AGL-3202).
75
+ *
76
+ * A widget runs in the visitor's browser, so whatever it may read has to be
77
+ * on the page. Handing it the whole variable list would publish every value
78
+ * a site holds to every page that places a calculator; this hands over the
79
+ * names the function's own expressions use and nothing else. A name the
80
+ * function declares itself is not a variable read — its parameter or local
81
+ * shadows the variable — so it is not shipped either.
82
+ */
83
+ export declare function functionGlobals(definition: HostFunction, variables: Record<string, HostVariable>): Record<string, number | string | boolean>;
84
+ /**
85
+ * Injects each function widget's definition into its props at compose time
86
+ * (AGL-93): the client runs the shared evaluator locally, so the published
87
+ * page carries the definition instead of calling home. Unknown names leave
88
+ * the node untouched (the widget renders its editor placeholder).
89
+ *
90
+ * With `variables`, the site variables that function reads ride along as
91
+ * `globals` (AGL-3202) — see {@link functionGlobals} for why it is only
92
+ * those. The key is omitted when the function reads none, so a page built
93
+ * before this existed serializes exactly as it did.
94
+ */
95
+ export declare function attachFunctionDefinitions<T extends Record<string, any>>(nodes: T, functions: HostFunctionLookup, variables?: Record<string, HostVariable>): T;
96
+ export declare function resolveNodesBindings<T extends Record<string, any>>(nodes: T, variables: Record<string, HostVariable>, functions?: HostFunctionLookup): T;