@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,247 @@
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
+ * The ONE request-geo reader (AGL-1492/1498).
18
+ *
19
+ * Extracted from the console's sanctions module so the tenant's consent-mode
20
+ * endpoint reads the identical signal the sanctions gate does — two geo
21
+ * layers would eventually disagree about the same request. The sanctions
22
+ * POLICY (embargo sets, verdicts, the 451) stays in
23
+ * `apps/console/constants/sanctions-geo.ts`; this is only the signal.
24
+ */ /**
25
+ * The headers carrying the request's country, subdivision and city, named by
26
+ * configuration with Vercel's own as the default (AGL-2436).
27
+ *
28
+ * These were bare `x-vercel-*` literals, under a comment calling them "the
29
+ * only geo signal this deployment has" — true of Aglyn's cloud and false of
30
+ * every self-host install, where no edge sets them. Nothing else supplies the
31
+ * signal, so on a container `readRequestGeo` returned `null` for every request
32
+ * and the two things built on it were off in production:
33
+ *
34
+ * - the sanctions gate FAILED OPEN on every request, logging it once per
35
+ * instance — an embargo control that is silently not running,
36
+ * - the tenant's consent-region endpoint had no region to answer with,
37
+ * - the new-device sign-in alert reported "Unknown location" to every user,
38
+ * and stored that string, so the breach-notification report that reads a
39
+ * data subject's country back off it counted nobody.
40
+ *
41
+ * An operator's proxy has the signal under its own name: Cloudflare sends
42
+ * `cf-ipcountry`, and Caddy/nginx/Traefik can set whatever they are told to.
43
+ * Naming the header is all that was missing.
44
+ *
45
+ * ⚠️ Read with DOT notation and mapped through the `env` block of both
46
+ * `next.config.js` files, because `apps/console/middleware.ts` imports the
47
+ * sanctions gate and therefore this module into the EDGE bundle. Next inlines
48
+ * `process.env.NAME` there at build time and never the bracket form (AGL-2037)
49
+ * — so these are fixed when the image is built, not when it starts, exactly
50
+ * like `AGLYN_TENANT_HOST_CNAME`.
51
+ *
52
+ * Lower-cased because the value is used as a `Vary` header, where it is echoed
53
+ * verbatim rather than matched case-insensitively.
54
+ */ export const GEO_COUNTRY_HEADER = (process.env.AGLYN_GEO_COUNTRY_HEADER || 'x-vercel-ip-country').toLowerCase();
55
+ export const GEO_REGION_HEADER = (process.env.AGLYN_GEO_REGION_HEADER || 'x-vercel-ip-country-region').toLowerCase();
56
+ export const GEO_CITY_HEADER = (process.env.AGLYN_GEO_CITY_HEADER || 'x-vercel-ip-city').toLowerCase();
57
+ /**
58
+ * Normalize a subdivision code to the bare, zero-padded ISO 3166-2 form.
59
+ *
60
+ * Providers disagree on `UA-43` vs `43`, and on `9` vs `09` for Luhansk. All
61
+ * three spellings have to land on the same set member or a sub-country
62
+ * control silently answers "allowed" for a region it was written to catch.
63
+ */ function normalizeRegion(raw) {
64
+ const upper = raw.trim().toUpperCase();
65
+ const bare = upper.includes('-') ? upper.slice(upper.indexOf('-') + 1) : upper;
66
+ return /^\d$/.test(bare) ? `0${bare}` : bare;
67
+ }
68
+ /** Reads the edge geo signal off a request's headers. */ /**
69
+ * The country headers tried after the configured one, in order.
70
+ *
71
+ * `GEO_COUNTRY_HEADER` is a single name fixed at BUILD time (see its comment —
72
+ * Next inlines `process.env.NAME` into the edge bundle), so an operator who
73
+ * did not set it before building has no way to supply the signal afterwards,
74
+ * and a deployment that later moves behind a different proxy silently loses
75
+ * it. Every consumer then reads "no country", which is the strictest consent
76
+ * posture and a sanctions gate that fails open.
77
+ *
78
+ * These are the names the common edges actually send. They are tried only
79
+ * AFTER the configured header, so an explicit configuration always wins and
80
+ * nothing here can override a deliberate choice.
81
+ *
82
+ * ⛔ Header-only, and deliberately so: no IP-geolocation lookup. Sending a
83
+ * visitor's address to a third party to decide what to ask them about privacy
84
+ * would be its own disclosure, and a subprocessor.
85
+ */ const FALLBACK_COUNTRY_HEADERS = [
86
+ // Cloudflare.
87
+ 'cf-ipcountry',
88
+ // Google Cloud: App Engine, and Cloud Run behind a load balancer.
89
+ 'x-appengine-country',
90
+ 'x-client-geo-country',
91
+ // AWS CloudFront.
92
+ 'cloudfront-viewer-country',
93
+ // Fastly.
94
+ 'fastly-geo-country',
95
+ // What a hand-rolled nginx/Caddy/Traefik rule is most often called.
96
+ 'x-geo-country',
97
+ 'x-country-code',
98
+ 'x-country'
99
+ ];
100
+ /**
101
+ * `XX` is Cloudflare's answer for "unknown", and `T1` for a Tor exit node —
102
+ * neither is a country, and treating them as one would place the visitor in a
103
+ * region nobody is in. `ZZ` appears from some proxies for the same purpose.
104
+ */ const NON_COUNTRIES = [
105
+ 'XX',
106
+ 'T1',
107
+ 'ZZ'
108
+ ];
109
+ /**
110
+ * Every header consulted for the country, in order, configured one first.
111
+ *
112
+ * Exported because a caller that varies a cached response on the country has
113
+ * to name ALL of them: a `Vary` that lists only the configured header is
114
+ * correct on the one platform whose header that is, and on every other one it
115
+ * lets a CDN serve a US answer to a European visitor from cache. Aglyn is
116
+ * self-hostable on Docker with the operator's own Firebase and no particular
117
+ * edge, so "the one platform" is not an assumption this may make.
118
+ */ export const GEO_COUNTRY_HEADERS = [
119
+ GEO_COUNTRY_HEADER,
120
+ ...FALLBACK_COUNTRY_HEADERS
121
+ ].filter((name, index, all)=>all.indexOf(name) === index);
122
+ const readCountry = (headers)=>{
123
+ for (const name of GEO_COUNTRY_HEADERS){
124
+ var _headers_get;
125
+ const value = ((_headers_get = headers.get(name)) != null ? _headers_get : '').trim().toUpperCase();
126
+ // Two letters exactly: a proxy that passes through a city name, a list or
127
+ // an IP under one of these names must not become a "country".
128
+ if (!/^[A-Z]{2}$/.test(value)) continue;
129
+ if (NON_COUNTRIES.indexOf(value) >= 0) continue;
130
+ return value;
131
+ }
132
+ return null;
133
+ };
134
+ /**
135
+ * The subdivision headers tried after the configured one, in order.
136
+ *
137
+ * The sub-country half of the embargo check — Crimea, Donetsk, Luhansk,
138
+ * Sevastopol — matches on this and on nothing else, so an operator who named
139
+ * a country header but no region header had the country gate running and the
140
+ * REGION gate quietly inert: a Donetsk request reads `UA`, which is not
141
+ * embargoed, and passes. Cloudflare sends no subdivision at all, so a
142
+ * deployment behind it has no sub-country signal by any name; the rest do.
143
+ */ const FALLBACK_REGION_HEADERS = [
144
+ 'x-appengine-region',
145
+ 'x-client-geo-region',
146
+ 'cloudfront-viewer-country-region',
147
+ 'x-geo-region',
148
+ 'x-region-code'
149
+ ];
150
+ /** Every header consulted for the subdivision, in order, configured one first. */ export const GEO_REGION_HEADERS = [
151
+ GEO_REGION_HEADER,
152
+ ...FALLBACK_REGION_HEADERS
153
+ ].filter((name, index, all)=>all.indexOf(name) === index);
154
+ const rawRegion = (headers)=>{
155
+ for (const name of GEO_REGION_HEADERS){
156
+ var _headers_get;
157
+ const value = ((_headers_get = headers.get(name)) != null ? _headers_get : '').trim();
158
+ if (value) return value;
159
+ }
160
+ return '';
161
+ };
162
+ export function readRequestGeo(headers) {
163
+ const region = rawRegion(headers);
164
+ return {
165
+ country: readCountry(headers),
166
+ region: region ? normalizeRegion(region) : null
167
+ };
168
+ }
169
+ /**
170
+ * The subdivision as a person should read it, rather than as an embargo set
171
+ * matches it.
172
+ *
173
+ * `readRequestGeo().region` is upper-cased and zero-padded because
174
+ * `EMBARGOED_UA_REGIONS` is an exact-membership test that every spelling of a
175
+ * code has to land on. That normalization is wrong for anything a person
176
+ * reads: a proxy configured to send a subdivision NAME rather than a code
177
+ * reaches a user's security email shouting `CAPITAL`.
178
+ *
179
+ * Same headers, same precedence — only the normalization differs, so the two
180
+ * readers can never disagree about WHICH subdivision a request came from.
181
+ */ export function readRequestRegionLabel(headers) {
182
+ const raw = rawRegion(headers);
183
+ if (!raw) return null;
184
+ const bare = raw.includes('-') ? raw.slice(raw.indexOf('-') + 1) : raw;
185
+ // Commas are the delimiter callers join these parts on; see `readRequestCity`.
186
+ const label = bare.replace(/,/g, ' ').replace(/\s+/g, ' ').trim();
187
+ return label || null;
188
+ }
189
+ /**
190
+ * The city names the common edges send, tried after the configured one.
191
+ *
192
+ * Same ordering rule as the country list: the configured header wins, and
193
+ * these only fill in for an operator who never named one. Cloudflare's
194
+ * `cf-ipcity` arrives only on plans where the visitor-location transform is
195
+ * available, so its absence is normal rather than a misconfiguration.
196
+ */ const FALLBACK_CITY_HEADERS = [
197
+ 'cf-ipcity',
198
+ 'x-appengine-city',
199
+ 'x-client-geo-city',
200
+ 'cloudfront-viewer-city',
201
+ 'x-geo-city',
202
+ 'x-city'
203
+ ];
204
+ /** Every header consulted for the city, in order, configured one first. */ export const GEO_CITY_HEADERS = [
205
+ GEO_CITY_HEADER,
206
+ ...FALLBACK_CITY_HEADERS
207
+ ].filter((name, index, all)=>all.indexOf(name) === index);
208
+ /**
209
+ * The longest city name treated as a city.
210
+ *
211
+ * A proxy that passes something else through one of these names — a header
212
+ * list, a user agent, a path — would otherwise be rendered to a person as
213
+ * their sign-in location. 64 characters clears the longest real place names
214
+ * with room to spare.
215
+ */ const MAX_CITY_LENGTH = 64;
216
+ /**
217
+ * The request's city, decoded, or `null` when no edge sent one.
218
+ *
219
+ * Percent-decoded because every edge that sends this header sends non-ASCII
220
+ * names encoded (`S%C3%A3o%20Paulo`), and an undecoded value reaches a person
221
+ * as mojibake in a security email. A value that is not valid percent-encoding
222
+ * is kept verbatim rather than dropped — a literal `%` in a name is not a
223
+ * reason to lose the city.
224
+ *
225
+ * Commas become spaces. Callers join city, region and country with `", "`
226
+ * into one stored string, and `deviceLocationCountry` reads the country back
227
+ * off the LAST comma-separated token; a comma arriving inside the city half
228
+ * would add a token to a string that a breach-notification report parses.
229
+ */ export function readRequestCity(headers) {
230
+ for (const name of GEO_CITY_HEADERS){
231
+ var _headers_get;
232
+ const raw = ((_headers_get = headers.get(name)) != null ? _headers_get : '').trim();
233
+ if (!raw) continue;
234
+ let decoded;
235
+ try {
236
+ decoded = decodeURIComponent(raw);
237
+ } catch (unused) {
238
+ decoded = raw;
239
+ }
240
+ const city = decoded.replace(/,/g, ' ').replace(/\s+/g, ' ').trim();
241
+ if (!city || city.length > MAX_CITY_LENGTH) continue;
242
+ return city;
243
+ }
244
+ return null;
245
+ }
246
+
247
+ //# sourceMappingURL=request-geo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/aglyn/src/lib/app-utils/request-geo.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 * The ONE request-geo reader (AGL-1492/1498).\n *\n * Extracted from the console's sanctions module so the tenant's consent-mode\n * endpoint reads the identical signal the sanctions gate does — two geo\n * layers would eventually disagree about the same request. The sanctions\n * POLICY (embargo sets, verdicts, the 451) stays in\n * `apps/console/constants/sanctions-geo.ts`; this is only the signal.\n */\n\n/**\n * The headers carrying the request's country, subdivision and city, named by\n * configuration with Vercel's own as the default (AGL-2436).\n *\n * These were bare `x-vercel-*` literals, under a comment calling them \"the\n * only geo signal this deployment has\" — true of Aglyn's cloud and false of\n * every self-host install, where no edge sets them. Nothing else supplies the\n * signal, so on a container `readRequestGeo` returned `null` for every request\n * and the two things built on it were off in production:\n *\n * - the sanctions gate FAILED OPEN on every request, logging it once per\n * instance — an embargo control that is silently not running,\n * - the tenant's consent-region endpoint had no region to answer with,\n * - the new-device sign-in alert reported \"Unknown location\" to every user,\n * and stored that string, so the breach-notification report that reads a\n * data subject's country back off it counted nobody.\n *\n * An operator's proxy has the signal under its own name: Cloudflare sends\n * `cf-ipcountry`, and Caddy/nginx/Traefik can set whatever they are told to.\n * Naming the header is all that was missing.\n *\n * ⚠️ Read with DOT notation and mapped through the `env` block of both\n * `next.config.js` files, because `apps/console/middleware.ts` imports the\n * sanctions gate and therefore this module into the EDGE bundle. Next inlines\n * `process.env.NAME` there at build time and never the bracket form (AGL-2037)\n * — so these are fixed when the image is built, not when it starts, exactly\n * like `AGLYN_TENANT_HOST_CNAME`.\n *\n * Lower-cased because the value is used as a `Vary` header, where it is echoed\n * verbatim rather than matched case-insensitively.\n */\nexport const GEO_COUNTRY_HEADER = (\n process.env.AGLYN_GEO_COUNTRY_HEADER || 'x-vercel-ip-country'\n).toLowerCase()\nexport const GEO_REGION_HEADER = (\n process.env.AGLYN_GEO_REGION_HEADER || 'x-vercel-ip-country-region'\n).toLowerCase()\nexport const GEO_CITY_HEADER = (\n process.env.AGLYN_GEO_CITY_HEADER || 'x-vercel-ip-city'\n).toLowerCase()\n\nexport interface RequestGeo {\n /** ISO 3166-1 alpha-2, uppercased. `null` when the edge sent no signal. */\n country: string | null\n /** Bare ISO 3166-2 subdivision code, uppercased. `null` when absent. */\n region: string | null\n}\n\n/** A minimal `Headers`, so route handlers and middleware share one reader. */\nexport interface HeaderReader {\n get(name: string): string | null\n}\n\n/**\n * Normalize a subdivision code to the bare, zero-padded ISO 3166-2 form.\n *\n * Providers disagree on `UA-43` vs `43`, and on `9` vs `09` for Luhansk. All\n * three spellings have to land on the same set member or a sub-country\n * control silently answers \"allowed\" for a region it was written to catch.\n */\nfunction normalizeRegion(raw: string): string {\n const upper = raw.trim().toUpperCase()\n const bare = upper.includes('-') ? upper.slice(upper.indexOf('-') + 1) : upper\n return /^\\d$/.test(bare) ? `0${bare}` : bare\n}\n\n/** Reads the edge geo signal off a request's headers. */\n/**\n * The country headers tried after the configured one, in order.\n *\n * `GEO_COUNTRY_HEADER` is a single name fixed at BUILD time (see its comment —\n * Next inlines `process.env.NAME` into the edge bundle), so an operator who\n * did not set it before building has no way to supply the signal afterwards,\n * and a deployment that later moves behind a different proxy silently loses\n * it. Every consumer then reads \"no country\", which is the strictest consent\n * posture and a sanctions gate that fails open.\n *\n * These are the names the common edges actually send. They are tried only\n * AFTER the configured header, so an explicit configuration always wins and\n * nothing here can override a deliberate choice.\n *\n * ⛔ Header-only, and deliberately so: no IP-geolocation lookup. Sending a\n * visitor's address to a third party to decide what to ask them about privacy\n * would be its own disclosure, and a subprocessor.\n */\nconst FALLBACK_COUNTRY_HEADERS = [\n // Cloudflare.\n 'cf-ipcountry',\n // Google Cloud: App Engine, and Cloud Run behind a load balancer.\n 'x-appengine-country',\n 'x-client-geo-country',\n // AWS CloudFront.\n 'cloudfront-viewer-country',\n // Fastly.\n 'fastly-geo-country',\n // What a hand-rolled nginx/Caddy/Traefik rule is most often called.\n 'x-geo-country',\n 'x-country-code',\n 'x-country',\n] as const\n\n/**\n * `XX` is Cloudflare's answer for \"unknown\", and `T1` for a Tor exit node —\n * neither is a country, and treating them as one would place the visitor in a\n * region nobody is in. `ZZ` appears from some proxies for the same purpose.\n */\nconst NON_COUNTRIES = ['XX', 'T1', 'ZZ']\n\n/**\n * Every header consulted for the country, in order, configured one first.\n *\n * Exported because a caller that varies a cached response on the country has\n * to name ALL of them: a `Vary` that lists only the configured header is\n * correct on the one platform whose header that is, and on every other one it\n * lets a CDN serve a US answer to a European visitor from cache. Aglyn is\n * self-hostable on Docker with the operator's own Firebase and no particular\n * edge, so \"the one platform\" is not an assumption this may make.\n */\nexport const GEO_COUNTRY_HEADERS: readonly string[] = [\n GEO_COUNTRY_HEADER,\n ...FALLBACK_COUNTRY_HEADERS,\n].filter((name, index, all) => all.indexOf(name) === index)\n\nconst readCountry = (headers: HeaderReader): string | null => {\n for (const name of GEO_COUNTRY_HEADERS) {\n const value = (headers.get(name) ?? '').trim().toUpperCase()\n // Two letters exactly: a proxy that passes through a city name, a list or\n // an IP under one of these names must not become a \"country\".\n if (!/^[A-Z]{2}$/.test(value)) continue\n if (NON_COUNTRIES.indexOf(value) >= 0) continue\n return value\n }\n return null\n}\n\n/**\n * The subdivision headers tried after the configured one, in order.\n *\n * The sub-country half of the embargo check — Crimea, Donetsk, Luhansk,\n * Sevastopol — matches on this and on nothing else, so an operator who named\n * a country header but no region header had the country gate running and the\n * REGION gate quietly inert: a Donetsk request reads `UA`, which is not\n * embargoed, and passes. Cloudflare sends no subdivision at all, so a\n * deployment behind it has no sub-country signal by any name; the rest do.\n */\nconst FALLBACK_REGION_HEADERS = [\n 'x-appengine-region',\n 'x-client-geo-region',\n 'cloudfront-viewer-country-region',\n 'x-geo-region',\n 'x-region-code',\n] as const\n\n/** Every header consulted for the subdivision, in order, configured one first. */\nexport const GEO_REGION_HEADERS: readonly string[] = [\n GEO_REGION_HEADER,\n ...FALLBACK_REGION_HEADERS,\n].filter((name, index, all) => all.indexOf(name) === index)\n\nconst rawRegion = (headers: HeaderReader): string => {\n for (const name of GEO_REGION_HEADERS) {\n const value = (headers.get(name) ?? '').trim()\n if (value) return value\n }\n return ''\n}\n\nexport function readRequestGeo(headers: HeaderReader): RequestGeo {\n const region = rawRegion(headers)\n return {\n country: readCountry(headers),\n region: region ? normalizeRegion(region) : null,\n }\n}\n\n/**\n * The subdivision as a person should read it, rather than as an embargo set\n * matches it.\n *\n * `readRequestGeo().region` is upper-cased and zero-padded because\n * `EMBARGOED_UA_REGIONS` is an exact-membership test that every spelling of a\n * code has to land on. That normalization is wrong for anything a person\n * reads: a proxy configured to send a subdivision NAME rather than a code\n * reaches a user's security email shouting `CAPITAL`.\n *\n * Same headers, same precedence — only the normalization differs, so the two\n * readers can never disagree about WHICH subdivision a request came from.\n */\nexport function readRequestRegionLabel(headers: HeaderReader): string | null {\n const raw = rawRegion(headers)\n if (!raw) return null\n const bare = raw.includes('-') ? raw.slice(raw.indexOf('-') + 1) : raw\n // Commas are the delimiter callers join these parts on; see `readRequestCity`.\n const label = bare.replace(/,/g, ' ').replace(/\\s+/g, ' ').trim()\n return label || null\n}\n\n/**\n * The city names the common edges send, tried after the configured one.\n *\n * Same ordering rule as the country list: the configured header wins, and\n * these only fill in for an operator who never named one. Cloudflare's\n * `cf-ipcity` arrives only on plans where the visitor-location transform is\n * available, so its absence is normal rather than a misconfiguration.\n */\nconst FALLBACK_CITY_HEADERS = [\n 'cf-ipcity',\n 'x-appengine-city',\n 'x-client-geo-city',\n 'cloudfront-viewer-city',\n 'x-geo-city',\n 'x-city',\n] as const\n\n/** Every header consulted for the city, in order, configured one first. */\nexport const GEO_CITY_HEADERS: readonly string[] = [\n GEO_CITY_HEADER,\n ...FALLBACK_CITY_HEADERS,\n].filter((name, index, all) => all.indexOf(name) === index)\n\n/**\n * The longest city name treated as a city.\n *\n * A proxy that passes something else through one of these names — a header\n * list, a user agent, a path — would otherwise be rendered to a person as\n * their sign-in location. 64 characters clears the longest real place names\n * with room to spare.\n */\nconst MAX_CITY_LENGTH = 64\n\n/**\n * The request's city, decoded, or `null` when no edge sent one.\n *\n * Percent-decoded because every edge that sends this header sends non-ASCII\n * names encoded (`S%C3%A3o%20Paulo`), and an undecoded value reaches a person\n * as mojibake in a security email. A value that is not valid percent-encoding\n * is kept verbatim rather than dropped — a literal `%` in a name is not a\n * reason to lose the city.\n *\n * Commas become spaces. Callers join city, region and country with `\", \"`\n * into one stored string, and `deviceLocationCountry` reads the country back\n * off the LAST comma-separated token; a comma arriving inside the city half\n * would add a token to a string that a breach-notification report parses.\n */\nexport function readRequestCity(headers: HeaderReader): string | null {\n for (const name of GEO_CITY_HEADERS) {\n const raw = (headers.get(name) ?? '').trim()\n if (!raw) continue\n let decoded: string\n try {\n decoded = decodeURIComponent(raw)\n } catch {\n decoded = raw\n }\n const city = decoded.replace(/,/g, ' ').replace(/\\s+/g, ' ').trim()\n if (!city || city.length > MAX_CITY_LENGTH) continue\n return city\n }\n return null\n}\n"],"names":["GEO_COUNTRY_HEADER","process","env","AGLYN_GEO_COUNTRY_HEADER","toLowerCase","GEO_REGION_HEADER","AGLYN_GEO_REGION_HEADER","GEO_CITY_HEADER","AGLYN_GEO_CITY_HEADER","normalizeRegion","raw","upper","trim","toUpperCase","bare","includes","slice","indexOf","test","FALLBACK_COUNTRY_HEADERS","NON_COUNTRIES","GEO_COUNTRY_HEADERS","filter","name","index","all","readCountry","headers","value","get","FALLBACK_REGION_HEADERS","GEO_REGION_HEADERS","rawRegion","readRequestGeo","region","country","readRequestRegionLabel","label","replace","FALLBACK_CITY_HEADERS","GEO_CITY_HEADERS","MAX_CITY_LENGTH","readRequestCity","decoded","decodeURIComponent","city","length"],"mappings":"AAAA;;;;;;;;;;;;;;;CAeC,GAED;;;;;;;;CAQC,GAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BC,GACD,OAAO,MAAMA,qBAAqB,AAChCC,CAAAA,QAAQC,GAAG,CAACC,wBAAwB,IAAI,qBAAoB,EAC5DC,WAAW,GAAE;AACf,OAAO,MAAMC,oBAAoB,AAC/BJ,CAAAA,QAAQC,GAAG,CAACI,uBAAuB,IAAI,4BAA2B,EAClEF,WAAW,GAAE;AACf,OAAO,MAAMG,kBAAkB,AAC7BN,CAAAA,QAAQC,GAAG,CAACM,qBAAqB,IAAI,kBAAiB,EACtDJ,WAAW,GAAE;AAcf;;;;;;CAMC,GACD,SAASK,gBAAgBC,GAAW;IAClC,MAAMC,QAAQD,IAAIE,IAAI,GAAGC,WAAW;IACpC,MAAMC,OAAOH,MAAMI,QAAQ,CAAC,OAAOJ,MAAMK,KAAK,CAACL,MAAMM,OAAO,CAAC,OAAO,KAAKN;IACzE,OAAO,OAAOO,IAAI,CAACJ,QAAQ,CAAC,CAAC,EAAEA,MAAM,GAAGA;AAC1C;AAEA,uDAAuD,GACvD;;;;;;;;;;;;;;;;;CAiBC,GACD,MAAMK,2BAA2B;IAC/B,cAAc;IACd;IACA,kEAAkE;IAClE;IACA;IACA,kBAAkB;IAClB;IACA,UAAU;IACV;IACA,oEAAoE;IACpE;IACA;IACA;CACD;AAED;;;;CAIC,GACD,MAAMC,gBAAgB;IAAC;IAAM;IAAM;CAAK;AAExC;;;;;;;;;CASC,GACD,OAAO,MAAMC,sBAAyC;IACpDrB;OACGmB;CACJ,CAACG,MAAM,CAAC,CAACC,MAAMC,OAAOC,MAAQA,IAAIR,OAAO,CAACM,UAAUC,OAAM;AAE3D,MAAME,cAAc,CAACC;IACnB,KAAK,MAAMJ,QAAQF,oBAAqB;YACvBM;QAAf,MAAMC,QAAQ,EAACD,eAAAA,QAAQE,GAAG,CAACN,iBAAZI,eAAqB,IAAIf,IAAI,GAAGC,WAAW;QAC1D,0EAA0E;QAC1E,8DAA8D;QAC9D,IAAI,CAAC,aAAaK,IAAI,CAACU,QAAQ;QAC/B,IAAIR,cAAcH,OAAO,CAACW,UAAU,GAAG;QACvC,OAAOA;IACT;IACA,OAAO;AACT;AAEA;;;;;;;;;CASC,GACD,MAAME,0BAA0B;IAC9B;IACA;IACA;IACA;IACA;CACD;AAED,gFAAgF,GAChF,OAAO,MAAMC,qBAAwC;IACnD1B;OACGyB;CACJ,CAACR,MAAM,CAAC,CAACC,MAAMC,OAAOC,MAAQA,IAAIR,OAAO,CAACM,UAAUC,OAAM;AAE3D,MAAMQ,YAAY,CAACL;IACjB,KAAK,MAAMJ,QAAQQ,mBAAoB;YACtBJ;QAAf,MAAMC,QAAQ,EAACD,eAAAA,QAAQE,GAAG,CAACN,iBAAZI,eAAqB,IAAIf,IAAI;QAC5C,IAAIgB,OAAO,OAAOA;IACpB;IACA,OAAO;AACT;AAEA,OAAO,SAASK,eAAeN,OAAqB;IAClD,MAAMO,SAASF,UAAUL;IACzB,OAAO;QACLQ,SAAST,YAAYC;QACrBO,QAAQA,SAASzB,gBAAgByB,UAAU;IAC7C;AACF;AAEA;;;;;;;;;;;;CAYC,GACD,OAAO,SAASE,uBAAuBT,OAAqB;IAC1D,MAAMjB,MAAMsB,UAAUL;IACtB,IAAI,CAACjB,KAAK,OAAO;IACjB,MAAMI,OAAOJ,IAAIK,QAAQ,CAAC,OAAOL,IAAIM,KAAK,CAACN,IAAIO,OAAO,CAAC,OAAO,KAAKP;IACnE,+EAA+E;IAC/E,MAAM2B,QAAQvB,KAAKwB,OAAO,CAAC,MAAM,KAAKA,OAAO,CAAC,QAAQ,KAAK1B,IAAI;IAC/D,OAAOyB,SAAS;AAClB;AAEA;;;;;;;CAOC,GACD,MAAME,wBAAwB;IAC5B;IACA;IACA;IACA;IACA;IACA;CACD;AAED,yEAAyE,GACzE,OAAO,MAAMC,mBAAsC;IACjDjC;OACGgC;CACJ,CAACjB,MAAM,CAAC,CAACC,MAAMC,OAAOC,MAAQA,IAAIR,OAAO,CAACM,UAAUC,OAAM;AAE3D;;;;;;;CAOC,GACD,MAAMiB,kBAAkB;AAExB;;;;;;;;;;;;;CAaC,GACD,OAAO,SAASC,gBAAgBf,OAAqB;IACnD,KAAK,MAAMJ,QAAQiB,iBAAkB;YACtBb;QAAb,MAAMjB,MAAM,EAACiB,eAAAA,QAAQE,GAAG,CAACN,iBAAZI,eAAqB,IAAIf,IAAI;QAC1C,IAAI,CAACF,KAAK;QACV,IAAIiC;QACJ,IAAI;YACFA,UAAUC,mBAAmBlC;QAC/B,EAAE,eAAM;YACNiC,UAAUjC;QACZ;QACA,MAAMmC,OAAOF,QAAQL,OAAO,CAAC,MAAM,KAAKA,OAAO,CAAC,QAAQ,KAAK1B,IAAI;QACjE,IAAI,CAACiC,QAAQA,KAAKC,MAAM,GAAGL,iBAAiB;QAC5C,OAAOI;IACT;IACA,OAAO;AACT"}
@@ -0,0 +1,213 @@
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
+ * The ONE client-address reader (AGL-2014).
19
+ *
20
+ * Sits beside `request-geo.ts` and does the same job for a different signal:
21
+ * read a fact about the caller off the request, vendor-neutrally, and return
22
+ * nothing rather than a guess when it cannot.
23
+ *
24
+ * ## The failure this exists for
25
+ *
26
+ * Roughly twenty call sites read `x-forwarded-for` and took element `[0]` as
27
+ * the visitor's address. That is correct only where the edge OVERWRITES the
28
+ * header. A default self-host does not overwrite it: nginx's
29
+ * `$proxy_add_x_forwarded_for` and the usual Traefik/Caddy chains APPEND, so a
30
+ * caller who sends `X-Forwarded-For: 1.2.3.4` arrives at the app as
31
+ * `1.2.3.4, <their real address>` and element `[0]` is whatever they typed.
32
+ *
33
+ * Every rate limiter in the product keys on that value, so on a default Docker
34
+ * install it was a rate-limit bypass by header: change one character per
35
+ * request and every limiter hands out a fresh budget. Nothing errors and
36
+ * nothing is logged. The same value is stored as clickwrap evidence and shown
37
+ * to an account owner in a new-device sign-in alert, where a forged address is
38
+ * durable rather than merely a bypass.
39
+ *
40
+ * Binding the containers to loopback in `docker-compose.yml` forces traffic
41
+ * through the operator's proxy. It does not help here: the proxy appending is
42
+ * exactly the case that remains.
43
+ *
44
+ * ## Which hop is the client
45
+ *
46
+ * With N appending proxies in front, the last N entries of `x-forwarded-for`
47
+ * were written by those proxies and are the only ones a caller cannot forge.
48
+ * The outermost trusted proxy wrote the address IT saw — the real client — so
49
+ * the client is the Nth entry counted from the RIGHT, and everything to its
50
+ * left is caller-supplied text that must be ignored.
51
+ *
52
+ * The count is the configuration, because it is the only thing the app cannot
53
+ * work out for itself. It is deliberately not an index: an operator running
54
+ * one reverse proxy sets `1`, and never has to reason about which end of the
55
+ * list they are counting from.
56
+ *
57
+ * ## The default, and why it is not the same everywhere
58
+ *
59
+ * The two candidate defaults fail in opposite directions. Trusting the
60
+ * LEFTMOST hop keeps Aglyn's own cloud correct and leaves every self-host
61
+ * spoofable. Trusting the RIGHTMOST keeps self-hosts correct and would be a
62
+ * silent behavior change on Aglyn's own production.
63
+ *
64
+ * Neither has to be guessed, because the platform can be detected. Vercel sets
65
+ * `VERCEL` in the runtime environment — the same signal `deployment-shape.ts`
66
+ * already keys on — and it terminates every request at its own edge. So:
67
+ *
68
+ * - **Platform detected** → platform mode. Read `x-vercel-forwarded-for`
69
+ * first: Vercel computes it and strips any inbound copy, so on a Vercel
70
+ * request it is the one address value a caller cannot influence. That is
71
+ * the same trust `request-geo.ts` already places in `x-vercel-ip-country`
72
+ * to run the sanctions gate, so it is not a new assumption. If it is
73
+ * absent, fall back to the LEFTMOST `x-forwarded-for` hop, which is
74
+ * precisely what every call site did before this module existed — so
75
+ * nothing on Aglyn's deployment can read differently than it did.
76
+ *
77
+ * - **No platform detected** (a container, a bare Node process, a developer's
78
+ * machine) → one trusted proxy, so the RIGHTMOST hop. That is correct for
79
+ * both proxy styles at the depth the shipped `docker-compose.yml` describes:
80
+ * an overwriting proxy leaves a single entry, where rightmost and leftmost
81
+ * are the same value; an appending proxy leaves the real client last.
82
+ *
83
+ * An operator with more than one proxy in front sets the real number. Getting
84
+ * that number too LOW names an intermediate proxy instead of the visitor,
85
+ * which over-counts — several visitors share one bucket and the limiter
86
+ * refuses sooner. Getting it too HIGH is the direction that matters, and it
87
+ * cannot hand out a forged address here: a chain shorter than the configured
88
+ * depth is clamped to its leftmost entry, and every entry of such a chain was
89
+ * still written by a trusted proxy.
90
+ *
91
+ * ## What this will not do
92
+ *
93
+ * ⛔ It never invents an address. When nothing readable is present the answer
94
+ * is `null` and the caller decides. Returning a placeholder like `'unknown'`
95
+ * would put every anonymous caller in one rate-limit bucket, which is a denial
96
+ * of service the limiter inflicts on itself.
97
+ *
98
+ * ⛔ No trusted-CIDR matching. A hop count answers the same question with
99
+ * configuration an operator can actually get right, and a CIDR list that is
100
+ * subtly wrong fails open in exactly the way this module exists to prevent.
101
+ *
102
+ * ⛔ Not for an edge bundle as written. `AGLYN_TRUSTED_PROXY_COUNT` is read
103
+ * from `process.env` at call time, so it is a genuine runtime variable an
104
+ * operator can change without rebuilding — unlike the geo header names, which
105
+ * `apps/console/middleware.ts` drags into the edge bundle and which therefore
106
+ * have to be mapped through `next.config.js` and fixed at build. Nothing
107
+ * reads an address in middleware today. Anything that starts to must map the
108
+ * variable through both `next.config.js` files first, or the edge will read
109
+ * `undefined` and silently fall back to the default.
110
+ */
111
+ import type { HeaderReader } from './request-geo';
112
+ /** The environment variable naming how many proxies sit in front of the app. */
113
+ export declare const TRUSTED_PROXY_COUNT_VAR = "AGLYN_TRUSTED_PROXY_COUNT";
114
+ /**
115
+ * The trusted depth assumed when nothing is configured and no platform edge is
116
+ * detected: one reverse proxy, which is the shape `docker-compose.yml` and the
117
+ * self-hosting runbook describe.
118
+ */
119
+ export declare const DEFAULT_TRUSTED_PROXY_COUNT = 1;
120
+ /**
121
+ * `null` means "a platform edge normalizes the header, trust what it presents".
122
+ * A number is a literal count of proxies in front, and `0` means none — a
123
+ * process reachable directly from the internet, where every forwarding header
124
+ * is caller-supplied text and only the transport peer is a fact.
125
+ */
126
+ export type TrustedProxyDepth = number | null;
127
+ /**
128
+ * The key fragment a control uses when it has no address and cannot simply
129
+ * skip — and the decision every caller of {@link readClientIp} has to make.
130
+ *
131
+ * Most address-keyed controls in this codebase SKIP when the address is
132
+ * `null`. A budget keyed on a placeholder is one budget shared by everybody,
133
+ * so a deployment whose proxy names no caller would refuse password resets,
134
+ * sign-ins, org creation and site creation for all of its users at once — a
135
+ * denial of service the limiter inflicts on itself, and a worse outcome than
136
+ * the control not running on a deployment that cannot identify anybody. Those
137
+ * controls each have a second key — a uid, an email address, a site — that
138
+ * still applies.
139
+ *
140
+ * The exception is a control whose job is COST rather than identity: the
141
+ * unauthenticated beacons and the pre-auth REST budget bound how much
142
+ * unauthenticated work a stranger can cause, they answer the same way whether
143
+ * or not the limit bites, and they have no second key. Skipping those would
144
+ * leave an unauthenticated Firestore writer unbounded on exactly the
145
+ * misconfigured deployment that produced the missing address. They keep
146
+ * counting, under this bucket, which costs telemetry rather than service.
147
+ *
148
+ * Spelled so it cannot be mistaken for an address, and reached only when NO
149
+ * source produced one — not merely when `x-forwarded-for` was absent.
150
+ */
151
+ export declare const NO_CLIENT_ADDRESS_BUCKET = "no-address";
152
+ /** Node-style header records alongside a `Headers`-shaped reader. */
153
+ export type ClientIpHeaders = HeaderReader | Record<string, string | string[] | undefined>;
154
+ export interface ClientIpOptions {
155
+ /**
156
+ * Overrides the configured depth. Tests pass this; production code should
157
+ * not, so an operator's configuration is the only thing that decides.
158
+ */
159
+ trustedProxyCount?: TrustedProxyDepth;
160
+ /**
161
+ * The transport peer — `req.socket.remoteAddress` on a node-style handler.
162
+ * Consulted last, and only because it is the one address the process knows
163
+ * first-hand. Behind a proxy that sets no forwarding header at all it is the
164
+ * proxy's own address, which is a single shared bucket rather than a
165
+ * visitor; that is a misconfiguration the self-hosting docs name, not a
166
+ * reading this module can improve on.
167
+ */
168
+ remoteAddress?: string | null;
169
+ /** Injectable for tests; defaults to `process.env`. */
170
+ env?: Record<string, string | undefined>;
171
+ }
172
+ /**
173
+ * How many proxies to trust, from configuration or from the runtime.
174
+ *
175
+ * Read per call rather than frozen at module scope: this is a runtime
176
+ * variable, and a module-scope snapshot would make it unchangeable without a
177
+ * rebuild for no reason (see the edge-bundle note in the module comment).
178
+ */
179
+ export declare function resolveTrustedProxyCount(env?: Record<string, string | undefined>): TrustedProxyDepth;
180
+ /**
181
+ * The one spelling of an address this module ever returns, or `null`.
182
+ *
183
+ * Normalization is not cosmetic. A rate-limit key is an exact string, so
184
+ * `2001:DB8::1` and `2001:db8::1`, or the same address with and without a
185
+ * source port, would be two budgets for one visitor — the bypass again, in
186
+ * miniature.
187
+ *
188
+ * - a port is dropped: it changes per connection,
189
+ * - `[…]` brackets and an IPv6 zone (`%eth0`) are dropped,
190
+ * - an IPv4-mapped IPv6 (`::ffff:1.2.3.4`) collapses to its IPv4 form, so a
191
+ * node socket address and a proxy's header value share one bucket,
192
+ * - anything that is not an address — `unknown`, RFC 7239's obfuscated
193
+ * `_hidden` identifiers, a hostname, a header some proxy passed through
194
+ * under this name — is `null` rather than a key.
195
+ */
196
+ export declare function normalizeClientIp(raw: string | null | undefined): string | null;
197
+ /**
198
+ * The caller's address, or `null` when nothing readable identifies them.
199
+ *
200
+ * Sources in order, and the order is the security property: a reading that
201
+ * depends on the trusted depth always wins, and the single-valued fallbacks
202
+ * only apply when the chain reading produced nothing at all. A caller cannot
203
+ * demote the reader to a weaker source, because a proxy that writes
204
+ * `x-forwarded-for` writes it on every request — the fallbacks are reachable
205
+ * only on a deployment whose proxy sets something else, or on none.
206
+ *
207
+ * 1. the platform edge's own value, in platform mode,
208
+ * 2. `x-forwarded-for` at the trusted hop,
209
+ * 3. `x-real-ip`, single-valued and written by the proxy,
210
+ * 4. `Forwarded` (RFC 7239) at the trusted hop,
211
+ * 5. the transport peer, when the caller supplied one.
212
+ */
213
+ export declare function readClientIp(headers: ClientIpHeaders, options?: ClientIpOptions): string | null;