@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,193 @@
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
+ /** Firestore collection holding intake rows. Staff-read, Admin-SDK-written. */
18
+ export declare const ABUSE_REPORT_COLLECTION = "abuseReports";
19
+ /**
20
+ * The contact address printed on the form — the OPERATOR's, resolved from
21
+ * configuration (AGL-2016).
22
+ *
23
+ * This was `export const ABUSE_REPORT_CONTACT_EMAIL = 'support@aglyn.com'`,
24
+ * and the docblock justifying it called itself *"the single place to change"*.
25
+ * It was the single place to change for **Aglyn**; for every other deployment
26
+ * it was the single place a third party's DMCA notice got misaddressed to us.
27
+ * The form it renders on is public and unauthenticated and ships with every
28
+ * install, so the literal made a self-hoster publish an intake pointing at a
29
+ * desk that cannot see, let alone remove, the content being reported.
30
+ *
31
+ * The original reasoning is preserved because it still governs **Aglyn's**
32
+ * configured value: `support@` and NOT `abuse@`, because AGL-1973 records
33
+ * that `abuse@aglyn.com` is not confirmed to deliver and AGL-1577 records
34
+ * that Gmail default routing accepts mail for non-existent `@aglyn.com`
35
+ * addresses with bounce suppression on. A published address that silently
36
+ * drops mail is worse than publishing none. That is now a statement about
37
+ * what we put in `NEXT_PUBLIC_OPERATOR_SUPPORT_EMAIL`, not about what the
38
+ * software hardcodes.
39
+ *
40
+ * DMCA notices prefer the legal mailbox when the operator has configured a
41
+ * separate one; see {@link operatorContactLine}.
42
+ */
43
+ export declare function abuseReportContactEmail(kind?: 'support' | 'legal'): string | null;
44
+ /** Maximum characters of reporter prose stored. */
45
+ export declare const ABUSE_REPORT_MAX_DETAILS = 5000;
46
+ /** Maximum length of the reported URL. */
47
+ export declare const ABUSE_REPORT_MAX_URL = 2048;
48
+ /** Maximum length of a reporter's email/name. */
49
+ export declare const ABUSE_REPORT_MAX_CONTACT = 254;
50
+ export type AbuseReportSeverity = 'urgent' | 'high' | 'normal';
51
+ export interface AbuseReportCategoryDefinition {
52
+ /** Stored discriminator. */
53
+ id: string;
54
+ /** What the reporter sees. */
55
+ label: string;
56
+ /** One line of help under the label. */
57
+ hint: string;
58
+ /**
59
+ * How fast a human must look. `urgent` categories are the ones where the
60
+ * cost of a slow response is borne by someone who is not our customer.
61
+ */
62
+ severity: AbuseReportSeverity;
63
+ }
64
+ /**
65
+ * The reportable categories.
66
+ *
67
+ * Ordered by how much damage an hour of delay does, because the order is what
68
+ * a panicking reporter actually reads. Phishing and CSAM lead: both have a
69
+ * victim who is not our customer, and both are the categories whose
70
+ * unanswered report becomes a `*.aglyn.app` domain block.
71
+ *
72
+ * `csam` is `urgent` and is deliberately NOT given a self-service lever
73
+ * anywhere in the product — it is a report-to-NCMEC-and-preserve obligation,
74
+ * not a takedown button, and the runbook says so.
75
+ *
76
+ * ## The `csam` hint says nothing about authorities (AGL-2045)
77
+ *
78
+ * It used to read *"Reported to the authorities and handled outside the normal
79
+ * queue."* The second clause was true — `urgent` really does jump the queue and
80
+ * fire a staff notification. The first was not: there is no CyberTipline
81
+ * submission path, no report generation, no preservation handling and no
82
+ * runbook step behind it, as `staff-console/abuse-reports.md` concedes in its
83
+ * own limits list.
84
+ *
85
+ * That is worse than simply lacking the mechanism, because the sentence is
86
+ * load-bearing on somebody else's decision. A person who has just found this
87
+ * material and reads that it has been "reported to the authorities" may
88
+ * reasonably stop there — so the claim can *replace* a real CyberTipline
89
+ * report rather than supplement one. It also ships to every self-hoster, each
90
+ * of whom makes the same promise on their own public form with even less
91
+ * behind it, and it sits opposite a live statutory duty (18 U.S.C. §2258A)
92
+ * that attaches to the provider on actual knowledge.
93
+ *
94
+ * So the hint now describes only the handling — which is real and is the same
95
+ * on every deployment — and sends the reporter to NCMEC themselves. Naming the
96
+ * CyberTipline is not a promise about the operator; it is the one instruction
97
+ * that survives being read by somebody who then closes the tab.
98
+ *
99
+ * Whether Aglyn should *build* the mechanism and make an authorities claim
100
+ * true is open on AGL-2045. If it is ever built, the claim must
101
+ * render from its own explicit configuration — never inferred — exactly as
102
+ * AGL-2016 gated the DMCA designation.
103
+ */
104
+ export declare const ABUSE_REPORT_CATEGORIES: readonly AbuseReportCategoryDefinition[];
105
+ /** Look a category up, or `null` for an unrecognised id. */
106
+ export declare function abuseReportCategory(id: unknown): AbuseReportCategoryDefinition | null;
107
+ /** The workflow states a report moves through. */
108
+ export declare const ABUSE_REPORT_STATUSES: readonly ["open", "reviewing", "actioned", "dismissed"];
109
+ export type AbuseReportStatus = (typeof ABUSE_REPORT_STATUSES)[number];
110
+ export declare function isAbuseReportStatus(value: unknown): value is AbuseReportStatus;
111
+ /** What a reporter submitted, after validation. */
112
+ export interface AbuseReportInput {
113
+ category: string;
114
+ severity: AbuseReportSeverity;
115
+ /** The reported page, normalized to an absolute http(s) URL. */
116
+ url: string;
117
+ /** Host id resolved from `url`, when it resolves to one. */
118
+ reportedHostname: string;
119
+ details: string;
120
+ reporterEmail: string | null;
121
+ reporterName: string | null;
122
+ /** DMCA-only, all four required together. See {@link validateAbuseReport}. */
123
+ dmca: AbuseReportDmcaAffirmations | null;
124
+ }
125
+ /**
126
+ * The statutory shape of a DMCA notice.
127
+ *
128
+ * 17 U.S.C. §512(c)(3) requires a takedown notice to carry, among other
129
+ * things, an identification of the work, a good-faith statement, a statement
130
+ * under penalty of perjury that the reporter is authorised, and a physical or
131
+ * electronic signature. Collecting them as free text next to a tick-box is
132
+ * the ordinary web form of that.
133
+ *
134
+ * Two consequences the form has to honour, and does:
135
+ *
136
+ * - **A DMCA notice needs a real identity.** The other categories accept an
137
+ * anonymous report because a phishing site is phishing whoever reports it;
138
+ * a copyright claim is a legal assertion by a named party, so
139
+ * `reporterEmail` and `signature` are REQUIRED for `dmca` and optional for
140
+ * everything else. That is why the anonymity rule is per-category and not
141
+ * global.
142
+ * - **We must not pretend to adjudicate.** Nothing here decides whether the
143
+ * claim is good. It records what was asserted, under whose name, at what
144
+ * time, which is exactly what the safe harbour asks a service provider to
145
+ * keep.
146
+ */
147
+ export interface AbuseReportDmcaAffirmations {
148
+ /** Identification of the copyrighted work being infringed. */
149
+ work: string;
150
+ /** Typed name standing as the electronic signature. */
151
+ signature: string;
152
+ /** "I have a good faith belief the use is not authorised." */
153
+ goodFaith: boolean;
154
+ /** "Under penalty of perjury, I am authorised to act for the owner." */
155
+ underPenalty: boolean;
156
+ }
157
+ export interface AbuseReportValidationFailure {
158
+ ok: false;
159
+ /** Stable machine code, for tests and for the form to highlight a field. */
160
+ code: string;
161
+ /** Sentence shown to the reporter. Never blames them for our shape. */
162
+ message: string;
163
+ }
164
+ export interface AbuseReportValidationSuccess {
165
+ ok: true;
166
+ value: AbuseReportInput;
167
+ }
168
+ export type AbuseReportValidation = AbuseReportValidationSuccess | AbuseReportValidationFailure;
169
+ /**
170
+ * Normalize a reported URL.
171
+ *
172
+ * Returns `null` for anything that is not an absolute http(s) URL. The scheme
173
+ * allow-list is the point: a report is rendered in a staff console, and a
174
+ * `javascript:` or `data:` "URL" stored here would be a stored-XSS delivery
175
+ * mechanism aimed at the one browser session that can suspend any site on the
176
+ * platform. Refusing at the boundary is cheaper than trusting every renderer.
177
+ */
178
+ export declare function normalizeReportedUrl(value: unknown): string | null;
179
+ /** The hostname of a normalized URL, lowercased, or `''`. */
180
+ export declare function reportedHostname(url: string): string;
181
+ /**
182
+ * Validate and normalize a submitted report.
183
+ *
184
+ * Accepts the shape of BOTH a JSON body and a urlencoded no-JS form post, so
185
+ * the caller can hand it either without a translation step.
186
+ *
187
+ * The bar for a valid report is deliberately low — a URL, a category and a
188
+ * sentence — because every field added is a reporter lost, and the whole
189
+ * point of AGL-1964 is that the report arrives at all. DMCA is the one
190
+ * exception, and only because the statute sets the shape rather than us.
191
+ */
192
+ export declare function validateAbuseReport(payload: Record<string, unknown>): AbuseReportValidation;
193
+ export default validateAbuseReport;
@@ -0,0 +1,321 @@
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
+ * ABUSE REPORT INTAKE (AGL-1964) — the missing input to a mature response
18
+ * system.
19
+ *
20
+ * Aglyn's takedown tooling is good: five lockdown scopes with a staff UI, 38
21
+ * `lockdownRefusal()` sites, media quarantine by content digest, an audit
22
+ * trail, read-only mode. Every one of those is a lever an operator pulls
23
+ * AFTER learning there is a problem. Nothing anywhere let an outsider tell us
24
+ * there was one — no report route, no form, no affordance on a published
25
+ * site.
26
+ *
27
+ * ## Why that is the launch risk rather than a nicety
28
+ *
29
+ * From Sept 1 anyone can sign up and have arbitrary content live on
30
+ * `{sub}.aglyn.app` within minutes. When one of those is used for phishing,
31
+ * the finder is a bank's fraud team, a browser vendor, or Safe Browsing —
32
+ * none of whom are customers, none of whom can open a support ticket (that
33
+ * route is 401 + paid-plan gated), and all of whom have a next step if they
34
+ * cannot reach us: a **domain-level block on `*.aglyn.app`**, which takes
35
+ * every legitimate customer site down with it. The cheapest possible
36
+ * mitigation is a reachable form. This is that form's shared core.
37
+ *
38
+ * ## The intake is a QUEUE, not an email address, and that is deliberate
39
+ *
40
+ * The published Acceptable Use Policy names `abuse@aglyn.com`, and the
41
+ * Copyright/DMCA Policy names `dmca@aglyn.com`. AGL-1973 records that neither
42
+ * mailbox is confirmed to exist — the Drive open-items list has only
43
+ * `noreply@` and `info@` live — and AGL-1577 records that Gmail default
44
+ * routing **accepts mail for non-existent @aglyn.com addresses with bounce
45
+ * suppression on and no delivery recipient configured**. Those two facts
46
+ * together mean a report sent to `abuse@` may be accepted and silently
47
+ * discarded, with the reporter believing they told us.
48
+ *
49
+ * A published address that drops mail is worse than publishing none, because
50
+ * it converts a reachable problem into an invisible one. So the primary
51
+ * intake writes a Firestore document a staff surface reads, where delivery is
52
+ * a database write we control rather than a routing rule we have not read.
53
+ * The form is the thing to publish; the mailbox is a nice-to-have once
54
+ * AGL-1973 confirms it.
55
+ *
56
+ * ## Categories carry the response, not just a label
57
+ *
58
+ * {@link ABUSE_REPORT_CATEGORIES} maps onto the levers that already exist:
59
+ * every category's `severity` says how fast a human must look, and `dmca`
60
+ * alone opens the statutory fields. The reason codes deliberately reuse the
61
+ * media-quarantine vocabulary (`abuse`, `dmca`, `malware`) so a report can be
62
+ * actioned into a quarantine or a lockdown without a translation table.
63
+ */ import { operatorContactLine } from "./operator-identity.js";
64
+ /** Firestore collection holding intake rows. Staff-read, Admin-SDK-written. */ export const ABUSE_REPORT_COLLECTION = 'abuseReports';
65
+ /**
66
+ * The contact address printed on the form — the OPERATOR's, resolved from
67
+ * configuration (AGL-2016).
68
+ *
69
+ * This was `export const ABUSE_REPORT_CONTACT_EMAIL = 'support@aglyn.com'`,
70
+ * and the docblock justifying it called itself *"the single place to change"*.
71
+ * It was the single place to change for **Aglyn**; for every other deployment
72
+ * it was the single place a third party's DMCA notice got misaddressed to us.
73
+ * The form it renders on is public and unauthenticated and ships with every
74
+ * install, so the literal made a self-hoster publish an intake pointing at a
75
+ * desk that cannot see, let alone remove, the content being reported.
76
+ *
77
+ * The original reasoning is preserved because it still governs **Aglyn's**
78
+ * configured value: `support@` and NOT `abuse@`, because AGL-1973 records
79
+ * that `abuse@aglyn.com` is not confirmed to deliver and AGL-1577 records
80
+ * that Gmail default routing accepts mail for non-existent `@aglyn.com`
81
+ * addresses with bounce suppression on. A published address that silently
82
+ * drops mail is worse than publishing none. That is now a statement about
83
+ * what we put in `NEXT_PUBLIC_OPERATOR_SUPPORT_EMAIL`, not about what the
84
+ * software hardcodes.
85
+ *
86
+ * DMCA notices prefer the legal mailbox when the operator has configured a
87
+ * separate one; see {@link operatorContactLine}.
88
+ */ export function abuseReportContactEmail(kind = 'support') {
89
+ return operatorContactLine(kind).address;
90
+ }
91
+ /** Maximum characters of reporter prose stored. */ export const ABUSE_REPORT_MAX_DETAILS = 5000;
92
+ /** Maximum length of the reported URL. */ export const ABUSE_REPORT_MAX_URL = 2048;
93
+ /** Maximum length of a reporter's email/name. */ export const ABUSE_REPORT_MAX_CONTACT = 254;
94
+ /**
95
+ * The reportable categories.
96
+ *
97
+ * Ordered by how much damage an hour of delay does, because the order is what
98
+ * a panicking reporter actually reads. Phishing and CSAM lead: both have a
99
+ * victim who is not our customer, and both are the categories whose
100
+ * unanswered report becomes a `*.aglyn.app` domain block.
101
+ *
102
+ * `csam` is `urgent` and is deliberately NOT given a self-service lever
103
+ * anywhere in the product — it is a report-to-NCMEC-and-preserve obligation,
104
+ * not a takedown button, and the runbook says so.
105
+ *
106
+ * ## The `csam` hint says nothing about authorities (AGL-2045)
107
+ *
108
+ * It used to read *"Reported to the authorities and handled outside the normal
109
+ * queue."* The second clause was true — `urgent` really does jump the queue and
110
+ * fire a staff notification. The first was not: there is no CyberTipline
111
+ * submission path, no report generation, no preservation handling and no
112
+ * runbook step behind it, as `staff-console/abuse-reports.md` concedes in its
113
+ * own limits list.
114
+ *
115
+ * That is worse than simply lacking the mechanism, because the sentence is
116
+ * load-bearing on somebody else's decision. A person who has just found this
117
+ * material and reads that it has been "reported to the authorities" may
118
+ * reasonably stop there — so the claim can *replace* a real CyberTipline
119
+ * report rather than supplement one. It also ships to every self-hoster, each
120
+ * of whom makes the same promise on their own public form with even less
121
+ * behind it, and it sits opposite a live statutory duty (18 U.S.C. §2258A)
122
+ * that attaches to the provider on actual knowledge.
123
+ *
124
+ * So the hint now describes only the handling — which is real and is the same
125
+ * on every deployment — and sends the reporter to NCMEC themselves. Naming the
126
+ * CyberTipline is not a promise about the operator; it is the one instruction
127
+ * that survives being read by somebody who then closes the tab.
128
+ *
129
+ * Whether Aglyn should *build* the mechanism and make an authorities claim
130
+ * true is open on AGL-2045. If it is ever built, the claim must
131
+ * render from its own explicit configuration — never inferred — exactly as
132
+ * AGL-2016 gated the DMCA designation.
133
+ */ export const ABUSE_REPORT_CATEGORIES = [
134
+ {
135
+ id: 'phishing',
136
+ label: 'Phishing or fraud',
137
+ hint: 'A page impersonating another business to steal logins, card numbers or personal details.',
138
+ severity: 'urgent'
139
+ },
140
+ {
141
+ id: 'csam',
142
+ label: 'Child sexual abuse material',
143
+ hint: 'Handled outside the normal queue and escalated to the operator immediately. Please also report it directly to NCMEC at report.cybertip.org — do not rely on this form alone.',
144
+ severity: 'urgent'
145
+ },
146
+ {
147
+ id: 'malware',
148
+ label: 'Malware or harmful downloads',
149
+ hint: 'A file or script that infects or attacks the visitor.',
150
+ severity: 'urgent'
151
+ },
152
+ {
153
+ id: 'dmca',
154
+ label: 'Copyright infringement (DMCA)',
155
+ hint: 'Your copyrighted work is published without permission. Needs the statutory statements below.',
156
+ severity: 'high'
157
+ },
158
+ {
159
+ id: 'impersonation',
160
+ label: 'Impersonation or trademark',
161
+ hint: 'The site pretends to be you, your business, or uses your mark.',
162
+ severity: 'high'
163
+ },
164
+ {
165
+ id: 'illegal',
166
+ label: 'Other illegal content',
167
+ hint: 'Content unlawful where it is published.',
168
+ severity: 'high'
169
+ },
170
+ {
171
+ id: 'spam',
172
+ label: 'Spam or deceptive content',
173
+ hint: 'Bulk junk, SEO doorways, or content unrelated to a real business.',
174
+ severity: 'normal'
175
+ },
176
+ {
177
+ id: 'other',
178
+ label: 'Something else',
179
+ hint: 'Anything that breaks the Acceptable Use Policy.',
180
+ severity: 'normal'
181
+ }
182
+ ];
183
+ const CATEGORY_BY_ID = new Map(ABUSE_REPORT_CATEGORIES.map((entry)=>[
184
+ entry.id,
185
+ entry
186
+ ]));
187
+ /** Look a category up, or `null` for an unrecognised id. */ export function abuseReportCategory(id) {
188
+ var _CATEGORY_BY_ID_get;
189
+ return typeof id === 'string' ? (_CATEGORY_BY_ID_get = CATEGORY_BY_ID.get(id)) != null ? _CATEGORY_BY_ID_get : null : null;
190
+ }
191
+ /** The workflow states a report moves through. */ export const ABUSE_REPORT_STATUSES = [
192
+ 'open',
193
+ 'reviewing',
194
+ 'actioned',
195
+ 'dismissed'
196
+ ];
197
+ export function isAbuseReportStatus(value) {
198
+ return typeof value === 'string' && ABUSE_REPORT_STATUSES.includes(value);
199
+ }
200
+ const fail = (code, message)=>({
201
+ ok: false,
202
+ code,
203
+ message
204
+ });
205
+ const text = (value, max)=>typeof value === 'string' ? value.trim().slice(0, max) : '';
206
+ /**
207
+ * Is this a truthy checkbox value?
208
+ *
209
+ * A no-JavaScript HTML form sends `on` for a ticked box and sends the field
210
+ * NOT AT ALL when unticked; a JSON client sends `true`. Both have to mean the
211
+ * same thing or the statutory affirmations would depend on how the reporter's
212
+ * browser is configured — and the failure would be silent, refusing valid
213
+ * notices from the people least likely to have JS on.
214
+ */ const checked = (value)=>value === true || value === 'on' || value === 'true' || value === '1' || value === 'yes';
215
+ /**
216
+ * Normalize a reported URL.
217
+ *
218
+ * Returns `null` for anything that is not an absolute http(s) URL. The scheme
219
+ * allow-list is the point: a report is rendered in a staff console, and a
220
+ * `javascript:` or `data:` "URL" stored here would be a stored-XSS delivery
221
+ * mechanism aimed at the one browser session that can suspend any site on the
222
+ * platform. Refusing at the boundary is cheaper than trusting every renderer.
223
+ */ export function normalizeReportedUrl(value) {
224
+ const raw = text(value, ABUSE_REPORT_MAX_URL);
225
+ if (!raw) return null;
226
+ // A reporter pasting a bare hostname is the common case; assume https
227
+ // rather than refusing them for a missing scheme.
228
+ const candidate = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(raw) ? raw : `https://${raw}`;
229
+ let parsed;
230
+ try {
231
+ parsed = new URL(candidate);
232
+ } catch (unused) {
233
+ return null;
234
+ }
235
+ if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') return null;
236
+ if (!parsed.hostname) return null;
237
+ return parsed.toString().slice(0, ABUSE_REPORT_MAX_URL);
238
+ }
239
+ /** The hostname of a normalized URL, lowercased, or `''`. */ export function reportedHostname(url) {
240
+ try {
241
+ return new URL(url).hostname.toLowerCase();
242
+ } catch (unused) {
243
+ return '';
244
+ }
245
+ }
246
+ /**
247
+ * Validate and normalize a submitted report.
248
+ *
249
+ * Accepts the shape of BOTH a JSON body and a urlencoded no-JS form post, so
250
+ * the caller can hand it either without a translation step.
251
+ *
252
+ * The bar for a valid report is deliberately low — a URL, a category and a
253
+ * sentence — because every field added is a reporter lost, and the whole
254
+ * point of AGL-1964 is that the report arrives at all. DMCA is the one
255
+ * exception, and only because the statute sets the shape rather than us.
256
+ */ export function validateAbuseReport(payload) {
257
+ const category = abuseReportCategory(payload['category']);
258
+ if (!category) {
259
+ return fail('category', 'Choose what kind of problem you are reporting.');
260
+ }
261
+ const url = normalizeReportedUrl(payload['url']);
262
+ if (!url) {
263
+ return fail('url', 'Enter the full web address of the page you are reporting, starting with https://.');
264
+ }
265
+ const details = text(payload['details'], ABUSE_REPORT_MAX_DETAILS);
266
+ if (details.length < 10) {
267
+ return fail('details', 'Tell us briefly what is wrong with the page — at least a sentence.');
268
+ }
269
+ const reporterEmail = text(payload['reporterEmail'], ABUSE_REPORT_MAX_CONTACT);
270
+ const reporterName = text(payload['reporterName'], ABUSE_REPORT_MAX_CONTACT);
271
+ // Shape only. Deliverability is not ours to assert, and a stricter pattern
272
+ // would reject valid addresses to buy nothing.
273
+ if (reporterEmail && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(reporterEmail)) {
274
+ return fail('reporterEmail', 'That email address does not look right.');
275
+ }
276
+ let dmca = null;
277
+ if (category.id === 'dmca') {
278
+ const work = text(payload['dmcaWork'], ABUSE_REPORT_MAX_DETAILS);
279
+ const signature = text(payload['dmcaSignature'], ABUSE_REPORT_MAX_CONTACT);
280
+ if (!work) {
281
+ return fail('dmcaWork', 'Identify the copyrighted work you say is being infringed.');
282
+ }
283
+ if (!signature) {
284
+ return fail('dmcaSignature', 'Type your full legal name — it stands as your electronic signature.');
285
+ }
286
+ if (!checked(payload['dmcaGoodFaith'])) {
287
+ return fail('dmcaGoodFaith', 'A copyright notice needs the good-faith statement.');
288
+ }
289
+ if (!checked(payload['dmcaUnderPenalty'])) {
290
+ return fail('dmcaUnderPenalty', 'A copyright notice needs the statement made under penalty of perjury.');
291
+ }
292
+ // A DMCA notice is a legal assertion by a named party, so unlike every
293
+ // other category it cannot be anonymous — we have to be able to forward
294
+ // it to the site owner and to accept a counter-notice.
295
+ if (!reporterEmail) {
296
+ return fail('reporterEmail', 'A copyright notice needs an email address we can reply to.');
297
+ }
298
+ dmca = {
299
+ work,
300
+ signature,
301
+ goodFaith: true,
302
+ underPenalty: true
303
+ };
304
+ }
305
+ return {
306
+ ok: true,
307
+ value: {
308
+ category: category.id,
309
+ severity: category.severity,
310
+ url,
311
+ reportedHostname: reportedHostname(url),
312
+ details,
313
+ reporterEmail: reporterEmail || null,
314
+ reporterName: reporterName || null,
315
+ dmca
316
+ }
317
+ };
318
+ }
319
+ export default validateAbuseReport;
320
+
321
+ //# sourceMappingURL=abuse-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/abuse-report.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 * ABUSE REPORT INTAKE (AGL-1964) — the missing input to a mature response\n * system.\n *\n * Aglyn's takedown tooling is good: five lockdown scopes with a staff UI, 38\n * `lockdownRefusal()` sites, media quarantine by content digest, an audit\n * trail, read-only mode. Every one of those is a lever an operator pulls\n * AFTER learning there is a problem. Nothing anywhere let an outsider tell us\n * there was one — no report route, no form, no affordance on a published\n * site.\n *\n * ## Why that is the launch risk rather than a nicety\n *\n * From Sept 1 anyone can sign up and have arbitrary content live on\n * `{sub}.aglyn.app` within minutes. When one of those is used for phishing,\n * the finder is a bank's fraud team, a browser vendor, or Safe Browsing —\n * none of whom are customers, none of whom can open a support ticket (that\n * route is 401 + paid-plan gated), and all of whom have a next step if they\n * cannot reach us: a **domain-level block on `*.aglyn.app`**, which takes\n * every legitimate customer site down with it. The cheapest possible\n * mitigation is a reachable form. This is that form's shared core.\n *\n * ## The intake is a QUEUE, not an email address, and that is deliberate\n *\n * The published Acceptable Use Policy names `abuse@aglyn.com`, and the\n * Copyright/DMCA Policy names `dmca@aglyn.com`. AGL-1973 records that neither\n * mailbox is confirmed to exist — the Drive open-items list has only\n * `noreply@` and `info@` live — and AGL-1577 records that Gmail default\n * routing **accepts mail for non-existent @aglyn.com addresses with bounce\n * suppression on and no delivery recipient configured**. Those two facts\n * together mean a report sent to `abuse@` may be accepted and silently\n * discarded, with the reporter believing they told us.\n *\n * A published address that drops mail is worse than publishing none, because\n * it converts a reachable problem into an invisible one. So the primary\n * intake writes a Firestore document a staff surface reads, where delivery is\n * a database write we control rather than a routing rule we have not read.\n * The form is the thing to publish; the mailbox is a nice-to-have once\n * AGL-1973 confirms it.\n *\n * ## Categories carry the response, not just a label\n *\n * {@link ABUSE_REPORT_CATEGORIES} maps onto the levers that already exist:\n * every category's `severity` says how fast a human must look, and `dmca`\n * alone opens the statutory fields. The reason codes deliberately reuse the\n * media-quarantine vocabulary (`abuse`, `dmca`, `malware`) so a report can be\n * actioned into a quarantine or a lockdown without a translation table.\n */\n\nimport { operatorContactLine } from './operator-identity'\n\n/** Firestore collection holding intake rows. Staff-read, Admin-SDK-written. */\nexport const ABUSE_REPORT_COLLECTION = 'abuseReports'\n\n/**\n * The contact address printed on the form — the OPERATOR's, resolved from\n * configuration (AGL-2016).\n *\n * This was `export const ABUSE_REPORT_CONTACT_EMAIL = 'support@aglyn.com'`,\n * and the docblock justifying it called itself *\"the single place to change\"*.\n * It was the single place to change for **Aglyn**; for every other deployment\n * it was the single place a third party's DMCA notice got misaddressed to us.\n * The form it renders on is public and unauthenticated and ships with every\n * install, so the literal made a self-hoster publish an intake pointing at a\n * desk that cannot see, let alone remove, the content being reported.\n *\n * The original reasoning is preserved because it still governs **Aglyn's**\n * configured value: `support@` and NOT `abuse@`, because AGL-1973 records\n * that `abuse@aglyn.com` is not confirmed to deliver and AGL-1577 records\n * that Gmail default routing accepts mail for non-existent `@aglyn.com`\n * addresses with bounce suppression on. A published address that silently\n * drops mail is worse than publishing none. That is now a statement about\n * what we put in `NEXT_PUBLIC_OPERATOR_SUPPORT_EMAIL`, not about what the\n * software hardcodes.\n *\n * DMCA notices prefer the legal mailbox when the operator has configured a\n * separate one; see {@link operatorContactLine}.\n */\nexport function abuseReportContactEmail(\n kind: 'support' | 'legal' = 'support',\n): string | null {\n return operatorContactLine(kind).address\n}\n\n/** Maximum characters of reporter prose stored. */\nexport const ABUSE_REPORT_MAX_DETAILS = 5000\n/** Maximum length of the reported URL. */\nexport const ABUSE_REPORT_MAX_URL = 2048\n/** Maximum length of a reporter's email/name. */\nexport const ABUSE_REPORT_MAX_CONTACT = 254\n\nexport type AbuseReportSeverity = 'urgent' | 'high' | 'normal'\n\nexport interface AbuseReportCategoryDefinition {\n /** Stored discriminator. */\n id: string\n /** What the reporter sees. */\n label: string\n /** One line of help under the label. */\n hint: string\n /**\n * How fast a human must look. `urgent` categories are the ones where the\n * cost of a slow response is borne by someone who is not our customer.\n */\n severity: AbuseReportSeverity\n}\n\n/**\n * The reportable categories.\n *\n * Ordered by how much damage an hour of delay does, because the order is what\n * a panicking reporter actually reads. Phishing and CSAM lead: both have a\n * victim who is not our customer, and both are the categories whose\n * unanswered report becomes a `*.aglyn.app` domain block.\n *\n * `csam` is `urgent` and is deliberately NOT given a self-service lever\n * anywhere in the product — it is a report-to-NCMEC-and-preserve obligation,\n * not a takedown button, and the runbook says so.\n *\n * ## The `csam` hint says nothing about authorities (AGL-2045)\n *\n * It used to read *\"Reported to the authorities and handled outside the normal\n * queue.\"* The second clause was true — `urgent` really does jump the queue and\n * fire a staff notification. The first was not: there is no CyberTipline\n * submission path, no report generation, no preservation handling and no\n * runbook step behind it, as `staff-console/abuse-reports.md` concedes in its\n * own limits list.\n *\n * That is worse than simply lacking the mechanism, because the sentence is\n * load-bearing on somebody else's decision. A person who has just found this\n * material and reads that it has been \"reported to the authorities\" may\n * reasonably stop there — so the claim can *replace* a real CyberTipline\n * report rather than supplement one. It also ships to every self-hoster, each\n * of whom makes the same promise on their own public form with even less\n * behind it, and it sits opposite a live statutory duty (18 U.S.C. §2258A)\n * that attaches to the provider on actual knowledge.\n *\n * So the hint now describes only the handling — which is real and is the same\n * on every deployment — and sends the reporter to NCMEC themselves. Naming the\n * CyberTipline is not a promise about the operator; it is the one instruction\n * that survives being read by somebody who then closes the tab.\n *\n * Whether Aglyn should *build* the mechanism and make an authorities claim\n * true is open on AGL-2045. If it is ever built, the claim must\n * render from its own explicit configuration — never inferred — exactly as\n * AGL-2016 gated the DMCA designation.\n */\nexport const ABUSE_REPORT_CATEGORIES: readonly AbuseReportCategoryDefinition[] =\n [\n {\n id: 'phishing',\n label: 'Phishing or fraud',\n hint: 'A page impersonating another business to steal logins, card numbers or personal details.',\n severity: 'urgent',\n },\n {\n id: 'csam',\n label: 'Child sexual abuse material',\n hint: 'Handled outside the normal queue and escalated to the operator immediately. Please also report it directly to NCMEC at report.cybertip.org — do not rely on this form alone.',\n severity: 'urgent',\n },\n {\n id: 'malware',\n label: 'Malware or harmful downloads',\n hint: 'A file or script that infects or attacks the visitor.',\n severity: 'urgent',\n },\n {\n id: 'dmca',\n label: 'Copyright infringement (DMCA)',\n hint: 'Your copyrighted work is published without permission. Needs the statutory statements below.',\n severity: 'high',\n },\n {\n id: 'impersonation',\n label: 'Impersonation or trademark',\n hint: 'The site pretends to be you, your business, or uses your mark.',\n severity: 'high',\n },\n {\n id: 'illegal',\n label: 'Other illegal content',\n hint: 'Content unlawful where it is published.',\n severity: 'high',\n },\n {\n id: 'spam',\n label: 'Spam or deceptive content',\n hint: 'Bulk junk, SEO doorways, or content unrelated to a real business.',\n severity: 'normal',\n },\n {\n id: 'other',\n label: 'Something else',\n hint: 'Anything that breaks the Acceptable Use Policy.',\n severity: 'normal',\n },\n ]\n\nconst CATEGORY_BY_ID = new Map(\n ABUSE_REPORT_CATEGORIES.map((entry) => [entry.id, entry]),\n)\n\n/** Look a category up, or `null` for an unrecognised id. */\nexport function abuseReportCategory(\n id: unknown,\n): AbuseReportCategoryDefinition | null {\n return typeof id === 'string' ? (CATEGORY_BY_ID.get(id) ?? null) : null\n}\n\n/** The workflow states a report moves through. */\nexport const ABUSE_REPORT_STATUSES = [\n 'open',\n 'reviewing',\n 'actioned',\n 'dismissed',\n] as const\nexport type AbuseReportStatus = (typeof ABUSE_REPORT_STATUSES)[number]\n\nexport function isAbuseReportStatus(value: unknown): value is AbuseReportStatus {\n return (\n typeof value === 'string' &&\n (ABUSE_REPORT_STATUSES as readonly string[]).includes(value)\n )\n}\n\n/** What a reporter submitted, after validation. */\nexport interface AbuseReportInput {\n category: string\n severity: AbuseReportSeverity\n /** The reported page, normalized to an absolute http(s) URL. */\n url: string\n /** Host id resolved from `url`, when it resolves to one. */\n reportedHostname: string\n details: string\n reporterEmail: string | null\n reporterName: string | null\n /** DMCA-only, all four required together. See {@link validateAbuseReport}. */\n dmca: AbuseReportDmcaAffirmations | null\n}\n\n/**\n * The statutory shape of a DMCA notice.\n *\n * 17 U.S.C. §512(c)(3) requires a takedown notice to carry, among other\n * things, an identification of the work, a good-faith statement, a statement\n * under penalty of perjury that the reporter is authorised, and a physical or\n * electronic signature. Collecting them as free text next to a tick-box is\n * the ordinary web form of that.\n *\n * Two consequences the form has to honour, and does:\n *\n * - **A DMCA notice needs a real identity.** The other categories accept an\n * anonymous report because a phishing site is phishing whoever reports it;\n * a copyright claim is a legal assertion by a named party, so\n * `reporterEmail` and `signature` are REQUIRED for `dmca` and optional for\n * everything else. That is why the anonymity rule is per-category and not\n * global.\n * - **We must not pretend to adjudicate.** Nothing here decides whether the\n * claim is good. It records what was asserted, under whose name, at what\n * time, which is exactly what the safe harbour asks a service provider to\n * keep.\n */\nexport interface AbuseReportDmcaAffirmations {\n /** Identification of the copyrighted work being infringed. */\n work: string\n /** Typed name standing as the electronic signature. */\n signature: string\n /** \"I have a good faith belief the use is not authorised.\" */\n goodFaith: boolean\n /** \"Under penalty of perjury, I am authorised to act for the owner.\" */\n underPenalty: boolean\n}\n\nexport interface AbuseReportValidationFailure {\n ok: false\n /** Stable machine code, for tests and for the form to highlight a field. */\n code: string\n /** Sentence shown to the reporter. Never blames them for our shape. */\n message: string\n}\n\nexport interface AbuseReportValidationSuccess {\n ok: true\n value: AbuseReportInput\n}\n\nexport type AbuseReportValidation =\n | AbuseReportValidationSuccess\n | AbuseReportValidationFailure\n\nconst fail = (code: string, message: string): AbuseReportValidationFailure => ({\n ok: false,\n code,\n message,\n})\n\nconst text = (value: unknown, max: number): string =>\n typeof value === 'string' ? value.trim().slice(0, max) : ''\n\n/**\n * Is this a truthy checkbox value?\n *\n * A no-JavaScript HTML form sends `on` for a ticked box and sends the field\n * NOT AT ALL when unticked; a JSON client sends `true`. Both have to mean the\n * same thing or the statutory affirmations would depend on how the reporter's\n * browser is configured — and the failure would be silent, refusing valid\n * notices from the people least likely to have JS on.\n */\nconst checked = (value: unknown): boolean =>\n value === true ||\n value === 'on' ||\n value === 'true' ||\n value === '1' ||\n value === 'yes'\n\n/**\n * Normalize a reported URL.\n *\n * Returns `null` for anything that is not an absolute http(s) URL. The scheme\n * allow-list is the point: a report is rendered in a staff console, and a\n * `javascript:` or `data:` \"URL\" stored here would be a stored-XSS delivery\n * mechanism aimed at the one browser session that can suspend any site on the\n * platform. Refusing at the boundary is cheaper than trusting every renderer.\n */\nexport function normalizeReportedUrl(value: unknown): string | null {\n const raw = text(value, ABUSE_REPORT_MAX_URL)\n if (!raw) return null\n // A reporter pasting a bare hostname is the common case; assume https\n // rather than refusing them for a missing scheme.\n const candidate = /^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(raw) ? raw : `https://${raw}`\n let parsed: URL\n try {\n parsed = new URL(candidate)\n } catch {\n return null\n }\n if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') return null\n if (!parsed.hostname) return null\n return parsed.toString().slice(0, ABUSE_REPORT_MAX_URL)\n}\n\n/** The hostname of a normalized URL, lowercased, or `''`. */\nexport function reportedHostname(url: string): string {\n try {\n return new URL(url).hostname.toLowerCase()\n } catch {\n return ''\n }\n}\n\n/**\n * Validate and normalize a submitted report.\n *\n * Accepts the shape of BOTH a JSON body and a urlencoded no-JS form post, so\n * the caller can hand it either without a translation step.\n *\n * The bar for a valid report is deliberately low — a URL, a category and a\n * sentence — because every field added is a reporter lost, and the whole\n * point of AGL-1964 is that the report arrives at all. DMCA is the one\n * exception, and only because the statute sets the shape rather than us.\n */\nexport function validateAbuseReport(\n payload: Record<string, unknown>,\n): AbuseReportValidation {\n const category = abuseReportCategory(payload['category'])\n if (!category) {\n return fail('category', 'Choose what kind of problem you are reporting.')\n }\n\n const url = normalizeReportedUrl(payload['url'])\n if (!url) {\n return fail(\n 'url',\n 'Enter the full web address of the page you are reporting, starting with https://.',\n )\n }\n\n const details = text(payload['details'], ABUSE_REPORT_MAX_DETAILS)\n if (details.length < 10) {\n return fail(\n 'details',\n 'Tell us briefly what is wrong with the page — at least a sentence.',\n )\n }\n\n const reporterEmail = text(payload['reporterEmail'], ABUSE_REPORT_MAX_CONTACT)\n const reporterName = text(payload['reporterName'], ABUSE_REPORT_MAX_CONTACT)\n // Shape only. Deliverability is not ours to assert, and a stricter pattern\n // would reject valid addresses to buy nothing.\n if (reporterEmail && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(reporterEmail)) {\n return fail('reporterEmail', 'That email address does not look right.')\n }\n\n let dmca: AbuseReportDmcaAffirmations | null = null\n if (category.id === 'dmca') {\n const work = text(payload['dmcaWork'], ABUSE_REPORT_MAX_DETAILS)\n const signature = text(payload['dmcaSignature'], ABUSE_REPORT_MAX_CONTACT)\n if (!work) {\n return fail(\n 'dmcaWork',\n 'Identify the copyrighted work you say is being infringed.',\n )\n }\n if (!signature) {\n return fail(\n 'dmcaSignature',\n 'Type your full legal name — it stands as your electronic signature.',\n )\n }\n if (!checked(payload['dmcaGoodFaith'])) {\n return fail(\n 'dmcaGoodFaith',\n 'A copyright notice needs the good-faith statement.',\n )\n }\n if (!checked(payload['dmcaUnderPenalty'])) {\n return fail(\n 'dmcaUnderPenalty',\n 'A copyright notice needs the statement made under penalty of perjury.',\n )\n }\n // A DMCA notice is a legal assertion by a named party, so unlike every\n // other category it cannot be anonymous — we have to be able to forward\n // it to the site owner and to accept a counter-notice.\n if (!reporterEmail) {\n return fail(\n 'reporterEmail',\n 'A copyright notice needs an email address we can reply to.',\n )\n }\n dmca = {\n work,\n signature,\n goodFaith: true,\n underPenalty: true,\n }\n }\n\n return {\n ok: true,\n value: {\n category: category.id,\n severity: category.severity,\n url,\n reportedHostname: reportedHostname(url),\n details,\n reporterEmail: reporterEmail || null,\n reporterName: reporterName || null,\n dmca,\n },\n }\n}\n\nexport default validateAbuseReport\n"],"names":["operatorContactLine","ABUSE_REPORT_COLLECTION","abuseReportContactEmail","kind","address","ABUSE_REPORT_MAX_DETAILS","ABUSE_REPORT_MAX_URL","ABUSE_REPORT_MAX_CONTACT","ABUSE_REPORT_CATEGORIES","id","label","hint","severity","CATEGORY_BY_ID","Map","map","entry","abuseReportCategory","get","ABUSE_REPORT_STATUSES","isAbuseReportStatus","value","includes","fail","code","message","ok","text","max","trim","slice","checked","normalizeReportedUrl","raw","candidate","test","parsed","URL","protocol","hostname","toString","reportedHostname","url","toLowerCase","validateAbuseReport","payload","category","details","length","reporterEmail","reporterName","dmca","work","signature","goodFaith","underPenalty"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CC,GAED,SAASA,mBAAmB,QAAQ,yBAAqB;AAEzD,6EAA6E,GAC7E,OAAO,MAAMC,0BAA0B,eAAc;AAErD;;;;;;;;;;;;;;;;;;;;;;;CAuBC,GACD,OAAO,SAASC,wBACdC,OAA4B,SAAS;IAErC,OAAOH,oBAAoBG,MAAMC,OAAO;AAC1C;AAEA,iDAAiD,GACjD,OAAO,MAAMC,2BAA2B,KAAI;AAC5C,wCAAwC,GACxC,OAAO,MAAMC,uBAAuB,KAAI;AACxC,+CAA+C,GAC/C,OAAO,MAAMC,2BAA2B,IAAG;AAkB3C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCC,GACD,OAAO,MAAMC,0BACX;IACE;QACEC,IAAI;QACJC,OAAO;QACPC,MAAM;QACNC,UAAU;IACZ;IACA;QACEH,IAAI;QACJC,OAAO;QACPC,MAAM;QACNC,UAAU;IACZ;IACA;QACEH,IAAI;QACJC,OAAO;QACPC,MAAM;QACNC,UAAU;IACZ;IACA;QACEH,IAAI;QACJC,OAAO;QACPC,MAAM;QACNC,UAAU;IACZ;IACA;QACEH,IAAI;QACJC,OAAO;QACPC,MAAM;QACNC,UAAU;IACZ;IACA;QACEH,IAAI;QACJC,OAAO;QACPC,MAAM;QACNC,UAAU;IACZ;IACA;QACEH,IAAI;QACJC,OAAO;QACPC,MAAM;QACNC,UAAU;IACZ;IACA;QACEH,IAAI;QACJC,OAAO;QACPC,MAAM;QACNC,UAAU;IACZ;CACD,CAAA;AAEH,MAAMC,iBAAiB,IAAIC,IACzBN,wBAAwBO,GAAG,CAAC,CAACC,QAAU;QAACA,MAAMP,EAAE;QAAEO;KAAM;AAG1D,0DAA0D,GAC1D,OAAO,SAASC,oBACdR,EAAW;QAEsBI;IAAjC,OAAO,OAAOJ,OAAO,YAAYI,sBAAAA,eAAeK,GAAG,CAACT,eAAnBI,sBAA0B,OAAQ;AACrE;AAEA,gDAAgD,GAChD,OAAO,MAAMM,wBAAwB;IACnC;IACA;IACA;IACA;CACD,CAAS;AAGV,OAAO,SAASC,oBAAoBC,KAAc;IAChD,OACE,OAAOA,UAAU,YACjB,AAACF,sBAA4CG,QAAQ,CAACD;AAE1D;AAmEA,MAAME,OAAO,CAACC,MAAcC,UAAmD,CAAA;QAC7EC,IAAI;QACJF;QACAC;IACF,CAAA;AAEA,MAAME,OAAO,CAACN,OAAgBO,MAC5B,OAAOP,UAAU,WAAWA,MAAMQ,IAAI,GAAGC,KAAK,CAAC,GAAGF,OAAO;AAE3D;;;;;;;;CAQC,GACD,MAAMG,UAAU,CAACV,QACfA,UAAU,QACVA,UAAU,QACVA,UAAU,UACVA,UAAU,OACVA,UAAU;AAEZ;;;;;;;;CAQC,GACD,OAAO,SAASW,qBAAqBX,KAAc;IACjD,MAAMY,MAAMN,KAAKN,OAAOf;IACxB,IAAI,CAAC2B,KAAK,OAAO;IACjB,sEAAsE;IACtE,kDAAkD;IAClD,MAAMC,YAAY,4BAA4BC,IAAI,CAACF,OAAOA,MAAM,CAAC,QAAQ,EAAEA,KAAK;IAChF,IAAIG;IACJ,IAAI;QACFA,SAAS,IAAIC,IAAIH;IACnB,EAAE,eAAM;QACN,OAAO;IACT;IACA,IAAIE,OAAOE,QAAQ,KAAK,WAAWF,OAAOE,QAAQ,KAAK,UAAU,OAAO;IACxE,IAAI,CAACF,OAAOG,QAAQ,EAAE,OAAO;IAC7B,OAAOH,OAAOI,QAAQ,GAAGV,KAAK,CAAC,GAAGxB;AACpC;AAEA,2DAA2D,GAC3D,OAAO,SAASmC,iBAAiBC,GAAW;IAC1C,IAAI;QACF,OAAO,IAAIL,IAAIK,KAAKH,QAAQ,CAACI,WAAW;IAC1C,EAAE,eAAM;QACN,OAAO;IACT;AACF;AAEA;;;;;;;;;;CAUC,GACD,OAAO,SAASC,oBACdC,OAAgC;IAEhC,MAAMC,WAAW7B,oBAAoB4B,OAAO,CAAC,WAAW;IACxD,IAAI,CAACC,UAAU;QACb,OAAOvB,KAAK,YAAY;IAC1B;IAEA,MAAMmB,MAAMV,qBAAqBa,OAAO,CAAC,MAAM;IAC/C,IAAI,CAACH,KAAK;QACR,OAAOnB,KACL,OACA;IAEJ;IAEA,MAAMwB,UAAUpB,KAAKkB,OAAO,CAAC,UAAU,EAAExC;IACzC,IAAI0C,QAAQC,MAAM,GAAG,IAAI;QACvB,OAAOzB,KACL,WACA;IAEJ;IAEA,MAAM0B,gBAAgBtB,KAAKkB,OAAO,CAAC,gBAAgB,EAAEtC;IACrD,MAAM2C,eAAevB,KAAKkB,OAAO,CAAC,eAAe,EAAEtC;IACnD,2EAA2E;IAC3E,+CAA+C;IAC/C,IAAI0C,iBAAiB,CAAC,6BAA6Bd,IAAI,CAACc,gBAAgB;QACtE,OAAO1B,KAAK,iBAAiB;IAC/B;IAEA,IAAI4B,OAA2C;IAC/C,IAAIL,SAASrC,EAAE,KAAK,QAAQ;QAC1B,MAAM2C,OAAOzB,KAAKkB,OAAO,CAAC,WAAW,EAAExC;QACvC,MAAMgD,YAAY1B,KAAKkB,OAAO,CAAC,gBAAgB,EAAEtC;QACjD,IAAI,CAAC6C,MAAM;YACT,OAAO7B,KACL,YACA;QAEJ;QACA,IAAI,CAAC8B,WAAW;YACd,OAAO9B,KACL,iBACA;QAEJ;QACA,IAAI,CAACQ,QAAQc,OAAO,CAAC,gBAAgB,GAAG;YACtC,OAAOtB,KACL,iBACA;QAEJ;QACA,IAAI,CAACQ,QAAQc,OAAO,CAAC,mBAAmB,GAAG;YACzC,OAAOtB,KACL,oBACA;QAEJ;QACA,uEAAuE;QACvE,wEAAwE;QACxE,uDAAuD;QACvD,IAAI,CAAC0B,eAAe;YAClB,OAAO1B,KACL,iBACA;QAEJ;QACA4B,OAAO;YACLC;YACAC;YACAC,WAAW;YACXC,cAAc;QAChB;IACF;IAEA,OAAO;QACL7B,IAAI;QACJL,OAAO;YACLyB,UAAUA,SAASrC,EAAE;YACrBG,UAAUkC,SAASlC,QAAQ;YAC3B8B;YACAD,kBAAkBA,iBAAiBC;YACnCK;YACAE,eAAeA,iBAAiB;YAChCC,cAAcA,gBAAgB;YAC9BC;QACF;IACF;AACF;AAEA,eAAeP,oBAAmB"}