@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,155 @@
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
+ * Which origins may complete a signed direct-to-GCS upload (AGL-1452).
19
+ *
20
+ * ## The fact this module exists for
21
+ *
22
+ * **GCS matches the CORS `origin` list as an exact string.** There is no
23
+ * subtree form and no wildcard form short of `*`. Measured against the live
24
+ * bucket on 2026-08-20 by driving real preflights: `https://app.aglyn.com`
25
+ * answers with `Access-Control-Allow-Origin`, while `https://console.aglyn.com`,
26
+ * `https://app.aglyn.io`, `https://zgover.aglyn.com`, `http://app.aglyn.com`
27
+ * and `https://app.aglyn.com.evil.example` all answer 200 with **no CORS
28
+ * headers at all** — which is how the browser refuses the `PUT`.
29
+ *
30
+ * This is the OPPOSITE of the App Check reCAPTCHA allowlist, which matches a
31
+ * listed name and everything beneath it. Both are "allowed domains for the
32
+ * platform", so reasoning across from one to the other is the natural move and
33
+ * gives exactly the wrong answer.
34
+ *
35
+ * ## Why it bites, and only sometimes
36
+ *
37
+ * The signed direct-to-GCS path carries video, PDF and ZIP above
38
+ * `SIGNED_UPLOAD_MAX_BYTES`; ordinary images take the base64 route and are
39
+ * unaffected. So a missing origin fails **only on large files**, behind a
40
+ * generic "try again" snackbar with no diagnosable cause — the same silence
41
+ * that let AGL-1408 ship with no CORS rule at all.
42
+ *
43
+ * A console origin appears whenever a name is attached to the project WITHOUT
44
+ * a redirect. Attached WITH one, the browser never holds that origin — it is
45
+ * already at the redirect target when it uploads — which is why
46
+ * `console.aglyn.com` needs no entry and `zgover.aglyn.com` does.
47
+ *
48
+ * ## Why `*` is not on the table
49
+ *
50
+ * The signed URL carries the authorization. A wildcard would let any site on
51
+ * the internet spend one that leaks. {@link permitsUploadOrigin} still reports
52
+ * a wildcard as permitting, because its job is to describe the bucket
53
+ * truthfully — a check that called `*` "missing" would report a failure while
54
+ * the uploads it watches were in fact wide open. {@link mergeUploadOrigins} is
55
+ * where we refuse to ever write one.
56
+ *
57
+ * ## Why a MERGE
58
+ *
59
+ * `gcloud storage buckets update --cors-file` **replaces** the configuration
60
+ * rather than merging it. Automation that builds a fresh document from the
61
+ * origins it happens to know about silently drops every other customer's
62
+ * origin, and the symptom lands on them, days later, as a failed large upload
63
+ * nobody can attribute. Everything here is read-modify-write.
64
+ */
65
+ export interface CorsRule {
66
+ origin?: string[];
67
+ method?: string[];
68
+ responseHeader?: string[];
69
+ maxAgeSeconds?: number;
70
+ }
71
+ /** The method the DAM uploader issues. Parsed out of it by `storage-cors.spec.ts`. */
72
+ export declare const UPLOAD_CORS_METHOD = "PUT";
73
+ /** The headers that `PUT` sets, which the preflight answers from. */
74
+ export declare const UPLOAD_CORS_RESPONSE_HEADERS: string[];
75
+ /** One hour, matching `cloud/storage-cors.json`. */
76
+ export declare const UPLOAD_CORS_MAX_AGE_SECONDS = 3600;
77
+ /**
78
+ * The origin a browser on `host` will actually put in the `Origin` header.
79
+ *
80
+ * Accepts a bare hostname or a URL, because callers hold both shapes: a
81
+ * console-domain claim stores a hostname and `NEXT_PUBLIC_CONSOLE_URL` carries
82
+ * a scheme. Null for anything that is not a hostname — including `*`, which is
83
+ * never a thing this function will hand onward.
84
+ */
85
+ export declare function uploadOriginFor(host: string): string | null;
86
+ /**
87
+ * Would this bucket configuration let a browser at `origin` complete the
88
+ * signed `PUT`?
89
+ *
90
+ * Exact comparison, deliberately: matching loosely here would make this agree
91
+ * with the intuition and disagree with GCS, which is the whole failure being
92
+ * guarded against.
93
+ */
94
+ export declare function permitsUploadOrigin(rules: CorsRule[] | null | undefined, origin: string): boolean;
95
+ /**
96
+ * The origins this configuration would refuse, in the order asked.
97
+ *
98
+ * A null configuration — the read failed, the bucket is unreachable — covers
99
+ * NOTHING. Reporting calm because we could not look is the shape of alarm that
100
+ * has already cost this repo three outages.
101
+ */
102
+ export declare function missingUploadOrigins(rules: CorsRule[] | null | undefined, origins: string[]): string[];
103
+ /**
104
+ * The configuration to WRITE so `origins` can upload, preserving everything
105
+ * already permitted.
106
+ *
107
+ * Adds to the existing upload rule where there is one, so the policy does not
108
+ * grow a rule per customer. Throws on a wildcard rather than returning an
109
+ * error, because there is no caller for whom emitting one is the right
110
+ * outcome and a returned error is a thing a caller can ignore.
111
+ */
112
+ export declare function mergeUploadOrigins(rules: CorsRule[], origins: string[]): {
113
+ rules: CorsRule[];
114
+ added: string[];
115
+ };
116
+ /**
117
+ * The configuration to WRITE so `origins` are no longer permitted, keeping
118
+ * everything else (AGL-1452).
119
+ *
120
+ * ## Why a detach has to do this
121
+ *
122
+ * An origin outlives the name unless something removes it. For an
123
+ * `*.aglyn.com` subdomain that is untidy. For a **white-label console domain**
124
+ * it is a standing permission on a bucket that accepts signed writes, granted
125
+ * to a host the customer keeps and we no longer serve — and the signed URL
126
+ * carries its own authorization, so that host can spend one that leaks. A
127
+ * stale CORS origin is therefore worse than a stale reCAPTCHA entry, not
128
+ * merely equivalent to one.
129
+ *
130
+ * ## `keep` is not optional in practice
131
+ *
132
+ * The platform origin is configured, not provisioned. Removing it would break
133
+ * large uploads for every customer at once — the platform-wide outage the
134
+ * read-modify-write warning is about, reached from the other direction. Every
135
+ * caller passes it.
136
+ *
137
+ * A rule left with no origins is DROPPED rather than written as `origin: []`.
138
+ * GCS accepts the empty form, and it reads to the next person like a rule that
139
+ * permits something.
140
+ */
141
+ export declare function revokeUploadOrigins(rules: CorsRule[], origins: string[], { keep }?: {
142
+ keep?: string[];
143
+ }): {
144
+ rules: CorsRule[];
145
+ removed: string[];
146
+ refused: string[];
147
+ };
148
+ /**
149
+ * What a human must run when the automation could not.
150
+ *
151
+ * Carries the warning as well as the command: the obvious one-liner is the
152
+ * destructive one, and an instruction that omits that is how the read-modify-
153
+ * write rule gets skipped by the person following it in a hurry.
154
+ */
155
+ export declare function uploadCorsRemedy(bucket: string, missing: string[]): string;
@@ -0,0 +1,254 @@
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
+ * Which origins may complete a signed direct-to-GCS upload (AGL-1452).
18
+ *
19
+ * ## The fact this module exists for
20
+ *
21
+ * **GCS matches the CORS `origin` list as an exact string.** There is no
22
+ * subtree form and no wildcard form short of `*`. Measured against the live
23
+ * bucket on 2026-08-20 by driving real preflights: `https://app.aglyn.com`
24
+ * answers with `Access-Control-Allow-Origin`, while `https://console.aglyn.com`,
25
+ * `https://app.aglyn.io`, `https://zgover.aglyn.com`, `http://app.aglyn.com`
26
+ * and `https://app.aglyn.com.evil.example` all answer 200 with **no CORS
27
+ * headers at all** — which is how the browser refuses the `PUT`.
28
+ *
29
+ * This is the OPPOSITE of the App Check reCAPTCHA allowlist, which matches a
30
+ * listed name and everything beneath it. Both are "allowed domains for the
31
+ * platform", so reasoning across from one to the other is the natural move and
32
+ * gives exactly the wrong answer.
33
+ *
34
+ * ## Why it bites, and only sometimes
35
+ *
36
+ * The signed direct-to-GCS path carries video, PDF and ZIP above
37
+ * `SIGNED_UPLOAD_MAX_BYTES`; ordinary images take the base64 route and are
38
+ * unaffected. So a missing origin fails **only on large files**, behind a
39
+ * generic "try again" snackbar with no diagnosable cause — the same silence
40
+ * that let AGL-1408 ship with no CORS rule at all.
41
+ *
42
+ * A console origin appears whenever a name is attached to the project WITHOUT
43
+ * a redirect. Attached WITH one, the browser never holds that origin — it is
44
+ * already at the redirect target when it uploads — which is why
45
+ * `console.aglyn.com` needs no entry and `zgover.aglyn.com` does.
46
+ *
47
+ * ## Why `*` is not on the table
48
+ *
49
+ * The signed URL carries the authorization. A wildcard would let any site on
50
+ * the internet spend one that leaks. {@link permitsUploadOrigin} still reports
51
+ * a wildcard as permitting, because its job is to describe the bucket
52
+ * truthfully — a check that called `*` "missing" would report a failure while
53
+ * the uploads it watches were in fact wide open. {@link mergeUploadOrigins} is
54
+ * where we refuse to ever write one.
55
+ *
56
+ * ## Why a MERGE
57
+ *
58
+ * `gcloud storage buckets update --cors-file` **replaces** the configuration
59
+ * rather than merging it. Automation that builds a fresh document from the
60
+ * origins it happens to know about silently drops every other customer's
61
+ * origin, and the symptom lands on them, days later, as a failed large upload
62
+ * nobody can attribute. Everything here is read-modify-write.
63
+ */ import { _ as _extends } from "@swc/helpers/_/_extends";
64
+ /** The method the DAM uploader issues. Parsed out of it by `storage-cors.spec.ts`. */ export const UPLOAD_CORS_METHOD = 'PUT';
65
+ /** The headers that `PUT` sets, which the preflight answers from. */ export const UPLOAD_CORS_RESPONSE_HEADERS = [
66
+ 'Content-Type',
67
+ 'x-goog-resumable'
68
+ ];
69
+ /** One hour, matching `cloud/storage-cors.json`. */ export const UPLOAD_CORS_MAX_AGE_SECONDS = 3600;
70
+ const HOSTNAME = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/;
71
+ /**
72
+ * The origin a browser on `host` will actually put in the `Origin` header.
73
+ *
74
+ * Accepts a bare hostname or a URL, because callers hold both shapes: a
75
+ * console-domain claim stores a hostname and `NEXT_PUBLIC_CONSOLE_URL` carries
76
+ * a scheme. Null for anything that is not a hostname — including `*`, which is
77
+ * never a thing this function will hand onward.
78
+ */ export function uploadOriginFor(host) {
79
+ const raw = String(host != null ? host : '').trim().toLowerCase();
80
+ if (!raw) return null;
81
+ const bare = raw.replace(/^[a-z][a-z0-9+.-]*:\/\//, '').split(/[/?#]/)[0].replace(/\.$/, '');
82
+ return HOSTNAME.test(bare) ? `https://${bare}` : null;
83
+ }
84
+ function uploadRules(rules) {
85
+ return rules.filter((rule)=>{
86
+ var _rule_method;
87
+ return ((_rule_method = rule.method) != null ? _rule_method : []).some((method)=>method.toUpperCase() === UPLOAD_CORS_METHOD);
88
+ });
89
+ }
90
+ /**
91
+ * Would this bucket configuration let a browser at `origin` complete the
92
+ * signed `PUT`?
93
+ *
94
+ * Exact comparison, deliberately: matching loosely here would make this agree
95
+ * with the intuition and disagree with GCS, which is the whole failure being
96
+ * guarded against.
97
+ */ export function permitsUploadOrigin(rules, origin) {
98
+ if (!rules) return false;
99
+ return uploadRules(rules).some((rule)=>{
100
+ var _rule_origin;
101
+ return ((_rule_origin = rule.origin) != null ? _rule_origin : []).some((listed)=>listed === '*' || listed === origin);
102
+ });
103
+ }
104
+ /**
105
+ * The origins this configuration would refuse, in the order asked.
106
+ *
107
+ * A null configuration — the read failed, the bucket is unreachable — covers
108
+ * NOTHING. Reporting calm because we could not look is the shape of alarm that
109
+ * has already cost this repo three outages.
110
+ */ export function missingUploadOrigins(rules, origins) {
111
+ return origins.filter((origin)=>!permitsUploadOrigin(rules, origin));
112
+ }
113
+ /**
114
+ * The configuration to WRITE so `origins` can upload, preserving everything
115
+ * already permitted.
116
+ *
117
+ * Adds to the existing upload rule where there is one, so the policy does not
118
+ * grow a rule per customer. Throws on a wildcard rather than returning an
119
+ * error, because there is no caller for whom emitting one is the right
120
+ * outcome and a returned error is a thing a caller can ignore.
121
+ */ export function mergeUploadOrigins(rules, origins) {
122
+ if (origins.some((origin)=>String(origin).includes('*'))) {
123
+ throw new Error('refusing to write a wildcard CORS origin: the signed URL carries the ' + 'authorization, so `*` lets any site spend one that leaks (AGL-1452)');
124
+ }
125
+ const wanted = [
126
+ ...new Set(origins)
127
+ ];
128
+ const missing = missingUploadOrigins(rules, wanted);
129
+ if (missing.length === 0) return {
130
+ rules,
131
+ added: []
132
+ };
133
+ const target = rules.findIndex((rule)=>uploadRules([
134
+ rule
135
+ ]).length === 1);
136
+ if (target < 0) {
137
+ return {
138
+ rules: [
139
+ ...rules,
140
+ {
141
+ origin: missing,
142
+ method: [
143
+ UPLOAD_CORS_METHOD
144
+ ],
145
+ responseHeader: [
146
+ ...UPLOAD_CORS_RESPONSE_HEADERS
147
+ ],
148
+ maxAgeSeconds: UPLOAD_CORS_MAX_AGE_SECONDS
149
+ }
150
+ ],
151
+ added: missing
152
+ };
153
+ }
154
+ const next = rules.map((rule, index)=>{
155
+ var _rule_origin;
156
+ return index === target ? _extends({}, rule, {
157
+ origin: [
158
+ ...new Set([
159
+ ...(_rule_origin = rule.origin) != null ? _rule_origin : [],
160
+ ...missing
161
+ ])
162
+ ]
163
+ }) : rule;
164
+ });
165
+ return {
166
+ rules: next,
167
+ added: missing
168
+ };
169
+ }
170
+ /**
171
+ * The configuration to WRITE so `origins` are no longer permitted, keeping
172
+ * everything else (AGL-1452).
173
+ *
174
+ * ## Why a detach has to do this
175
+ *
176
+ * An origin outlives the name unless something removes it. For an
177
+ * `*.aglyn.com` subdomain that is untidy. For a **white-label console domain**
178
+ * it is a standing permission on a bucket that accepts signed writes, granted
179
+ * to a host the customer keeps and we no longer serve — and the signed URL
180
+ * carries its own authorization, so that host can spend one that leaks. A
181
+ * stale CORS origin is therefore worse than a stale reCAPTCHA entry, not
182
+ * merely equivalent to one.
183
+ *
184
+ * ## `keep` is not optional in practice
185
+ *
186
+ * The platform origin is configured, not provisioned. Removing it would break
187
+ * large uploads for every customer at once — the platform-wide outage the
188
+ * read-modify-write warning is about, reached from the other direction. Every
189
+ * caller passes it.
190
+ *
191
+ * A rule left with no origins is DROPPED rather than written as `origin: []`.
192
+ * GCS accepts the empty form, and it reads to the next person like a rule that
193
+ * permits something.
194
+ */ export function revokeUploadOrigins(rules, origins, { keep = [] } = {}) {
195
+ const protectedSet = new Set(keep);
196
+ const asked = [
197
+ ...new Set(origins.map((origin)=>String(origin)))
198
+ ];
199
+ const refused = asked.filter((origin)=>origin === '*' || protectedSet.has(origin));
200
+ const doomed = new Set(asked.filter((origin)=>!refused.includes(origin)));
201
+ if (doomed.size === 0) return {
202
+ rules,
203
+ removed: [],
204
+ refused
205
+ };
206
+ const removed = [];
207
+ const next = [];
208
+ for (const rule of rules){
209
+ var _rule_origin;
210
+ if (uploadRules([
211
+ rule
212
+ ]).length !== 1) {
213
+ next.push(rule);
214
+ continue;
215
+ }
216
+ const kept = ((_rule_origin = rule.origin) != null ? _rule_origin : []).filter((origin)=>{
217
+ if (!doomed.has(String(origin))) return true;
218
+ removed.push(String(origin));
219
+ return false;
220
+ });
221
+ if (kept.length > 0) next.push(_extends({}, rule, {
222
+ origin: kept
223
+ }));
224
+ }
225
+ return {
226
+ rules: next,
227
+ removed,
228
+ refused
229
+ };
230
+ }
231
+ /**
232
+ * What a human must run when the automation could not.
233
+ *
234
+ * Carries the warning as well as the command: the obvious one-liner is the
235
+ * destructive one, and an instruction that omits that is how the read-modify-
236
+ * write rule gets skipped by the person following it in a hurry.
237
+ */ export function uploadCorsRemedy(bucket, missing) {
238
+ return [
239
+ `Large (resumable) uploads from ${missing.join(', ')} will fail until`,
240
+ `gs://${bucket} permits ${missing.length === 1 ? 'that origin' : 'those origins'}.`,
241
+ 'GCS matches the CORS origin list EXACTLY — there is no subtree form, so',
242
+ 'each origin needs its own entry.',
243
+ '',
244
+ ' gcloud storage buckets describe gs://' + bucket + ' --format=json\\(cors_config\\) > cors.json',
245
+ ' # edit cors.json: ADD the origins above to the rule whose method is PUT',
246
+ ` gcloud storage buckets update gs://${bucket} --cors-file=cors.json`,
247
+ '',
248
+ '⚠️ --cors-file REPLACES the configuration rather than merging it. Read the',
249
+ 'live document, add to it, write it back — building a fresh one drops every',
250
+ 'other origin, and that failure lands on someone else, days later.'
251
+ ].join('\n');
252
+ }
253
+
254
+ //# sourceMappingURL=upload-cors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/upload-cors.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 * Which origins may complete a signed direct-to-GCS upload (AGL-1452).\n *\n * ## The fact this module exists for\n *\n * **GCS matches the CORS `origin` list as an exact string.** There is no\n * subtree form and no wildcard form short of `*`. Measured against the live\n * bucket on 2026-08-20 by driving real preflights: `https://app.aglyn.com`\n * answers with `Access-Control-Allow-Origin`, while `https://console.aglyn.com`,\n * `https://app.aglyn.io`, `https://zgover.aglyn.com`, `http://app.aglyn.com`\n * and `https://app.aglyn.com.evil.example` all answer 200 with **no CORS\n * headers at all** — which is how the browser refuses the `PUT`.\n *\n * This is the OPPOSITE of the App Check reCAPTCHA allowlist, which matches a\n * listed name and everything beneath it. Both are \"allowed domains for the\n * platform\", so reasoning across from one to the other is the natural move and\n * gives exactly the wrong answer.\n *\n * ## Why it bites, and only sometimes\n *\n * The signed direct-to-GCS path carries video, PDF and ZIP above\n * `SIGNED_UPLOAD_MAX_BYTES`; ordinary images take the base64 route and are\n * unaffected. So a missing origin fails **only on large files**, behind a\n * generic \"try again\" snackbar with no diagnosable cause — the same silence\n * that let AGL-1408 ship with no CORS rule at all.\n *\n * A console origin appears whenever a name is attached to the project WITHOUT\n * a redirect. Attached WITH one, the browser never holds that origin — it is\n * already at the redirect target when it uploads — which is why\n * `console.aglyn.com` needs no entry and `zgover.aglyn.com` does.\n *\n * ## Why `*` is not on the table\n *\n * The signed URL carries the authorization. A wildcard would let any site on\n * the internet spend one that leaks. {@link permitsUploadOrigin} still reports\n * a wildcard as permitting, because its job is to describe the bucket\n * truthfully — a check that called `*` \"missing\" would report a failure while\n * the uploads it watches were in fact wide open. {@link mergeUploadOrigins} is\n * where we refuse to ever write one.\n *\n * ## Why a MERGE\n *\n * `gcloud storage buckets update --cors-file` **replaces** the configuration\n * rather than merging it. Automation that builds a fresh document from the\n * origins it happens to know about silently drops every other customer's\n * origin, and the symptom lands on them, days later, as a failed large upload\n * nobody can attribute. Everything here is read-modify-write.\n */\n\nexport interface CorsRule {\n origin?: string[]\n method?: string[]\n responseHeader?: string[]\n maxAgeSeconds?: number\n}\n\n/** The method the DAM uploader issues. Parsed out of it by `storage-cors.spec.ts`. */\nexport const UPLOAD_CORS_METHOD = 'PUT'\n\n/** The headers that `PUT` sets, which the preflight answers from. */\nexport const UPLOAD_CORS_RESPONSE_HEADERS = ['Content-Type', 'x-goog-resumable']\n\n/** One hour, matching `cloud/storage-cors.json`. */\nexport const UPLOAD_CORS_MAX_AGE_SECONDS = 3600\n\nconst HOSTNAME = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/\n\n/**\n * The origin a browser on `host` will actually put in the `Origin` header.\n *\n * Accepts a bare hostname or a URL, because callers hold both shapes: a\n * console-domain claim stores a hostname and `NEXT_PUBLIC_CONSOLE_URL` carries\n * a scheme. Null for anything that is not a hostname — including `*`, which is\n * never a thing this function will hand onward.\n */\nexport function uploadOriginFor(host: string): string | null {\n const raw = String(host ?? '').trim().toLowerCase()\n if (!raw) return null\n const bare = raw\n .replace(/^[a-z][a-z0-9+.-]*:\\/\\//, '')\n .split(/[/?#]/)[0]\n .replace(/\\.$/, '')\n return HOSTNAME.test(bare) ? `https://${bare}` : null\n}\n\nfunction uploadRules(rules: CorsRule[]): CorsRule[] {\n return rules.filter((rule) =>\n (rule.method ?? []).some(\n (method) => method.toUpperCase() === UPLOAD_CORS_METHOD,\n ),\n )\n}\n\n/**\n * Would this bucket configuration let a browser at `origin` complete the\n * signed `PUT`?\n *\n * Exact comparison, deliberately: matching loosely here would make this agree\n * with the intuition and disagree with GCS, which is the whole failure being\n * guarded against.\n */\nexport function permitsUploadOrigin(\n rules: CorsRule[] | null | undefined,\n origin: string,\n): boolean {\n if (!rules) return false\n return uploadRules(rules).some((rule) =>\n (rule.origin ?? []).some((listed) => listed === '*' || listed === origin),\n )\n}\n\n/**\n * The origins this configuration would refuse, in the order asked.\n *\n * A null configuration — the read failed, the bucket is unreachable — covers\n * NOTHING. Reporting calm because we could not look is the shape of alarm that\n * has already cost this repo three outages.\n */\nexport function missingUploadOrigins(\n rules: CorsRule[] | null | undefined,\n origins: string[],\n): string[] {\n return origins.filter((origin) => !permitsUploadOrigin(rules, origin))\n}\n\n/**\n * The configuration to WRITE so `origins` can upload, preserving everything\n * already permitted.\n *\n * Adds to the existing upload rule where there is one, so the policy does not\n * grow a rule per customer. Throws on a wildcard rather than returning an\n * error, because there is no caller for whom emitting one is the right\n * outcome and a returned error is a thing a caller can ignore.\n */\nexport function mergeUploadOrigins(\n rules: CorsRule[],\n origins: string[],\n): { rules: CorsRule[]; added: string[] } {\n if (origins.some((origin) => String(origin).includes('*'))) {\n throw new Error(\n 'refusing to write a wildcard CORS origin: the signed URL carries the ' +\n 'authorization, so `*` lets any site spend one that leaks (AGL-1452)',\n )\n }\n const wanted = [...new Set(origins)]\n const missing = missingUploadOrigins(rules, wanted)\n if (missing.length === 0) return { rules, added: [] }\n\n const target = rules.findIndex((rule) => uploadRules([rule]).length === 1)\n if (target < 0) {\n return {\n rules: [\n ...rules,\n {\n origin: missing,\n method: [UPLOAD_CORS_METHOD],\n responseHeader: [...UPLOAD_CORS_RESPONSE_HEADERS],\n maxAgeSeconds: UPLOAD_CORS_MAX_AGE_SECONDS,\n },\n ],\n added: missing,\n }\n }\n const next = rules.map((rule, index) =>\n index === target\n ? { ...rule, origin: [...new Set([...(rule.origin ?? []), ...missing])] }\n : rule,\n )\n return { rules: next, added: missing }\n}\n\n/**\n * The configuration to WRITE so `origins` are no longer permitted, keeping\n * everything else (AGL-1452).\n *\n * ## Why a detach has to do this\n *\n * An origin outlives the name unless something removes it. For an\n * `*.aglyn.com` subdomain that is untidy. For a **white-label console domain**\n * it is a standing permission on a bucket that accepts signed writes, granted\n * to a host the customer keeps and we no longer serve — and the signed URL\n * carries its own authorization, so that host can spend one that leaks. A\n * stale CORS origin is therefore worse than a stale reCAPTCHA entry, not\n * merely equivalent to one.\n *\n * ## `keep` is not optional in practice\n *\n * The platform origin is configured, not provisioned. Removing it would break\n * large uploads for every customer at once — the platform-wide outage the\n * read-modify-write warning is about, reached from the other direction. Every\n * caller passes it.\n *\n * A rule left with no origins is DROPPED rather than written as `origin: []`.\n * GCS accepts the empty form, and it reads to the next person like a rule that\n * permits something.\n */\nexport function revokeUploadOrigins(\n rules: CorsRule[],\n origins: string[],\n { keep = [] }: { keep?: string[] } = {},\n): { rules: CorsRule[]; removed: string[]; refused: string[] } {\n const protectedSet = new Set(keep)\n const asked = [...new Set(origins.map((origin) => String(origin)))]\n const refused = asked.filter(\n (origin) => origin === '*' || protectedSet.has(origin),\n )\n const doomed = new Set(asked.filter((origin) => !refused.includes(origin)))\n if (doomed.size === 0) return { rules, removed: [], refused }\n\n const removed: string[] = []\n const next: CorsRule[] = []\n for (const rule of rules) {\n if (uploadRules([rule]).length !== 1) {\n next.push(rule)\n continue\n }\n const kept = (rule.origin ?? []).filter((origin) => {\n if (!doomed.has(String(origin))) return true\n removed.push(String(origin))\n return false\n })\n if (kept.length > 0) next.push({ ...rule, origin: kept })\n }\n return { rules: next, removed, refused }\n}\n\n/**\n * What a human must run when the automation could not.\n *\n * Carries the warning as well as the command: the obvious one-liner is the\n * destructive one, and an instruction that omits that is how the read-modify-\n * write rule gets skipped by the person following it in a hurry.\n */\nexport function uploadCorsRemedy(bucket: string, missing: string[]): string {\n return [\n `Large (resumable) uploads from ${missing.join(', ')} will fail until`,\n `gs://${bucket} permits ${missing.length === 1 ? 'that origin' : 'those origins'}.`,\n 'GCS matches the CORS origin list EXACTLY — there is no subtree form, so',\n 'each origin needs its own entry.',\n '',\n ' gcloud storage buckets describe gs://' + bucket + ' --format=json\\\\(cors_config\\\\) > cors.json',\n ' # edit cors.json: ADD the origins above to the rule whose method is PUT',\n ` gcloud storage buckets update gs://${bucket} --cors-file=cors.json`,\n '',\n '⚠️ --cors-file REPLACES the configuration rather than merging it. Read the',\n 'live document, add to it, write it back — building a fresh one drops every',\n 'other origin, and that failure lands on someone else, days later.',\n ].join('\\n')\n}\n"],"names":["UPLOAD_CORS_METHOD","UPLOAD_CORS_RESPONSE_HEADERS","UPLOAD_CORS_MAX_AGE_SECONDS","HOSTNAME","uploadOriginFor","host","raw","String","trim","toLowerCase","bare","replace","split","test","uploadRules","rules","filter","rule","method","some","toUpperCase","permitsUploadOrigin","origin","listed","missingUploadOrigins","origins","mergeUploadOrigins","includes","Error","wanted","Set","missing","length","added","target","findIndex","responseHeader","maxAgeSeconds","next","map","index","revokeUploadOrigins","keep","protectedSet","asked","refused","has","doomed","size","removed","push","kept","uploadCorsRemedy","bucket","join"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CC;AASD,oFAAoF,GACpF,OAAO,MAAMA,qBAAqB,MAAK;AAEvC,mEAAmE,GACnE,OAAO,MAAMC,+BAA+B;IAAC;IAAgB;CAAmB,CAAA;AAEhF,kDAAkD,GAClD,OAAO,MAAMC,8BAA8B,KAAI;AAE/C,MAAMC,WAAW;AAEjB;;;;;;;CAOC,GACD,OAAO,SAASC,gBAAgBC,IAAY;IAC1C,MAAMC,MAAMC,OAAOF,eAAAA,OAAQ,IAAIG,IAAI,GAAGC,WAAW;IACjD,IAAI,CAACH,KAAK,OAAO;IACjB,MAAMI,OAAOJ,IACVK,OAAO,CAAC,2BAA2B,IACnCC,KAAK,CAAC,QAAQ,CAAC,EAAE,CACjBD,OAAO,CAAC,OAAO;IAClB,OAAOR,SAASU,IAAI,CAACH,QAAQ,CAAC,QAAQ,EAAEA,MAAM,GAAG;AACnD;AAEA,SAASI,YAAYC,KAAiB;IACpC,OAAOA,MAAMC,MAAM,CAAC,CAACC;YAClBA;eAAD,EAACA,eAAAA,KAAKC,MAAM,YAAXD,eAAe,EAAE,EAAEE,IAAI,CACtB,CAACD,SAAWA,OAAOE,WAAW,OAAOpB;;AAG3C;AAEA;;;;;;;CAOC,GACD,OAAO,SAASqB,oBACdN,KAAoC,EACpCO,MAAc;IAEd,IAAI,CAACP,OAAO,OAAO;IACnB,OAAOD,YAAYC,OAAOI,IAAI,CAAC,CAACF;YAC7BA;eAAD,EAACA,eAAAA,KAAKK,MAAM,YAAXL,eAAe,EAAE,EAAEE,IAAI,CAAC,CAACI,SAAWA,WAAW,OAAOA,WAAWD;;AAEtE;AAEA;;;;;;CAMC,GACD,OAAO,SAASE,qBACdT,KAAoC,EACpCU,OAAiB;IAEjB,OAAOA,QAAQT,MAAM,CAAC,CAACM,SAAW,CAACD,oBAAoBN,OAAOO;AAChE;AAEA;;;;;;;;CAQC,GACD,OAAO,SAASI,mBACdX,KAAiB,EACjBU,OAAiB;IAEjB,IAAIA,QAAQN,IAAI,CAAC,CAACG,SAAWf,OAAOe,QAAQK,QAAQ,CAAC,OAAO;QAC1D,MAAM,IAAIC,MACR,0EACE;IAEN;IACA,MAAMC,SAAS;WAAI,IAAIC,IAAIL;KAAS;IACpC,MAAMM,UAAUP,qBAAqBT,OAAOc;IAC5C,IAAIE,QAAQC,MAAM,KAAK,GAAG,OAAO;QAAEjB;QAAOkB,OAAO,EAAE;IAAC;IAEpD,MAAMC,SAASnB,MAAMoB,SAAS,CAAC,CAAClB,OAASH,YAAY;YAACG;SAAK,EAAEe,MAAM,KAAK;IACxE,IAAIE,SAAS,GAAG;QACd,OAAO;YACLnB,OAAO;mBACFA;gBACH;oBACEO,QAAQS;oBACRb,QAAQ;wBAAClB;qBAAmB;oBAC5BoC,gBAAgB;2BAAInC;qBAA6B;oBACjDoC,eAAenC;gBACjB;aACD;YACD+B,OAAOF;QACT;IACF;IACA,MAAMO,OAAOvB,MAAMwB,GAAG,CAAC,CAACtB,MAAMuB;YAEYvB;eADxCuB,UAAUN,SACN,aAAKjB;YAAMK,QAAQ;mBAAI,IAAIQ,IAAI;wBAAKb,eAAAA,KAAKK,MAAM,YAAXL,eAAe,EAAE;uBAAMc;iBAAQ;aAAE;aACrEd;;IAEN,OAAO;QAAEF,OAAOuB;QAAML,OAAOF;IAAQ;AACvC;AAEA;;;;;;;;;;;;;;;;;;;;;;;;CAwBC,GACD,OAAO,SAASU,oBACd1B,KAAiB,EACjBU,OAAiB,EACjB,EAAEiB,OAAO,EAAE,EAAuB,GAAG,CAAC,CAAC;IAEvC,MAAMC,eAAe,IAAIb,IAAIY;IAC7B,MAAME,QAAQ;WAAI,IAAId,IAAIL,QAAQc,GAAG,CAAC,CAACjB,SAAWf,OAAOe;KAAU;IACnE,MAAMuB,UAAUD,MAAM5B,MAAM,CAC1B,CAACM,SAAWA,WAAW,OAAOqB,aAAaG,GAAG,CAACxB;IAEjD,MAAMyB,SAAS,IAAIjB,IAAIc,MAAM5B,MAAM,CAAC,CAACM,SAAW,CAACuB,QAAQlB,QAAQ,CAACL;IAClE,IAAIyB,OAAOC,IAAI,KAAK,GAAG,OAAO;QAAEjC;QAAOkC,SAAS,EAAE;QAAEJ;IAAQ;IAE5D,MAAMI,UAAoB,EAAE;IAC5B,MAAMX,OAAmB,EAAE;IAC3B,KAAK,MAAMrB,QAAQF,MAAO;YAKVE;QAJd,IAAIH,YAAY;YAACG;SAAK,EAAEe,MAAM,KAAK,GAAG;YACpCM,KAAKY,IAAI,CAACjC;YACV;QACF;QACA,MAAMkC,OAAO,EAAClC,eAAAA,KAAKK,MAAM,YAAXL,eAAe,EAAE,EAAED,MAAM,CAAC,CAACM;YACvC,IAAI,CAACyB,OAAOD,GAAG,CAACvC,OAAOe,UAAU,OAAO;YACxC2B,QAAQC,IAAI,CAAC3C,OAAOe;YACpB,OAAO;QACT;QACA,IAAI6B,KAAKnB,MAAM,GAAG,GAAGM,KAAKY,IAAI,CAAC,aAAKjC;YAAMK,QAAQ6B;;IACpD;IACA,OAAO;QAAEpC,OAAOuB;QAAMW;QAASJ;IAAQ;AACzC;AAEA;;;;;;CAMC,GACD,OAAO,SAASO,iBAAiBC,MAAc,EAAEtB,OAAiB;IAChE,OAAO;QACL,CAAC,+BAA+B,EAAEA,QAAQuB,IAAI,CAAC,MAAM,gBAAgB,CAAC;QACtE,CAAC,KAAK,EAAED,OAAO,SAAS,EAAEtB,QAAQC,MAAM,KAAK,IAAI,gBAAgB,gBAAgB,CAAC,CAAC;QACnF;QACA;QACA;QACA,4CAA4CqB,SAAS;QACrD;QACA,CAAC,qCAAqC,EAAEA,OAAO,sBAAsB,CAAC;QACtE;QACA;QACA;QACA;KACD,CAACC,IAAI,CAAC;AACT"}
@@ -0,0 +1,159 @@
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
+ * STRUCTURAL upload inspection (AGL-1475).
19
+ *
20
+ * ## What this is, and what it is emphatically not
21
+ *
22
+ * This is **not** an antivirus scanner and no code in this module should ever
23
+ * be described as one. It does not have malware signatures, it does not
24
+ * emulate, unpack or detonate anything, and a novel trojan with a correct PDF
25
+ * header passes it without a murmur. It is *structural validation*: it reads
26
+ * the first few kilobytes of an upload and answers three questions the
27
+ * platform previously could not ask at all.
28
+ *
29
+ * 1. **Are these bytes an executable?** A Windows PE, an ELF binary, a Mach-O
30
+ * binary or an installer package is refused whatever it claims to be. This
31
+ * is the single highest-value check here: the Sept-1 risk is a customer's
32
+ * domain re-serving a trojan to a visitor's browser, and the overwhelming
33
+ * majority of that population is a plain executable with a lying name.
34
+ * 2. **Do the bytes match the declared type?** Media ingress trusted the
35
+ * caller's content type completely — AGL-2463 wrote that gap down. The
36
+ * allowlist bounded what a file *claimed* to be and nothing bounded what it
37
+ * *was*, so `Content-Type: application/pdf` over a `.exe` was stored,
38
+ * hashed, given a CDN path and served. It now has to be a PDF.
39
+ * 3. **Does an Office document carry a macro project?** AGL-1465 kept
40
+ * `.docm`/`.xlsm`/`.pptm` out **by content type**, which is a gate on a
41
+ * string the uploader chooses. Renaming a macro-enabled document to
42
+ * `.docx` walked straight past it. The archive is now checked for a
43
+ * `vbaProject.bin` entry, which is the thing that made those extensions
44
+ * worth excluding in the first place.
45
+ *
46
+ * Plus one signature, EICAR — see {@link EICAR_TEST_SIGNATURE}.
47
+ *
48
+ * ## What it therefore does not catch
49
+ *
50
+ * A malicious PDF that is a real PDF. A macro-free document that exploits a
51
+ * reader. Anything inside a plain `application/zip`, which is a brand kit and
52
+ * may legitimately contain a build tool. An obfuscated dropper in a JSON
53
+ * file. Real malware detection needs signatures and an engine, which needs a
54
+ * ClamAV service, which does not fit the budget this platform runs on — the
55
+ * cost work is in the issue. Nothing here should be allowed to read as though
56
+ * that decision went the other way.
57
+ *
58
+ * ## Why it is pure, and takes a window rather than a file
59
+ *
60
+ * Three of the four media chokepoints hold the whole file in memory and can
61
+ * pass it straight in. The fourth — signed direct-to-storage upload — never
62
+ * sees the bytes, because that is the entire reason it exists: a 200 MB video
63
+ * goes browser → bucket and downloading it back into the function to look at
64
+ * it would cost more than the feature. So that caller does two RANGED reads
65
+ * instead, a few KB from each end, and passes them as {@link
66
+ * InspectUploadInput.bytes} and {@link InspectUploadInput.tail}. Every
67
+ * signature this module knows lives in one of those two windows, so the
68
+ * signed route gets the same verdict for the price of a rounding error.
69
+ */
70
+ /**
71
+ * The EICAR standard antivirus test string.
72
+ *
73
+ * A 68-byte printable string, defined by the European Institute for Computer
74
+ * Antivirus Research, that every antivirus product agrees to flag and that is
75
+ * completely inert. It exists so that a pipeline can be tested end to end
76
+ * without anyone handling a live sample.
77
+ *
78
+ * It is matched here for exactly two reasons, and neither is malware
79
+ * detection. First, it makes this module's own tests honest without checking
80
+ * a real sample into the repository. Second, it is the probe a security
81
+ * reviewer or a customer will actually try, and answering it with silence
82
+ * would be a worse lie than answering it with a refusal — a refusal that says
83
+ * "structural check" is true, where a silent accept invites the reader to
84
+ * conclude nothing is checked at all.
85
+ *
86
+ * **This is a signature list of one. It is not an engine.** Do not add a
87
+ * second entry here and start calling the result malware scanning; if real
88
+ * signatures are wanted, they belong in a scanner service, not in a string
89
+ * constant.
90
+ */
91
+ export declare const EICAR_TEST_SIGNATURE = "X5O!P%@AP[4\\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*";
92
+ /**
93
+ * How many leading bytes an inspection needs.
94
+ *
95
+ * Every magic number checked here sits in the first 16 bytes; the window is
96
+ * far larger so that the EICAR match and the small-file macro scan have room,
97
+ * and because the signed route's ranged GET costs the same for 4 KB as for
98
+ * 64 bytes.
99
+ */
100
+ export declare const UPLOAD_INSPECTION_HEAD_BYTES = 4096;
101
+ /**
102
+ * How many trailing bytes an inspection wants for an Office document.
103
+ *
104
+ * A ZIP's central directory — the authoritative list of what is inside it —
105
+ * lives at the end of the file. 64 KB covers the directory of any document
106
+ * archive this platform accepts (the largest ceiling is a 50 MB `.pptx`, and
107
+ * its directory is a few KB even with hundreds of embedded images). A
108
+ * document whose directory is somehow larger than this window degrades to
109
+ * "macro not found", which is the pre-existing behaviour, not a regression.
110
+ */
111
+ export declare const UPLOAD_INSPECTION_TAIL_BYTES = 65536;
112
+ export type UploadInspectionCode = 'signature_match' | 'executable_bytes' | 'type_mismatch' | 'macro_payload' | 'empty_file';
113
+ export interface UploadInspectionRefusal {
114
+ /** Stable machine code — for the API error body, logs and tests. */
115
+ code: UploadInspectionCode;
116
+ /** What the bytes turned out to be, in words rather than hex. */
117
+ detected: string;
118
+ /**
119
+ * The sentence the uploader sees. Names the file and what was found, so
120
+ * that a merchant who did nothing wrong can tell which of fifty dropped
121
+ * files was the problem and why.
122
+ */
123
+ message: string;
124
+ }
125
+ export interface InspectUploadInput {
126
+ /**
127
+ * The whole file, or its leading {@link UPLOAD_INSPECTION_HEAD_BYTES}.
128
+ * Callers holding the whole file pass it and omit `tail`.
129
+ */
130
+ bytes: Uint8Array;
131
+ /**
132
+ * The file's trailing bytes, supplied ONLY by a caller that passed a head
133
+ * window rather than the whole file. When absent, `bytes` is searched for
134
+ * the trailing structures too — which is correct precisely because a caller
135
+ * that omits it is one that handed over the entire file.
136
+ */
137
+ tail?: Uint8Array | null;
138
+ /** The type the upload claims to be, already normalized by the caller. */
139
+ contentType: string;
140
+ /** For the message only. Never used to decide anything. */
141
+ fileName?: string | null;
142
+ }
143
+ /**
144
+ * Does a caller holding only a head window need to fetch the tail as well?
145
+ *
146
+ * Only the macro scan reads the end of a file, and only for document
147
+ * archives, so this is what lets the signed-upload route skip a second ranged
148
+ * GET for the 200 MB videos that route exists to carry — which is every
149
+ * object on it bar a handful of documents.
150
+ */
151
+ export declare function uploadInspectionNeedsTail(contentType: string): boolean;
152
+ /**
153
+ * Inspect an upload's bytes against the type it claims to be.
154
+ *
155
+ * Returns `null` when nothing structural is wrong — which, to be explicit, is
156
+ * NOT a statement that the file is safe. See the module header.
157
+ */
158
+ export declare function inspectUploadBytes(input: InspectUploadInput): UploadInspectionRefusal | null;
159
+ export default inspectUploadBytes;