@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,61 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * 403, not 401.
19
+ *
20
+ * The caller's credential is fine — that is the whole problem. What is
21
+ * refused is the ORIGIN it came from, and no re-authentication would change
22
+ * the answer, so `401 Unauthorized` (which invites a retry with credentials)
23
+ * would be a lie. Matches how the lockdown gate reasons about 423.
24
+ */
25
+ export declare const CROSS_ORIGIN_REFUSED_STATUS = 403;
26
+ export interface CrossOriginWriteOptions {
27
+ /** Dispatcher path, e.g. `commerce/cart`. Decides visitor vs machine. */
28
+ path: string;
29
+ /** Read for its method, `origin`, `x-forwarded-host` and `host`. */
30
+ request: {
31
+ method?: string;
32
+ headers?: {
33
+ get?: (name: string) => unknown;
34
+ };
35
+ };
36
+ }
37
+ /**
38
+ * Is this a state-changing plugin-API request from another origin?
39
+ *
40
+ * Exported separately from the refusal so the decision can be asserted
41
+ * directly in tests and reused by the console dispatcher without either
42
+ * inheriting a `Response` shape it may not want.
43
+ */
44
+ export declare function isCrossOriginPluginWrite(options: CrossOriginWriteOptions): boolean;
45
+ /**
46
+ * The refusal a cross-origin plugin write returns, or null to proceed:
47
+ *
48
+ * const foreign = crossOriginPluginWriteRefusal({ path, request })
49
+ * if (foreign) return foreign
50
+ *
51
+ * Same "return it or carry on" contract as `visitorWriteRefusal` and
52
+ * `visitorWriteRateLimitRefusal`, so the dispatcher reads as one list of
53
+ * gates rather than three shapes.
54
+ *
55
+ * The body names the reason. Unlike the rate limiter — which is deliberately
56
+ * mute because it faces abusers and every detail is a hint — this refusal is
57
+ * one a legitimate integrator can hit by calling from the wrong host, and a
58
+ * bare 403 would cost them an afternoon. It discloses nothing an attacker did
59
+ * not already know, having chosen the origin themselves.
60
+ */
61
+ export declare function crossOriginPluginWriteRefusal(options: CrossOriginWriteOptions): Response | null;
@@ -0,0 +1,202 @@
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
+ * Same-origin policy for visitor-facing plugin-API WRITES (AGL-1880).
18
+ *
19
+ * Pure and dependency-free, beside `plugin-api-rate-limit` and for the same
20
+ * reason: the dispatcher gate is one line, and the reasoning it encodes is
21
+ * unit-testable without a route harness.
22
+ *
23
+ * ## The hole this closes
24
+ *
25
+ * The standing claim — recorded on 2026-07-24 when CSRF was considered and
26
+ * deliberately NOT added — was that CSRF is *structurally impossible* here
27
+ * because every API route authorizes with `Authorization: Bearer <idToken>`,
28
+ * which a browser never attaches on its own. That claim was audited against
29
+ * the tree on 2026-08-19 and it holds for all 140 console routes. It does not
30
+ * hold for the tenant plugin-API dispatcher, and the exception was never an
31
+ * exception anyone wrote down:
32
+ *
33
+ * - `libs/plugins/commerce/**` handlers authorize by COOKIE, not Bearer —
34
+ * `aglyn_member_{hostId}` for `membership/account`, `membership/wishlist`,
35
+ * `membership/logout`, `commerce/stream`, `commerce/subscription-portal`,
36
+ * and `aglyn_cart_{hostId}` for `commerce/cart`, `commerce/cart-checkout`.
37
+ * - Several of those MUTATE: `membership/account` writes `displayName` and
38
+ * the address book, `membership/wishlist` writes the wishlist,
39
+ * `commerce/cart` writes cart lines.
40
+ * - `api-adapter` parses `application/x-www-form-urlencoded` into `req.body`,
41
+ * and the handlers read `hostId` from `req.body`. That content type is a
42
+ * CORS-*simple* request, so a cross-origin HTML form POST reaches the
43
+ * handler with **no preflight** to refuse it.
44
+ *
45
+ * ## Why `SameSite=Lax` is not already the answer
46
+ *
47
+ * It is the only thing standing there today, and it stops the ordinary case:
48
+ * a POST from an unrelated site is cross-SITE, so the cookie is withheld.
49
+ *
50
+ * It does not stop the case this platform creates. Every published tenant
51
+ * lives under `*.aglyn.app`, and sibling subdomains of one registrable domain
52
+ * are same-SITE. `SameSite` is not `SameOrigin`. So a form POST from
53
+ * `evil.aglyn.app` to `victim.aglyn.app/api/membership/account` carries
54
+ * `aglyn_member_victim` in full, and the tenant who authored `evil` is an
55
+ * ordinary customer who signed up. The cookie flag is doing exactly what it
56
+ * documents; it is simply the wrong boundary for a multi-tenant apex.
57
+ *
58
+ * ## The rule
59
+ *
60
+ * A state-changing plugin-API request must be same-ORIGIN. Reads are
61
+ * untouched — a cross-origin GET carries no authority a cross-origin
62
+ * `<img>`/`<script>` did not already have, and the console's preview surface
63
+ * reads these paths legitimately.
64
+ *
65
+ * An ABSENT `Origin` header is allowed, and that is the one judgement call
66
+ * worth stating plainly. CSRF is an attack a browser is tricked into
67
+ * performing, and a browser always sends `Origin` on a cross-origin request
68
+ * — including the form POST above, and including every no-preflight simple
69
+ * request. Absence therefore means a non-browser caller: `curl`, a webhook,
70
+ * the server-to-server `commerce/supplier-update` hop. Refusing those would
71
+ * break real integrations to defend against a client that, by definition,
72
+ * chooses its own headers and would simply omit the one we demanded. Header
73
+ * presence is not a credential — the same reasoning `plugin-api-rate-limit`
74
+ * uses to refuse to exempt on `authorization` being present.
75
+ *
76
+ * A literal `Origin: null` is NOT allowed through ON ITS OWN. It is an opaque
77
+ * origin — a sandboxed iframe, or a POST that arrived via a redirect — and it
78
+ * is precisely the shape an attacker reaches for once a plain cross-origin
79
+ * POST is refused. `null` is never same-origin with anything, so it fails the
80
+ * comparison rather than needing a special case; the constant exists so the
81
+ * intent is legible.
82
+ *
83
+ * ## ⚠️ `Sec-Fetch-Site`, and the same-origin form this rule used to refuse
84
+ *
85
+ * `Origin: null` is not only an attacker's shape. A page served with
86
+ * `Referrer-Policy: no-referrer` sends `Origin: null` on its OWN top-level
87
+ * form POST — the referrer policy governs the Origin header on a navigation,
88
+ * so a form submitting to the very page that rendered it arrives opaque.
89
+ *
90
+ * That is not a hypothetical. Every recipient-facing email page —
91
+ * `email/preferences`, `email/unsubscribe`, `email/resubscribe` — sets
92
+ * `no-referrer` deliberately, so a signed opt-out URL cannot leak through a
93
+ * `Referer` header. The result was that the preference centre's own "Save my
94
+ * preferences" button was refused 403 as cross-site, while a `fetch()` from
95
+ * the same document succeeded: a recipient could open the page, untick a
96
+ * topic, press Save, and be shown a JSON error while nothing was written.
97
+ * The privacy hardening had disabled the control it was protecting.
98
+ *
99
+ * `Sec-Fetch-Site` is the discriminator, and it is the right one because the
100
+ * BROWSER computes it and page script cannot set it. `same-origin` and
101
+ * `none` (a user typing the URL or opening a bookmark) are both statements
102
+ * that this did not come from another site, and they are trustworthy in a way
103
+ * the Origin header — deliberately blanked by our own policy — no longer is
104
+ * here. It is consulted only to ALLOW: a `cross-site` or `same-site` value
105
+ * falls through to the origin comparison exactly as before, so nothing an
106
+ * attacker can send gets a new way in. A caller that omits the header is
107
+ * unchanged too, which keeps the non-browser allowance above intact.
108
+ */ import { lockdownIntentForMethod } from "./lockdown.js";
109
+ import { isMachinePluginApiPath } from "./plugin-api-rate-limit.js";
110
+ /**
111
+ * 403, not 401.
112
+ *
113
+ * The caller's credential is fine — that is the whole problem. What is
114
+ * refused is the ORIGIN it came from, and no re-authentication would change
115
+ * the answer, so `401 Unauthorized` (which invites a retry with credentials)
116
+ * would be a lie. Matches how the lockdown gate reasons about 423.
117
+ */ export const CROSS_ORIGIN_REFUSED_STATUS = 403;
118
+ /** The opaque origin. Never same-origin with anything, including itself. */ const OPAQUE_ORIGIN = 'null';
119
+ /** Host of an `Origin` header value, or `''` when it is absent/unparsable. */ function originHost(origin) {
120
+ const raw = String(origin != null ? origin : '').trim();
121
+ if (!raw || raw === OPAQUE_ORIGIN) return '';
122
+ try {
123
+ return new URL(raw).host.toLowerCase();
124
+ } catch (unused) {
125
+ return '';
126
+ }
127
+ }
128
+ /**
129
+ * The host this request was actually addressed to.
130
+ *
131
+ * `x-forwarded-host` first: behind Vercel that is the public hostname the
132
+ * visitor typed, while `host` can be the internal one. Falls back to `host`
133
+ * so the function is still correct off-platform (self-host, local dev), which
134
+ * `deployment-shape` makes a supported case rather than a hypothetical.
135
+ */ function requestHost(headers) {
136
+ var _ref, _ref1;
137
+ var _String_split_, _headers_get, _headers_get1;
138
+ const forwarded = (_String_split_ = String((_ref = headers == null ? void 0 : (_headers_get = headers.get) == null ? void 0 : _headers_get.call(headers, 'x-forwarded-host')) != null ? _ref : '').split(',')[0]) == null ? void 0 : _String_split_.trim();
139
+ const host = forwarded || String((_ref1 = headers == null ? void 0 : (_headers_get1 = headers.get) == null ? void 0 : _headers_get1.call(headers, 'host')) != null ? _ref1 : '').trim();
140
+ return host.toLowerCase();
141
+ }
142
+ /**
143
+ * Is this a state-changing plugin-API request from another origin?
144
+ *
145
+ * Exported separately from the refusal so the decision can be asserted
146
+ * directly in tests and reused by the console dispatcher without either
147
+ * inheriting a `Response` shape it may not want.
148
+ */ export function isCrossOriginPluginWrite(options) {
149
+ var _ref, _ref1;
150
+ var _options_request, _options_request1, _headers_get, _headers_get1;
151
+ if (lockdownIntentForMethod(options == null ? void 0 : (_options_request = options.request) == null ? void 0 : _options_request.method) === 'read') return false;
152
+ if (isMachinePluginApiPath(options == null ? void 0 : options.path)) return false;
153
+ const headers = (_ref = options == null ? void 0 : (_options_request1 = options.request) == null ? void 0 : _options_request1.headers) != null ? _ref : {};
154
+ /*
155
+ * The browser's own statement about where this came from, trusted before
156
+ * the Origin header because our own `no-referrer` policy blanks that one.
157
+ * ALLOW-only: any other value falls through to the comparison below.
158
+ */ const site = String((_ref1 = headers == null ? void 0 : (_headers_get = headers.get) == null ? void 0 : _headers_get.call(headers, 'sec-fetch-site')) != null ? _ref1 : '').trim().toLowerCase();
159
+ if (site === 'same-origin' || site === 'none') return false;
160
+ const origin = headers == null ? void 0 : (_headers_get1 = headers.get) == null ? void 0 : _headers_get1.call(headers, 'origin');
161
+ // Absent Origin: a non-browser caller. See the module note — this is the
162
+ // deliberate allowance, not an oversight.
163
+ if (origin === null || origin === undefined || String(origin).trim() === '') {
164
+ return false;
165
+ }
166
+ const from = originHost(String(origin));
167
+ const to = requestHost(headers);
168
+ // An unparsable or opaque Origin yields `''`, which can never equal a real
169
+ // host, so it lands here as cross-origin — the intended outcome.
170
+ if (!to) {
171
+ // No host to compare against. Refusing every write on a malformed request
172
+ // would be a worse failure than the one being prevented, and a request
173
+ // with no Host reached no tenant site to begin with.
174
+ return false;
175
+ }
176
+ return from !== to;
177
+ }
178
+ /**
179
+ * The refusal a cross-origin plugin write returns, or null to proceed:
180
+ *
181
+ * const foreign = crossOriginPluginWriteRefusal({ path, request })
182
+ * if (foreign) return foreign
183
+ *
184
+ * Same "return it or carry on" contract as `visitorWriteRefusal` and
185
+ * `visitorWriteRateLimitRefusal`, so the dispatcher reads as one list of
186
+ * gates rather than three shapes.
187
+ *
188
+ * The body names the reason. Unlike the rate limiter — which is deliberately
189
+ * mute because it faces abusers and every detail is a hint — this refusal is
190
+ * one a legitimate integrator can hit by calling from the wrong host, and a
191
+ * bare 403 would cost them an afternoon. It discloses nothing an attacker did
192
+ * not already know, having chosen the origin themselves.
193
+ */ export function crossOriginPluginWriteRefusal(options) {
194
+ if (!isCrossOriginPluginWrite(options)) return null;
195
+ return Response.json({
196
+ error: 'Cross-origin writes are not allowed.'
197
+ }, {
198
+ status: CROSS_ORIGIN_REFUSED_STATUS
199
+ });
200
+ }
201
+
202
+ //# sourceMappingURL=plugin-api-cross-origin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/plugin-api-cross-origin.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 * Same-origin policy for visitor-facing plugin-API WRITES (AGL-1880).\n *\n * Pure and dependency-free, beside `plugin-api-rate-limit` and for the same\n * reason: the dispatcher gate is one line, and the reasoning it encodes is\n * unit-testable without a route harness.\n *\n * ## The hole this closes\n *\n * The standing claim — recorded on 2026-07-24 when CSRF was considered and\n * deliberately NOT added — was that CSRF is *structurally impossible* here\n * because every API route authorizes with `Authorization: Bearer <idToken>`,\n * which a browser never attaches on its own. That claim was audited against\n * the tree on 2026-08-19 and it holds for all 140 console routes. It does not\n * hold for the tenant plugin-API dispatcher, and the exception was never an\n * exception anyone wrote down:\n *\n * - `libs/plugins/commerce/**` handlers authorize by COOKIE, not Bearer —\n * `aglyn_member_{hostId}` for `membership/account`, `membership/wishlist`,\n * `membership/logout`, `commerce/stream`, `commerce/subscription-portal`,\n * and `aglyn_cart_{hostId}` for `commerce/cart`, `commerce/cart-checkout`.\n * - Several of those MUTATE: `membership/account` writes `displayName` and\n * the address book, `membership/wishlist` writes the wishlist,\n * `commerce/cart` writes cart lines.\n * - `api-adapter` parses `application/x-www-form-urlencoded` into `req.body`,\n * and the handlers read `hostId` from `req.body`. That content type is a\n * CORS-*simple* request, so a cross-origin HTML form POST reaches the\n * handler with **no preflight** to refuse it.\n *\n * ## Why `SameSite=Lax` is not already the answer\n *\n * It is the only thing standing there today, and it stops the ordinary case:\n * a POST from an unrelated site is cross-SITE, so the cookie is withheld.\n *\n * It does not stop the case this platform creates. Every published tenant\n * lives under `*.aglyn.app`, and sibling subdomains of one registrable domain\n * are same-SITE. `SameSite` is not `SameOrigin`. So a form POST from\n * `evil.aglyn.app` to `victim.aglyn.app/api/membership/account` carries\n * `aglyn_member_victim` in full, and the tenant who authored `evil` is an\n * ordinary customer who signed up. The cookie flag is doing exactly what it\n * documents; it is simply the wrong boundary for a multi-tenant apex.\n *\n * ## The rule\n *\n * A state-changing plugin-API request must be same-ORIGIN. Reads are\n * untouched — a cross-origin GET carries no authority a cross-origin\n * `<img>`/`<script>` did not already have, and the console's preview surface\n * reads these paths legitimately.\n *\n * An ABSENT `Origin` header is allowed, and that is the one judgement call\n * worth stating plainly. CSRF is an attack a browser is tricked into\n * performing, and a browser always sends `Origin` on a cross-origin request\n * — including the form POST above, and including every no-preflight simple\n * request. Absence therefore means a non-browser caller: `curl`, a webhook,\n * the server-to-server `commerce/supplier-update` hop. Refusing those would\n * break real integrations to defend against a client that, by definition,\n * chooses its own headers and would simply omit the one we demanded. Header\n * presence is not a credential — the same reasoning `plugin-api-rate-limit`\n * uses to refuse to exempt on `authorization` being present.\n *\n * A literal `Origin: null` is NOT allowed through ON ITS OWN. It is an opaque\n * origin — a sandboxed iframe, or a POST that arrived via a redirect — and it\n * is precisely the shape an attacker reaches for once a plain cross-origin\n * POST is refused. `null` is never same-origin with anything, so it fails the\n * comparison rather than needing a special case; the constant exists so the\n * intent is legible.\n *\n * ## ⚠️ `Sec-Fetch-Site`, and the same-origin form this rule used to refuse\n *\n * `Origin: null` is not only an attacker's shape. A page served with\n * `Referrer-Policy: no-referrer` sends `Origin: null` on its OWN top-level\n * form POST — the referrer policy governs the Origin header on a navigation,\n * so a form submitting to the very page that rendered it arrives opaque.\n *\n * That is not a hypothetical. Every recipient-facing email page —\n * `email/preferences`, `email/unsubscribe`, `email/resubscribe` — sets\n * `no-referrer` deliberately, so a signed opt-out URL cannot leak through a\n * `Referer` header. The result was that the preference centre's own \"Save my\n * preferences\" button was refused 403 as cross-site, while a `fetch()` from\n * the same document succeeded: a recipient could open the page, untick a\n * topic, press Save, and be shown a JSON error while nothing was written.\n * The privacy hardening had disabled the control it was protecting.\n *\n * `Sec-Fetch-Site` is the discriminator, and it is the right one because the\n * BROWSER computes it and page script cannot set it. `same-origin` and\n * `none` (a user typing the URL or opening a bookmark) are both statements\n * that this did not come from another site, and they are trustworthy in a way\n * the Origin header — deliberately blanked by our own policy — no longer is\n * here. It is consulted only to ALLOW: a `cross-site` or `same-site` value\n * falls through to the origin comparison exactly as before, so nothing an\n * attacker can send gets a new way in. A caller that omits the header is\n * unchanged too, which keeps the non-browser allowance above intact.\n */\n\nimport { lockdownIntentForMethod } from './lockdown'\nimport { isMachinePluginApiPath } from './plugin-api-rate-limit'\n\n/**\n * 403, not 401.\n *\n * The caller's credential is fine — that is the whole problem. What is\n * refused is the ORIGIN it came from, and no re-authentication would change\n * the answer, so `401 Unauthorized` (which invites a retry with credentials)\n * would be a lie. Matches how the lockdown gate reasons about 423.\n */\nexport const CROSS_ORIGIN_REFUSED_STATUS = 403\n\n/** The opaque origin. Never same-origin with anything, including itself. */\nconst OPAQUE_ORIGIN = 'null'\n\n/** Host of an `Origin` header value, or `''` when it is absent/unparsable. */\nfunction originHost(origin: string | null | undefined): string {\n const raw = String(origin ?? '').trim()\n if (!raw || raw === OPAQUE_ORIGIN) return ''\n try {\n return new URL(raw).host.toLowerCase()\n } catch {\n return ''\n }\n}\n\n/**\n * The host this request was actually addressed to.\n *\n * `x-forwarded-host` first: behind Vercel that is the public hostname the\n * visitor typed, while `host` can be the internal one. Falls back to `host`\n * so the function is still correct off-platform (self-host, local dev), which\n * `deployment-shape` makes a supported case rather than a hypothetical.\n */\nfunction requestHost(headers: {\n get?: (name: string) => unknown\n}): string {\n const forwarded = String(headers?.get?.('x-forwarded-host') ?? '')\n .split(',')[0]\n ?.trim()\n const host = forwarded || String(headers?.get?.('host') ?? '').trim()\n return host.toLowerCase()\n}\n\nexport interface CrossOriginWriteOptions {\n /** Dispatcher path, e.g. `commerce/cart`. Decides visitor vs machine. */\n path: string\n /** Read for its method, `origin`, `x-forwarded-host` and `host`. */\n request: { method?: string; headers?: { get?: (name: string) => unknown } }\n}\n\n/**\n * Is this a state-changing plugin-API request from another origin?\n *\n * Exported separately from the refusal so the decision can be asserted\n * directly in tests and reused by the console dispatcher without either\n * inheriting a `Response` shape it may not want.\n */\nexport function isCrossOriginPluginWrite(\n options: CrossOriginWriteOptions,\n): boolean {\n if (lockdownIntentForMethod(options?.request?.method) === 'read') return false\n if (isMachinePluginApiPath(options?.path)) return false\n\n const headers = options?.request?.headers ?? {}\n\n /*\n * The browser's own statement about where this came from, trusted before\n * the Origin header because our own `no-referrer` policy blanks that one.\n * ALLOW-only: any other value falls through to the comparison below.\n */\n const site = String(headers?.get?.('sec-fetch-site') ?? '')\n .trim()\n .toLowerCase()\n if (site === 'same-origin' || site === 'none') return false\n\n const origin = headers?.get?.('origin')\n // Absent Origin: a non-browser caller. See the module note — this is the\n // deliberate allowance, not an oversight.\n if (origin === null || origin === undefined || String(origin).trim() === '') {\n return false\n }\n\n const from = originHost(String(origin))\n const to = requestHost(headers)\n // An unparsable or opaque Origin yields `''`, which can never equal a real\n // host, so it lands here as cross-origin — the intended outcome.\n if (!to) {\n // No host to compare against. Refusing every write on a malformed request\n // would be a worse failure than the one being prevented, and a request\n // with no Host reached no tenant site to begin with.\n return false\n }\n return from !== to\n}\n\n/**\n * The refusal a cross-origin plugin write returns, or null to proceed:\n *\n * const foreign = crossOriginPluginWriteRefusal({ path, request })\n * if (foreign) return foreign\n *\n * Same \"return it or carry on\" contract as `visitorWriteRefusal` and\n * `visitorWriteRateLimitRefusal`, so the dispatcher reads as one list of\n * gates rather than three shapes.\n *\n * The body names the reason. Unlike the rate limiter — which is deliberately\n * mute because it faces abusers and every detail is a hint — this refusal is\n * one a legitimate integrator can hit by calling from the wrong host, and a\n * bare 403 would cost them an afternoon. It discloses nothing an attacker did\n * not already know, having chosen the origin themselves.\n */\nexport function crossOriginPluginWriteRefusal(\n options: CrossOriginWriteOptions,\n): Response | null {\n if (!isCrossOriginPluginWrite(options)) return null\n return Response.json(\n { error: 'Cross-origin writes are not allowed.' },\n { status: CROSS_ORIGIN_REFUSED_STATUS },\n )\n}\n"],"names":["lockdownIntentForMethod","isMachinePluginApiPath","CROSS_ORIGIN_REFUSED_STATUS","OPAQUE_ORIGIN","originHost","origin","raw","String","trim","URL","host","toLowerCase","requestHost","headers","forwarded","get","split","isCrossOriginPluginWrite","options","request","method","path","site","undefined","from","to","crossOriginPluginWriteRefusal","Response","json","error","status"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4FC,GAED,SAASA,uBAAuB,QAAQ,gBAAY;AACpD,SAASC,sBAAsB,QAAQ,6BAAyB;AAEhE;;;;;;;CAOC,GACD,OAAO,MAAMC,8BAA8B,IAAG;AAE9C,0EAA0E,GAC1E,MAAMC,gBAAgB;AAEtB,4EAA4E,GAC5E,SAASC,WAAWC,MAAiC;IACnD,MAAMC,MAAMC,OAAOF,iBAAAA,SAAU,IAAIG,IAAI;IACrC,IAAI,CAACF,OAAOA,QAAQH,eAAe,OAAO;IAC1C,IAAI;QACF,OAAO,IAAIM,IAAIH,KAAKI,IAAI,CAACC,WAAW;IACtC,EAAE,eAAM;QACN,OAAO;IACT;AACF;AAEA;;;;;;;CAOC,GACD,SAASC,YAAYC,OAEpB;;QACmBN,gBAAOM,cAGQA;IAHjC,MAAMC,aAAYP,iBAAAA,eAAOM,4BAAAA,eAAAA,QAASE,GAAG,qBAAZF,kBAAAA,SAAe,sCAAuB,IAC5DG,KAAK,CAAC,IAAI,CAAC,EAAE,qBADET,eAEdC,IAAI;IACR,MAAME,OAAOI,aAAaP,gBAAOM,4BAAAA,gBAAAA,QAASE,GAAG,qBAAZF,mBAAAA,SAAe,2BAAW,IAAIL,IAAI;IACnE,OAAOE,KAAKC,WAAW;AACzB;AASA;;;;;;CAMC,GACD,OAAO,SAASM,yBACdC,OAAgC;;QAEJA,kBAGZA,mBAOIL,cAKLA;IAff,IAAIb,wBAAwBkB,4BAAAA,mBAAAA,QAASC,OAAO,qBAAhBD,iBAAkBE,MAAM,MAAM,QAAQ,OAAO;IACzE,IAAInB,uBAAuBiB,2BAAAA,QAASG,IAAI,GAAG,OAAO;IAElD,MAAMR,kBAAUK,4BAAAA,oBAAAA,QAASC,OAAO,qBAAhBD,kBAAkBL,OAAO,mBAAI,CAAC;IAE9C;;;;GAIC,GACD,MAAMS,OAAOf,gBAAOM,4BAAAA,eAAAA,QAASE,GAAG,qBAAZF,kBAAAA,SAAe,qCAAqB,IACrDL,IAAI,GACJG,WAAW;IACd,IAAIW,SAAS,iBAAiBA,SAAS,QAAQ,OAAO;IAEtD,MAAMjB,SAASQ,4BAAAA,gBAAAA,QAASE,GAAG,qBAAZF,mBAAAA,SAAe;IAC9B,yEAAyE;IACzE,0CAA0C;IAC1C,IAAIR,WAAW,QAAQA,WAAWkB,aAAahB,OAAOF,QAAQG,IAAI,OAAO,IAAI;QAC3E,OAAO;IACT;IAEA,MAAMgB,OAAOpB,WAAWG,OAAOF;IAC/B,MAAMoB,KAAKb,YAAYC;IACvB,2EAA2E;IAC3E,iEAAiE;IACjE,IAAI,CAACY,IAAI;QACP,0EAA0E;QAC1E,uEAAuE;QACvE,qDAAqD;QACrD,OAAO;IACT;IACA,OAAOD,SAASC;AAClB;AAEA;;;;;;;;;;;;;;;CAeC,GACD,OAAO,SAASC,8BACdR,OAAgC;IAEhC,IAAI,CAACD,yBAAyBC,UAAU,OAAO;IAC/C,OAAOS,SAASC,IAAI,CAClB;QAAEC,OAAO;IAAuC,GAChD;QAAEC,QAAQ5B;IAA4B;AAE1C"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * Policy for the tenant plugin-API dispatcher's visitor-write rate limit
19
+ * (AGL-1770). Pure and dependency-free so it is unit-testable without a route
20
+ * harness — the durable half lives in `@aglyn/tenant-data-admin` beside
21
+ * `visitorWriteRefusal`, exactly like the lockdown split.
22
+ *
23
+ * ## What this bounds
24
+ *
25
+ * `apps/tenant/app/api/[...pluginApi]/route.ts` dispatches every plugin's
26
+ * visitor-facing handler and, before this, applied no rate limit of any kind.
27
+ * The gates it did have each refuse something narrower: per-site enablement is
28
+ * skipped by an unresolvable `hostId`, the release gate only checks that the
29
+ * plugin is on, and `visitorWriteRefusal` refuses only a paused or suspended
30
+ * site. None of them bounds volume from a working, enabled site — which is
31
+ * every live merchant.
32
+ *
33
+ * AGL-1769 closed the *shape* of the unauthenticated cart write (the caller
34
+ * chose the document path) and was explicit that it did not bound the
35
+ * *quantity*: "id control never multiplied volume; it bought shape". This is
36
+ * the other half. The cost of the unbounded half lands in the merchant's own
37
+ * Firestore — document count and storage on a tenant who did nothing wrong.
38
+ */
39
+ /**
40
+ * 120 writes per minute per (site, client IP).
41
+ *
42
+ * Deliberately generous, and the reasoning matters more than the number: a
43
+ * limit that trips on genuine use is worse than no limit, because it gets
44
+ * raised until it means nothing. Measured against what the storefront actually
45
+ * emits:
46
+ *
47
+ * - `cart.tsx:214` puts the line-quantity `TextField`'s `onChange` straight
48
+ * onto a POST with no debounce, so *typing* `100` into a quantity box is
49
+ * three cart writes. Editing a few lines is a genuine ten-to-twenty-write
50
+ * burst in a couple of seconds.
51
+ * - `experiments/track` is an A/B beacon: one exposure write per experiment
52
+ * per page view, so a visitor clicking through pages at ~1/s with two live
53
+ * experiments sustains ~2 writes/s legitimately.
54
+ * - Every visitor write on a site shares ONE budget (see the key below), so
55
+ * these add rather than each getting their own headroom.
56
+ *
57
+ * What a tighter number would actually buy is small. At 120/min a single
58
+ * source can still mint ~172k documents a day against one site; at 30/min it
59
+ * is ~43k. Neither is "safe" in absolute terms — what the cap buys is turning
60
+ * a one-line flood script from *millions* per day into something that needs a
61
+ * distributed botnet to stay interesting, and turning an incident from
62
+ * instantaneous into detectable. That property is bought at 120 as well as at
63
+ * 30, and 30 would refuse real shoppers.
64
+ *
65
+ * 120/60s is also `DEFAULT_RATE_LIMIT` / `DEFAULT_RATE_WINDOW_MS` — the same
66
+ * pair the public REST API enforces — so this adds no bespoke number.
67
+ */
68
+ export declare const VISITOR_WRITE_RATE_LIMIT = 120;
69
+ /**
70
+ * Fixed 60s window, matching every other limiter in the codebase rather than
71
+ * improving on it. A fixed window admits up to 2× the cap across a boundary;
72
+ * consistency with the shared bucket ids, the degradation markers and
73
+ * `/api/health/rate-limits` is worth more here than closing that.
74
+ */
75
+ export declare const VISITOR_WRITE_RATE_WINDOW_MS = 60000;
76
+ /**
77
+ * Is this dispatcher path a credentialed machine surface (exempt), rather
78
+ * than a visitor one (limited)? Unknown paths are visitor by default.
79
+ */
80
+ export declare function isMachinePluginApiPath(path: string): boolean;
81
+ /**
82
+ * The limiter key: one bucket per (site, client IP).
83
+ *
84
+ * ## Why compound, and why NOT a second limiter in either direction
85
+ *
86
+ * **Per-site alone is rejected.** A single attacker would consume the whole
87
+ * merchant's allowance and every real shopper would then be refused — an
88
+ * attacker-triggered denial of service against the victim, cheaper to mount
89
+ * than the flood it replaces and costing the merchant *sales* rather than
90
+ * storage. That is strictly worse than the growth it guards.
91
+ *
92
+ * **Per-IP alone is rejected.** Trivially distributed, and it would let one
93
+ * merchant's traffic spend another's budget.
94
+ *
95
+ * **Compound is what "per-host and per-IP together" should mean here.** Each
96
+ * source is bounded on each site, and no source can affect another's budget,
97
+ * so the ceiling a site is exposed to is (distinct source IPs) × 120/min —
98
+ * the same shape legitimate traffic has. What it does not stop is a genuine
99
+ * botnet, and that is stated rather than papered over: bounding *that* needs
100
+ * an edge WAF, not an application limiter, and every application-level scheme
101
+ * that would catch it (a site-wide ceiling) reintroduces the self-DoS above.
102
+ *
103
+ * **A second, platform-wide per-IP limiter was considered and dropped.** It
104
+ * would bound one source sweeping many merchants, but costs a second
105
+ * Firestore transaction on every storefront write — tripling the ops on a
106
+ * legitimate add-to-cart — to bound an attack that the compound key already
107
+ * prices at one full budget per merchant. One transaction per visitor write
108
+ * is the established cost here (`forms/submit`, `protection/unlock`); two
109
+ * would be novel and is not paid for by what it buys.
110
+ *
111
+ * The path is **not** in the key, on purpose: one shared budget per (site,
112
+ * IP) across cart, reviews, newsletter, bookings and beacons. Keying per path
113
+ * would let a caller multiply its allowance by cycling endpoints, which is
114
+ * free to do and defeats the point.
115
+ *
116
+ * `hostId` is frequently `''` — the dispatcher only resolves one from the
117
+ * query or a JSON body, and a handler that self-gates may supply none. It is
118
+ * kept in the key rather than skipped: AGL-1769 named "an unresolvable
119
+ * `hostId` skips the gate" as an existing hole, and a limiter that a caller
120
+ * turns off by declining to name a site is not a limiter. Host-less writes
121
+ * simply share one bucket per IP.
122
+ */
123
+ export declare function visitorWriteRateLimitKey(hostId: string, ip: string): string;
124
+ /**
125
+ * Policy for the CONSOLE plugin-API dispatcher's write rate limit.
126
+ *
127
+ * `apps/console/app/api/[...pluginApi]/route.ts` dispatches every plugin's
128
+ * console-facing handler — the marketplace installs and publishes, `ai/assist`,
129
+ * gift cards, POS orders, refunds, the email list previews and the suppression
130
+ * writes — and it carries no limiter of any kind. Its gates each refuse
131
+ * something narrower: per-site enablement needs a resolvable `hostId`, the
132
+ * release flag only asks whether the plugin is on, and lockdown only refuses
133
+ * during an incident. None of them bounds volume from an ordinary signed-in
134
+ * operator, which is every request the surface serves.
135
+ *
136
+ * The exposure is not the same one the visitor limiter closes. These handlers
137
+ * are authenticated, so nobody is minting documents anonymously; what they do
138
+ * instead is spend REAL money per call — a contact scan with a read budget, a
139
+ * bundle download and verify, a model call to a paid vendor — on a surface
140
+ * where a stuck retry loop in one console tab is indistinguishable from abuse.
141
+ */
142
+ /**
143
+ * 120 requests per minute per console subject.
144
+ *
145
+ * `DEFAULT_RATE_LIMIT` / `DEFAULT_RATE_WINDOW_MS` again, and the same pair the
146
+ * visitor limiter and the public REST API use, so this introduces no bespoke
147
+ * number to reason about. It is far above a person pressing buttons: the
148
+ * costly routes on this surface are one-per-click, and the console's own
149
+ * page-load traffic reaches Firestore through the client SDK rather than
150
+ * through this dispatcher.
151
+ *
152
+ * Deliberately not tighter even though each call here costs more than a cart
153
+ * write. A limit that trips on genuine use gets raised until it means nothing,
154
+ * and the per-call cost is the wrong lever for that anyway — an entitlement or
155
+ * a quota bounds spend per org over a month, where this bounds a runaway loop
156
+ * over a minute. Two different jobs; this one only has to make the loop stop.
157
+ */
158
+ export declare const CONSOLE_API_RATE_LIMIT = 120;
159
+ /** Fixed 60s window, matching every other limiter in the codebase. */
160
+ export declare const CONSOLE_API_RATE_WINDOW_MS = 60000;
161
+ /**
162
+ * The limiter key: one bucket per authenticated subject.
163
+ *
164
+ * ## Why this is NOT the visitor key
165
+ *
166
+ * `visitorWriteRateLimitKey` is compound because its surface is
167
+ * unauthenticated, and both halves of that argument are answers to anonymity.
168
+ * Per-site alone was rejected there because one attacker would spend a whole
169
+ * merchant's allowance and refuse real shoppers — an attacker-triggered denial
170
+ * of service against the victim. On the console the subject is a verified
171
+ * `uid`, so a caller can only ever refuse ITSELF: the self-DoS the compound key
172
+ * exists to prevent cannot be aimed at anyone else, and the isolation it buys
173
+ * is already bought by the identity.
174
+ *
175
+ * `hostId` is therefore left OUT rather than added, which is the opposite of
176
+ * the visitor key and for the reason the visitor key leaves the PATH out: an
177
+ * operator with fifty sites would otherwise hold fifty budgets and could
178
+ * multiply its allowance by cycling a field it controls. One person is one
179
+ * budget across every site they can reach.
180
+ *
181
+ * ## The unauthenticated fallback
182
+ *
183
+ * A caller whose bearer token did not decode — a plugin key, a POS device, an
184
+ * anonymous probe — has no `uid`, and its client address stands in. That
185
+ * bucket is shared by every such caller behind one address, which is the
186
+ * conservative direction: an unidentified caller on an authenticated surface
187
+ * should not get a private allowance for declining to identify itself. Keeping
188
+ * it counted at all is the point. A limiter a caller switches off by sending
189
+ * no credential is not a limiter, and this surface's whole exposure is what
190
+ * runs BEFORE a handler decides who is asking.
191
+ */
192
+ export declare function consoleApiRateLimitKey(subject: string): string;