@aglyn/aglyn 1.0.0-beta.218 → 1.0.0-beta.220

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 (455) hide show
  1. package/package.json +12 -12
  2. package/src/lib/app-utils/actions.d.ts +26 -433
  3. package/src/lib/app-utils/actions.js +108 -633
  4. package/src/lib/app-utils/actions.js.map +1 -1
  5. package/src/lib/app-utils/activity-presenter.d.ts +3 -3
  6. package/src/lib/app-utils/activity-presenter.js +36 -52
  7. package/src/lib/app-utils/activity-presenter.js.map +1 -1
  8. package/src/lib/app-utils/analytics-events.d.ts +1 -1
  9. package/src/lib/app-utils/analytics-events.js.map +1 -1
  10. package/src/lib/app-utils/analytics-provider.d.ts +182 -0
  11. package/src/lib/app-utils/analytics-provider.js +133 -0
  12. package/src/lib/app-utils/analytics-provider.js.map +1 -0
  13. package/src/lib/app-utils/api-plugins.d.ts +46 -0
  14. package/src/lib/app-utils/api-plugins.js +19 -0
  15. package/src/lib/app-utils/api-plugins.js.map +1 -1
  16. package/src/lib/app-utils/{marketplace-overrides.d.ts → artifact-overrides.d.ts} +9 -6
  17. package/src/lib/app-utils/{marketplace-overrides.js → artifact-overrides.js} +10 -7
  18. package/src/lib/app-utils/artifact-overrides.js.map +1 -0
  19. package/src/lib/app-utils/{marketplace-provenance.d.ts → artifact-provenance.d.ts} +12 -10
  20. package/src/lib/app-utils/{marketplace-provenance.js → artifact-provenance.js} +9 -7
  21. package/src/lib/app-utils/artifact-provenance.js.map +1 -0
  22. package/src/lib/app-utils/binding-token-catalog.d.ts +5 -13
  23. package/src/lib/app-utils/binding-token-catalog.js +17 -41
  24. package/src/lib/app-utils/binding-token-catalog.js.map +1 -1
  25. package/src/lib/app-utils/brand-support-line.d.ts +36 -0
  26. package/src/lib/app-utils/brand-support-line.js +38 -0
  27. package/src/lib/app-utils/brand-support-line.js.map +1 -0
  28. package/src/lib/app-utils/collection-entries.d.ts +2 -2
  29. package/src/lib/app-utils/collection-entries.js.map +1 -1
  30. package/src/lib/app-utils/consent-group-change.d.ts +4 -0
  31. package/src/lib/app-utils/consent-group-change.js.map +1 -1
  32. package/src/lib/app-utils/consent-groups.d.ts +1 -1
  33. package/src/lib/app-utils/consent-groups.js.map +1 -1
  34. package/src/lib/app-utils/console-routes.d.ts +15 -42
  35. package/src/lib/app-utils/console-routes.js +10 -39
  36. package/src/lib/app-utils/console-routes.js.map +1 -1
  37. package/src/lib/app-utils/contacts.d.ts +24 -2
  38. package/src/lib/app-utils/contacts.js +21 -5
  39. package/src/lib/app-utils/contacts.js.map +1 -1
  40. package/src/lib/app-utils/container-membership.d.ts +93 -0
  41. package/src/lib/app-utils/container-membership.js +165 -0
  42. package/src/lib/app-utils/container-membership.js.map +1 -0
  43. package/src/lib/app-utils/crm-task-reminders.d.ts +23 -6
  44. package/src/lib/app-utils/crm-task-reminders.js +32 -11
  45. package/src/lib/app-utils/crm-task-reminders.js.map +1 -1
  46. package/src/lib/app-utils/crm.d.ts +24 -4
  47. package/src/lib/app-utils/crm.js +23 -0
  48. package/src/lib/app-utils/crm.js.map +1 -1
  49. package/src/lib/app-utils/cross-pool-desync.d.ts +39 -0
  50. package/src/lib/app-utils/cross-pool-desync.js +47 -0
  51. package/src/lib/app-utils/cross-pool-desync.js.map +1 -0
  52. package/src/lib/app-utils/csv-upload.d.ts +29 -0
  53. package/src/lib/app-utils/csv-upload.js +29 -0
  54. package/src/lib/app-utils/csv-upload.js.map +1 -0
  55. package/src/lib/app-utils/{dataset-csv.d.ts → csv.d.ts} +10 -43
  56. package/src/lib/app-utils/{dataset-csv.js → csv.js} +10 -81
  57. package/src/lib/app-utils/csv.js.map +1 -0
  58. package/src/lib/app-utils/dataset-models.d.ts +5 -5
  59. package/src/lib/app-utils/dataset-models.js +19 -2
  60. package/src/lib/app-utils/dataset-models.js.map +1 -1
  61. package/src/lib/app-utils/datasets.d.ts +65 -30
  62. package/src/lib/app-utils/datasets.js +74 -24
  63. package/src/lib/app-utils/datasets.js.map +1 -1
  64. package/src/lib/app-utils/docs-deflection.d.ts +6 -6
  65. package/src/lib/app-utils/docs-deflection.js.map +1 -1
  66. package/src/lib/app-utils/docs-help.generated.d.ts +14 -8
  67. package/src/lib/app-utils/docs-help.generated.js +23 -6
  68. package/src/lib/app-utils/docs-help.generated.js.map +1 -1
  69. package/src/lib/app-utils/docs-index.generated.d.ts +2 -2
  70. package/src/lib/app-utils/docs-index.generated.js +570 -346
  71. package/src/lib/app-utils/docs-index.generated.js.map +1 -1
  72. package/src/lib/app-utils/docs-retrieval.d.ts +3 -3
  73. package/src/lib/app-utils/docs-retrieval.js +14 -10
  74. package/src/lib/app-utils/docs-retrieval.js.map +1 -1
  75. package/src/lib/app-utils/duplicate-resource.d.ts +4 -1
  76. package/src/lib/app-utils/duplicate-resource.js +7 -4
  77. package/src/lib/app-utils/duplicate-resource.js.map +1 -1
  78. package/src/lib/app-utils/dynamic-list-rule.d.ts +1 -1
  79. package/src/lib/app-utils/dynamic-list-rule.js +3 -3
  80. package/src/lib/app-utils/dynamic-list-rule.js.map +1 -1
  81. package/src/lib/app-utils/element-ui.d.ts +1 -1
  82. package/src/lib/app-utils/element-ui.js +1 -1
  83. package/src/lib/app-utils/element-ui.js.map +1 -1
  84. package/src/lib/app-utils/email-starter-policy.js +3 -3
  85. package/src/lib/app-utils/email-starter-policy.js.map +1 -1
  86. package/src/lib/app-utils/email-text.d.ts +80 -0
  87. package/src/lib/app-utils/email-text.js +189 -0
  88. package/src/lib/app-utils/email-text.js.map +1 -0
  89. package/src/lib/app-utils/{list-assignment-policy.d.ts → enrollment-basis.d.ts} +4 -0
  90. package/src/lib/app-utils/{list-assignment-policy.js → enrollment-basis.js} +5 -1
  91. package/src/lib/app-utils/enrollment-basis.js.map +1 -0
  92. package/src/lib/app-utils/entity-picker-context.d.ts +10 -5
  93. package/src/lib/app-utils/entity-picker-context.js.map +1 -1
  94. package/src/lib/app-utils/error-beacon.d.ts +75 -6
  95. package/src/lib/app-utils/error-beacon.js +160 -21
  96. package/src/lib/app-utils/error-beacon.js.map +1 -1
  97. package/src/lib/app-utils/expand-repeatables.d.ts +10 -10
  98. package/src/lib/app-utils/expand-repeatables.js +14 -14
  99. package/src/lib/app-utils/expand-repeatables.js.map +1 -1
  100. package/src/lib/app-utils/forms.js +2 -2
  101. package/src/lib/app-utils/forms.js.map +1 -1
  102. package/src/lib/app-utils/health-report.d.ts +2 -3
  103. package/src/lib/app-utils/health-report.js +8 -6
  104. package/src/lib/app-utils/health-report.js.map +1 -1
  105. package/src/lib/app-utils/host-events.d.ts +82 -0
  106. package/src/lib/app-utils/host-events.js +62 -0
  107. package/src/lib/app-utils/host-events.js.map +1 -0
  108. package/src/lib/app-utils/inbound-mail-domain.d.ts +27 -0
  109. package/src/lib/app-utils/inbound-mail-domain.js +31 -0
  110. package/src/lib/app-utils/inbound-mail-domain.js.map +1 -0
  111. package/src/lib/app-utils/lockdown.d.ts +11 -0
  112. package/src/lib/app-utils/lockdown.js +33 -3
  113. package/src/lib/app-utils/lockdown.js.map +1 -1
  114. package/src/lib/app-utils/margin-utilization.d.ts +4 -69
  115. package/src/lib/app-utils/margin-utilization.js +82 -69
  116. package/src/lib/app-utils/margin-utilization.js.map +1 -1
  117. package/src/lib/app-utils/member-email-aliases.d.ts +25 -0
  118. package/src/lib/app-utils/member-email-aliases.js +29 -0
  119. package/src/lib/app-utils/member-email-aliases.js.map +1 -1
  120. package/src/lib/app-utils/node-definition-sanitizer.d.ts +16 -16
  121. package/src/lib/app-utils/node-definition-sanitizer.js +24 -20
  122. package/src/lib/app-utils/node-definition-sanitizer.js.map +1 -1
  123. package/src/lib/app-utils/node-interactions.d.ts +7 -7
  124. package/src/lib/app-utils/node-interactions.js.map +1 -1
  125. package/src/lib/app-utils/notifications.d.ts +147 -47
  126. package/src/lib/app-utils/notifications.js +182 -44
  127. package/src/lib/app-utils/notifications.js.map +1 -1
  128. package/src/lib/app-utils/operator-alerts.d.ts +15 -1
  129. package/src/lib/app-utils/operator-alerts.js +47 -10
  130. package/src/lib/app-utils/operator-alerts.js.map +1 -1
  131. package/src/lib/app-utils/payments-configured.d.ts +8 -21
  132. package/src/lib/app-utils/payments-configured.js +8 -23
  133. package/src/lib/app-utils/payments-configured.js.map +1 -1
  134. package/src/lib/app-utils/plan-entitlements.d.ts +207 -306
  135. package/src/lib/app-utils/plan-entitlements.js +345 -528
  136. package/src/lib/app-utils/plan-entitlements.js.map +1 -1
  137. package/src/lib/app-utils/platform-brand.d.ts +10 -0
  138. package/src/lib/app-utils/platform-brand.js +14 -3
  139. package/src/lib/app-utils/platform-brand.js.map +1 -1
  140. package/src/lib/app-utils/platform-marketing-consent.d.ts +56 -2
  141. package/src/lib/app-utils/platform-marketing-consent.js +6 -5
  142. package/src/lib/app-utils/platform-marketing-consent.js.map +1 -1
  143. package/src/lib/app-utils/plugin-api-rate-limit.d.ts +7 -1
  144. package/src/lib/app-utils/plugin-api-rate-limit.js +11 -3
  145. package/src/lib/app-utils/plugin-api-rate-limit.js.map +1 -1
  146. package/src/lib/app-utils/plugin-bundle-checks.js +2 -2
  147. package/src/lib/app-utils/plugin-bundle-checks.js.map +1 -1
  148. package/src/lib/app-utils/plugin-host-events.generated.d.ts +12 -0
  149. package/src/lib/app-utils/plugin-host-events.generated.js +169 -0
  150. package/src/lib/app-utils/plugin-host-events.generated.js.map +1 -0
  151. package/src/lib/app-utils/plugin-release-flags.generated.d.ts +12 -0
  152. package/src/lib/app-utils/plugin-release-flags.generated.js +106 -0
  153. package/src/lib/app-utils/plugin-release-flags.generated.js.map +1 -0
  154. package/src/lib/app-utils/plugin-starter-templates.generated.d.ts +12 -0
  155. package/src/lib/app-utils/plugin-starter-templates.generated.js +711 -0
  156. package/src/lib/app-utils/plugin-starter-templates.generated.js.map +1 -0
  157. package/src/lib/app-utils/realm-host-surface.generated.js +2 -0
  158. package/src/lib/app-utils/realm-host-surface.generated.js.map +1 -1
  159. package/src/lib/app-utils/release-flags.d.ts +14 -5
  160. package/src/lib/app-utils/release-flags.js +21 -125
  161. package/src/lib/app-utils/release-flags.js.map +1 -1
  162. package/src/lib/app-utils/repeat-query.d.ts +56 -0
  163. package/src/lib/app-utils/{dataset-query.js → repeat-query.js} +16 -16
  164. package/src/lib/app-utils/repeat-query.js.map +1 -0
  165. package/src/lib/app-utils/repeat-sources.d.ts +9 -0
  166. package/src/lib/app-utils/repeat-sources.js.map +1 -1
  167. package/src/lib/app-utils/retained-refusals.d.ts +73 -0
  168. package/src/lib/app-utils/retained-refusals.js +186 -0
  169. package/src/lib/app-utils/retained-refusals.js.map +1 -0
  170. package/src/lib/app-utils/scope-tokens.d.ts +27 -0
  171. package/src/lib/app-utils/scope-tokens.js +61 -0
  172. package/src/lib/app-utils/scope-tokens.js.map +1 -1
  173. package/src/lib/app-utils/screen-link-context.js +3 -3
  174. package/src/lib/app-utils/screen-link-context.js.map +1 -1
  175. package/src/lib/app-utils/screen-route.js +1 -1
  176. package/src/lib/app-utils/screen-route.js.map +1 -1
  177. package/src/lib/app-utils/seo-audit.d.ts +132 -0
  178. package/src/lib/app-utils/seo-audit.js +246 -0
  179. package/src/lib/app-utils/seo-audit.js.map +1 -0
  180. package/src/lib/app-utils/seo-keywords.d.ts +48 -0
  181. package/src/lib/app-utils/seo-keywords.js +60 -0
  182. package/src/lib/app-utils/seo-keywords.js.map +1 -0
  183. package/src/lib/app-utils/seo-page-facts.d.ts +66 -0
  184. package/src/lib/app-utils/seo-page-facts.js +155 -0
  185. package/src/lib/app-utils/seo-page-facts.js.map +1 -0
  186. package/src/lib/app-utils/seo-site-scan.d.ts +126 -0
  187. package/src/lib/app-utils/seo-site-scan.js +162 -0
  188. package/src/lib/app-utils/seo-site-scan.js.map +1 -0
  189. package/src/lib/app-utils/seo-title-variables.js +1 -1
  190. package/src/lib/app-utils/seo-title-variables.js.map +1 -1
  191. package/src/lib/app-utils/server.d.ts +13 -18
  192. package/src/lib/app-utils/server.js +33 -51
  193. package/src/lib/app-utils/server.js.map +1 -1
  194. package/src/lib/app-utils/site-interactions.d.ts +501 -0
  195. package/src/lib/app-utils/site-interactions.js +554 -0
  196. package/src/lib/app-utils/site-interactions.js.map +1 -0
  197. package/src/lib/app-utils/{marketplace-theme.d.ts → site-theme.d.ts} +13 -2
  198. package/src/lib/app-utils/{marketplace-theme.js → site-theme.js} +2 -2
  199. package/src/lib/app-utils/site-theme.js.map +1 -0
  200. package/src/lib/app-utils/sitemap.d.ts +4 -3
  201. package/src/lib/app-utils/sitemap.js +9 -7
  202. package/src/lib/app-utils/sitemap.js.map +1 -1
  203. package/src/lib/app-utils/stale-build-error.d.ts +51 -0
  204. package/src/lib/app-utils/stale-build-error.js +100 -1
  205. package/src/lib/app-utils/stale-build-error.js.map +1 -1
  206. package/src/lib/app-utils/starter-template-nodes.d.ts +137 -0
  207. package/src/lib/app-utils/starter-template-nodes.js +129 -0
  208. package/src/lib/app-utils/starter-template-nodes.js.map +1 -0
  209. package/src/lib/app-utils/starter-templates.d.ts +11 -34
  210. package/src/lib/app-utils/starter-templates.js +19 -230
  211. package/src/lib/app-utils/starter-templates.js.map +1 -1
  212. package/src/lib/app-utils/{email-topics.d.ts → subscription-topics.d.ts} +64 -48
  213. package/src/lib/app-utils/{email-topics.js → subscription-topics.js} +39 -109
  214. package/src/lib/app-utils/subscription-topics.js.map +1 -0
  215. package/src/lib/app-utils/tax-jurisdiction-figures.d.ts +118 -0
  216. package/src/lib/app-utils/tax-jurisdiction-figures.js +123 -0
  217. package/src/lib/app-utils/tax-jurisdiction-figures.js.map +1 -0
  218. package/src/lib/app-utils/theme-library.d.ts +10 -3
  219. package/src/lib/app-utils/theme-library.js +13 -4
  220. package/src/lib/app-utils/theme-library.js.map +1 -1
  221. package/src/lib/app-utils/usage-budget.d.ts +73 -188
  222. package/src/lib/app-utils/usage-budget.js +58 -194
  223. package/src/lib/app-utils/usage-budget.js.map +1 -1
  224. package/src/lib/app-utils/{campaign-attribution.d.ts → utm-attribution.d.ts} +11 -6
  225. package/src/lib/app-utils/{campaign-attribution.js → utm-attribution.js} +13 -8
  226. package/src/lib/app-utils/utm-attribution.js.map +1 -0
  227. package/src/lib/app-utils/{campaign-forwarding.d.ts → utm-forwarding.d.ts} +14 -14
  228. package/src/lib/app-utils/{campaign-forwarding.js → utm-forwarding.js} +26 -26
  229. package/src/lib/app-utils/utm-forwarding.js.map +1 -0
  230. package/src/lib/app-utils/{campaign-touch.d.ts → utm-touch.d.ts} +25 -17
  231. package/src/lib/app-utils/{campaign-touch.js → utm-touch.js} +38 -30
  232. package/src/lib/app-utils/utm-touch.js.map +1 -0
  233. package/src/lib/app-utils/variables.d.ts +9 -9
  234. package/src/lib/app-utils/variables.js.map +1 -1
  235. package/src/lib/app-utils/video-object.js +6 -5
  236. package/src/lib/app-utils/video-object.js.map +1 -1
  237. package/src/lib/app-utils/visitor-consent.d.ts +41 -164
  238. package/src/lib/app-utils/visitor-consent.js +66 -277
  239. package/src/lib/app-utils/visitor-consent.js.map +1 -1
  240. package/src/lib/app-utils/visitor-record-ceiling.d.ts +32 -0
  241. package/src/lib/app-utils/visitor-record-ceiling.js +39 -0
  242. package/src/lib/app-utils/visitor-record-ceiling.js.map +1 -1
  243. package/src/lib/app-utils/web-vitals-rum.d.ts +7 -7
  244. package/src/lib/app-utils/web-vitals-rum.js +31 -63
  245. package/src/lib/app-utils/web-vitals-rum.js.map +1 -1
  246. package/src/lib/app-utils/where-used.d.ts +11 -6
  247. package/src/lib/app-utils/where-used.js +3 -8
  248. package/src/lib/app-utils/where-used.js.map +1 -1
  249. package/src/lib/foundation/definitions/components.types.d.ts +1 -1
  250. package/src/lib/foundation/definitions/components.types.js +1 -1
  251. package/src/lib/foundation/definitions/components.types.js.map +1 -1
  252. package/src/lib/foundation/definitions/org-billing.types.d.ts +11 -137
  253. package/src/lib/foundation/definitions/org-billing.types.js.map +1 -1
  254. package/src/lib/foundation/definitions/organization.types.d.ts +1 -3
  255. package/src/lib/foundation/definitions/organization.types.js.map +1 -1
  256. package/src/lib/foundation/definitions/platform.types.d.ts +11 -5
  257. package/src/lib/foundation/definitions/platform.types.js.map +1 -1
  258. package/src/lib/foundation/definitions/write-deny-coverage.util.d.ts +16 -0
  259. package/src/lib/foundation/definitions/write-deny-coverage.util.js +20 -0
  260. package/src/lib/foundation/definitions/write-deny-coverage.util.js.map +1 -1
  261. package/src/lib/foundation/index.d.ts +1 -1
  262. package/src/lib/foundation/index.js.map +1 -1
  263. package/src/lib/plugin-manager/besigner-documents.d.ts +96 -0
  264. package/src/lib/plugin-manager/besigner-documents.js +61 -0
  265. package/src/lib/plugin-manager/besigner-documents.js.map +1 -0
  266. package/src/lib/plugin-manager/computed-variables.d.ts +71 -0
  267. package/src/lib/plugin-manager/computed-variables.js +74 -0
  268. package/src/lib/plugin-manager/computed-variables.js.map +1 -0
  269. package/src/lib/plugin-manager/custom-fields.d.ts +29 -2
  270. package/src/lib/plugin-manager/custom-fields.js +47 -1
  271. package/src/lib/plugin-manager/custom-fields.js.map +1 -1
  272. package/src/lib/plugin-manager/feature-plugins.d.ts +372 -99
  273. package/src/lib/plugin-manager/feature-plugins.js +126 -51
  274. package/src/lib/plugin-manager/feature-plugins.js.map +1 -1
  275. package/src/lib/plugin-manager/first-party-plugins.generated.d.ts +134 -0
  276. package/src/lib/plugin-manager/first-party-plugins.generated.js +840 -10
  277. package/src/lib/plugin-manager/first-party-plugins.generated.js.map +1 -1
  278. package/src/lib/plugin-manager/index.d.ts +0 -1
  279. package/src/lib/plugin-manager/index.js +0 -1
  280. package/src/lib/plugin-manager/index.js.map +1 -1
  281. package/src/lib/plugin-manager/plugin-activity-actions.d.ts +12 -0
  282. package/src/lib/plugin-manager/plugin-activity-actions.js +25 -0
  283. package/src/lib/plugin-manager/plugin-activity-actions.js.map +1 -1
  284. package/src/lib/plugin-manager/plugin-contact-capture.d.ts +9 -4
  285. package/src/lib/plugin-manager/plugin-contact-capture.js.map +1 -1
  286. package/src/lib/plugin-manager/plugin-containers.d.ts +68 -0
  287. package/src/lib/plugin-manager/plugin-containers.generated.d.ts +10 -0
  288. package/src/lib/plugin-manager/plugin-containers.generated.js +20 -0
  289. package/src/lib/plugin-manager/plugin-containers.generated.js.map +1 -0
  290. package/src/lib/plugin-manager/plugin-containers.js +27 -0
  291. package/src/lib/plugin-manager/plugin-containers.js.map +1 -0
  292. package/src/lib/plugin-manager/plugin-contributions.d.ts +1 -1
  293. package/src/lib/plugin-manager/plugin-contributions.js.map +1 -1
  294. package/src/lib/plugin-manager/plugin-declarations-repair.d.ts +36 -0
  295. package/src/lib/plugin-manager/plugin-declarations-repair.js +64 -0
  296. package/src/lib/plugin-manager/plugin-declarations-repair.js.map +1 -0
  297. package/src/lib/plugin-manager/plugin-dependents.d.ts +101 -0
  298. package/src/lib/plugin-manager/plugin-dependents.js +75 -0
  299. package/src/lib/plugin-manager/plugin-dependents.js.map +1 -0
  300. package/src/lib/plugin-manager/plugin-distribution.d.ts +55 -0
  301. package/src/lib/plugin-manager/plugin-distribution.js +45 -0
  302. package/src/lib/plugin-manager/plugin-distribution.js.map +1 -0
  303. package/src/lib/plugin-manager/plugin-entitlements.d.ts +8 -0
  304. package/src/lib/plugin-manager/plugin-entitlements.js.map +1 -1
  305. package/src/lib/plugin-manager/plugin-host-collections.d.ts +17 -0
  306. package/src/lib/plugin-manager/plugin-host-collections.js +6 -0
  307. package/src/lib/plugin-manager/plugin-host-collections.js.map +1 -1
  308. package/src/lib/plugin-manager/plugin-host-resources.d.ts +133 -0
  309. package/src/lib/plugin-manager/plugin-host-resources.js +52 -0
  310. package/src/lib/plugin-manager/plugin-host-resources.js.map +1 -0
  311. package/src/lib/plugin-manager/plugin-membership-detach.js +1 -1
  312. package/src/lib/plugin-manager/plugin-membership-detach.js.map +1 -1
  313. package/src/lib/plugin-manager/plugin-org-erasure.d.ts +28 -2
  314. package/src/lib/plugin-manager/plugin-org-erasure.js +61 -2
  315. package/src/lib/plugin-manager/plugin-org-erasure.js.map +1 -1
  316. package/src/lib/plugin-manager/plugin-plan-entitlements.d.ts +123 -0
  317. package/src/lib/plugin-manager/plugin-plan-entitlements.js +101 -0
  318. package/src/lib/plugin-manager/plugin-plan-entitlements.js.map +1 -0
  319. package/src/lib/plugin-manager/plugin-record-email-state.d.ts +69 -0
  320. package/src/lib/plugin-manager/plugin-record-email-state.js +32 -0
  321. package/src/lib/plugin-manager/plugin-record-email-state.js.map +1 -1
  322. package/src/lib/plugin-manager/plugin-record-index.d.ts +95 -0
  323. package/src/lib/plugin-manager/plugin-record-index.js +51 -0
  324. package/src/lib/plugin-manager/plugin-record-index.js.map +1 -0
  325. package/src/lib/plugin-manager/plugin-record-lists.d.ts +115 -0
  326. package/src/lib/plugin-manager/plugin-record-lists.js +75 -0
  327. package/src/lib/plugin-manager/plugin-record-lists.js.map +1 -0
  328. package/src/lib/plugin-manager/plugin-record-timeline.d.ts +42 -8
  329. package/src/lib/plugin-manager/plugin-record-timeline.js.map +1 -1
  330. package/src/lib/plugin-manager/plugin-record-written.d.ts +58 -0
  331. package/src/lib/plugin-manager/plugin-record-written.js +42 -0
  332. package/src/lib/plugin-manager/plugin-record-written.js.map +1 -0
  333. package/src/lib/plugin-manager/plugin-revenue-sources.d.ts +213 -0
  334. package/src/lib/plugin-manager/plugin-revenue-sources.js +194 -0
  335. package/src/lib/plugin-manager/plugin-revenue-sources.js.map +1 -0
  336. package/src/lib/plugin-manager/plugin-site-beacons.d.ts +71 -0
  337. package/src/lib/plugin-manager/plugin-site-beacons.js +54 -0
  338. package/src/lib/plugin-manager/plugin-site-beacons.js.map +1 -0
  339. package/src/lib/plugin-manager/plugin-site-bundle.d.ts +145 -0
  340. package/src/lib/plugin-manager/plugin-site-bundle.js +78 -0
  341. package/src/lib/plugin-manager/plugin-site-bundle.js.map +1 -0
  342. package/src/lib/plugin-manager/plugin-site-cache.d.ts +12 -0
  343. package/src/lib/plugin-manager/plugin-site-cache.js.map +1 -1
  344. package/src/lib/plugin-manager/plugin-site-export.d.ts +81 -0
  345. package/src/lib/plugin-manager/plugin-site-export.js +40 -0
  346. package/src/lib/plugin-manager/plugin-site-export.js.map +1 -0
  347. package/src/lib/plugin-manager/plugin-sitemap-sections.d.ts +88 -0
  348. package/src/lib/plugin-manager/plugin-sitemap-sections.js +29 -0
  349. package/src/lib/plugin-manager/plugin-sitemap-sections.js.map +1 -0
  350. package/src/lib/plugin-manager/plugin-subscription-topics.generated.d.ts +11 -0
  351. package/src/lib/plugin-manager/plugin-subscription-topics.generated.js +41 -0
  352. package/src/lib/plugin-manager/plugin-subscription-topics.generated.js.map +1 -0
  353. package/src/lib/plugin-manager/plugin-tax-profile.d.ts +20 -4
  354. package/src/lib/plugin-manager/plugin-tax-profile.js.map +1 -1
  355. package/src/lib/plugin-manager/plugin-tax-return-sources.d.ts +255 -0
  356. package/src/lib/plugin-manager/plugin-tax-return-sources.js +191 -0
  357. package/src/lib/plugin-manager/plugin-tax-return-sources.js.map +1 -0
  358. package/src/lib/plugin-manager/plugin-template-sources.d.ts +75 -0
  359. package/src/lib/plugin-manager/plugin-template-sources.js +37 -0
  360. package/src/lib/plugin-manager/plugin-template-sources.js.map +1 -0
  361. package/src/lib/plugin-manager/plugin-usage-axes.d.ts +319 -0
  362. package/src/lib/plugin-manager/plugin-usage-axes.js +186 -0
  363. package/src/lib/plugin-manager/plugin-usage-axes.js.map +1 -0
  364. package/src/lib/plugin-manager/plugin-usage-meters.d.ts +108 -0
  365. package/src/lib/plugin-manager/plugin-usage-meters.js +105 -0
  366. package/src/lib/plugin-manager/plugin-usage-meters.js.map +1 -0
  367. package/src/lib/plugin-manager/plugin-zones.d.ts +4 -5
  368. package/src/lib/plugin-manager/plugin-zones.js.map +1 -1
  369. package/src/lib/plugin-manager/realm-host-aglyn.generated.js +2 -0
  370. package/src/lib/plugin-manager/realm-host-aglyn.generated.js.map +1 -1
  371. package/src/lib/plugin-manager/record-captured-contact.d.ts +1 -14
  372. package/src/lib/plugin-manager/record-captured-contact.js +10 -32
  373. package/src/lib/plugin-manager/record-captured-contact.js.map +1 -1
  374. package/src/lib/plugin-manager/repeat-rows.d.ts +124 -0
  375. package/src/lib/plugin-manager/repeat-rows.js +108 -0
  376. package/src/lib/plugin-manager/repeat-rows.js.map +1 -0
  377. package/src/lib/plugin-manager/submission-record-target.d.ts +144 -0
  378. package/src/lib/plugin-manager/submission-record-target.js +125 -0
  379. package/src/lib/plugin-manager/submission-record-target.js.map +1 -0
  380. package/src/lib/plugin-manager/usage-alert-contributors.d.ts +76 -6
  381. package/src/lib/plugin-manager/usage-alert-contributors.js +23 -10
  382. package/src/lib/plugin-manager/usage-alert-contributors.js.map +1 -1
  383. package/src/lib/plugin-manager/video-embed-provider.d.ts +108 -0
  384. package/src/lib/plugin-manager/video-embed-provider.js +165 -0
  385. package/src/lib/plugin-manager/video-embed-provider.js.map +1 -0
  386. package/src/lib/types/nodes.d.ts +2 -2
  387. package/src/lib/types/nodes.js.map +1 -1
  388. package/src/lib/app-utils/assist-credits.d.ts +0 -482
  389. package/src/lib/app-utils/assist-credits.js +0 -509
  390. package/src/lib/app-utils/assist-credits.js.map +0 -1
  391. package/src/lib/app-utils/campaign-attribution.js.map +0 -1
  392. package/src/lib/app-utils/campaign-forwarding.js.map +0 -1
  393. package/src/lib/app-utils/campaign-membership.d.ts +0 -121
  394. package/src/lib/app-utils/campaign-membership.js +0 -189
  395. package/src/lib/app-utils/campaign-membership.js.map +0 -1
  396. package/src/lib/app-utils/campaign-touch.js.map +0 -1
  397. package/src/lib/app-utils/console-record-links.d.ts +0 -163
  398. package/src/lib/app-utils/console-record-links.js +0 -180
  399. package/src/lib/app-utils/console-record-links.js.map +0 -1
  400. package/src/lib/app-utils/contact-holder.d.ts +0 -68
  401. package/src/lib/app-utils/contact-holder.js +0 -129
  402. package/src/lib/app-utils/contact-holder.js.map +0 -1
  403. package/src/lib/app-utils/contact-merge.d.ts +0 -136
  404. package/src/lib/app-utils/contact-merge.js +0 -412
  405. package/src/lib/app-utils/contact-merge.js.map +0 -1
  406. package/src/lib/app-utils/crm-booking.d.ts +0 -75
  407. package/src/lib/app-utils/crm-booking.js +0 -133
  408. package/src/lib/app-utils/crm-booking.js.map +0 -1
  409. package/src/lib/app-utils/crm-csv.d.ts +0 -239
  410. package/src/lib/app-utils/crm-csv.js +0 -467
  411. package/src/lib/app-utils/crm-csv.js.map +0 -1
  412. package/src/lib/app-utils/crm-digest.d.ts +0 -185
  413. package/src/lib/app-utils/crm-digest.js +0 -272
  414. package/src/lib/app-utils/crm-digest.js.map +0 -1
  415. package/src/lib/app-utils/crm-inbound.d.ts +0 -245
  416. package/src/lib/app-utils/crm-inbound.js +0 -407
  417. package/src/lib/app-utils/crm-inbound.js.map +0 -1
  418. package/src/lib/app-utils/crm-reports.d.ts +0 -479
  419. package/src/lib/app-utils/crm-reports.js +0 -680
  420. package/src/lib/app-utils/crm-reports.js.map +0 -1
  421. package/src/lib/app-utils/dataset-csv.js.map +0 -1
  422. package/src/lib/app-utils/dataset-query.d.ts +0 -57
  423. package/src/lib/app-utils/dataset-query.js.map +0 -1
  424. package/src/lib/app-utils/email-topics.js.map +0 -1
  425. package/src/lib/app-utils/form-dataset-binding.d.ts +0 -50
  426. package/src/lib/app-utils/form-dataset-binding.js +0 -74
  427. package/src/lib/app-utils/form-dataset-binding.js.map +0 -1
  428. package/src/lib/app-utils/list-assignment-policy.js.map +0 -1
  429. package/src/lib/app-utils/list-import.d.ts +0 -158
  430. package/src/lib/app-utils/list-import.js +0 -332
  431. package/src/lib/app-utils/list-import.js.map +0 -1
  432. package/src/lib/app-utils/marketplace-listing-visibility.d.ts +0 -122
  433. package/src/lib/app-utils/marketplace-listing-visibility.js +0 -147
  434. package/src/lib/app-utils/marketplace-listing-visibility.js.map +0 -1
  435. package/src/lib/app-utils/marketplace-overrides.js.map +0 -1
  436. package/src/lib/app-utils/marketplace-provenance.js.map +0 -1
  437. package/src/lib/app-utils/marketplace-theme.js.map +0 -1
  438. package/src/lib/app-utils/marketplace-update-state.d.ts +0 -119
  439. package/src/lib/app-utils/marketplace-update-state.js +0 -132
  440. package/src/lib/app-utils/marketplace-update-state.js.map +0 -1
  441. package/src/lib/app-utils/publisher-agreement.d.ts +0 -289
  442. package/src/lib/app-utils/publisher-agreement.js +0 -321
  443. package/src/lib/app-utils/publisher-agreement.js.map +0 -1
  444. package/src/lib/app-utils/wistia-embed.d.ts +0 -104
  445. package/src/lib/app-utils/wistia-embed.js +0 -138
  446. package/src/lib/app-utils/wistia-embed.js.map +0 -1
  447. package/src/lib/app-utils/workflows.d.ts +0 -136
  448. package/src/lib/app-utils/workflows.js +0 -346
  449. package/src/lib/app-utils/workflows.js.map +0 -1
  450. package/src/lib/plugin-manager/commerce-zone-props.d.ts +0 -172
  451. package/src/lib/plugin-manager/commerce-zone-props.js +0 -31
  452. package/src/lib/plugin-manager/commerce-zone-props.js.map +0 -1
  453. package/src/lib/plugin-manager/plugin-metered-lines.d.ts +0 -97
  454. package/src/lib/plugin-manager/plugin-metered-lines.js +0 -123
  455. package/src/lib/plugin-manager/plugin-metered-lines.js.map +0 -1
@@ -57,11 +57,108 @@ export interface AglynNotification {
57
57
  * `tools/scripts/backfill-notification-read.mjs` stamps.
58
58
  */
59
59
  read?: boolean;
60
+ /**
61
+ * How urgently this one notification asks to be read (AGL-3437), stamped
62
+ * by its emitter. Absent on a notification whose emitter has no reason to
63
+ * say more than its type does, and on everything written before the field
64
+ * existed; read it through {@link notificationLevel}, never directly.
65
+ */
66
+ level?: NotificationLevel;
60
67
  }
61
68
  export declare const NOTIFICATION_TYPE_LABELS: Record<AglynNotificationType, string>;
62
- /** Preference buckets (AGL-267): the prefix before the dot. */
63
- export type NotificationCategory = 'billing' | 'team' | 'content' | 'marketplace' | 'support' | 'system' | 'staff';
64
- export declare const NOTIFICATION_CATEGORY_LABELS: Record<NotificationCategory, string>;
69
+ /**
70
+ * HOW LOUD A NOTIFICATION IS (AGL-3437), which the console draws as its
71
+ * color, icon and accent.
72
+ *
73
+ * - `critical` — something stopped, money is moving with nobody looking, or
74
+ * fraud: a fraud signal, a failed payment, a form that stopped accepting.
75
+ * - `warning` — something degraded or is close to stopping: a health check
76
+ * degraded, a limit reached, low stock.
77
+ * - `success` — good news: an account, a workspace or a subscription
78
+ * started, an order or a booking arrived, a health check recovered.
79
+ * - `info` — worth reading, nothing wrong: an invite, a ticket reply, a
80
+ * usage step on the way to a limit.
81
+ * - `neutral` — routine work arriving: a form submission, an assignment, a
82
+ * digest.
83
+ *
84
+ * A level is a property of the NOTIFICATION, not only of its type: one
85
+ * `system.operatorAlert` says a check degraded and the next says it
86
+ * recovered, and a usage notice at 75% is not the one at 100%. The emitter
87
+ * stamps `level` when it knows more than the type; the type's default in
88
+ * {@link NOTIFICATION_TYPE_LEVELS} answers for everything else.
89
+ */
90
+ export type NotificationLevel = 'critical' | 'warning' | 'success' | 'info' | 'neutral';
91
+ /** Every level, loudest first — the order {@link loudestNotificationLevel} ranks by. */
92
+ export declare const NOTIFICATION_LEVELS: readonly NotificationLevel[];
93
+ export declare const NOTIFICATION_LEVEL_LABELS: Record<NotificationLevel, string>;
94
+ /**
95
+ * Each core type's level when its emitter stamps none. A plugin's types are
96
+ * not listed: a plugin emitter stamps `level` itself, and an unstamped one
97
+ * reads as `neutral`.
98
+ *
99
+ * A type the operator alert registry raises under its own notification type
100
+ * must agree with that alert's level, so the backlog written before `level`
101
+ * existed reads the same as what the registry writes today
102
+ * (`notification-levels.spec.ts` holds the two together).
103
+ */
104
+ export declare const NOTIFICATION_TYPE_LEVELS: Record<AglynNotificationType, NotificationLevel>;
105
+ /** Whether a stored value is a level this build knows. */
106
+ export declare function isNotificationLevel(value: unknown): value is NotificationLevel;
107
+ /**
108
+ * A notification's level: what its emitter stamped, else its type's
109
+ * default, else `neutral`. A stamped value this build does not know — a
110
+ * level added later, read by an older console — falls back the same way
111
+ * rather than drawing nothing.
112
+ */
113
+ export declare function notificationLevel(notification: {
114
+ type?: string;
115
+ level?: unknown;
116
+ } | null | undefined): NotificationLevel;
117
+ /**
118
+ * A usage notice's level at `percent` of its allowance: `info` on a step
119
+ * toward it, `warning` once it is reached. Every usage, budget and allotment
120
+ * notice says the same thing at the same step, so they share this.
121
+ */
122
+ export declare function usageNotificationLevel(percent: number): NotificationLevel;
123
+ /** The loudest of several levels, or `neutral` for none. */
124
+ export declare function loudestNotificationLevel(levels: Iterable<NotificationLevel>): NotificationLevel;
125
+ /**
126
+ * The preference buckets the platform owns (AGL-267): the prefix before the
127
+ * dot. A plugin adds its own through {@link NotificationCategoryDeclaration},
128
+ * so this union is the core's and nothing else's.
129
+ */
130
+ export type CoreNotificationCategory = 'billing' | 'team' | 'content' | 'support' | 'system' | 'staff';
131
+ /**
132
+ * A preference bucket: one of the core's, or one a first-party plugin
133
+ * declares. The id is persisted — it keys every stored preference map — so a
134
+ * declared id keeps its meaning only while its declaration keeps its spelling.
135
+ */
136
+ export type NotificationCategory = CoreNotificationCategory | (string & {});
137
+ /**
138
+ * A notification category a plugin declares for the notifications it sends
139
+ * (AGL-3080), under `notificationCategories` in `plugins.config.json`.
140
+ *
141
+ * Compiled rather than registered: `notifyUsers` resolves a recipient's
142
+ * channels in server processes that load no plugin, and the settings page
143
+ * draws its rows before any plugin could register. A category that had to
144
+ * wait for its plugin would read as `system` until then — so a person who had
145
+ * muted it would be told, and a person who had asked for its email would not.
146
+ * The generator refuses an id the core owns or another plugin declares.
147
+ */
148
+ export interface NotificationCategoryDeclaration {
149
+ /** The plugin whose notifications carry this prefix. */
150
+ pluginId: string;
151
+ /** The type prefix, and the key every stored preference is written under. */
152
+ id: string;
153
+ /** The row's name on the settings page. */
154
+ label: string;
155
+ /** What arrives under it, in the reader's words — see {@link NOTIFICATION_CATEGORY_DESCRIPTIONS}. */
156
+ description: string;
157
+ /** What each channel does before anybody says — see {@link NOTIFICATION_CHANNEL_DEFAULTS}. */
158
+ defaults: Record<NotificationChannel, boolean>;
159
+ }
160
+ /** Every category's row name, the core's and the declared, in page order. */
161
+ export declare const NOTIFICATION_CATEGORY_LABELS: Readonly<Record<NotificationCategory, string>>;
65
162
  /**
66
163
  * The categories only staff can receive (AGL-3225).
67
164
  *
@@ -71,21 +168,13 @@ export declare const NOTIFICATION_CATEGORY_LABELS: Record<NotificationCategory,
71
168
  * enumerates the `staff` claim rather than reading this.
72
169
  */
73
170
  export declare const STAFF_NOTIFICATION_CATEGORIES: ReadonlySet<NotificationCategory>;
171
+ export declare const NOTIFICATION_CATEGORY_DESCRIPTIONS: Readonly<Record<NotificationCategory, string>>;
74
172
  /**
75
- * What each category actually covers, in the reader's words (AGL-3251).
76
- *
77
- * The settings page listed seven bare labels and two switches, so deciding
78
- * whether to silence `Product & system` meant guessing what was in it. The
79
- * type labels beneath each row now name the contents exactly; this is the
80
- * one-line answer for somebody who does not want to expand anything.
81
- *
82
- * Written as what ARRIVES rather than as what the bucket is called: "someone
83
- * joins, a role changes" is checkable against your own feed in a way that
84
- * "team and access events" is not. Exhaustive `Record`, like the channel
85
- * defaults below — a new category cannot ship without somebody saying in
86
- * plain words what lands in it.
173
+ * The bucket a type falls in: its prefix, when a category of that id exists,
174
+ * and `system` otherwise — the bucket nobody mutes to reduce noise, so a type
175
+ * nothing claims still reaches the person rather than riding a mute they set
176
+ * for something else.
87
177
  */
88
- export declare const NOTIFICATION_CATEGORY_DESCRIPTIONS: Record<NotificationCategory, string>;
89
178
  export declare function notificationCategory(type: AglynNotificationType | string): NotificationCategory;
90
179
  /**
91
180
  * Per-user mute map stored at `users/{uid}.notificationPrefs`
@@ -94,26 +183,42 @@ export declare function notificationCategory(type: AglynNotificationType | strin
94
183
  export declare function notificationMuted(prefs: Record<string, boolean> | null | undefined, type: AglynNotificationType | string): boolean;
95
184
  /**
96
185
  * The field on `users/{uid}` that holds a person's digest switches
97
- * (AGL-2619): `{ crmDaily: false }` turns the daily CRM digest off, and an
98
- * absent key leaves it on. Its own map rather than a key in
99
- * `notificationPrefs`, because that map is keyed by CATEGORY and read by
100
- * {@link notificationMuted} — a digest is a schedule a person keeps or
101
- * drops, not a bucket of types, and one switch governs both the console
102
- * notification and the email it travels with.
186
+ * (AGL-2619): `{ [digestKey]: false }` turns one digest off, and an absent key
187
+ * leaves it on. Its own map rather than a key in `notificationPrefs`, because
188
+ * that map is keyed by CATEGORY and read by {@link notificationMuted} — a
189
+ * digest is a schedule a person keeps or drops, not a bucket of types, and one
190
+ * switch governs both the console notification and the email it travels with.
103
191
  */
104
192
  export declare const DIGEST_PREFS_FIELD = "digestPrefs";
105
193
  /**
106
- * The key the daily CRM digest keeps inside {@link DIGEST_PREFS_FIELD}.
194
+ * A digest a plugin sends on its own schedule (AGL-3080), declared under
195
+ * `notificationDigests` in `plugins.config.json` so the settings page can draw
196
+ * its switch without loading the plugin, and the plugin's sender and that
197
+ * switch read one key.
107
198
  *
108
- * Exported so the console writes the switch through a name rather than a
109
- * second copy of the string (AGL-3230). The reader below and the page that
110
- * flips it were spelling the same literal in two files, which is how a
111
- * preference comes to be written under one key and read under another — and
112
- * it kept the plugin's vocabulary in a console page, where
113
- * `check:plugin-domain-in-core` rightly refuses it.
199
+ * On until the person turns it off: the key is stored in
200
+ * {@link DIGEST_PREFS_FIELD} only once somebody has said no. The key is
201
+ * persisted, so it keeps its spelling for as long as anybody's switch is
202
+ * stored under it.
203
+ */
204
+ export interface NotificationDigestDeclaration {
205
+ /** The plugin that composes and sends it. */
206
+ pluginId: string;
207
+ /** The key its switch is stored under in {@link DIGEST_PREFS_FIELD}. */
208
+ key: string;
209
+ /** The switch's name. */
210
+ label: string;
211
+ /** When it arrives and what it holds, in the reader's words. */
212
+ description: string;
213
+ }
214
+ /** Every declared digest, in the order the settings page lists them. */
215
+ export declare const NOTIFICATION_DIGESTS: readonly NotificationDigestDeclaration[];
216
+ /**
217
+ * Whether a person keeps one digest: on unless its key is stored `false`. It
218
+ * reads only its own key — a category mute lives in a different map and does
219
+ * not reach it.
114
220
  */
115
- export declare const CRM_DAILY_DIGEST_KEY = "crmDaily";
116
- export declare function crmDailyDigestEnabled(prefs: Record<string, boolean> | null | undefined): boolean;
221
+ export declare function digestEnabled(prefs: Record<string, boolean> | null | undefined, key: string): boolean;
117
222
  /**
118
223
  * The field on `users/{uid}` naming the workspaces whose weekly insights a
119
224
  * person asked for (AGL-2915): `{ [orgId]: true }`. OPT-IN, unlike the CRM
@@ -217,33 +322,28 @@ export interface NotificationSettings {
217
322
  hostTypes?: Record<string, NotificationTypePrefs>;
218
323
  }
219
324
  export declare const NOTIFICATION_SETTINGS_FIELD = "notificationSettings";
220
- /**
221
- * What a category does when nobody has said otherwise.
222
- *
223
- * Console on, email OFF, everywhere. Email defaults off because the inbox is
224
- * not ours to fill: the product already sends transactional mail nobody opted
225
- * into — welcome, verification, invites, dunning, usage alerts — and every one
226
- * of those leaves on the same domain a customer's password reset depends on.
227
- * Turning a busy site's form submissions into mail by default would put that
228
- * domain's reputation behind traffic the recipient never asked for.
229
- *
230
- * Exhaustive `Record` deliberately: a new {@link NotificationCategory} is a
231
- * compile error here until somebody decides what it does by default, which is
232
- * the one question a new category must not be able to ship without answering.
233
- */
234
- export declare const NOTIFICATION_CHANNEL_DEFAULTS: Record<NotificationCategory, Record<NotificationChannel, boolean>>;
325
+ export declare const NOTIFICATION_CHANNEL_DEFAULTS: Readonly<Record<NotificationCategory, {
326
+ email: boolean;
327
+ console: boolean;
328
+ }>>;
235
329
  /**
236
330
  * The types that send their OWN email and must never be mailed again by the
237
331
  * generic channel (AGL-3224).
238
332
  *
239
333
  * Both digests compose a message the fan-out could not reproduce — a day's
240
334
  * owed tasks, a week's figures — and send it from their own route under their
241
- * own switch (`digestPrefs.crmDaily`, `insightDigests.{orgId}`). A recipient
335
+ * own switch (a key in `digestPrefs`, `insightDigests.{orgId}`). A recipient
242
336
  * who switches the `content` email channel on would otherwise receive the
243
337
  * digest twice: once as the digest, once as a one-line "Daily CRM digest"
244
338
  * notification saying that the digest happened.
245
339
  */
246
340
  export declare const NOTIFICATION_SELF_SENT_EMAIL_TYPES: ReadonlySet<string>;
341
+ /**
342
+ * The tooltip on a self-sent type's disabled email switch: it names what
343
+ * DOES govern that mail, which differs by type (AGL-3432). Calling a task
344
+ * reminder a digest sent people looking for a Digests switch that is not it.
345
+ */
346
+ export declare function selfSentEmailNote(type: string): string;
247
347
  /**
248
348
  * Whether a channel is on for one notification, at its own scope.
249
349
  *
@@ -13,7 +13,9 @@
13
13
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
14
  * See the License for the specific language governing permissions and
15
15
  * limitations under the License.
16
- */ import { buildRoute, Route } from "./console-routes.js";
16
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
17
+ import { buildRoute, Route } from "./console-routes.js";
18
+ import { PLUGIN_NOTIFICATION_CATEGORIES_DECLARED, PLUGIN_NOTIFICATION_DIGESTS_DECLARED } from "../plugin-manager/first-party-plugins.generated.js";
17
19
  export const NOTIFICATION_TYPE_LABELS = {
18
20
  'billing.invoice': 'Invoice available',
19
21
  'billing.paymentFailed': 'Payment failed',
@@ -57,15 +59,142 @@ export const NOTIFICATION_TYPE_LABELS = {
57
59
  'staff.planChanged': 'Plan changed',
58
60
  'staff.paymentFailed': 'Payment failed (workspace)'
59
61
  };
60
- export const NOTIFICATION_CATEGORY_LABELS = {
62
+ /** Every level, loudest first — the order {@link loudestNotificationLevel} ranks by. */ export const NOTIFICATION_LEVELS = [
63
+ 'critical',
64
+ 'warning',
65
+ 'success',
66
+ 'info',
67
+ 'neutral'
68
+ ];
69
+ export const NOTIFICATION_LEVEL_LABELS = {
70
+ critical: 'Critical',
71
+ warning: 'Warning',
72
+ success: 'Good news',
73
+ info: 'Info',
74
+ neutral: 'Routine'
75
+ };
76
+ /**
77
+ * Each core type's level when its emitter stamps none. A plugin's types are
78
+ * not listed: a plugin emitter stamps `level` itself, and an unstamped one
79
+ * reads as `neutral`.
80
+ *
81
+ * A type the operator alert registry raises under its own notification type
82
+ * must agree with that alert's level, so the backlog written before `level`
83
+ * existed reads the same as what the registry writes today
84
+ * (`notification-levels.spec.ts` holds the two together).
85
+ */ export const NOTIFICATION_TYPE_LEVELS = {
86
+ 'billing.invoice': 'neutral',
87
+ 'billing.paymentFailed': 'critical',
88
+ 'billing.subscriptionCanceled': 'critical',
89
+ // At a limit. A step on the way to it is stamped `info` by its emitter.
90
+ 'billing.usage': 'warning',
91
+ 'team.invite': 'info',
92
+ 'team.roleChanged': 'info',
93
+ 'team.hostAccessGranted': 'info',
94
+ 'content.formSubmission': 'neutral',
95
+ 'content.booking': 'success',
96
+ 'content.order': 'success',
97
+ 'content.lowStock': 'warning',
98
+ 'content.taskAssigned': 'neutral',
99
+ 'content.taskReminder': 'info',
100
+ 'content.contactAssigned': 'neutral',
101
+ 'content.leadAssigned': 'neutral',
102
+ 'content.crmDailyDigest': 'neutral',
103
+ 'content.insightsDigest': 'neutral',
104
+ 'marketplace.review': 'info',
105
+ 'support.ticketOpened': 'info',
106
+ 'support.ticketReply': 'info',
107
+ 'system.announcement': 'info',
108
+ 'system.pluginVerifierRegression': 'warning',
109
+ 'system.signInMethodRemoved': 'warning',
110
+ 'system.scopeDrift': 'info',
111
+ 'system.ssoDomainUnverified': 'warning',
112
+ 'system.formSubmissionsPaused': 'critical',
113
+ 'system.visitorRecordsPaused': 'critical',
114
+ 'system.abuseReportUrgent': 'critical',
115
+ 'system.riskNotice': 'critical',
116
+ 'system.dmcaCounterNotice': 'critical',
117
+ 'system.bandwidthCeilingTripped': 'warning',
118
+ // The site is serving the capped notice to its visitors.
119
+ 'system.bandwidthCapEngaged': 'critical',
120
+ 'system.billingWebhookHalfApplied': 'critical',
121
+ 'system.disputeUnattributed': 'critical',
122
+ // The registry stamps each alert's own level; this answers only for one
123
+ // written before it did.
124
+ 'system.operatorAlert': 'warning',
125
+ 'staff.userSignedUp': 'success',
126
+ 'staff.orgCreated': 'success',
127
+ 'staff.subscriptionStarted': 'success',
128
+ 'staff.subscriptionCanceled': 'warning',
129
+ 'staff.planChanged': 'info',
130
+ 'staff.paymentFailed': 'warning'
131
+ };
132
+ const LEVEL_SET = new Set(NOTIFICATION_LEVELS);
133
+ /** Whether a stored value is a level this build knows. */ export function isNotificationLevel(value) {
134
+ return typeof value === 'string' && LEVEL_SET.has(value);
135
+ }
136
+ /**
137
+ * A notification's level: what its emitter stamped, else its type's
138
+ * default, else `neutral`. A stamped value this build does not know — a
139
+ * level added later, read by an older console — falls back the same way
140
+ * rather than drawing nothing.
141
+ */ export function notificationLevel(notification) {
142
+ var _ref;
143
+ const stamped = notification == null ? void 0 : notification.level;
144
+ if (isNotificationLevel(stamped)) return stamped;
145
+ const byType = NOTIFICATION_TYPE_LEVELS[(_ref = notification == null ? void 0 : notification.type) != null ? _ref : ''];
146
+ return byType != null ? byType : 'neutral';
147
+ }
148
+ /**
149
+ * A usage notice's level at `percent` of its allowance: `info` on a step
150
+ * toward it, `warning` once it is reached. Every usage, budget and allotment
151
+ * notice says the same thing at the same step, so they share this.
152
+ */ export function usageNotificationLevel(percent) {
153
+ return percent >= 100 ? 'warning' : 'info';
154
+ }
155
+ /** The loudest of several levels, or `neutral` for none. */ export function loudestNotificationLevel(levels) {
156
+ let best = NOTIFICATION_LEVELS.length - 1;
157
+ for (const level of levels){
158
+ const rank = NOTIFICATION_LEVELS.indexOf(level);
159
+ if (rank >= 0 && rank < best) best = rank;
160
+ }
161
+ return NOTIFICATION_LEVELS[best];
162
+ }
163
+ /**
164
+ * The declared categories, in the order the settings page lists them: after
165
+ * the workspace's own work and before the platform's notices, which is where
166
+ * a plugin's traffic sits in a reader's day.
167
+ */ const DECLARED_CATEGORIES = PLUGIN_NOTIFICATION_CATEGORIES_DECLARED;
168
+ /**
169
+ * The core's rows listed before the declared ones. Every other core category
170
+ * follows them, in the order its `Record` spells it, so a new core category
171
+ * cannot be left off the page.
172
+ */ const LEADING_CATEGORIES = [
173
+ 'billing',
174
+ 'team',
175
+ 'content'
176
+ ];
177
+ function inCategoryOrder(core, declared) {
178
+ // Every core id is written below, so the keys the type promises are there.
179
+ const out = {};
180
+ for (const id of LEADING_CATEGORIES)out[id] = core[id];
181
+ for (const declaration of DECLARED_CATEGORIES){
182
+ out[declaration.id] = declared(declaration);
183
+ }
184
+ for (const id of Object.keys(core)){
185
+ if (!LEADING_CATEGORIES.includes(id)) out[id] = core[id];
186
+ }
187
+ return out;
188
+ }
189
+ const CORE_CATEGORY_LABELS = {
61
190
  billing: 'Billing',
62
191
  team: 'Team & access',
63
192
  content: 'Forms & bookings',
64
- marketplace: 'Marketplace',
65
193
  support: 'Support',
66
194
  system: 'Product & system',
67
195
  staff: 'Platform growth'
68
196
  };
197
+ /** Every category's row name, the core's and the declared, in page order. */ export const NOTIFICATION_CATEGORY_LABELS = inCategoryOrder(CORE_CATEGORY_LABELS, (declaration)=>declaration.label);
69
198
  /**
70
199
  * The categories only staff can receive (AGL-3225).
71
200
  *
@@ -86,29 +215,27 @@ export const NOTIFICATION_CATEGORY_LABELS = {
86
215
  *
87
216
  * Written as what ARRIVES rather than as what the bucket is called: "someone
88
217
  * joins, a role changes" is checkable against your own feed in a way that
89
- * "team and access events" is not. Exhaustive `Record`, like the channel
90
- * defaults below — a new category cannot ship without somebody saying in
91
- * plain words what lands in it.
92
- */ export const NOTIFICATION_CATEGORY_DESCRIPTIONS = {
218
+ * "team and access events" is not. Exhaustive over the core's categories,
219
+ * like the channel defaults below, and required of every declaration — a new
220
+ * category cannot ship without somebody saying in plain words what lands in
221
+ * it.
222
+ */ const CORE_CATEGORY_DESCRIPTIONS = {
93
223
  billing: 'Invoices, failed payments, cancellations, and usage that crosses a plan limit.',
94
224
  team: 'Somebody joins or leaves, a role changes, or a site is shared with you.',
95
225
  content: 'Work arriving on your sites: form submissions, bookings, orders, low stock, and the tasks and leads assigned to you.',
96
- marketplace: 'Decisions on plugin listings you submitted for review.',
97
226
  support: 'New support tickets and replies on tickets you are following.',
98
227
  system: 'Announcements, and the faults the platform finds in your account: sign-in methods removed, traffic limits reached, billing or sharing left in a broken state.',
99
228
  staff: 'New accounts, new workspaces, and money moving — subscriptions starting, changing, failing and ending — across the whole platform. Only staff receive these.'
100
229
  };
101
- export function notificationCategory(type) {
230
+ export const NOTIFICATION_CATEGORY_DESCRIPTIONS = inCategoryOrder(CORE_CATEGORY_DESCRIPTIONS, (declaration)=>declaration.description);
231
+ /**
232
+ * The bucket a type falls in: its prefix, when a category of that id exists,
233
+ * and `system` otherwise — the bucket nobody mutes to reduce noise, so a type
234
+ * nothing claims still reaches the person rather than riding a mute they set
235
+ * for something else.
236
+ */ export function notificationCategory(type) {
102
237
  const prefix = String(type).split('.')[0];
103
- return [
104
- 'billing',
105
- 'team',
106
- 'content',
107
- 'marketplace',
108
- 'support',
109
- 'system',
110
- 'staff'
111
- ].includes(prefix) ? prefix : 'system';
238
+ return Object.prototype.hasOwnProperty.call(NOTIFICATION_CATEGORY_LABELS, prefix) ? prefix : 'system';
112
239
  }
113
240
  /**
114
241
  * Per-user mute map stored at `users/{uid}.notificationPrefs`
@@ -118,25 +245,19 @@ export function notificationCategory(type) {
118
245
  }
119
246
  /**
120
247
  * The field on `users/{uid}` that holds a person's digest switches
121
- * (AGL-2619): `{ crmDaily: false }` turns the daily CRM digest off, and an
122
- * absent key leaves it on. Its own map rather than a key in
123
- * `notificationPrefs`, because that map is keyed by CATEGORY and read by
124
- * {@link notificationMuted} — a digest is a schedule a person keeps or
125
- * drops, not a bucket of types, and one switch governs both the console
126
- * notification and the email it travels with.
248
+ * (AGL-2619): `{ [digestKey]: false }` turns one digest off, and an absent key
249
+ * leaves it on. Its own map rather than a key in `notificationPrefs`, because
250
+ * that map is keyed by CATEGORY and read by {@link notificationMuted} — a
251
+ * digest is a schedule a person keeps or drops, not a bucket of types, and one
252
+ * switch governs both the console notification and the email it travels with.
127
253
  */ export const DIGEST_PREFS_FIELD = 'digestPrefs';
254
+ /** Every declared digest, in the order the settings page lists them. */ export const NOTIFICATION_DIGESTS = PLUGIN_NOTIFICATION_DIGESTS_DECLARED;
128
255
  /**
129
- * The key the daily CRM digest keeps inside {@link DIGEST_PREFS_FIELD}.
130
- *
131
- * Exported so the console writes the switch through a name rather than a
132
- * second copy of the string (AGL-3230). The reader below and the page that
133
- * flips it were spelling the same literal in two files, which is how a
134
- * preference comes to be written under one key and read under another — and
135
- * it kept the plugin's vocabulary in a console page, where
136
- * `check:plugin-domain-in-core` rightly refuses it.
137
- */ export const CRM_DAILY_DIGEST_KEY = 'crmDaily';
138
- export function crmDailyDigestEnabled(prefs) {
139
- return (prefs == null ? void 0 : prefs[CRM_DAILY_DIGEST_KEY]) !== false;
256
+ * Whether a person keeps one digest: on unless its key is stored `false`. It
257
+ * reads only its own key — a category mute lives in a different map and does
258
+ * not reach it.
259
+ */ export function digestEnabled(prefs, key) {
260
+ return (prefs == null ? void 0 : prefs[key]) !== false;
140
261
  }
141
262
  /**
142
263
  * The field on `users/{uid}` naming the workspaces whose weekly insights a
@@ -161,10 +282,12 @@ export const NOTIFICATION_SETTINGS_FIELD = 'notificationSettings';
161
282
  * Turning a busy site's form submissions into mail by default would put that
162
283
  * domain's reputation behind traffic the recipient never asked for.
163
284
  *
164
- * Exhaustive `Record` deliberately: a new {@link NotificationCategory} is a
165
- * compile error here until somebody decides what it does by default, which is
166
- * the one question a new category must not be able to ship without answering.
167
- */ export const NOTIFICATION_CHANNEL_DEFAULTS = {
285
+ * Exhaustive over the core's categories deliberately: a new
286
+ * {@link CoreNotificationCategory} is a compile error here until somebody
287
+ * decides what it does by default, which is the one question a new category
288
+ * must not be able to ship without answering — and a declared category may not
289
+ * compile without its `defaults` for the same reason.
290
+ */ const CORE_CHANNEL_DEFAULTS = {
168
291
  billing: {
169
292
  console: true,
170
293
  email: false
@@ -177,10 +300,6 @@ export const NOTIFICATION_SETTINGS_FIELD = 'notificationSettings';
177
300
  console: true,
178
301
  email: false
179
302
  },
180
- marketplace: {
181
- console: true,
182
- email: false
183
- },
184
303
  support: {
185
304
  console: true,
186
305
  email: false
@@ -198,22 +317,41 @@ export const NOTIFICATION_SETTINGS_FIELD = 'notificationSettings';
198
317
  email: false
199
318
  }
200
319
  };
320
+ export const NOTIFICATION_CHANNEL_DEFAULTS = inCategoryOrder(CORE_CHANNEL_DEFAULTS, (declaration)=>_extends({}, declaration.defaults));
201
321
  /**
202
322
  * The types that send their OWN email and must never be mailed again by the
203
323
  * generic channel (AGL-3224).
204
324
  *
205
325
  * Both digests compose a message the fan-out could not reproduce — a day's
206
326
  * owed tasks, a week's figures — and send it from their own route under their
207
- * own switch (`digestPrefs.crmDaily`, `insightDigests.{orgId}`). A recipient
327
+ * own switch (a key in `digestPrefs`, `insightDigests.{orgId}`). A recipient
208
328
  * who switches the `content` email channel on would otherwise receive the
209
329
  * digest twice: once as the digest, once as a one-line "Daily CRM digest"
210
330
  * notification saying that the digest happened.
211
331
  */ export const NOTIFICATION_SELF_SENT_EMAIL_TYPES = new Set([
212
332
  'content.crmDailyDigest',
213
333
  'content.insightsDigest',
334
+ // The task-reminders route mails one reminder per member per run, listing
335
+ // every task due, and writes one notification per task; mailed again
336
+ // here, each task would arrive a second time as its own email (AGL-3432).
337
+ 'content.taskReminder',
214
338
  // Emailed by `notifyRiskEvent` itself, as account mail (AGL-3368).
215
339
  'system.riskNotice'
216
340
  ]);
341
+ /**
342
+ * The tooltip on a self-sent type's disabled email switch: it names what
343
+ * DOES govern that mail, which differs by type (AGL-3432). Calling a task
344
+ * reminder a digest sent people looking for a Digests switch that is not it.
345
+ */ export function selfSentEmailNote(type) {
346
+ switch(type){
347
+ case 'content.taskReminder':
348
+ return 'Task reminders send their own email, one per run listing every task due. Mute this category to stop them.';
349
+ case 'system.riskNotice':
350
+ return 'Risk and account notices are always emailed, whatever this switch says.';
351
+ default:
352
+ return 'This digest sends its own email, under its switch in Digests.';
353
+ }
354
+ }
217
355
  /**
218
356
  * Whether a channel is on for one notification, at its own scope.
219
357
  *