@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,238 @@
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
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
+ /**
18
+ * Where the commercial keys live now that they are off the org doc (AGL-1028).
19
+ *
20
+ * `orgs/{orgId}` has to stay readable by any member — it carries `plan` and
21
+ * `entitlements`, which every console surface gates features on, so denying it
22
+ * locks a site collaborator out of the site they were invited to. Firestore has
23
+ * no field-level reads, so the only way to narrow "readable" is to move the
24
+ * fields somewhere with its own rule. This subcollection is that somewhere, and
25
+ * it is gated on `canManageOrg()`.
26
+ *
27
+ * What did NOT move, and why. AGL-1028 originally listed `seatAddons` and all
28
+ * of `subscription` as movers; measuring the readers changed that:
29
+ *
30
+ * - `plan` / `entitlements` — the whole reason the org doc stays readable.
31
+ * - `seatAddons` — NOT a commercial secret, an ENTITLEMENT INPUT.
32
+ * `resolveOrgEntitlements` stacks it on top of the plan: `seatAddons.hosts`
33
+ * raises `hostLimit`, `posRegisters` raises `posRegisters`, `eventCalendar`
34
+ * switches a feature on. It resolves at 29 call sites including the tenant
35
+ * runtime and non-manager console components — none of which can read a
36
+ * manager-gated doc. Moving it would silently drop every paying org to base
37
+ * plan limits for exactly the users the org doc stays readable for.
38
+ * - `subscription.status`, as the derived `billingStatus` mirror — same reason.
39
+ * `resolveEffectivePlan` downgrades a paid plan to free on a dead
40
+ * subscription, and `resolvePurchasedAddons` stops counting add-ons on one.
41
+ * Entitlement resolution therefore needs the status word, so the status word
42
+ * cannot be manager-gated. The rest of `subscription` — price ids, amounts,
43
+ * interval, period end, custom enterprise pricing — moves.
44
+ * - `suspendedAt` / `suspendedReason` — the tenant runtime reads suspension on
45
+ * EVERY published page render, off an org doc it already fetches for plan and
46
+ * branding. Moving it would add a Firestore read to the hot path AGL-1152 is
47
+ * trying to shrink, and would hide nothing: the org doc stays member-readable
48
+ * regardless. "Your sites are offline" is also something every member needs
49
+ * to see, unlike a Stripe customer id.
50
+ *
51
+ * So what a scoped collaborator can still see is their plan, their capacity and
52
+ * a status word — the things they need — and what they lose is the Stripe
53
+ * customer id, price ids, amounts, billing interval, renewal date and any
54
+ * negotiated enterprise rate.
55
+ */ export const ORG_BILLING_SUBCOLLECTION = 'billing';
56
+ /**
57
+ * Single document id, not one doc per concern. The reads are always "all of
58
+ * it" (the billing page, the webhook, the staff MRR roll-up), so splitting it
59
+ * would only buy extra round trips.
60
+ */ export const ORG_BILLING_DOC_ID = 'stripe';
61
+ /**
62
+ * Reverse index `stripeCustomers/{stripeCustomerId} -> { orgId }`, written by
63
+ * the webhook alongside the billing doc.
64
+ *
65
+ * It exists because the webhook has to answer "which org is this Stripe
66
+ * customer?" on `invoice.payment_failed`, and it did that with
67
+ * `.where('stripeCustomerId', '==', …)` on the orgs collection. Once the field
68
+ * moves into a subcollection that query cannot work: the alternative is a
69
+ * collection-group query, which needs a collection-group index that the
70
+ * emulator will never ask for and production will (AGL-1028). A mapping doc is
71
+ * an O(1) `get`, needs no index, and stops the webhook scanning `orgs` at all.
72
+ *
73
+ * Admin-SDK only — nothing client-side has any business reading it.
74
+ */ export const STRIPE_CUSTOMER_INDEX_COLLECTION = 'stripeCustomers';
75
+ /**
76
+ * The keys that moved off `orgs/{orgId}` and into the billing doc.
77
+ *
78
+ * `seatAddons` is deliberately NOT here — see the note above; it is an
79
+ * entitlement input, not a commercial secret.
80
+ */ export const ORG_BILLING_MOVED_KEYS = [
81
+ 'stripeCustomerId',
82
+ 'subscription'
83
+ ];
84
+ /**
85
+ * The TEST-mode Stripe customer id, stored beside the live one (AGL-2486).
86
+ *
87
+ * `stripeCustomerId` held ONE id with no notion of Stripe livemode, so an org
88
+ * that had been through live checkout could never be exercised in test mode
89
+ * and vice versa: every billing call answered
90
+ *
91
+ * No such customer: 'cus_…'; a similar object exists in live mode, but a
92
+ * test mode key was used to make this request.
93
+ *
94
+ * — a raw 502 out of `/api/billing/checkout`, `/invoices` and `/addons`. For a
95
+ * team running both modes against ONE Firestore that is permanent, and it made
96
+ * the test-mode path we need before September 1 unusable on any real org.
97
+ *
98
+ * Worse than the 502, and the reason this is a stored-shape change rather than
99
+ * a better error message: a test-mode run that COMPLETED would write its test
100
+ * customer into the single slot and destroy the live linkage — silently, with
101
+ * every subsequent live invoice scattering onto a customer the Billing page no
102
+ * longer queries.
103
+ *
104
+ * ## Why a second field and not a mode-keyed map
105
+ *
106
+ * The live id stays at `stripeCustomerId`, untouched. That makes the migration
107
+ * EMPTY — every value production holds today was written by a `sk_live_`
108
+ * deployment and is already in the right slot — and it makes the change a
109
+ * NO-OP in live mode by construction: the live path reads the same field name
110
+ * it always read. Only test mode, which is 100% broken today, behaves
111
+ * differently. A `{live,test}` map would have required rewriting every
112
+ * existing document to gain nothing.
113
+ *
114
+ * The `stripeCustomers` reverse index needs NO equivalent treatment: it is
115
+ * keyed BY the customer id, and Stripe customer ids are unique across modes, so
116
+ * a test and a live entry are simply two documents that both resolve to the
117
+ * same org. That is why this fix is contained.
118
+ *
119
+ * Physical field names are an implementation detail of `org-billing.ts` — read
120
+ * and write through `readOrgBilling`/`writeOrgBilling`, which project the
121
+ * deployment's mode onto the logical `stripeCustomerId` key. Nothing else
122
+ * should name this constant.
123
+ */ export const STRIPE_CUSTOMER_ID_TEST_FIELD = 'stripeCustomerIdTest';
124
+ /**
125
+ * Picks the moved keys off an org-shaped object, dropping `undefined` so a
126
+ * partial update never writes holes over good data.
127
+ *
128
+ * `null` is preserved deliberately — the webhook uses it to mean "Stripe says
129
+ * this is gone", which is a real value and not an absence.
130
+ */ export function pickOrgBillingFields(source) {
131
+ const out = {};
132
+ if (!source) return out;
133
+ for (const key of ORG_BILLING_MOVED_KEYS){
134
+ if (source[key] !== undefined) out[key] = source[key];
135
+ }
136
+ return out;
137
+ }
138
+ /**
139
+ * The status string to mirror onto the org doc for the dunning banner.
140
+ *
141
+ * Returns `null` when there is no subscription at all, which the banner treats
142
+ * the same as a healthy one — a pre-billing workspace is not in dunning.
143
+ */ export function orgBillingStatusFrom(billing) {
144
+ var _billing_subscription;
145
+ const status = billing == null ? void 0 : (_billing_subscription = billing.subscription) == null ? void 0 : _billing_subscription.status;
146
+ return typeof status === 'string' && status ? status : null;
147
+ }
148
+ /**
149
+ * Subscription statuses that mean "this org is already subscribed" (AGL-1715).
150
+ *
151
+ * A STATUS test rather than a "has a subscription record" test, and that is the
152
+ * part worth preserving: the record — and the `stripeCustomerId` beside it —
153
+ * both survive cancellation, so the naive form would lock every churned
154
+ * workspace out of ever paying us again. `incomplete`, `incomplete_expired` and
155
+ * `unpaid` are out from the other side: there is no live subscription to
156
+ * protect and a new one is the buyer's only way forward.
157
+ *
158
+ * `past_due` IS live. A second subscription does not settle the first one's
159
+ * unpaid invoice; it adds a charge beside it. Dunning is paid through the
160
+ * invoices and portal routes.
161
+ *
162
+ * THE list, not A list. `live-subscription-status-single-source.spec.ts` fails
163
+ * the build if this triple is spelled out anywhere else in the repo without an
164
+ * `AGL-1715-EXEMPT:` line saying why that copy answers a different question.
165
+ */ const LIVE_SUBSCRIPTION_STATUSES = [
166
+ 'active',
167
+ 'trialing',
168
+ 'past_due'
169
+ ];
170
+ /**
171
+ * True when a subscription STATUS word means the subscription is live.
172
+ *
173
+ * The status-string half of the predicate, for the call sites that hold a
174
+ * Stripe subscription object rather than an org billing document — the
175
+ * `subscriptions?customer=…&status=all` list responses in
176
+ * `/api/billing/subscription`, `/api/billing/addons` and
177
+ * `/api/admin/org-discount`, and the webhook status word that
178
+ * `metered-backfill` decides on. Those cannot be typed as an `OrgBillingDoc`
179
+ * without lying, and wrapping them in one just to unwrap it again is a cast
180
+ * that hides the shape. Same list, one entry point per shape.
181
+ */ export function isLiveSubscriptionStatus(status) {
182
+ return typeof status === 'string' && LIVE_SUBSCRIPTION_STATUSES.includes(status);
183
+ }
184
+ /**
185
+ * True when this org already has a live subscription and must not be sold or
186
+ * provisioned a second one (AGL-1697, AGL-1714).
187
+ *
188
+ * Lives here rather than at the call site because the failure mode of the
189
+ * copies is asymmetric in the expensive direction: if one call site's list ever
190
+ * narrows relative to another's, a subscribed org gets sold a second
191
+ * subscription and both bill. AGL-1715 repointed the older inline copies at
192
+ * this predicate (or at `isLiveSubscriptionStatus` where the value in hand is
193
+ * a Stripe object): the Billing page, `/api/billing/checkout`,
194
+ * `/api/billing/subscription`, `/api/billing/addons`,
195
+ * `/api/admin/org-discount` and `utils/server/metered-backfill`.
196
+ */ export function isOrgSubscriptionLive(billing) {
197
+ return isLiveSubscriptionStatus(orgBillingStatusFrom(billing));
198
+ }
199
+ /**
200
+ * True when an org record still carries the moved keys inline — i.e. it has not
201
+ * been through the backfill yet. Used by the read path to decide whether the
202
+ * org doc is a trustworthy fallback, and by the backfill to skip work it has
203
+ * already done.
204
+ */ export function hasInlineOrgBilling(source) {
205
+ if (!source) return false;
206
+ return ORG_BILLING_MOVED_KEYS.some((key)=>source[key] !== undefined);
207
+ }
208
+ /**
209
+ * Merge the manager-gated billing doc over an org doc WITHOUT letting the
210
+ * billing doc's identity win (AGL-1991).
211
+ *
212
+ * The billing page merges `orgs/{orgId}/billing/stripe` over `orgs/{orgId}` so
213
+ * that every `org.subscription…` reference keeps working after AGL-1028 moved
214
+ * those keys. The trap: the console's `useConfirmedDoc` stamps the DOCUMENT ID
215
+ * into the payload it hands back (`{ $id: id, ...payload }`), so the billing
216
+ * doc arrives carrying `$id === ORG_BILLING_DOC_ID` — the literal string
217
+ * `'stripe'`. A plain spread puts that second, so the merged object's `$id`
218
+ * silently became `'stripe'` and every child deriving its org id from it read
219
+ * `orgs/stripe/…`, which is not an org and is denied by the rules.
220
+ *
221
+ * That is why this is a helper and not an inline `$id:` re-assert at the call
222
+ * site: `useConfirmedDoc` stamping `$id` makes ANY merge of two documents
223
+ * identity-swapping, so the safe merge belongs somewhere it can be reused and
224
+ * named rather than re-derived correctly each time.
225
+ *
226
+ * The org doc's `$id` wins unconditionally — including when it is absent, in
227
+ * which case the result carries no `$id` at all rather than inheriting the
228
+ * billing doc's. A missing org id must read as "unknown", never as a
229
+ * confidently wrong path.
230
+ */ export function mergeOrgBillingOverOrg(orgDoc, orgBilling) {
231
+ const merged = _extends({}, orgDoc != null ? orgDoc : {}, orgBilling != null ? orgBilling : {});
232
+ // Restore the org document's identity, whatever the billing doc claimed.
233
+ if (orgDoc && '$id' in orgDoc) merged['$id'] = orgDoc['$id'];
234
+ else delete merged['$id'];
235
+ return merged;
236
+ }
237
+
238
+ //# sourceMappingURL=org-billing-doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/org-billing-doc.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\nimport type { OrgSeatAddons, OrgSubscription } from '../foundation/definitions/org-billing.types'\n\n/**\n * Where the commercial keys live now that they are off the org doc (AGL-1028).\n *\n * `orgs/{orgId}` has to stay readable by any member — it carries `plan` and\n * `entitlements`, which every console surface gates features on, so denying it\n * locks a site collaborator out of the site they were invited to. Firestore has\n * no field-level reads, so the only way to narrow \"readable\" is to move the\n * fields somewhere with its own rule. This subcollection is that somewhere, and\n * it is gated on `canManageOrg()`.\n *\n * What did NOT move, and why. AGL-1028 originally listed `seatAddons` and all\n * of `subscription` as movers; measuring the readers changed that:\n *\n * - `plan` / `entitlements` — the whole reason the org doc stays readable.\n * - `seatAddons` — NOT a commercial secret, an ENTITLEMENT INPUT.\n * `resolveOrgEntitlements` stacks it on top of the plan: `seatAddons.hosts`\n * raises `hostLimit`, `posRegisters` raises `posRegisters`, `eventCalendar`\n * switches a feature on. It resolves at 29 call sites including the tenant\n * runtime and non-manager console components — none of which can read a\n * manager-gated doc. Moving it would silently drop every paying org to base\n * plan limits for exactly the users the org doc stays readable for.\n * - `subscription.status`, as the derived `billingStatus` mirror — same reason.\n * `resolveEffectivePlan` downgrades a paid plan to free on a dead\n * subscription, and `resolvePurchasedAddons` stops counting add-ons on one.\n * Entitlement resolution therefore needs the status word, so the status word\n * cannot be manager-gated. The rest of `subscription` — price ids, amounts,\n * interval, period end, custom enterprise pricing — moves.\n * - `suspendedAt` / `suspendedReason` — the tenant runtime reads suspension on\n * EVERY published page render, off an org doc it already fetches for plan and\n * branding. Moving it would add a Firestore read to the hot path AGL-1152 is\n * trying to shrink, and would hide nothing: the org doc stays member-readable\n * regardless. \"Your sites are offline\" is also something every member needs\n * to see, unlike a Stripe customer id.\n *\n * So what a scoped collaborator can still see is their plan, their capacity and\n * a status word — the things they need — and what they lose is the Stripe\n * customer id, price ids, amounts, billing interval, renewal date and any\n * negotiated enterprise rate.\n */\nexport const ORG_BILLING_SUBCOLLECTION = 'billing'\n\n/**\n * Single document id, not one doc per concern. The reads are always \"all of\n * it\" (the billing page, the webhook, the staff MRR roll-up), so splitting it\n * would only buy extra round trips.\n */\nexport const ORG_BILLING_DOC_ID = 'stripe'\n\n/**\n * Reverse index `stripeCustomers/{stripeCustomerId} -> { orgId }`, written by\n * the webhook alongside the billing doc.\n *\n * It exists because the webhook has to answer \"which org is this Stripe\n * customer?\" on `invoice.payment_failed`, and it did that with\n * `.where('stripeCustomerId', '==', …)` on the orgs collection. Once the field\n * moves into a subcollection that query cannot work: the alternative is a\n * collection-group query, which needs a collection-group index that the\n * emulator will never ask for and production will (AGL-1028). A mapping doc is\n * an O(1) `get`, needs no index, and stops the webhook scanning `orgs` at all.\n *\n * Admin-SDK only — nothing client-side has any business reading it.\n */\nexport const STRIPE_CUSTOMER_INDEX_COLLECTION = 'stripeCustomers'\n\n/**\n * The keys that moved off `orgs/{orgId}` and into the billing doc.\n *\n * `seatAddons` is deliberately NOT here — see the note above; it is an\n * entitlement input, not a commercial secret.\n */\nexport const ORG_BILLING_MOVED_KEYS = [\n 'stripeCustomerId',\n 'subscription',\n] as const\n\nexport type OrgBillingMovedKey = (typeof ORG_BILLING_MOVED_KEYS)[number]\n\n/**\n * The TEST-mode Stripe customer id, stored beside the live one (AGL-2486).\n *\n * `stripeCustomerId` held ONE id with no notion of Stripe livemode, so an org\n * that had been through live checkout could never be exercised in test mode\n * and vice versa: every billing call answered\n *\n * No such customer: 'cus_…'; a similar object exists in live mode, but a\n * test mode key was used to make this request.\n *\n * — a raw 502 out of `/api/billing/checkout`, `/invoices` and `/addons`. For a\n * team running both modes against ONE Firestore that is permanent, and it made\n * the test-mode path we need before September 1 unusable on any real org.\n *\n * Worse than the 502, and the reason this is a stored-shape change rather than\n * a better error message: a test-mode run that COMPLETED would write its test\n * customer into the single slot and destroy the live linkage — silently, with\n * every subsequent live invoice scattering onto a customer the Billing page no\n * longer queries.\n *\n * ## Why a second field and not a mode-keyed map\n *\n * The live id stays at `stripeCustomerId`, untouched. That makes the migration\n * EMPTY — every value production holds today was written by a `sk_live_`\n * deployment and is already in the right slot — and it makes the change a\n * NO-OP in live mode by construction: the live path reads the same field name\n * it always read. Only test mode, which is 100% broken today, behaves\n * differently. A `{live,test}` map would have required rewriting every\n * existing document to gain nothing.\n *\n * The `stripeCustomers` reverse index needs NO equivalent treatment: it is\n * keyed BY the customer id, and Stripe customer ids are unique across modes, so\n * a test and a live entry are simply two documents that both resolve to the\n * same org. That is why this fix is contained.\n *\n * Physical field names are an implementation detail of `org-billing.ts` — read\n * and write through `readOrgBilling`/`writeOrgBilling`, which project the\n * deployment's mode onto the logical `stripeCustomerId` key. Nothing else\n * should name this constant.\n */\nexport const STRIPE_CUSTOMER_ID_TEST_FIELD = 'stripeCustomerIdTest'\n\n/** The manager-gated document's shape. */\nexport interface OrgBillingDoc {\n stripeCustomerId?: string | null\n /**\n * The test-mode twin. Present on the stored document only; the accessors\n * collapse the pair to `stripeCustomerId` for every reader.\n */\n stripeCustomerIdTest?: string | null\n subscription?: OrgSubscription | null\n}\n\n/**\n * `seatAddons` stays on the org doc, so this is the shape of what the org doc\n * still carries commercially. Named for clarity at the call sites that have to\n * keep the two apart.\n */\nexport interface OrgInlineBilling {\n seatAddons?: OrgSeatAddons | null\n billingStatus?: string | null\n}\n\n/**\n * The non-sensitive mirror that STAYS on the org doc.\n *\n * The AGL-275 dunning banner keys on `subscription.status === 'past_due'` and\n * is shown to every member on purpose — a contractor who cannot see the invoice\n * still benefits from knowing the workspace is about to lapse. Putting\n * `subscription` behind `canManageOrg()` would have silently switched that\n * banner off for non-managers, so the webhook mirrors the status string (and\n * nothing else: no amounts, no price ids, no customer id) back onto the org doc\n * for the banner to read.\n */\nexport type OrgBillingStatus = string\n\n/**\n * Picks the moved keys off an org-shaped object, dropping `undefined` so a\n * partial update never writes holes over good data.\n *\n * `null` is preserved deliberately — the webhook uses it to mean \"Stripe says\n * this is gone\", which is a real value and not an absence.\n */\nexport function pickOrgBillingFields(\n source: Partial<Record<OrgBillingMovedKey, unknown>> | null | undefined,\n): Partial<OrgBillingDoc> {\n const out: Record<string, unknown> = {}\n if (!source) return out\n for (const key of ORG_BILLING_MOVED_KEYS) {\n if (source[key] !== undefined) out[key] = source[key]\n }\n return out as Partial<OrgBillingDoc>\n}\n\n/**\n * The status string to mirror onto the org doc for the dunning banner.\n *\n * Returns `null` when there is no subscription at all, which the banner treats\n * the same as a healthy one — a pre-billing workspace is not in dunning.\n */\nexport function orgBillingStatusFrom(\n billing: Partial<OrgBillingDoc> | null | undefined,\n): OrgBillingStatus | null {\n const status = (billing?.subscription as { status?: unknown } | null | undefined)?.status\n return typeof status === 'string' && status ? status : null\n}\n\n/**\n * Subscription statuses that mean \"this org is already subscribed\" (AGL-1715).\n *\n * A STATUS test rather than a \"has a subscription record\" test, and that is the\n * part worth preserving: the record — and the `stripeCustomerId` beside it —\n * both survive cancellation, so the naive form would lock every churned\n * workspace out of ever paying us again. `incomplete`, `incomplete_expired` and\n * `unpaid` are out from the other side: there is no live subscription to\n * protect and a new one is the buyer's only way forward.\n *\n * `past_due` IS live. A second subscription does not settle the first one's\n * unpaid invoice; it adds a charge beside it. Dunning is paid through the\n * invoices and portal routes.\n *\n * THE list, not A list. `live-subscription-status-single-source.spec.ts` fails\n * the build if this triple is spelled out anywhere else in the repo without an\n * `AGL-1715-EXEMPT:` line saying why that copy answers a different question.\n */\nconst LIVE_SUBSCRIPTION_STATUSES = ['active', 'trialing', 'past_due']\n\n/**\n * True when a subscription STATUS word means the subscription is live.\n *\n * The status-string half of the predicate, for the call sites that hold a\n * Stripe subscription object rather than an org billing document — the\n * `subscriptions?customer=…&status=all` list responses in\n * `/api/billing/subscription`, `/api/billing/addons` and\n * `/api/admin/org-discount`, and the webhook status word that\n * `metered-backfill` decides on. Those cannot be typed as an `OrgBillingDoc`\n * without lying, and wrapping them in one just to unwrap it again is a cast\n * that hides the shape. Same list, one entry point per shape.\n */\nexport function isLiveSubscriptionStatus(status: unknown): boolean {\n return (\n typeof status === 'string' && LIVE_SUBSCRIPTION_STATUSES.includes(status)\n )\n}\n\n/**\n * True when this org already has a live subscription and must not be sold or\n * provisioned a second one (AGL-1697, AGL-1714).\n *\n * Lives here rather than at the call site because the failure mode of the\n * copies is asymmetric in the expensive direction: if one call site's list ever\n * narrows relative to another's, a subscribed org gets sold a second\n * subscription and both bill. AGL-1715 repointed the older inline copies at\n * this predicate (or at `isLiveSubscriptionStatus` where the value in hand is\n * a Stripe object): the Billing page, `/api/billing/checkout`,\n * `/api/billing/subscription`, `/api/billing/addons`,\n * `/api/admin/org-discount` and `utils/server/metered-backfill`.\n */\nexport function isOrgSubscriptionLive(\n billing: Partial<OrgBillingDoc> | null | undefined,\n): boolean {\n return isLiveSubscriptionStatus(orgBillingStatusFrom(billing))\n}\n\n/**\n * True when an org record still carries the moved keys inline — i.e. it has not\n * been through the backfill yet. Used by the read path to decide whether the\n * org doc is a trustworthy fallback, and by the backfill to skip work it has\n * already done.\n */\nexport function hasInlineOrgBilling(\n source: Partial<Record<OrgBillingMovedKey, unknown>> | null | undefined,\n): boolean {\n if (!source) return false\n return ORG_BILLING_MOVED_KEYS.some((key) => source[key] !== undefined)\n}\n\n/**\n * Merge the manager-gated billing doc over an org doc WITHOUT letting the\n * billing doc's identity win (AGL-1991).\n *\n * The billing page merges `orgs/{orgId}/billing/stripe` over `orgs/{orgId}` so\n * that every `org.subscription…` reference keeps working after AGL-1028 moved\n * those keys. The trap: the console's `useConfirmedDoc` stamps the DOCUMENT ID\n * into the payload it hands back (`{ $id: id, ...payload }`), so the billing\n * doc arrives carrying `$id === ORG_BILLING_DOC_ID` — the literal string\n * `'stripe'`. A plain spread puts that second, so the merged object's `$id`\n * silently became `'stripe'` and every child deriving its org id from it read\n * `orgs/stripe/…`, which is not an org and is denied by the rules.\n *\n * That is why this is a helper and not an inline `$id:` re-assert at the call\n * site: `useConfirmedDoc` stamping `$id` makes ANY merge of two documents\n * identity-swapping, so the safe merge belongs somewhere it can be reused and\n * named rather than re-derived correctly each time.\n *\n * The org doc's `$id` wins unconditionally — including when it is absent, in\n * which case the result carries no `$id` at all rather than inheriting the\n * billing doc's. A missing org id must read as \"unknown\", never as a\n * confidently wrong path.\n */\nexport function mergeOrgBillingOverOrg<\n TOrg extends Record<string, unknown>,\n TBilling extends Record<string, unknown>,\n>(\n orgDoc: TOrg | null | undefined,\n orgBilling: TBilling | null | undefined,\n): TOrg & Partial<TBilling> {\n const merged = { ...(orgDoc ?? {}), ...(orgBilling ?? {}) } as Record<\n string,\n unknown\n >\n // Restore the org document's identity, whatever the billing doc claimed.\n if (orgDoc && '$id' in orgDoc) merged['$id'] = (orgDoc as Record<string, unknown>)['$id']\n else delete merged['$id']\n return merged as TOrg & Partial<TBilling>\n}\n"],"names":["ORG_BILLING_SUBCOLLECTION","ORG_BILLING_DOC_ID","STRIPE_CUSTOMER_INDEX_COLLECTION","ORG_BILLING_MOVED_KEYS","STRIPE_CUSTOMER_ID_TEST_FIELD","pickOrgBillingFields","source","out","key","undefined","orgBillingStatusFrom","billing","status","subscription","LIVE_SUBSCRIPTION_STATUSES","isLiveSubscriptionStatus","includes","isOrgSubscriptionLive","hasInlineOrgBilling","some","mergeOrgBillingOverOrg","orgDoc","orgBilling","merged"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsCC,GACD,OAAO,MAAMA,4BAA4B,UAAS;AAElD;;;;CAIC,GACD,OAAO,MAAMC,qBAAqB,SAAQ;AAE1C;;;;;;;;;;;;;CAaC,GACD,OAAO,MAAMC,mCAAmC,kBAAiB;AAEjE;;;;;CAKC,GACD,OAAO,MAAMC,yBAAyB;IACpC;IACA;CACD,CAAS;AAIV;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCC,GACD,OAAO,MAAMC,gCAAgC,uBAAsB;AAoCnE;;;;;;CAMC,GACD,OAAO,SAASC,qBACdC,MAAuE;IAEvE,MAAMC,MAA+B,CAAC;IACtC,IAAI,CAACD,QAAQ,OAAOC;IACpB,KAAK,MAAMC,OAAOL,uBAAwB;QACxC,IAAIG,MAAM,CAACE,IAAI,KAAKC,WAAWF,GAAG,CAACC,IAAI,GAAGF,MAAM,CAACE,IAAI;IACvD;IACA,OAAOD;AACT;AAEA;;;;;CAKC,GACD,OAAO,SAASG,qBACdC,OAAkD;QAElCA;IAAhB,MAAMC,SAAUD,4BAAAA,wBAAAA,QAASE,YAAY,qBAAtB,AAACF,sBAAmEC,MAAM;IACzF,OAAO,OAAOA,WAAW,YAAYA,SAASA,SAAS;AACzD;AAEA;;;;;;;;;;;;;;;;;CAiBC,GACD,MAAME,6BAA6B;IAAC;IAAU;IAAY;CAAW;AAErE;;;;;;;;;;;CAWC,GACD,OAAO,SAASC,yBAAyBH,MAAe;IACtD,OACE,OAAOA,WAAW,YAAYE,2BAA2BE,QAAQ,CAACJ;AAEtE;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASK,sBACdN,OAAkD;IAElD,OAAOI,yBAAyBL,qBAAqBC;AACvD;AAEA;;;;;CAKC,GACD,OAAO,SAASO,oBACdZ,MAAuE;IAEvE,IAAI,CAACA,QAAQ,OAAO;IACpB,OAAOH,uBAAuBgB,IAAI,CAAC,CAACX,MAAQF,MAAM,CAACE,IAAI,KAAKC;AAC9D;AAEA;;;;;;;;;;;;;;;;;;;;;;CAsBC,GACD,OAAO,SAASW,uBAIdC,MAA+B,EAC/BC,UAAuC;IAEvC,MAAMC,SAAS,aAAMF,iBAAAA,SAAU,CAAC,GAAQC,qBAAAA,aAAc,CAAC;IAIvD,yEAAyE;IACzE,IAAID,UAAU,SAASA,QAAQE,MAAM,CAAC,MAAM,GAAG,AAACF,MAAkC,CAAC,MAAM;SACpF,OAAOE,MAAM,CAAC,MAAM;IACzB,OAAOA;AACT"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * WHY a staff org override was made (AGL-1652).
19
+ *
20
+ * The override dialog changes what an organization is ENTITLED to and BILLED
21
+ * against — since AGL-1635 it can also set `transactionFeePhysicalPct`,
22
+ * `transactionFeeDigitalPct` and `marketplaceFeePct`, and force an
23
+ * unreleased feature on for one paying customer. Its `adminAudit` row
24
+ * recorded the actor, the target and a full before/after, and nothing at all
25
+ * about why. `before`/`after` shows that a fee changed; only a reason can
26
+ * show it was the negotiated rate rather than a slip, and that question is
27
+ * asked months later during a billing dispute, when the row can no longer be
28
+ * back-filled.
29
+ *
30
+ * ## The field family is AGL-1501's, deliberately
31
+ *
32
+ * `reason` (a code from a fixed set) + `note` (free text, staff-only) is the
33
+ * shape lockdown and media quarantine already use, so an operator reading an
34
+ * audit row is reading the same two fields whichever staff action wrote it.
35
+ * What is NOT borrowed is the vocabulary: lockdown's
36
+ * security/billing/maintenance/manual describes an INCIDENT, and an override
37
+ * is not one. A negotiated enterprise rate recorded as "billing" is a record
38
+ * that cannot answer the only question anyone ever asks of it.
39
+ *
40
+ * The AGL-1512 `message` field is absent for the same kind of reason: a
41
+ * quarantine notice is shown to the customer, and an override reason is
42
+ * not — nothing here reaches a tenant surface.
43
+ *
44
+ * ## Required, and why a code rather than free text
45
+ *
46
+ * A required free-text box is defeated by typing "x", and a box that can be
47
+ * defeated that cheaply buys a false sense of a record. A fixed set cannot
48
+ * be: every value is one somebody has to stand behind, and the set is small
49
+ * enough to read as a distribution across a quarter.
50
+ *
51
+ * `other` is the escape hatch that keeps the set honest — without one, staff
52
+ * pick the nearest wrong code and the whole vocabulary rots. It is the one
53
+ * code that says nothing by itself, so it is the one code that REQUIRES the
54
+ * note: see {@link orgOverrideReasonNeedsNote}. Every other code may carry a
55
+ * note and does not need one.
56
+ */
57
+ export type OrgOverrideReasonCode = 'enterprise' | 'support' | 'beta' | 'correction' | 'trial' | 'other';
58
+ export declare const ORG_OVERRIDE_REASON_CODES: OrgOverrideReasonCode[];
59
+ export declare function isOrgOverrideReasonCode(value: unknown): value is OrgOverrideReasonCode;
60
+ /** Staff-surface labels; the key stays the wire/audit identity. */
61
+ export declare const ORG_OVERRIDE_REASON_LABELS: Record<OrgOverrideReasonCode, string>;
62
+ /** Internal staff rationale — never shown to the customer. */
63
+ export declare const ORG_OVERRIDE_NOTE_MAX = 1000;
64
+ /**
65
+ * Does this code mean nothing without the note? Only `other` does. Keeping
66
+ * this a predicate rather than an inline `=== 'other'` is what lets the
67
+ * dialog's Save gate and any later server-side gate agree by construction.
68
+ */
69
+ export declare function orgOverrideReasonNeedsNote(code: OrgOverrideReasonCode): boolean;
70
+ /** The two fields an `org.override` audit row carries beside before/after. */
71
+ export interface OrgOverrideReason {
72
+ reason: OrgOverrideReasonCode;
73
+ /**
74
+ * Explicit `null` when absent, never `undefined` — this value goes
75
+ * straight into a Firestore write, and Firestore rejects `undefined`.
76
+ */
77
+ note: string | null;
78
+ }
79
+ /**
80
+ * The ONE predicate for "is this a reason worth writing down".
81
+ *
82
+ * Returns `null` — never a defaulted value — when the code is unrecognised,
83
+ * or when `other` arrives without a note. A defaulted reason would be worse
84
+ * than none: it would put a code somebody never chose next to a fee change
85
+ * they did make.
86
+ *
87
+ * Whitespace-only notes are treated as absent, which is what makes the
88
+ * `other` gate real rather than a space-bar away from being satisfied.
89
+ */
90
+ export declare function normalizeOrgOverrideReason(code: unknown, note?: unknown): OrgOverrideReason | null;
91
+ /**
92
+ * How an override reason reads on a staff surface: the label, plus the note
93
+ * when there is one. Shared so the audit log and the org detail page cannot
94
+ * drift into describing the same row two different ways.
95
+ *
96
+ * A row written before AGL-1652 has no reason at all, and says so — the gap
97
+ * is a fact about the record, and rendering it as blank would let a
98
+ * pre-AGL-1652 override pass for one nobody had to explain.
99
+ */
100
+ export declare function orgOverrideReasonSummary(reason: unknown, note?: unknown): string | null;
@@ -0,0 +1,116 @@
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
+ * WHY a staff org override was made (AGL-1652).
18
+ *
19
+ * The override dialog changes what an organization is ENTITLED to and BILLED
20
+ * against — since AGL-1635 it can also set `transactionFeePhysicalPct`,
21
+ * `transactionFeeDigitalPct` and `marketplaceFeePct`, and force an
22
+ * unreleased feature on for one paying customer. Its `adminAudit` row
23
+ * recorded the actor, the target and a full before/after, and nothing at all
24
+ * about why. `before`/`after` shows that a fee changed; only a reason can
25
+ * show it was the negotiated rate rather than a slip, and that question is
26
+ * asked months later during a billing dispute, when the row can no longer be
27
+ * back-filled.
28
+ *
29
+ * ## The field family is AGL-1501's, deliberately
30
+ *
31
+ * `reason` (a code from a fixed set) + `note` (free text, staff-only) is the
32
+ * shape lockdown and media quarantine already use, so an operator reading an
33
+ * audit row is reading the same two fields whichever staff action wrote it.
34
+ * What is NOT borrowed is the vocabulary: lockdown's
35
+ * security/billing/maintenance/manual describes an INCIDENT, and an override
36
+ * is not one. A negotiated enterprise rate recorded as "billing" is a record
37
+ * that cannot answer the only question anyone ever asks of it.
38
+ *
39
+ * The AGL-1512 `message` field is absent for the same kind of reason: a
40
+ * quarantine notice is shown to the customer, and an override reason is
41
+ * not — nothing here reaches a tenant surface.
42
+ *
43
+ * ## Required, and why a code rather than free text
44
+ *
45
+ * A required free-text box is defeated by typing "x", and a box that can be
46
+ * defeated that cheaply buys a false sense of a record. A fixed set cannot
47
+ * be: every value is one somebody has to stand behind, and the set is small
48
+ * enough to read as a distribution across a quarter.
49
+ *
50
+ * `other` is the escape hatch that keeps the set honest — without one, staff
51
+ * pick the nearest wrong code and the whole vocabulary rots. It is the one
52
+ * code that says nothing by itself, so it is the one code that REQUIRES the
53
+ * note: see {@link orgOverrideReasonNeedsNote}. Every other code may carry a
54
+ * note and does not need one.
55
+ */ const ORG_OVERRIDE_REASON_KEYS = {
56
+ enterprise: true,
57
+ support: true,
58
+ beta: true,
59
+ correction: true,
60
+ trial: true,
61
+ other: true
62
+ };
63
+ export const ORG_OVERRIDE_REASON_CODES = Object.keys(ORG_OVERRIDE_REASON_KEYS);
64
+ export function isOrgOverrideReasonCode(value) {
65
+ return typeof value === 'string' && value in ORG_OVERRIDE_REASON_KEYS;
66
+ }
67
+ /** Staff-surface labels; the key stays the wire/audit identity. */ export const ORG_OVERRIDE_REASON_LABELS = {
68
+ enterprise: 'Negotiated enterprise or custom contract',
69
+ support: 'Support remediation or goodwill',
70
+ beta: 'Early access to an unreleased feature',
71
+ correction: 'Correcting an earlier mistake',
72
+ trial: 'Sales trial or proof of concept',
73
+ other: 'Other — say what, below'
74
+ };
75
+ /** Internal staff rationale — never shown to the customer. */ export const ORG_OVERRIDE_NOTE_MAX = 1000;
76
+ /**
77
+ * Does this code mean nothing without the note? Only `other` does. Keeping
78
+ * this a predicate rather than an inline `=== 'other'` is what lets the
79
+ * dialog's Save gate and any later server-side gate agree by construction.
80
+ */ export function orgOverrideReasonNeedsNote(code) {
81
+ return code === 'other';
82
+ }
83
+ /**
84
+ * The ONE predicate for "is this a reason worth writing down".
85
+ *
86
+ * Returns `null` — never a defaulted value — when the code is unrecognised,
87
+ * or when `other` arrives without a note. A defaulted reason would be worse
88
+ * than none: it would put a code somebody never chose next to a fee change
89
+ * they did make.
90
+ *
91
+ * Whitespace-only notes are treated as absent, which is what makes the
92
+ * `other` gate real rather than a space-bar away from being satisfied.
93
+ */ export function normalizeOrgOverrideReason(code, note) {
94
+ if (!isOrgOverrideReasonCode(code)) return null;
95
+ const trimmed = typeof note === 'string' && note.trim() ? note.trim().slice(0, ORG_OVERRIDE_NOTE_MAX) : null;
96
+ if (orgOverrideReasonNeedsNote(code) && !trimmed) return null;
97
+ return {
98
+ reason: code,
99
+ note: trimmed
100
+ };
101
+ }
102
+ /**
103
+ * How an override reason reads on a staff surface: the label, plus the note
104
+ * when there is one. Shared so the audit log and the org detail page cannot
105
+ * drift into describing the same row two different ways.
106
+ *
107
+ * A row written before AGL-1652 has no reason at all, and says so — the gap
108
+ * is a fact about the record, and rendering it as blank would let a
109
+ * pre-AGL-1652 override pass for one nobody had to explain.
110
+ */ export function orgOverrideReasonSummary(reason, note) {
111
+ if (!isOrgOverrideReasonCode(reason)) return null;
112
+ const label = ORG_OVERRIDE_REASON_LABELS[reason];
113
+ return typeof note === 'string' && note.trim() ? `${label} — ${note.trim()}` : label;
114
+ }
115
+
116
+ //# sourceMappingURL=org-override-reason.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/org-override-reason.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * WHY a staff org override was made (AGL-1652).\n *\n * The override dialog changes what an organization is ENTITLED to and BILLED\n * against — since AGL-1635 it can also set `transactionFeePhysicalPct`,\n * `transactionFeeDigitalPct` and `marketplaceFeePct`, and force an\n * unreleased feature on for one paying customer. Its `adminAudit` row\n * recorded the actor, the target and a full before/after, and nothing at all\n * about why. `before`/`after` shows that a fee changed; only a reason can\n * show it was the negotiated rate rather than a slip, and that question is\n * asked months later during a billing dispute, when the row can no longer be\n * back-filled.\n *\n * ## The field family is AGL-1501's, deliberately\n *\n * `reason` (a code from a fixed set) + `note` (free text, staff-only) is the\n * shape lockdown and media quarantine already use, so an operator reading an\n * audit row is reading the same two fields whichever staff action wrote it.\n * What is NOT borrowed is the vocabulary: lockdown's\n * security/billing/maintenance/manual describes an INCIDENT, and an override\n * is not one. A negotiated enterprise rate recorded as \"billing\" is a record\n * that cannot answer the only question anyone ever asks of it.\n *\n * The AGL-1512 `message` field is absent for the same kind of reason: a\n * quarantine notice is shown to the customer, and an override reason is\n * not — nothing here reaches a tenant surface.\n *\n * ## Required, and why a code rather than free text\n *\n * A required free-text box is defeated by typing \"x\", and a box that can be\n * defeated that cheaply buys a false sense of a record. A fixed set cannot\n * be: every value is one somebody has to stand behind, and the set is small\n * enough to read as a distribution across a quarter.\n *\n * `other` is the escape hatch that keeps the set honest — without one, staff\n * pick the nearest wrong code and the whole vocabulary rots. It is the one\n * code that says nothing by itself, so it is the one code that REQUIRES the\n * note: see {@link orgOverrideReasonNeedsNote}. Every other code may carry a\n * note and does not need one.\n */\nexport type OrgOverrideReasonCode =\n | 'enterprise'\n | 'support'\n | 'beta'\n | 'correction'\n | 'trial'\n | 'other'\n\nconst ORG_OVERRIDE_REASON_KEYS: Record<OrgOverrideReasonCode, true> = {\n enterprise: true,\n support: true,\n beta: true,\n correction: true,\n trial: true,\n other: true,\n}\n\nexport const ORG_OVERRIDE_REASON_CODES = Object.keys(\n ORG_OVERRIDE_REASON_KEYS,\n) as OrgOverrideReasonCode[]\n\nexport function isOrgOverrideReasonCode(\n value: unknown,\n): value is OrgOverrideReasonCode {\n return typeof value === 'string' && value in ORG_OVERRIDE_REASON_KEYS\n}\n\n/** Staff-surface labels; the key stays the wire/audit identity. */\nexport const ORG_OVERRIDE_REASON_LABELS: Record<\n OrgOverrideReasonCode,\n string\n> = {\n enterprise: 'Negotiated enterprise or custom contract',\n support: 'Support remediation or goodwill',\n beta: 'Early access to an unreleased feature',\n correction: 'Correcting an earlier mistake',\n trial: 'Sales trial or proof of concept',\n other: 'Other — say what, below',\n}\n\n/** Internal staff rationale — never shown to the customer. */\nexport const ORG_OVERRIDE_NOTE_MAX = 1000\n\n/**\n * Does this code mean nothing without the note? Only `other` does. Keeping\n * this a predicate rather than an inline `=== 'other'` is what lets the\n * dialog's Save gate and any later server-side gate agree by construction.\n */\nexport function orgOverrideReasonNeedsNote(\n code: OrgOverrideReasonCode,\n): boolean {\n return code === 'other'\n}\n\n/** The two fields an `org.override` audit row carries beside before/after. */\nexport interface OrgOverrideReason {\n reason: OrgOverrideReasonCode\n /**\n * Explicit `null` when absent, never `undefined` — this value goes\n * straight into a Firestore write, and Firestore rejects `undefined`.\n */\n note: string | null\n}\n\n/**\n * The ONE predicate for \"is this a reason worth writing down\".\n *\n * Returns `null` — never a defaulted value — when the code is unrecognised,\n * or when `other` arrives without a note. A defaulted reason would be worse\n * than none: it would put a code somebody never chose next to a fee change\n * they did make.\n *\n * Whitespace-only notes are treated as absent, which is what makes the\n * `other` gate real rather than a space-bar away from being satisfied.\n */\nexport function normalizeOrgOverrideReason(\n code: unknown,\n note?: unknown,\n): OrgOverrideReason | null {\n if (!isOrgOverrideReasonCode(code)) return null\n const trimmed =\n typeof note === 'string' && note.trim()\n ? note.trim().slice(0, ORG_OVERRIDE_NOTE_MAX)\n : null\n if (orgOverrideReasonNeedsNote(code) && !trimmed) return null\n return { reason: code, note: trimmed }\n}\n\n/**\n * How an override reason reads on a staff surface: the label, plus the note\n * when there is one. Shared so the audit log and the org detail page cannot\n * drift into describing the same row two different ways.\n *\n * A row written before AGL-1652 has no reason at all, and says so — the gap\n * is a fact about the record, and rendering it as blank would let a\n * pre-AGL-1652 override pass for one nobody had to explain.\n */\nexport function orgOverrideReasonSummary(\n reason: unknown,\n note?: unknown,\n): string | null {\n if (!isOrgOverrideReasonCode(reason)) return null\n const label = ORG_OVERRIDE_REASON_LABELS[reason]\n return typeof note === 'string' && note.trim()\n ? `${label} — ${note.trim()}`\n : label\n}\n"],"names":["ORG_OVERRIDE_REASON_KEYS","enterprise","support","beta","correction","trial","other","ORG_OVERRIDE_REASON_CODES","Object","keys","isOrgOverrideReasonCode","value","ORG_OVERRIDE_REASON_LABELS","ORG_OVERRIDE_NOTE_MAX","orgOverrideReasonNeedsNote","code","normalizeOrgOverrideReason","note","trimmed","trim","slice","reason","orgOverrideReasonSummary","label"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCC,GASD,MAAMA,2BAAgE;IACpEC,YAAY;IACZC,SAAS;IACTC,MAAM;IACNC,YAAY;IACZC,OAAO;IACPC,OAAO;AACT;AAEA,OAAO,MAAMC,4BAA4BC,OAAOC,IAAI,CAClDT,0BAC0B;AAE5B,OAAO,SAASU,wBACdC,KAAc;IAEd,OAAO,OAAOA,UAAU,YAAYA,SAASX;AAC/C;AAEA,iEAAiE,GACjE,OAAO,MAAMY,6BAGT;IACFX,YAAY;IACZC,SAAS;IACTC,MAAM;IACNC,YAAY;IACZC,OAAO;IACPC,OAAO;AACT,EAAC;AAED,4DAA4D,GAC5D,OAAO,MAAMO,wBAAwB,KAAI;AAEzC;;;;CAIC,GACD,OAAO,SAASC,2BACdC,IAA2B;IAE3B,OAAOA,SAAS;AAClB;AAYA;;;;;;;;;;CAUC,GACD,OAAO,SAASC,2BACdD,IAAa,EACbE,IAAc;IAEd,IAAI,CAACP,wBAAwBK,OAAO,OAAO;IAC3C,MAAMG,UACJ,OAAOD,SAAS,YAAYA,KAAKE,IAAI,KACjCF,KAAKE,IAAI,GAAGC,KAAK,CAAC,GAAGP,yBACrB;IACN,IAAIC,2BAA2BC,SAAS,CAACG,SAAS,OAAO;IACzD,OAAO;QAAEG,QAAQN;QAAME,MAAMC;IAAQ;AACvC;AAEA;;;;;;;;CAQC,GACD,OAAO,SAASI,yBACdD,MAAe,EACfJ,IAAc;IAEd,IAAI,CAACP,wBAAwBW,SAAS,OAAO;IAC7C,MAAME,QAAQX,0BAA0B,CAACS,OAAO;IAChD,OAAO,OAAOJ,SAAS,YAAYA,KAAKE,IAAI,KACxC,GAAGI,MAAM,GAAG,EAAEN,KAAKE,IAAI,IAAI,GAC3BI;AACN"}